| Layer | Technology |
|---|---|
| Language | Rust (stable) |
| Web Framework | Axum 0.8 |
| Templates | Askama 0.13 (SSR, type-safe) |
| Database | SQLite via sqlx (compile-time checked) |
| Sessions | tower-sessions 0.14 + SQLite store |
| Auth | OIDC (Casdoor recommended) |
| CSS | TailwindCSS v4 + DaisyUI |
| Video | FFmpeg (HLS) + MediaMTX (RTMP) |
| Observability | OpenTelemetry 0.31 + OTLP/gRPC |
Aipokit is a Cargo workspace with 34 crates organized by domain:
crates/
common/ # Shared types, storage, database
media-core/ # Media detection, EXIF extraction
media-manager/ # Upload, serve, search, CRUD
video-manager/ # HLS transcoding (8-stage pipeline)
access-control/ # 4-layer permission model
access-codes/ # Shareable access links
access-groups/ # Team roles and invitations
user-auth/ # OIDC + session management
workspace-manager/ # Workspace browser and folder types
vault-manager/ # Storage vault isolation
site-generator/ # Astro site generation
course/ # Course viewer + presentations
...and 22 more
Every app crate implements the FolderTypeRenderer trait for embedded mode (inside workspace browser) and exports a Router for standalone mode (own URL). Same logic, same templates, two deployment modes.
storage/
workspaces/{workspace_id}/ # File browser content
folder-a/ # Regular folder
media-gallery/ # Typed folder (media-server)
vaults/{vault_id}/ # Media pipeline storage
media/
images/{slug}.webp
videos/{slug}/index.m3u8
documents/{filename}
thumbnails/
images/{slug}_thumb.webp
videos/{slug}_thumb.webp
Three tiers based on resource intensity:
| Tier | Limit | Endpoints |
|---|---|---|
| Default | 60 RPM | Most API endpoints |
| Upload | 15 RPM | File upload, transcoding |
| Serving | 300 RPM | Media delivery, thumbnails |