diff --git a/README.md b/README.md index 8f828b4a50..6e8b83ddc6 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,11 @@ **Try it in ~30s** — boot the [HotCRM](https://github.com/objectstack-ai/hotcrm) reference app on [StackBlitz](https://stackblitz.com/github/objectstack-ai/hotcrm) (no install). · Hosted platform: **[ObjectOS](https://cloud.objectos.app)**. +

+ ObjectStack Console rendering an executive dashboard — KPI cards for revenue, accounts, contacts and leads, a revenue-trend area chart, and a revenue-by-industry donut, all defined as metadata +
The runtime Console rendering a dashboard defined entirely in metadata — KPI cards, charts, and scheduled reports. +

+ ## What is ObjectStack? ObjectStack is an **open-source**, metadata-driven backend for building business applications that AI agents can understand, operate, and audit safely — self-hostable, with your data on your own database. @@ -32,9 +37,71 @@ All core definitions start with **Zod schemas** (1,600+ exported schemas across See [ARCHITECTURE.md](./ARCHITECTURE.md) for the full microkernel and layer architecture documentation, and [content/docs/concepts/north-star.mdx](./content/docs/concepts/north-star.mdx) for the product north star (metadata protocols · environment-aware runtime · compiled app artifacts). +## See it in action + +ObjectStack ships a runtime **Console** and a visual **Studio** on top of the same metadata — every object, view, dashboard, flow, and permission you declare in code is immediately explorable, editable, and operable in the browser. + +**One object, every view.** The same `task` records — rendered as a board, a Gantt schedule, a calendar, or a cover gallery. View types are metadata, and the per-view bindings (kanban group-by, Gantt start/end/progress, calendar date, gallery cover) are auto-derived from the object, so switching layout takes no extra UI code. + +

+ Kanban board grouping tasks across Backlog, To Do, In Progress, In Review, and Done columns + Gantt schedule with colored task bars, milestone diamonds, and a today marker +

+

+ Month calendar with task events placed on their due dates + Gallery of task cards with cover images, assignees, and status badges +

+

Board · Gantt · Calendar · Gallery — the same records, four visualizations, zero extra UI code (grid, timeline, and map ship too).

+ +**Model and automate.** + +

+ Studio object designer showing the Opportunity object's typed fields, lookups, and layout sections + Studio flow designer showing a visual DAG that enrolls leads into a campaign +

+

Model business objects as typed metadata — fields, relations, validation, sections  ·  Automate with flows that compile to analyzable metadata.

+ +**Ask your data.** + +

+ AI assistant answering questions about records using the same metadata and permissions +
AI agents act through the same objects, actions, and permissions you defined — agent-ready by construction, not bolted on. +

+ +## How it works + +Everything is **typed metadata**. Author a business object once — fields, a color-coded picklist, validation, all declarative: + +```ts +import { ObjectSchema, Field } from '@objectstack/spec/data'; + +export const Task = ObjectSchema.create({ + name: 'todo_task', + label: 'Task', + fields: { + subject: Field.text({ label: 'Subject', required: true, searchable: true }), + status: Field.select({ + label: 'Status', + required: true, + options: [ + { label: 'In Progress', value: 'in_progress', color: '#3B82F6' }, + { label: 'Completed', value: 'completed', color: '#10B981' }, + ], + }), + due_date: Field.date({ label: 'Due Date' }), + }, +}); +``` + +From that single schema, ObjectStack compiles a running backend — the database table, an auto-generated REST API and typed client SDK, the Console & Studio UI (list, board, calendar, Gantt…), and MCP tools for agents — all behind the same permissions, over a database you host. + +

+ ObjectStack architecture: author typed Zod metadata (objects, flows, views, policies); the microkernel runtime compiles it into a versioned JSON artifact and loads plugins, drivers, and services; it generates a REST API, client SDK, Console and Studio UI, and MCP tools used by developers and AI agents — all governed by Auth, RBAC, RLS, FLS, and audit, over PostgreSQL, MySQL, SQLite, or MongoDB +

+ ## Key Features -- **Built for AI, not retrofitted** — Business objects, permissions, flows, APIs, and UI are declared as typed metadata, not hand-written. A typical enterprise module collapses from tens of thousands of lines of CRUD/glue into a few hundred lines of declarative schema — **roughly two orders of magnitude less code**, small enough for an AI agent to load end-to-end and safely refactor across data, API, UI, and permissions in a single change. +- **Built for AI, not retrofitted** — Objects, permissions, flows, APIs, and UI are declarative typed metadata, not hand-written code — small enough for an AI agent to load and safely refactor end-to-end. - **Agent-ready metadata** — Business objects, actions, and permissions are explicit enough for AI agents to inspect and use. - **Automatic tool surface** — Metadata can power REST APIs, client SDKs, UI views, and MCP tools without redefining each action by hand. - **Protocol-first schemas** — All schemas are defined with Zod; TypeScript types are derived via `z.infer<>`. @@ -52,8 +119,6 @@ See [ARCHITECTURE.md](./ARCHITECTURE.md) for the full microkernel and layer arch ## Why AI-native? -**Built for AI, not retrofitted.** - Most internal-tool and low-code platforms were designed for humans clicking screens. AI support is usually added later as a chat box that can call a few predefined queries. ObjectStack starts from a different assumption: **AI agents need a structured, bounded, and auditable business backend before they can safely perform real work** — and the entire business system has to be small enough to fit in an agent's context window. A typical enterprise application is tens of thousands of lines of CRUD, forms, queries, permissions, and API glue spread across dozens of files. ObjectStack collapses the same surface into a few hundred lines of typed metadata — **roughly two orders of magnitude less code for a developer (or an AI agent) to read, write, and maintain.** @@ -147,6 +212,9 @@ Cloud, package registry, and environment management subcommands (`os publish`, ` ## Package Directory +
+72 published packages across core, engine, drivers, client, plugins, services, adapters, tools, and examples — click to expand. + ### Core | Package | Description | @@ -248,11 +316,13 @@ Cloud, package registry, and environment management subcommands (`os publish`, ` | [`@objectstack/example-crm`](examples/app-crm) | Minimal CRM smoke-test workspace — validates the metadata loading pipeline | Intermediate | | [HotCRM](https://github.com/objectstack-ai/hotcrm) | Full-featured enterprise CRM reference app (separate repo) | Advanced | +
+ ## Codebase Metrics | Metric | Value | | :--- | :--- | -| Source packages | 51 | +| Source packages | 72 | | Apps | 2 (account, docs) | | Framework adapters | 7 (Express, Fastify, Hono, NestJS, Next.js, Nuxt, SvelteKit) | | Database drivers | 3 (Memory, SQL, MongoDB) | @@ -260,7 +330,7 @@ Cloud, package registry, and environment management subcommands (`os publish`, ` | Exported schemas | 1,600+ | | `.describe()` annotations | 8,750+ | | Service contracts | 27 | -| Test files | 229 | +| Test files | 676 | | Tests passing | 6,507 | ## Architecture diff --git a/docs/screenshots/architecture.png b/docs/screenshots/architecture.png new file mode 100644 index 0000000000..f84a1f0351 Binary files /dev/null and b/docs/screenshots/architecture.png differ diff --git a/docs/screenshots/architecture.svg b/docs/screenshots/architecture.svg new file mode 100644 index 0000000000..24e401b6ab --- /dev/null +++ b/docs/screenshots/architecture.svg @@ -0,0 +1,16 @@ + + + + + + + +One typed source of truth every surface +Author business metadata once; ObjectStack runs it and derives the APIs, UI, and agent tools — over your database, behind your permissions. +1AUTHORTyped Zod metadataObjects · fields · relationsValidation & formulasFlows · triggers · approvalsViews · pages · dashboardsRoles · RBAC · sharing rulesAgents · tools · skills +compile +2RUNMicrokernel runtimeCompiled JSON artifactObjectKernel — DI · eventsPluginsDriversServices — AI · automation · analytics +generate +3USEGenerated surfacesREST API (auto-generated)Client SDK + React hooksConsole & Studio UIMCP toolsRealtime · webhooks · jobsUsed by developers & AI agents +GOVERNANCE · every requestAuth · RBAC · RLS · FLS · AuditYOUR DATABASE · you host itPostgreSQL · MySQL · SQLite · MongoDB + \ No newline at end of file diff --git a/docs/screenshots/ask-ai.png b/docs/screenshots/ask-ai.png new file mode 100644 index 0000000000..15a6fd09a5 Binary files /dev/null and b/docs/screenshots/ask-ai.png differ diff --git a/docs/screenshots/automation.png b/docs/screenshots/automation.png new file mode 100644 index 0000000000..d18ef731e5 Binary files /dev/null and b/docs/screenshots/automation.png differ diff --git a/docs/screenshots/calendar.png b/docs/screenshots/calendar.png new file mode 100644 index 0000000000..2560b48029 Binary files /dev/null and b/docs/screenshots/calendar.png differ diff --git a/docs/screenshots/dashboard.png b/docs/screenshots/dashboard.png new file mode 100644 index 0000000000..5573d9d4a5 Binary files /dev/null and b/docs/screenshots/dashboard.png differ diff --git a/docs/screenshots/gallery.png b/docs/screenshots/gallery.png new file mode 100644 index 0000000000..326b038735 Binary files /dev/null and b/docs/screenshots/gallery.png differ diff --git a/docs/screenshots/gantt.png b/docs/screenshots/gantt.png new file mode 100644 index 0000000000..51d8bea41b Binary files /dev/null and b/docs/screenshots/gantt.png differ diff --git a/docs/screenshots/kanban.png b/docs/screenshots/kanban.png new file mode 100644 index 0000000000..3255d9d718 Binary files /dev/null and b/docs/screenshots/kanban.png differ diff --git a/docs/screenshots/modeling.png b/docs/screenshots/modeling.png new file mode 100644 index 0000000000..065917e300 Binary files /dev/null and b/docs/screenshots/modeling.png differ