Skip to content

Integrations — Overview

Axel sits between standard PostgreSQL and your application. On the database side, anything that speaks the Postgres wire protocol works — including managed providers like Supabase and Neon. On the application side, Axel generates a typed client for TypeScript and Go from your .aql queries. There’s no provider-specific adapter: you point Axel’s connection string at the database and run the usual axel diff / axel up flow.

Axel reads the connection string from, in order of precedence:

  1. the --url / -u flag,
  2. the database-url key in axel.yaml,
  3. the AXEL_DATABASE_URL env var, then DATABASE_URL.

Config values support $env.NAME references, so keep the secret out of the file:

axel.yaml
schema-path: ./schema.asl
migrations-dir: ./migrations
database-url: $env.DATABASE_URL
Terminal window
export DATABASE_URL='postgresql://user:pass@host:5432/dbname?sslmode=require'
axel up

Both Supabase and Neon are ordinary Postgres, so Axel’s policies lower to the same CREATE POLICY + ENABLE ROW LEVEL SECURITY everywhere. Supabase in particular builds its client authorization on RLS — see the append-only log and multi-tenant ownership examples for patterns that map directly onto it.