Skip to content
Production-ready · Auth · REST · Realtime · Storage · Vector · Edge · Jobs · Obs

The open-source backend
your frontend was waiting for.

Pluto ships a complete Backend-as-a-Service — authentication, auto-generated APIs, realtime, storage, vector search and edge functions — behind a typed SDK and an admin dashboard. Run it on your laptop with docker compose up, or one-click deploy to Fly, Railway or Render.

~ / pluto-quickstart
git clone pluto-baas && cd pluto-baas && docker compose up -d
pluto status --url /api/pluto
→ probing modules...
showing 8 / 8
8
canonical modules
60+
phases shipped
15+
endpoint smoke tests
4
official SDKs
Core modules

Everything your app needs, already wired.

Eight canonical services, all namespaced, all versioned, all covered by integration tests.

/auth

Authentication

Email/password, magic link, phone OTP, OAuth (Google, GitHub), MFA (TOTP), SAML SSO. JWT + refresh, session revocation.

/data-api

Auto REST + GraphQL

Instant CRUD endpoints from Postgres tables. Filters, ordering, pagination, RLS enforced per JWT claim.

/realtime

Realtime v5

WebSocket subscriptions, presence, ordered broadcast, sharded rooms, backpressure policies.

/storage

Storage v4

Public/private buckets, signed URLs, resumable uploads. Local disk or S3-compatible (MinIO, R2, S3).

/edge

Edge Functions v7

Deploy TypeScript handlers to isolates. KV, queues, secrets, cron triggers.

/vector

Vector v3

pgvector-backed HNSW indexes, hybrid rerank (linear/RRF), streaming embeddings.

/jobs

Jobs & Workflows

Durable multi-step workflows with step ledger, retries, side-effect idempotency.

/obs

Observability v3

Structured logs, request-id tracing, Prometheus metrics, per-tenant usage & quotas.

Typed SDK

Two lines of setup. Then you're shipping.

One @pluto/client works from React, Vue, React Native and Node — plus first-party Python and Go SDKs.

app.ts@pluto/client
import { createClient } from "@pluto/client";

const pluto = createClient({
  url: "https://api.yourapp.com",
  anonKey: import.meta.env.VITE_PLUTO_ANON_KEY,
});

// Email + password
await pluto.auth.signIn("ada@example.com", "hunter2");

// Magic link — passwordless
await pluto.auth.signInWithMagicLink("ada@example.com");

// OAuth
pluto.auth.signInWithOAuth("google");
Admin dashboard

A control panel, not just a placeholder.

Every module has a real UI. Manage keys, whitelist origins, edit schemas, revoke sessions — without touching SQL.

Projects & Keys

Anon + service-role keys per workspace with copy-safe minting.

CORS whitelist

Per-project allow-list — no wildcards in production.

Database Studio

Visual table editor, SQL runner, migrations timeline.

RLS & RBAC

Native Postgres RLS policies + role registry, tested end-to-end.

User Management

List users, revoke sessions, assign roles, manage MFA.

Health & Verify

/readyz + one-click smoke run of every canonical endpoint.

Pricing

Free to self-host. Fair when you scale.

Pluto is MIT-licensed and free forever on your own hardware. Managed cloud plans are per-project — no per-seat surprises.

Self-Hosted

Run Pluto on your own hardware or VPS.

FreeMIT licensed · forever
  • All 8 canonical modules
  • Unlimited projects & users
  • Docker Compose stack (Postgres, MinIO, API, Dashboard)
  • Community support · GitHub issues
Deploy: Docker · Any VPS · Kubernetes
Start Self-Hosted setup
Most popular

Cloud Starter

Managed Pluto with predictable pricing for prototypes and side-projects.

$19per project / month
  • 10k monthly active users
  • 10 GB Postgres · 20 GB storage
  • 500k Edge Function invocations / mo
  • Daily backups · 7-day PITR
  • Fly.io or Railway 1-click deploy
Deploy: Fly.io · Railway (managed)
Start free trial

Business

Production workloads with team seats, higher quotas and priority support.

$99per project / month
  • 100k monthly active users
  • 100 GB Postgres · 500 GB storage
  • 5M Edge Function invocations / mo
  • Read replicas · point-in-time restore
  • SAML SSO · audit log export
  • Render / Fly / dedicated regions
Deploy: Render · Fly · dedicated infra
Set up Business plan

All cloud plans include TLS, daily backups, and access to the admin dashboard. Need on-premise or enterprise SLA? Talk to us.

Deploy anywhere

Your infrastructure. Your data.

Config files ship with the repo — pick a target and go live in minutes.

Docker Composelocal
docker compose up -d
Fly.iorecommended
flyctl deploy
Railway1-click
railway.json ready
Render1-click
render.yaml ready
Any VPSdiy
Caddy + systemd
FAQ

Answers before you ask.

Common questions from teams evaluating Pluto against Firebase and Supabase.

How does Pluto handle CORS?

Every project has a strict allow-list managed in Dashboard → CORS. No wildcards in production. Preflight is served by the API, and disallowed origins are rejected before they hit any module. Add your published frontend origin (e.g. https://backend-joy.lovable.app) before going live.

What is Row-Level Security (RLS) and how do I use it?

Pluto uses native Postgres RLS. Every request sets a Postgres session with the JWT claims (sub, role, workspace_id), so policies like posts.owner = auth.uid() run server-side. The Dashboard ships a policy editor and end-to-end regression tests so bad policies are caught before deploy.

How is realtime implemented?

Realtime v5 is a WebSocket gateway with sharded rooms, presence, ordered broadcast and backpressure. It piggybacks on Postgres logical replication for row-change events (subscribeTable) and adds application-level channels for chat, cursors and presence.

Is pricing per-project or per-workspace?

Cloud plans are billed per project. A workspace can hold many projects, each on its own plan. Self-hosted is free forever regardless of workspace or project count.

How do I deploy Pluto?

Four common paths: (1) docker compose up -d locally; (2) flyctl deploy using the shipped deploy/fly.toml; (3) Railway 1-click via railway.json; (4) Render blueprint via render.yaml. All four boot the same image and pass /readyz before serving traffic.

Can I migrate from Firebase or Supabase?

Yes. The Data API mirrors PostgREST semantics, so Supabase-JS query patterns port directly. For Firebase, use the Pluto CLI import command to move Auth users and Firestore collections into Postgres tables.

Ready when you are

Stop stitching backends together.

Spin up Pluto, point your React app at it, and get back to building features your users care about.