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.
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-runPick 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
Browsers, Node.js 18+, Deno, Bun, edge runtimes and React Native
$npm install @sovaria/sdkReference
- Authentication
- Database and documents
- Storage
- Functions
- Realtime
- Policies and audit
- Simulation
- Version history
- Knowledge bases and agents
- Vectors
- Organizations and keys
- Full API (api.*)
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()Python
Python 3.11+, async and sync clients; Flask, Django and FastAPI
$pip install sovaria-sdkReference
- Authentication
- Database and documents
- Storage
- Functions
- Realtime
- Policies and audit
- Simulation
- Version history
- Vectors
- Organizations and keys
- Billing and usage
from sovaria import create_client
async with create_client("https://<ref>.sovarias.in", "<anon-key>") as sovaria:
await sovaria.auth.sign_in_with_password({"email": email, "password": password})
rows = await sovaria.sql_query("select id, status from orders limit 10")
# Roles your row rules read, and large files in chunks
await sovaria.roles.assign(user_id, "MANAGER")
await sovaria.storage.from_("videos").upload_resumable("clip.mp4", data)Dart and FlutterBeta
Flutter on iOS, Android, web and desktop, and plain Dart
$flutter pub add sovaria flutter_secure_storageThe package is not in its public registry yet (pub.dev, Swift Package Index, Maven Central). The API and docs are complete.
Reference
- Authentication
- Database
- Documents
- Storage
- Functions
- Realtime
- Offline
- Firestore-compatible API
- Push, attestation and crashes
- Analytics and performance
- Full API (api.*)
import 'package:sovaria/sovaria.dart';
final sovaria = await Sovaria.initialize(
url: 'https://<ref>.sovarias.in',
anonKey: 'svr_anon_…', // public; safe to ship in the app
storage: SecureStore(), // Keychain / Keystore
device: SovariaDevice(id: deviceId, platform: Platform.operatingSystem, name: deviceName),
);
await sovaria.auth.signInWithPassword(email: email, password: password);SwiftBeta
iOS, iPadOS, macOS and the other Apple platforms
+.package(url: "https://github.com/sovaria/sovaria-swift.git", from: "1.0.0")The package is not in its public registry yet (pub.dev, Swift Package Index, Maven Central). The API and docs are complete.
Reference
- Authentication
- Database
- Documents
- Storage
- Functions
- Realtime
- Offline
- Firestore-compatible API
- Push, attestation and crashes
- Analytics and performance
- Full API (api.*)
import Sovaria
let sovaria = try await Sovaria.initialize(
url: "https://<ref>.sovarias.in",
anonKey: "svr_anon_…", // public; safe to ship in the app
storage: KeychainStore(),
device: SovariaDevice(id: deviceId, platform: "ios", name: deviceName)
)
try await sovaria.auth.signInWithPassword(email: email, password: password)KotlinBeta
Android and the JVM
+implementation("in.sovaria:sovaria:1.0.0")The package is not in its public registry yet (pub.dev, Swift Package Index, Maven Central). The API and docs are complete.
Reference
- Authentication
- Database
- Documents
- Storage
- Functions
- Realtime
- Offline
- Firestore-compatible API
- Push, attestation and crashes
- Analytics and performance
- Vectors and backups
- Full API (api.*)
import `in`.sovaria.*
val sovaria = Sovaria.initialize(
url = "https://<ref>.sovarias.in",
anonKey = "svr_anon_…", // public; safe to ship in the app
storage = KeystoreStore(context),
device = SovariaDevice(id = deviceId, platform = "android", name = deviceName),
)
sovaria.auth.signInWithPassword(email, password)sov CLI
macOS, Linux and Windows with Python 3.11+, and CI
$pipx install sovaria-cli$npm install -g @sovaria/cliReference
- Accounts, projects and access
- Database and schema
- Functions, cron and queues
- Storage
- Realtime and messaging
- Analytics, config and tester builds
- Rules tests, simulation and audit
- Version history
- Logs, alerts and AI tools
- Imports
- Billing and databases
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-runThe 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.
Other ways in
Bring code you already have, call the API from anything, or let an AI assistant work on your project.