Architecture
Basalt is a set of small services in front of one Postgres database. Nothing is a proprietary datastore: if you stop using Basalt, pg_dump takes everything with you.
The services
Service | Job | Written in |
|---|---|---|
Gateway | Routes requests, checks keys, rate-limits | Go |
Data API | Turns HTTP requests into SQL | Rust |
Auth | Issues sessions and JSON Web Tokens | Go |
Storage | Stores objects, enforces policies | TypeScript |
Live | Streams row changes over WebSockets | Elixir |
Why Postgres for everything
A row-level policy written once protects the table whether the request came from the Data API, a live subscription or a storage download, because all three ask Postgres the same question.
Is this helpful?