apistock is a Go library and a CLI that write a production API into your repository: PostgreSQL, sign-in with 2FA and passkeys, organisations, background jobs and ops endpoints. You own every file.
Plain Go: net/http, log/slog and constructors instead of a DI container. The generated app owns its flows, tables and SQL. The library holds the parts that need security fixes, so they reach you with go get.
A layered structure you can read and change. The CLI never rewrites your edits.
net/http, log/slog and constructors. No DI container, no reflection wiring.
Hand-written SQL you can read in review and explain in production.
Passwords, sessions, 2FA, passkeys, Google and Apple. Fixes arrive with go get.
River workers on PostgreSQL, with schedules you change at runtime.
Multi-tenant from the first commit, or add it later with aps add orgs.
Audit log, health, releases, jobs and settings behind platform roles and 2FA.

Every request with its trace, SQL and logs, grouped by request ID. No agent to install.
Problems grouped by cause with the request that raised them, so you fix the cause once.
Job runs, retries and sent mail beside the requests that queued them.

Every endpoint from openapi.json, with a request builder that uses your signed-in session.
The wiring in internal/app drawn as a graph, read from the source, not from reflection.
Run a job now, read the last email, change a runtime setting, reset the seed data.

One release per version and commit, rolled out an instance at a time, rolled back on its own when 5xx climbs.
Schema changes run before the roll out on one instance, with the lock time and a down.sql check.
Every instance with its version, weight and health, read from /ops/releases, so a rolling deploy is never a guess.
You are not picking a router, a migration tool and an auth library on day one. Each choice below has a written record you can read before you commit.
No MySQL, no SQLite. If that rules you out, it rules you out.
More files than a query builder. Each one is a query you can read in review.
Security fixes reach you with go get. Sign-up, sign-in and 2FA live in your repo.
Single or multi-tenant from the first commit; aps add orgs converts a running database later.
Change them without a deploy through /ops/settings. Secrets stay in the environment.
One history, run under an advisory lock. No down migrations to trust in production.
Four layers, one SQL file per query, and a wiring file with a named anchor where generators add a line instead of rewriting yours.
Cut the stock
Start it locally
Add what you sell
Ship one binary
Four commands. Each one ends by naming the next, refuses to run on a dirty tree, and leaves git checkout as the undo button.
PostgreSQL only; pgx with hand-written SQL in repositories; goose; module migrations copied into the app's single history. Enables transactional jobs and audit, reviewable schema changes, no ORM lock-in for apps, no commercial-tier dependency.
Your app keeps working if apistock disappears. The library is thin glue over the standard library; the generated code is plain Go you can read, change and deploy without the CLI.
Settings are declared in code, stored in PostgreSQL and live on every instance through LISTEN/NOTIFY, with history and audit events. Secrets stay in the environment and never enter the table.
aps upgrade merges the template's changes beside your edits and commits the result. A changed line in a tracked file, a new resource, a new migration: every edit is kept, and the app builds and passes its tests after.
Apache 2.0, built in the open, with every decision on record. Star the repository, open an issue when something is wrong, or send a pull request; the contribution guide says how.