Upload files, get back a URL. S3-compatible API so your existing tooling works. Run it on any server with a disk. MinIO for teams who want something smaller.
Privacy-conscious teams often build internal files workflows in Notion or Google Sheets because the alternative is a $200/month SaaS contract. Granary gives you a purpose-built tool at a fraction of the cost, running on infrastructure you already control.
On first launch, Granary initializes a WAL-mode SQLite database and starts an HTTP server. The web dashboard and API share the same port. Creating a file is a POST with JSON — the only required field is name. The response includes the generated ID and timestamp. Listing supports search, filtering, and returns items in reverse chronological order.
A solo developer built a weekend project that needed files tracking. Instead of spinning up Postgres and writing an admin panel, they added Granary as a sidecar process. The REST API covered every operation the project needed. Development time saved: roughly a full day.
GET /api/files — List all files. Supports ?q=keyword for search and ?status=value for filteringPOST /api/files — Create a new file. Send JSON with at least nameGET /api/files/{id} — Fetch one file by IDPUT /api/files/{id} — Update fields on an existing fileDELETE /api/files/{id} — Remove a fileGET /api/stats — Returns total count and breakdown by statusGET /api/health — Returns {"status":"ok"} for uptime monitoringSelf-hosted object and file storage. Self-hosted on your infrastructure. Your data never leaves your server.
curl -fsSL https://stockyard.dev/install.sh | sh -s -- --tool granary
PORT=9190 ./granary
http://localhost:9190
Single binary. Embedded SQLite. No Docker. No database. No dependencies.
Your license key arrives by email within 5 minutes of checkout. Set it as an environment variable and restart the binary.
export GRANARY_LICENSE_KEY=stockyard_xxxxxxxxxxxxxxxxxxxx ./granary
No cloud connectivity required. The binary validates the key offline with Ed25519 signatures.