Skip to content

Buckie

A lightweight file server with an S3-style REST API — no database, no cloud account, just a process and a disk. Available for Node.js and PHP.

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.


Terminal window
# Install globally once
npm install -g @dynamia-tools/buckie
# Start
buckie serve --host 0.0.0.0 --port 8080

Terminal window
# Local filesystem
buckie 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)"
# Verify
buckie list buckets

Terminal window
# Create an identity
buckie create identity erp-prod my-strong-secret
# Grant full access to the whole bucket
buckie 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/
# Verify
buckie list identities

Authentication 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.

Terminal window
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.pdf
Terminal window
curl http://localhost:8080/documents/tenant-a/invoice.pdf \
-H "X-Buckie-Identity: erp-prod" \
-H "X-Buckie-Secret: my-strong-secret" \
-o invoice.pdf

Resize an image without pre-processing — the result is cached automatically:

Terminal window
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.webp

Supported parameters: w, h, fit (cover | contain | fill), format (webp | jpeg | png).

Terminal window
curl http://localhost:8080/documents/tenant-a/ \
-H "X-Buckie-Identity: erp-prod" \
-H "X-Buckie-Secret: my-strong-secret"
Terminal window
# First page
curl "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 response
curl "http://localhost:8080/documents?limit=50&cursor=<cursor-value>" \
-H "X-Buckie-Identity: erp-prod" \
-H "X-Buckie-Secret: my-strong-secret"
Terminal window
curl -X DELETE http://localhost:8080/documents/tenant-a/invoice.pdf \
-H "X-Buckie-Identity: erp-prod" \
-H "X-Buckie-Secret: my-strong-secret"
Terminal window
curl http://localhost:8080/health

Mount your config.json at startup — no CLI bootstrap needed:

docker-compose.yml
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/storage

Entity 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.jsPHP
Package@dynamia-tools/buckie on npmdynamia-tools/buckie on Packagist
Repositorybuckie-node-jsbuckie-php
RuntimeNode.js 24 + FastifyPHP 8+ (Apache / Nginx / FrankenPHP)
StorageLocal FS + SFTPLocal FS only
ThumbnailsSharpGD / Imagick
Programmatic SDK✅ Full TypeScript API
Best forHigh-throughput, embedded use, SFTPShared hosting, standard PHP environments

MIT © Dynamia Soluciones IT SAS