PostgreSQLBackend open-source · MIT · Cualquier Postgres

Un backend para tu Postgres.Y un panel de administración que no tienes que construir.

REST, un SDK tipado, realtime, auth y storage para tu app; hojas de cálculo, multimedia, relaciones y roles para tu equipo. Nuestro propio CRM son veintitrés colecciones y ni una sola pantalla escrita a mano.

Probar la demo

De los creadores de FireCMS, el CMS open source de más de 10.000 proyectos Firebase.

DearDoc LogoMedicalMotion LogoProton HealthWithUSocial Income

01·Cómo funciona

Escribes este archivo.
No escribes el resto.

El esquema, la API REST, el SDK tipado, los formularios de edición y cada vista del panel salen de él, y evolucionan a la par. No hay un segundo modelo de datos que mantener sincronizado ni pantallas CRUD que mantener cuando un campo cambia de nombre.

Código de la 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 },
  },
};

→ genera esquema de BD · API REST · SDK Tipado · formularios de entidad · vistas de admin

02·Lo que obtienes

APIs funcionales sobre tu base de datos, desde el minuto uno.

Un SDK tipado para tus colecciones, REST sobre cada tabla y tiempo real mediante WebSocket, ejecutándose contra tu base de datos desde el primer minuto.

app.ts — tipado desde tus 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, sobre cada tablalive · 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...
Tiempo real — 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

Además: auth y roles, almacenamiento compatible con S3, tareas programadas, funciones serverless y backups. Nada de esto es un servicio aparte en el que tengas que registrarte y conectar.

Explorar el backend

Y el panel de administración que tu equipo abre cada mañana.

Edición tipo hoja de cálculo, multimedia, relaciones, roles y flujos de trabajo — un panel de administración que puedes entregar a un perfil no técnico en su primer día. Es un cliente más de tu API, así que todo lo que puede ver lo dictan tus políticas.

Con lo que habla tu app

Rebase Backend

El servidor al que llama tu app: REST, un SDK tipado, tiempo real, auth y almacenamiento sobre tu propio Postgres.

@rebasepro/server

Donde trabaja tu equipo

Rebase CMS

Edición tipo hoja de cálculo, medios, relaciones, roles y flujos de trabajo — con tus propios componentes React integrados donde el campo por defecto no baste.

@rebasepro/cms

La mitad de desarrollo del panel

Rebase Studio

Editor SQL, visualizador de esquema, editor de políticas RLS, logs y explorador de API. Studio es la mitad de desarrollo del mismo panel que ya usa tu equipo.

@rebasepro/app

Explora Rebase CMS

03·Seguridad primero

Escrito en TypeScript. Aplicado por Postgres.

Tus reglas de acceso se compilan en políticas reales de Postgres — granulares por colección, por campo, por rol. La base de datos las aplica en cada vía de entrada: tus rutas, tu tarea nocturna, el script de backfill que alguien ejecutó una vez, el agente con una clave. No un middleware que alguien deba recordar invocar.

Dónde vive la regla hoycollections/orders.ts · una regla, en Postgres, en cada camino
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

No te fíes de nuestra palabra.

rls-check lee el propio catálogo de tu base de datos y reporta lo que está realmente expuesto — tablas servidas con la seguridad a nivel de fila desactivada, políticas que evalúan a verdadero para todo el mundo, vistas que leen esquivando la RLS de sus tablas base. Quince comprobaciones. Cualquier Postgres: Supabase, Neon, RDS, tu propio servidor. Es de solo lectura, no necesita cuenta y le da igual si usas Rebase.

Ver las 15 comprobaciones
npx @rebasepro/rls-check

SELECTs contra los catálogos del sistema y nada más. Sin telemetría, sin subidas, y nunca lee tus datos.

04·Diseñado para la era de los agentes

El backend que un agente no puede estropear.

Un agente de IA puede montar un backend en una hora. Lo que no puede decirte es si ese backend es seguro. Los agentes son excelentes produciendo backends plausibles — y célebremente malos produciendo backends seguros. Rebase hace que el resultado seguro sea el único resultado posible, por construcción.

Explorar las funciones de IA y agentes
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·Construido para productos reales

Siete productos. Todos en producción.

Un producto sanitario certificado, un programa de fidelización en retail, un marketplace de dos caras, datos públicos, un agente de ventas outbound, una herramienta de diseño y un CRM — algunos nuestros, otros de nuestros clientes.

Apúntalo a tu base de datos.

Licencia MIT, de principio a fin. Tus datos se quedan en tu Postgres: sin dependencia de ningún proveedor, sin precios por asiento, y marcharte es un redespliegue.

Ejecútalo en local

Un solo comando sobre el Postgres que ya tienes. Sin cuentas, sin descargar contenedores, sin registros.

pnpm dlx @rebasepro/cli init
Inicio rápido

Autoalójalo

Docker, Fly, Railway, Hetzner o bare metal. Tus datos se quedan en tu infraestructura y nunca llegan a nosotros.

docker compose up -d
Guías de despliegue

Rebase CloudBeta privada

Hosting gestionado en nuestra infraestructura. Hoy ejecuta clientes reales y se abre por tandas.

Solicitar acceso