A full Postgres database, not a wrapper.
Tables, relations, extensions, row-level security and daily backups. Query it from SQL, the dashboard or auto-generated APIs.
Explore the database →Espobase gives every project a dedicated Postgres database, plus auth, file storage, realtime, edge functions, vector search and hosting for your front end — wired together and ready in one click.
import { createClient } from "@espobase/client";
const espobase = createClient(PROJECT_URL, PUBLISHABLE_KEY);
const { data } = await espobase.from("todos").select();Use one piece or all of them. Your data lives in standard PostgreSQL, so you can always take it with you.
Tables, relations, extensions, row-level security and daily backups. Query it from SQL, the dashboard or auto-generated APIs.
Explore the database →Email and password sign-up with email verification and password reset, sign-in with Google or GitHub — and every signed-in user flows straight into your database policies.
Upload straight from your app into public or private buckets, and share files with signed links — guarded by the same security rules as your data.
Write TypeScript, deploy with one command. Handle webhooks, payments and AI calls without running a server.
Subscribe to row changes, broadcast messages and track who’s online — for chat, cursors and multiplayer features.
Store vectors in Postgres, run similarity search with a single query, and keep permissions consistent across AI features.
Create a table and its endpoints exist. Generated types keep your front end in sync with your schema, and an OpenAPI document describes every endpoint.
One TypeScript client for the browser and the server: data, sign-in, files and vector search.
import { createClient } from '@espobase/client'
const espobase = createClient(ESPOBASE_URL, ESPOBASE_KEY)
// Read the rows this user is allowed to see
const { data: todos } = await espobase
.from('todos')
.select('id, title, done')
.order('created_at', { ascending: false })
// Add one (row level security checks it)
await espobase.from('todos').insert({ title: 'Ship it' })Any other language can use the REST API directly.

Start free, no credit card needed. Upgrade to Pro when your users show up.