How jvantuyl/tussle works
Tussle is an Elixir server for the tus resumable-upload protocol. A tus client sends capability, creation, metadata, chunk, resume, and termination requests through host routing into the controller and version dispatcher. Protocol handlers manage upload state, stream request bodies, invoke lifecycle callbacks, and delegate persistence to configured cache and storage backends. The sampled code confirms in-memory caching and local-disk storage; S3 and Redis are documented optional integrations. Some handler internals were not sampled, so their detailed state interactions are omitted.
Components 18
HTTP API
- TUS Routes
lib/tussle/routes.ex - Upload Controller
lib/tussle/controller.ex
Protocol Workflow
- Protocol Dispatcher
lib/tussle.ex - Create Upload
lib/tussle/post.ex - Append Chunk
lib/tussle/patch.ex - Read Metadata
lib/tussle/head.ex - Terminate Upload
lib/tussle/delete.ex - Body Uploading
lib/tussle/upload.ex - Upload File
lib/tussle/file.ex - UID Generator
lib/tussle/uid.ex
State Persistence
- Cache Contract
lib/tussle.ex - Memory Cache
lib/tussle/cache/memory.ex - Storage Contract
lib/tussle/storage.ex - Local Storage
lib/tussle/storage/local.ex - Amazon S3
- Redis Cache
Runtime Services
- OTP Application
lib/tussle/application.ex
Other components
- Tus Client
Connections 24
- Tus Client → TUS Routes: sends requests
- TUS Routes → Upload Controller: dispatches routes
- Upload Controller → Protocol Dispatcher: dispatches method
- Protocol Dispatcher → Create Upload: dispatches creation
- Protocol Dispatcher → Append Chunk: dispatches chunks
- Protocol Dispatcher → Read Metadata: dispatches metadata
- Protocol Dispatcher → Terminate Upload: dispatches termination
- Create Upload → UID Generator: generates UID
- Create Upload → Upload File: builds file
- Create Upload → Body Uploading: writes first chunk
- Append Chunk → Body Uploading: writes chunk
- Body Uploading → Protocol Dispatcher: uses persistence
- Create Upload → Protocol Dispatcher: persists metadata
- Terminate Upload → Protocol Dispatcher: removes resource
- Read Metadata → Protocol Dispatcher: reads resource
- Protocol Dispatcher → Cache Contract: manages metadata
- Cache Contract → Memory Cache: calls configured cache
- Protocol Dispatcher → Storage Contract: manages bytes
- Storage Contract → Local Storage: uses local backend
- Storage Contract → Amazon S3: uses cloud backend
- Cache Contract → Redis Cache: uses Redis backend
- OTP Application → Memory Cache: starts cache
- Memory Cache → Storage Contract: expires files
- TUS Routes → Tus Client: returns response