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 underhttps://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
| Module | What it does |
|---|---|
| Database | A dedicated PostgreSQL database for each project, with a table editor, SQL editor, schema view, RLS policies, full-text search, and pgvector |
| Migrations | Versioned SQL migrations from the SQL editor's Migrations tab, the CLI, or the Node.js SDK |
| Realtime | Streams row inserts, updates, and deletes, plus broadcast and presence, over WebSockets |
| Authentication | Signs in your app's users with email and password, email OTP, SMS OTP, passkeys, and TOTP multi-factor auth |
| Edge functions | Runs TypeScript functions in a V8 isolate, with environment variables and captured logs |
| Background jobs | Runs functions on cron schedules, with IANA timezones and run history |
| Storage | Public and private buckets, with on-the-fly image transforms |
| Webhooks | Calls your HTTP endpoint when rows are inserted, updated, or deleted |
| API keys & JWT | The anon and service_role keys, plus JWT settings |
| Logs & observability | Searchable logs for API requests, database queries, auth, and functions |
| Analytics | Events, screens, and crashes from the SDKs, plus web analytics |
| Project SMTP, branded templates, a send API, and marketing broadcasts |
SDKs and tools
| Tool | Package | Use it for |
|---|---|---|
| JavaScript SDK | @orbitneststudio/js | Browser apps (React, Vue, Svelte, vanilla JS) |
| Node.js SDK | @orbitneststudio/node | Servers, scripts, and workers |
| Flutter SDK | orbitnest_studio_flutter | iOS, Android, and desktop apps |
| CLI | @orbitneststudio/cli | Migrations, type generation, and SQL from your terminal or CI |
| MCP server | @orbitneststudio/mcp-server | Letting AI agents such as Claude Code manage your projects |
| REST API | None | Any 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:
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):
npm install @orbitneststudio/jsimport { 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:
npm install @orbitneststudio/nodeimport { 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:
flutter pub add orbitnest_studio_flutterAdd ORBITNEST_ANON_KEY=<your anon key> to a .env file and list .env under flutter: assets: in pubspec.yaml. Then:
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):
curl "https://api.orbitnest.io/api/project/my-app/database/tables/posts/data?limit=10" \
-H "Authorization: Bearer $ORBITNEST_ANON_KEY"6. Next steps
- Sign users in with Authentication, then lock down tables with RLS in Database.
- Upload files to Storage and subscribe to changes with Realtime.
- Put server logic in Edge functions and schedule it with Background jobs.
- Manage schema changes with Migrations and the CLI.
- Let an AI agent work on your project through the MCP server.