Arquitectura
Lo que realmente estás ejecutando — para el ingeniero que evalúa si vale la pena adoptar esto.
Arquitectura
Una visión práctica de lo que se ejecuta en tus máquinas cuando despliegas ObjectOS, qué datos salen de tu red y cuáles no.
El modelo mental son dos capas delgadas:
- Metadatos — paquetes de objetos / vistas / acciones / flujos / agentes. En su mayoría escritos por el AI Builder contra una API de herramientas en un entorno aislado (sandbox); a veces editados a mano, siempre con control de versiones y auditados.
- Un único runtime de Node.js que interpreta esos metadatos en una aplicación funcional — REST API, Console UI, permisos, trabajos, herramientas de IA — todo en un solo proceso, comunicándose con tu base de datos.
Sin paso de generación de código, sin pipeline de despliegue entre "el usuario describió lo que quería" y "está en producción". El runtime carga en caliente los nuevos metadatos tras una aprobación HITL.
Lo que despliegas
Un proceso de Node.js por instancia de ObjectOS. Eso es todo.
┌─────────────────────────────────────────────────────┐
│ ObjectOS process │
│ ┌───────────────────────────────────────────────┐ │
│ │ HTTP dispatcher (/ · /api · /_console …) │ │
│ ├───────────────────────────────────────────────┤ │
│ │ Per-project ObjectKernel (LRU cached) │ │
│ │ ├─ Auth (Better Auth) │ │
│ │ ├─ Security (RBAC + row-level + field) │ │
│ │ ├─ ObjectQL (data engine, generates SQL) │ │
│ │ ├─ REST API generator │ │
│ │ └─ Capabilities loaded per artifact │ │
│ │ (audit, storage, jobs, queue, AI …) │ │
│ └───────────────────────────────────────────────┘ │
└──────────┬──────────────────────────────────────────┘
│
▼
Your business database
(Postgres / MySQL / SQLite / Turso / MongoDB)Equivale a la complejidad de un único binario enlazado estáticamente. Sin sidecar, sin Kafka, sin necesidad de una capa de caché separada. Añade esas cosas cuando las necesites; no pagues por ellas desde el primer día.
Dónde viven tus datos
| Datos | Viven en | ¿Salen de tu red? |
|---|---|---|
| Registros de negocio | Tu base de datos | No |
| Cuentas de usuario, sesiones, tokens OAuth | Tu base de datos | No |
| Registro de auditoría | Tu base de datos | No |
| Configuraciones, claves API, secretos | Tu base de datos / gestor de secretos | No |
| Archivos subidos | Tu disco o tu bucket S3/R2 | No |
La definición compilada de la app (objectstack.json) | Un archivo en disco u obtenido desde tu plano de control | Opcional |
ObjectOS no se comunica con el exterior. Sin telemetría. Sin verificación de licencia. Si cortas el acceso a internet por completo, sigue funcionando indefinidamente. Consulta Air-gapped.
Cómo se atiende una solicitud
1. Ingress / TLS termination (your load balancer)
2. HTTP dispatcher (security headers, request id)
3. Hostname → project resolution (cached, TTL configurable)
4. Get or build per-project kernel from LRU
5. AuthPlugin — session cookie, bearer token, or API key
6. SecurityPlugin — RBAC + row-level + field-level checks
7. Route handler — generated REST, declarative action, or custom
8. Data driver — ObjectQL compiles to SQL / Mongo query
9. Response with X-Request-Id propagatedLos pasos 4-8 normalmente se ejecutan en < 5ms una vez que el kernel está caliente.
Las tres capas (solo importa si estás integrando)
La mayoría de los clientes despliegan únicamente ObjectOS. Las otras dos capas existen por si quieres saber de dónde viene el artefacto:
| Capa | Qué es | Dónde se ejecuta |
|---|---|---|
Framework (@objectstack/*) | Kernel de código abierto, ObjectQL, plugins, drivers | npm — incorporado en tiempo de compilación |
| Plano de control (opcional) | Publica artefactos objectstack.json compilados; puedes usar el ObjectStack Cloud alojado, ejecutar el tuyo propio u omitirlo por completo | Tu CI, nuestra nube o tu portátil |
| ObjectOS | El runtime que operas | Tu infraestructura |
Si estás distribuyendo una sola app, no necesitas un plano de control —
compila objectstack.config.ts → dist/objectstack.json en tu CI y
distribuye el JSON en la imagen. Si estás ejecutando un marketplace interno de
apps con muchos inquilinos y aplicaciones, el plano de control es donde reside
el catálogo.
Modos de arranque
| Modo | Cuándo | Cómo |
|---|---|---|
| Standalone | App única, desarrollo, evaluación, air-gapped, la mayoría de despliegues de producción | pnpm dev o ejecuta dist/objectstack.json desde disco |
| File-backed | Producción con artefactos gestionados externamente | Define OS_ARTIFACT_PATH=/path/to/objectstack.json |
| Cloud-connected | Despliegues multi-inquilino / multi-app alimentados por un plano de control | Define OS_CLOUD_URL + OS_CLOUD_API_KEY |
El modo se detecta automáticamente a partir de las variables de entorno.
Características de rendimiento
| Métrica | Número |
|---|---|
| Arranque en frío (proceso activo, listo para tráfico) | ~1 segundo |
| Calentamiento por kernel (primera solicitud a un proyecto) | 50-300ms según las capacidades |
| Latencia de solicitud en caliente (CRUD vía REST) | normalmente < 10ms + latencia de base de datos |
| Huella de memoria | ~150MB base; ~10-30MB por kernel de proyecto activo |
| Proyectos concurrentes por instancia | Limitado por OS_KERNEL_CACHE_SIZE (32 por defecto) |
Por qué esta forma
- Un proceso de Node, sin sidecars → cabe en un
docker run, cabe en una unidad systemd, cabe en un entorno tipo Lambda. - Kernel por proyecto, con caché LRU → una instancia puede atender muchas apps pequeñas sin pagar el coste de calentamiento en cada solicitud.
- APIs generadas sobre metadatos declarados → no hay paso de codegen en tu CI, ni SDK de cliente que publicar; la API coincide con tu modelo de datos por construcción.
- Todas las capacidades son plugins opcionales → el tamaño de la imagen escala con lo que realmente usas.
A dónde ir después
- Production Readiness — checklist antes de exponerlo a tráfico real.
- Runtime Configuration — conexión de bases de datos, cachés y secretos.
- Runtime Capabilities — qué paquetes opcionales existen y qué habilitan.