T
Tetra

Get started with Tetra

Auth, database security and a toolchain that checks your work — before you write your first route. Free for a single developer.

1

Ask for a licence

Tell us your GitHub account and what you are building. Your licence gives that account read access to the packages and comes with a signed key for production. Building on your own is free, so there is nothing to pay and no card to enter.

Request a licence
2

Point npm at the right registry

# .npmrc
@soulbatical:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${NPM_TOKEN}

# The token is one you create yourself, with scope read:packages.
export NPM_TOKEN=ghp_…

We never see that token. It stays on your machine and in your own deployment environment.

3

Install and start building

npm install @soulbatical/tetra-core

# Optional: the component library
npm install @soulbatical/tetra-ui

Node 24 or newer. Put the signed licence key in TETRA_LICENSE_KEY on your server — keep it server-side, because anything exposed to the browser is readable by every visitor.

What you get on day one

This is the foundation, not a tutorial. It is here so you can see what you no longer have to build yourself.

An application with security defaults

import { createApp } from '@soulbatical/tetra-core';

const app = createApp({
  name: 'my-app',
  supabaseUrl: process.env.SUPABASE_URL!,
  supabaseAnonKey: process.env.SUPABASE_ANON_KEY!,
  supabaseServiceKey: process.env.SUPABASE_SERVICE_ROLE_KEY!,
});

CORS, CSP, rate limiting, security headers and the database client hierarchy — configured, not left to you.

Accounts and sessions

import { addPublicAuthRoutes } from '@soulbatical/tetra-core/auth';

// POST /auth/login, /auth/signup, /auth/logout,
//      /auth/refresh, /auth/magic-link, /auth/oauth/:provider
addPublicAuthRoutes(app);

Your own features

import { addQueryRoutes, addMutationRoutes }
  from '@soulbatical/tetra-core';

const config = {
  tableName: 'orders',
  organizationIdField: 'organization_id',
  filters: [
    { key: 'status', type: 'enum', options: ['pending', 'paid', 'shipped'] },
    { key: 'search', type: 'search', columns: ['customer_name', 'email'] },
  ],
};

addQueryRoutes(app, '/api/orders', config);
addMutationRoutes(app, '/api/orders', config);

Filtering, pagination and search from one description, with row level security applied per organization.

Checks you can run any time

npx tetra-check-rls         # row level security policies
npx tetra-migration-lint    # migration safety
npx tetra-toolchain-check   # project configuration
npx tetra-test-governance   # test coverage contracts

Deployment

Tetra runs on any Node.js host. Node 24 or newer is required.

FROM node:24-slim
COPY . .
RUN npm ci
CMD ["node", "dist/index.js"]

Next: the same thing in one command

The steps above are the registry, the token and the licence — three pieces of bookkeeping before you write any code. We are replacing them with a single command that confirms who you are in your browser and configures the project for you.

npx create-tetra my-app

Not open yet. The name is reserved and the published package deliberately refuses to run, so do not reach for it today — step 1 above is how you start. Ask for a licence and we will tell you the day it opens.

Free for one developer

Building on your own costs nothing, for as long as you like. Pricing starts when a second person joins your organization, and moves in steps you can read off the table rather than a per-seat sum.