Skip to content

NpgsqlRestYour SQL is the API

Annotate PostgreSQL functions and SQL files with comments to declare HTTP routes, auth, caching, retries, and rate limits. Get a fast, typed REST API — no controllers, no models, no boilerplate. Then test it with SQL files too.

~ npgsqlrest
$
#1 of 14
frameworks benchmarked,
4,500+ req/s¹
0
lines of C# or Python
in a production app²
faster iteration on
signature changes³
MIT
licensed,
open source
  • Declare, don't code — caching, auth, retries, rate limiting — all declared as SQL annotations.
  • PostgreSQL at the center — the opposite of Clean Architecture: the database drives everything.
  • Types flow outward — PostgreSQL types generate TypeScript and Dart clients automatically.
  • No middle tier — no controllers, no models, no mapping layers, no boilerplate.
  • Iterate 5× faster — schema is the single source of truth; signature changes propagate to typed clients automatically, and an entire class of type-drift bugs simply cannot happen.
  • Production-grade by default — response caching, rate limiting, retries, PostgreSQL multi-host failover, load balancing, and Excel/HTML response rendering — configured in JSON, not custom middleware.
  • You write SQL, not a URL query language — unlike client-composed query APIs, the API surface is exactly the SQL you wrote: joins, CTEs, window functions — auditable with grep.
  • The whole dev loop in SQL — tests are plain .sql files run against real endpoints in-process (--test), and watch mode (--watch) restarts on SQL, config, and even database routine changes.
  • Built for the AI era — one type system to reason about, machine-verified output (schema check at startup, generated TypeScript checked by tsc), and @mcp tools for AI agents — with OpenAI/Anthropic tool schemas and llms.txt generated from the same catalog.

The Whole Idea, in 19 Slides

PostgreSQL in. REST API, typed TypeScript client, and AI-agent tools out — with real, reproducible numbers from a product in production. Use the arrows, thumbnails, or your keyboard (←/→, F for fullscreen, N for speaker notes).

The backend that writes itself · 20261 / 19
Slide 1: The backend that writes itself — title

A Fully Declarative Backend

SQL declares what data. Annotations declare what behavior. Configuration declares what infrastructure. Tests declare what correctness — also in SQL. There is no imperative glue anywhere — no controllers, no services, no mappers to keep in sync. And it is built on the declarative language that has been running the world's data for 50 years — the one every developer, and every LLM, already knows: SQL.

Declarative Annotations

Declare what you want from your endpoint — caching, authorization, timeouts, retries, rate limiting — right where the SQL lives.

SQL File

~ sql/users.sql
$

PostgreSQL Function

~ sql/get_users.sql
$

Tests Are SQL Files Too

No test framework, no running server, no mocks. npgsqlrest --test invokes the real endpoint pipeline in-process, on the test's own transaction — insert fixtures, call the endpoint (it sees your uncommitted rows), assert with SQL, roll back.

sql
-- tests/get_users.test.sql
begin;

insert into users (email) values ('fixture@example.com');

/*
GET /api/get-users
# @claim user_id=1
*/
select status = 200, 'authenticated caller gets 200' from _response;
select body::jsonb @> '[{"email": "fixture@example.com"}]', 'fixture is listed' from _response;

rollback;
console
$ npgsqlrest ./config.json --test

PASS  tests/get_users.test.sql  (2 assertions, 52ms)
19 passed, 0 failed, 0 error(s)  —  19 assertions in 9 files
endpoint coverage: 2/2 (100%)

Parallel isolated connections, throwaway test databases, per-test clones, tags, JUnit XML, and endpoint coverage with a CI threshold gate. And with --watch, the running server restarts on SQL file, configuration, and database routine changes — create or replace a function in psql and the endpoint is live seconds later, TypeScript client regenerated.

From the Blog


Build, Test, Publish and ReleaseLicenseGitHub StarsGitHub Forks
Released under the MIT License.
Copyright © 2024-2026 VB Consulting