READ THE DOCS
From the first command to production.
Quickstart, API, auth, storage, deploy, backups and the CLI. In English, with Portuguese translations.
Open the docsREST API
GET /rest/v1/notes Generated from your schema
Sign-in
POST /auth/v1/token Password, magic link, OAuth
Files
/storage/v1/object Disk or S3, with policies
Webhooks
x-nelcota-signature Signed, retried, recorded
Admin panel
/admin/ Data, users and SQL
PostgreSQL
owner = auth.uid() Decides who sees what
A REST API generated from your schema, sign-in, files, webhooks and an admin panel, running on your own PostgreSQL. No account, no per-request bill, no dozen services to babysit.
REST API
Filters, relations, RPC and an OpenAPI document come straight from the schema. Who can read each row is a PostgreSQL rule, not an if someone forgot in a controller.
Rust, tokio, axum and rustls in front, PostgreSQL behind. Parts already carrying production traffic all over the world.
rustls A weekend project or several apps on one VPS: each one gets an API, sign-in, files and webhooks and PostgreSQL decides who sees each row.
SECURE BY DEFAULT
No hardening checklist to remember later. All of this is on from the first nelcota dev.
Still 0.x: the security notes list what is not done yet.
Security notesArgon2id + rate limit
Hashed passwords, throttled logins, and the same answer for an unknown email and a wrong password.
15-minute tokens
Ed25519 access tokens. Refresh tokens rotate, and a replayed one revokes the session.
RLS on every request
Role and claims live in the transaction. A bad token never becomes anon.
Webhooks stay outside
HTTPS only. Private and cloud metadata addresses are blocked.
Sandboxed files
Files served by Nelcota carry nosniff and a CSP sandbox. On S3, the provider serves them from its own domain.
No unsafe Rust
unsafe is forbidden, cargo-deny checks dependencies, 500+ automated tests.
MEASURED SPEED
Indexed reads with the app capped at 1 CPU and 128 MiB, on the release candidate on main. That leaves the memory to PostgreSQL, which does the heavy lifting.
How it was measuredRust · tokio · axum · rustls. Measured on the next release (main), not yet in the published 0.4.0, with PostgreSQL on 1 CPU / 384 MiB and a 30-minute soak. Your hardware and workload will give other numbers.
Apache-2.0. No account, no plan, no surprise invoice. And if you ever leave, your data is already in standard PostgreSQL.
EVERYTHING INCLUDED
Sign-in
Email and password, magic links, Google and GitHub, with rotating refresh tokens.
AuthenticationFiles
Disk or S3, public or private. Who downloads what is a SQL policy, and temporary links expire on their own.
StorageAdmin panel
Tables, users, files, policies and SQL at /admin/, with no extra service to run.
Panel guideGET STARTED
You need Linux with Docker. On macOS and Windows, build from source.
SDKs for TypeScript and Rust, plain HTTP for any other language. Runs with Docker or systemd.
OPEN SOURCE
Apache-2.0. You pay for the server you picked, not for every request your app makes.
License
$0
forever
Apache-2.0: use it, change it, ship it.
Hosting You choose
Your server
The deploy guide fits 2–3 small projects on a 1 GB VPS.
Usage
$0
per request
No meter. Your server is the limit, not a plan.
One binary, 128 MiB, Apache-2.0, No lock-in
READ THE DOCS
Quickstart, API, auth, storage, deploy, backups and the CLI. In English, with Portuguese translations.
Open the docsOPEN SOURCE
Every release, every decision and every bug lives on GitHub, in plain sight.
View on GitHub