Bucket
A named pointer to a directory on disk (or a remote SFTP path in Node.js). Every file operation targets a specific bucket.
Bucket
A named pointer to a directory on disk (or a remote SFTP path in Node.js). Every file operation targets a specific bucket.
Identity
A username + bcrypt-hashed secret. Think of it as a service account. Multiple identities can access the same server with different permissions.
Grant
A permission rule that links an identity to a bucket: which operations (read, write, delete) are allowed, and optionally restricted to a path prefix.
# Install globally oncenpm install -g @dynamia-tools/buckie
# Startbuckie serve --host 0.0.0.0 --port 8080# Install with Composercomposer create-project dynamia-tools/buckie my-buckie-servercd my-buckie-server
# Development serverphp bin/buckie serve --host 0.0.0.0 --port 8080
# Production: point Apache / Nginx / FrankenPHP to public/# Local filesystembuckie create bucket documents /mnt/storage/documents
# SFTP remote (Node.js only)buckie create bucket remote-docs /uploads \ --storage sftp \ --sftp-host storage.example.com \ --sftp-username deploy \ --sftp-private-key "$(cat ~/.ssh/id_rsa)"
# Verifybuckie list buckets# Local filesystem onlyphp bin/buckie create bucket documents /var/storage/documents
# Verifyphp bin/buckie list buckets# Create an identitybuckie create identity erp-prod my-strong-secret
# Grant full access to the whole bucketbuckie grant erp-prod documents --read --write --delete
# Or restrict to a path prefix (multi-tenant pattern)buckie grant erp-prod documents --read --write --delete --prefix /tenant-a/
# Verifybuckie list identities# Create an identityphp bin/buckie create identity erp-prod my-strong-secret
# Grant full access to the whole bucketphp bin/buckie grant erp-prod documents --read --write --delete
# Or restrict to a path prefix (multi-tenant pattern)php bin/buckie grant erp-prod documents --read --write --delete --prefix /tenant-a/
# Verifyphp bin/buckie list identitiesAuthentication is required on every request (except /health).
Use X-Buckie-Identity + X-Buckie-Secret headers, or HTTP Basic Auth.
Both the Node.js and PHP implementations expose the exact same REST API.
curl -X PUT http://localhost:8080/documents/tenant-a/invoice.pdf \ -H "X-Buckie-Identity: erp-prod" \ -H "X-Buckie-Secret: my-strong-secret" \ -H "Content-Type: application/octet-stream" \ --data-binary @invoice.pdfcurl http://localhost:8080/documents/tenant-a/invoice.pdf \ -H "X-Buckie-Identity: erp-prod" \ -H "X-Buckie-Secret: my-strong-secret" \ -o invoice.pdfResize an image without pre-processing — the result is cached automatically:
curl "http://localhost:8080/documents/photos/avatar.jpg?w=200&h=200&fit=cover&format=webp" \ -H "X-Buckie-Identity: erp-prod" \ -H "X-Buckie-Secret: my-strong-secret" \ -o avatar-thumb.webpSupported parameters: w, h, fit (cover | contain | fill), format (webp | jpeg | png).
curl http://localhost:8080/documents/tenant-a/ \ -H "X-Buckie-Identity: erp-prod" \ -H "X-Buckie-Secret: my-strong-secret"# First pagecurl "http://localhost:8080/documents?limit=50" \ -H "X-Buckie-Identity: erp-prod" \ -H "X-Buckie-Secret: my-strong-secret"
# Next page using the cursor returned in the previous responsecurl "http://localhost:8080/documents?limit=50&cursor=<cursor-value>" \ -H "X-Buckie-Identity: erp-prod" \ -H "X-Buckie-Secret: my-strong-secret"curl -X DELETE http://localhost:8080/documents/tenant-a/invoice.pdf \ -H "X-Buckie-Identity: erp-prod" \ -H "X-Buckie-Secret: my-strong-secret"curl http://localhost:8080/healthMount your config.json at startup — no CLI bootstrap needed:
services: buckie: image: node:24-alpine command: npx @dynamia-tools/buckie serve ports: - "8080:8080" volumes: - ./buckie-config.json:/app/.buckie/config.json:ro - ./storage:/mnt/storageEntity Files — the official Dynamia Platform file management extension — has native support for Buckie as a storage backend. If you’re running a Dynamia Platform application, you can delegate all file storage to a Buckie server with a single Maven dependency, keeping your app stateless and your files on a dedicated service.
Entity Files extension →
| Node.js | PHP | |
|---|---|---|
| Package | @dynamia-tools/buckie on npm | dynamia-tools/buckie on Packagist |
| Repository | buckie-node-js | buckie-php |
| Runtime | Node.js 24 + Fastify | PHP 8+ (Apache / Nginx / FrankenPHP) |
| Storage | Local FS + SFTP | Local FS only |
| Thumbnails | Sharp | GD / Imagick |
| Programmatic SDK | ✅ Full TypeScript API | ❌ |
| Best for | High-throughput, embedded use, SFTP | Shared hosting, standard PHP environments |