PostgreSQLBackend open-source · MIT · N'importe quel Postgres

Un backend pour votre Postgres.Et un panneau d'administration que vous n'avez pas à construire.

REST, SDK typé, temps réel, auth et stockage pour votre app ; tableurs, médias, relations et rôles pour votre équipe. Notre propre CRM compte vingt-trois collections et pas un seul écran codé à la main.

Tester la démo

Par les créateurs de FireCMS, le CMS open source de plus de 10 000 projets Firebase.

DearDoc LogoMedicalMotion LogoProton HealthWithUSocial Income

01·Comment ça marche

Vous écrivez ce fichier.
Vous n'écrivez pas le reste.

Le schéma, l'API REST, le SDK typé, les formulaires d'édition et chaque vue du panneau en découlent, et évoluent avec lui. Aucun second modèle de données à synchroniser, aucun écran CRUD à maintenir lorsqu'un champ change de nom.

Code de l'app — products.ts
import type { PostgresCollectionConfig }
  from "@rebasepro/types";

export const products: PostgresCollectionConfig = {
  name: "Products",
  slug: "products",
  table: "products",
  properties: {
    name: {
      name: "Name",
      type: "string",
      validation: { required: true },
    },
    category: {
      name: "Category",
      type: "string",
      enum: {
        electronics: "Electronics",
        fashion: "Fashion",
        home: "Home & Garden",
      },
    },
    price:     { name: "Price", type: "number" },
    in_stock:  { name: "In Stock", type: "boolean" },
    image_url: { name: "Image", type: "string", url: true },
  },
};

→ génère schéma DB · API REST · SDK typé · formulaires d'entité · vues admin

02·Ce que vous obtenez

Des API opérationnelles sur votre base de données, dès la première minute.

Un SDK typé pour vos collections, du REST sur chaque table et du temps réel via WebSocket, branchés sur votre base de données dès la première minute.

app.ts — typé depuis vos collectionslive
1import { createRebaseClient } from '@rebasepro/client';
2import type { Database } from './generated/sdk/database.types';
3
4const client = createRebaseClient<Database>({ baseUrl: API_URL });
5
6const { data } = await client.data.
TypeScriptUTF-8Ln 6, Col 36
REST, sur chaque tablelive · send a request
Endpoints
GET/api/data/users
POST/api/data/users
GET/api/data/posts
PUT/api/data/posts/:id
DEL/api/data/posts/:id
Ready
Response
Send a request...
Temps réel — LISTEN/NOTIFYlive
your app — web
name
status
upd
Alice
pending
2m ago
Bob
active
5m ago
Carol
inactive
1h ago
Dave
active
12m ago
ws
live
admin panel
name
status
upd
Alice
pending
2m ago
Bob
active
5m ago
Carol
inactive
1h ago
Dave
active
12m ago
Both clients subscribed to users…ws://localhost:3000/realtime

Plus l'auth et les rôles, le stockage compatible S3, les tâches planifiées, les fonctions serverless et les sauvegardes. Aucun service séparé auquel souscrire ou à interconnecter.

Explorer le backend

Et le panneau d'administration que votre équipe ouvre chaque matin.

Édition façon tableur, médias, relations, rôles et workflows — un panneau d'administration que vous pouvez confier à un non-développeur dès son premier jour. C'est un client de votre API comme un autre : tout ce qu'il peut voir, vos politiques l'ont autorisé.

Ce avec quoi votre app communique

Rebase Backend

Le serveur que votre app appelle : REST, un SDK typé, le temps réel, l'auth et le stockage sur votre propre Postgres.

@rebasepro/server

Là où votre équipe travaille

Rebase CMS

Édition tableur, médias, relations, rôles et workflows — avec vos propres composants React intégrés partout où le champ par défaut ne suffit pas.

@rebasepro/cms

La moitié développeur du panneau

Rebase Studio

Éditeur SQL, visualiseur de schéma, éditeur de politiques RLS, logs et explorateur d'API. Studio est la moitié développeur du panneau que votre équipe utilise déjà.

@rebasepro/app

Découvrir Rebase CMS

03·Sécurité d'abord

Écrit en TypeScript. Appliqué par Postgres.

Vos règles d'accès sont compilées en véritables politiques Postgres — granulaires par collection, par champ, par rôle. La base de données les applique sur chaque point d'accès : vos routes, votre tâche nocturne, le script de backfill lancé une seule fois, l'agent muni d'une clé. Pas un middleware qu'il faut penser à appeler.

Où vit la règle aujourd'huicollections/orders.ts · une règle, dans Postgres, sur chaque chemin
routes/orders.tsif (order.ownerId !== req.user.id) return 403;✓ checks
jobs/nightly-report.tsdb.select().from(orders) // every row✗ no check
scripts/backfill.tsdb.update(orders).set(…) // run once, kept forever✗ no check
agents/tools.tsconnect(URL, SERVICE_ROLE_KEY)✗ bypasses RLS
the hosted dashboardselect * from orders -- as the owner✗ no policy
securityRules: [
  { operation: "select", using: "owner_id = rebase.uid()" },
  { operation: "update", using: "owner_id = rebase.uid()" },
]
-- compiled into Postgres; enforced on every statement, for every caller
CREATE POLICY orders_select ON orders FOR SELECT USING (owner_id = rebase.uid());
-- a table with no policy is not served at all
routes/orders.tsrebase_user→ policy applies
jobs/nightly-report.tsrebase_user→ policy applies
scripts/backfill.tsrebase_user→ policy applies
agents/tools.tsscoped key→ policy applies
the panelrebase_user→ policy applies

Ne nous croyez pas sur parole.

rls-check lit le catalogue de votre base de données et rapporte ce qui est réellement exposé — des tables servies avec la sécurité au niveau des lignes désactivée, des politiques vraies pour tout le monde, des vues qui contournent la RLS de leurs tables de base. Quinze contrôles. N'importe quel Postgres : Supabase, Neon, RDS, votre propre serveur. Il est en lecture seule, ne demande aucun compte, et se moque de savoir si vous utilisez Rebase.

Voir les 15 vérifications
npx @rebasepro/rls-check

Des SELECT sur les catalogues système et rien d'autre. Aucune télémétrie, aucun envoi, et il ne lit jamais vos données.

04·Conçu pour l'ère des agents

Le backend qu'un agent ne peut pas casser.

Un agent IA peut échafauder un backend en une heure. Il ne peut pas vous dire si ce backend est sûr. Les agents excellent à produire des backends plausibles — et sont notoirement mauvais pour en produire de sûrs. Rebase fait du résultat sûr le seul résultat possible, par construction.

Découvrir les fonctions IA et agents
agent · what it can reach

A surface an agent can hold

No controllers, no serializers, no migrations to hand-write, and nothing for a model to invent between the schema and the route. The whole contract fits in one context window, and the compiler checks whatever it writes back.

config/collections/orders.ts
export const orders: PostgresCollectionConfig = {
table: "orders",
properties: { total, status, customer },
securityRules: [{ operation: "select", … }],
};
→ REST · typed SDK · RLS policies · admin views
no controllers to reviewfits in one context windowcompiler-checked

05·Conçu pour des produits réels

Sept produits. Tous en production.

Un dispositif médical certifié, un programme de fidélité retail, une marketplace à deux faces, des données publiques, un agent commercial outbound, un outil de design et un CRM — certains sont les nôtres, d'autres ceux de nos clients.

Pointez-le vers votre base de données.

Licence MIT, de bout en bout. Vos données restent dans votre Postgres : pas de dépendance à un fournisseur, pas de tarification par utilisateur, et partir tient en un redéploiement.

Lancez-le en local

Une seule commande sur votre Postgres existant. Pas de compte, pas de conteneur à pull, aucune inscription.

pnpm dlx @rebasepro/cli init
Démarrage rapide

Auto-hébergez-le

Docker, Fly, Railway, Hetzner ou bare metal. Vos données restent sur votre infrastructure et ne nous parviennent jamais.

docker compose up -d
Guides de déploiement

Rebase CloudBêta privée

Hébergement managé sur notre infrastructure. Il fait tourner de vrais clients aujourd'hui et s'ouvre par vagues.

Demander un accès