Getting started

Introduction

What OrbitNest Studio is, how projects, keys, and SDKs fit together, and a quickstart from sign-up to your first query.

OrbitNest Studio is a managed backend platform. Every project gets its own PostgreSQL database plus authentication, storage, realtime, edge functions, background jobs, webhooks, email, logs, and analytics. You manage it from the Studio dashboard and reach it from the SDKs, the CLI, the REST API, or an AI agent over MCP.

How it fits together

  • Workspace. Signing up creates your Studio account and a workspace (organization). You can invite teammates as admins or developers. See Team & roles.

  • Project. A project is the unit of isolation. Each one has a dedicated Postgres database, its own end users, storage buckets, functions, jobs, environment variables, and API keys. It's identified by a slug such as my-app, and its API lives under https://api.orbitnest.io/api/project/my-app.

  • API keys. Each project gets two keys when you create it:

    • anon: public. Safe in browsers and mobile apps. Row Level Security (RLS) controls what it can access.
    • service_role: secret, for servers only. It bypasses RLS.

    Both keys are JWTs that carry the project slug, so the SDKs only need the key. The API base URL defaults to https://api.orbitnest.io.

  • Your users. Your users sign in through the project's auth service and get a user JWT. The SDKs send it automatically, so your RLS policies can tell who's calling.

  • Management tools. Studio, the CLI, and the MCP server sign in with your Studio account, not a project key, to create tables, deploy functions, run migrations, and so on.

Building blocks

ModuleWhat it does
DatabaseA dedicated PostgreSQL database for each project, with a table editor, SQL editor, schema view, RLS policies, full-text search, and pgvector
MigrationsVersioned SQL migrations from the SQL editor's Migrations tab, the CLI, or the Node.js SDK
RealtimeStreams row inserts, updates, and deletes, plus broadcast and presence, over WebSockets
AuthenticationSigns in your app's users with email and password, email OTP, SMS OTP, passkeys, and TOTP multi-factor auth
Edge functionsRuns TypeScript functions in a V8 isolate, with environment variables and captured logs
Background jobsRuns functions on cron schedules, with IANA timezones and run history
StoragePublic and private buckets, with on-the-fly image transforms
WebhooksCalls your HTTP endpoint when rows are inserted, updated, or deleted
API keys & JWTThe anon and service_role keys, plus JWT settings
Logs & observabilitySearchable logs for API requests, database queries, auth, and functions
AnalyticsEvents, screens, and crashes from the SDKs, plus web analytics
EmailProject SMTP, branded templates, a send API, and marketing broadcasts

SDKs and tools

ToolPackageUse it for
JavaScript SDK@orbitneststudio/jsBrowser apps (React, Vue, Svelte, vanilla JS)
Node.js SDK@orbitneststudio/nodeServers, scripts, and workers
Flutter SDKorbitnest_studio_flutteriOS, Android, and desktop apps
CLI@orbitneststudio/cliMigrations, type generation, and SQL from your terminal or CI
MCP server@orbitneststudio/mcp-serverLetting AI agents such as Claude Code manage your projects
REST APINoneAny language that can make HTTP requests

Project Memory gives AI agents persistent context about a project (decisions, tasks, and session history) across sessions.

Quickstart

1. Create an account

Go to studio.orbitnest.io/signup. Enter your name, email, and password, then type the 4-digit code we email you. You can also continue with Google, GitHub, or Apple. Studio then offers to register a passkey (you can skip this) and asks you to name your workspace.

2. Create a project

On Projects, click New Project. Enter a name (3–50 characters: letters, numbers, spaces, hyphens, and underscores). You can also upload a logo. The project slug is generated from the name, and the project's database and API keys are created right away.

Note

The Free plan includes one project. See Plans & billing for the limits on each plan.

3. Get your keys

Open the project and click Connect in the project navigation bar. It shows the project URL, the anon key, and setup snippets for each SDK. Both keys, including service_role, are on the project's API Keys tab, where you can reveal and copy them.

Keep the service key on the server

The service_role key bypasses Row Level Security. Never put it in a browser bundle or mobile app. Client code should only use the anon key.

4. Create a table

Open SQL Editor and run:

SQL
create table posts (
  id bigint generated always as identity primary key,
  title text not null,
  created_at timestamptz not null default now()
);

insert into posts (title) values ('Hello, OrbitNest');

Before you ship, enable RLS and add policies to control what the anon key and signed-in users can read and write. See Database.

5. Install an SDK and query

Pick the SDK for your platform.

JavaScript (browser):

Terminal
npm install @orbitneststudio/js
main.ts
import { createClient, localStorageAdapter } from '@orbitneststudio/js';

const orbit = createClient({
  apiKey: import.meta.env.VITE_ORBITNEST_ANON_KEY,
  storage: localStorageAdapter, // keeps users signed in across reloads
});

const { data, error } = await orbit.db
  .from('posts')
  .order('created_at', { ascending: false })
  .limit(10)
  .select('id, title');

console.log(data?.rows, error);

Node.js:

Terminal
npm install @orbitneststudio/node
server.ts
import { createClient } from '@orbitneststudio/node';

const client = createClient({ apiKey: process.env.ORBITNEST_ANON_KEY! });

const { data, error } = await client.db.from('posts').select('id, title');

Flutter:

Terminal
flutter pub add orbitnest_studio_flutter

Add ORBITNEST_ANON_KEY=<your anon key> to a .env file and list .env under flutter: assets: in pubspec.yaml. Then:

main.dart
import 'package:orbitnest_studio_flutter/orbitnest_studio_flutter.dart';

Future<void> main() async {
  await EnvConfig.initialize();
  final orbitnest = OrbitNestClient.create();

  final posts = await orbitnest.database.select('posts', limit: 10);
  print(posts.data);
}

REST (any language):

Terminal
curl "https://api.orbitnest.io/api/project/my-app/database/tables/posts/data?limit=10" \
  -H "Authorization: Bearer $ORBITNEST_ANON_KEY"

6. Next steps