SDKs and CLI

Five SDKs and a CLI. One set of rules.

TypeScript, Python, Dart, Swift and Kotlin, plus the sov command. They all call the same API, so sign-in, row rules and plan limits work the same in every one.

Terminal
sov login
sov scope pick               # pick the project

sov db migrations new add_orders
sov db migrations push --dry-run
sov fn deploy ./fn/receipt --name receipt
sov rules test               # fails CI on a broken rule

sov import supabase --dry-run
Shell9 lines

Pick your language

Install it, create a client with your project URL and anon key, and sign a user in. Each one links to its full reference.

JavaScript and TypeScript›app.ts
import { createClient } from '@sovaria/sdk'

export const sovaria = createClient(
  import.meta.env.VITE_SOVARIA_URL,      // https://<ref>.sovarias.in
  import.meta.env.VITE_SOVARIA_ANON_KEY,
)

await sovaria.auth.signInWithPassword({ email, password })

// Tables, with row-level security
const { data: orders } = await sovaria.from('orders').select('*').limit(20)

// Files, functions and live changes
await sovaria.storage.from('videos').uploadResumable('clip.mp4', file)
await sovaria.functions.call('send-receipt', { orderId })
sovaria.channel('orders')
  .on('postgres_changes', { event: '*', schema: 'public', table: 'orders' }, refresh)
  .subscribe()
TypeScript18 lines

The same in every language

What you learn in one SDK carries over to the others.

One contract

Every SDK is generated from the same API description and tested against the same recorded requests. Anything the area methods don’t cover is a typed call under api.*.

Your rules, everywhere

Apps use the public anon key and the user’s own session, so row-level security and access policies decide what each call may do. The service key stays on servers.

Sessions handled

Tokens refresh on their own, and in the TypeScript and Python SDKs calls made at the same moment share one refresh. The mobile SDKs keep the session in the Keychain or Keystore you pass in.

Make your first request