The Two Layers
Data Layer — What Exists, Who Can Act, and What Can Happen
The data layer is Core’s semantic foundation. It defines every entity the platform knows about, every operation that can be performed, every authorization rule that governs those operations, and every cross-cutting concern that applies across the system. This layer is interface-agnostic: it can be rendered as a web app, exposed as an API, or consumed by an AI agent. Objects represent domain entities. They carry metadata (title, icon, routing) and opt into platform features through capabilities (search, activity log, media attachments, soft delete). Interfaces add semantic meaning — aCustomerObject maps specific properties to platform-level functions like CRM features, while a DocumentObject enables file management behaviors.
Actions represent operations. Each action declares typed parameters, authorization rules, and an execution handler. An action that takes an Order as a parameter is an Order action — there’s no separate registration step. Actions expose a machine-readable schema used by the form builder, API validation, and AI tool discovery.
Workflows handle background processing: multi-step jobs, retries, and long-running operations on objects. They are always triggered explicitly — dispatched from an action or from a model observer reacting to property changes.
Connectors bridge external systems. They manage credentials and provide a standardized client interface for calling external APIs. A Connector has two sides: an outbound side (calling the external API from actions and workflows) and an inbound side via Connector Importers.
Connector Importers are the ETL sub-system of a Connector. They extract data from an external system, transform it into the platform’s data shape, and load it into the local database as Resource Objects — a special object type that mirrors external records (invoices from Fortnox, contacts from HubSpot, products from Business Central). Resource Objects are read-only projections of external data; mutations flow back through the Connector’s outbound API calls.
Authentication covers system users (service accounts) and end-users, with optional auto-registration for portal scenarios.
Authorization & Policies enforce object-level permissions (view, viewAny, update, delete), checked automatically for all standard operations.
Notifications provide multi-channel delivery (email, SMS) with object references.
Interface Layer — How It Looks and Feels
The interface layer renders the data layer into user-facing experiences. Core owns the rendering centrally — client applications configure and extend, but don’t build from scratch. Layouts define application shells (navigation, sidebars, chrome). Pages define page-level templates: aTablePage renders an object index with filters derived from the schema; an ObjectPage renders a detail view with properties, actions, workflows, and activity. Data tables and Forms are higher-level components that derive their columns, filters, and fields from object schemas and action parameters.
All interface components are backend-defined by default. Custom React is an escape hatch, not the starting point.
The Five Domain Primitives
A typical domain feature uses all five primitives working together:Objects — the nouns
An Object is a domain entity: a customer, an order, a product, a case. Objects carry metadata (title, icon, routing URL) and declare which platform capabilities they opt into — search indexing, activity logging, media attachments. Objects are the anchors of the domain model. Everything else — actions, properties, workflows — is defined in terms of objects.Actions — the verbs
An Action is a typed operation against one or more objects. Actions declare their own parameters, authorization rules, validation, and execution logic. An action that takes anOrder parameter is automatically an Order action — there is no separate registration step.
Actions are the primary way users mutate data. They also expose a machine-readable schema used by the form builder, API endpoints, and AI tool discovery.
Properties — the data shape
A Property is a typed, semantic descriptor for a piece of data. It knows its label, type, validation rules, how to format its value for humans, and how to serialize for frontend components. Properties work in two modes:- Standalone — created from a raw value, useful for display anywhere
- Schema-bound — defined in a model’s schema, where they also drive validation, table columns, and inline editing
Workflows — background processes
Workflows orchestrate multi-step background jobs. They persist state to the database, track progress, support retries, and can report status in real time. Workflows are always triggered explicitly — dispatched from an action or from a model event.Connectors — external data
Connectors bridge external systems through ETL importers that project external records as read-only Resource Objects inside the platform.Design Principles
Describe what, not how. Core models domain concepts at a semantic level. The platform controls rendering and UX. This enables AI and API interfaces without additional work. Extension points over customization. Client applications extend Core through defined mechanisms (custom properties, custom pages, custom capabilities) — never by reaching into platform internals. Objects own their surface area. An object declares its own actions, capabilities, schema, and policies. The platform queries the object, not the other way around. No global indexes, no magic scanning. Explicit over implicit. Actions don’t emit events automatically. Workflows are dispatched explicitly. Side effects are visible in the code that triggers them. Schema-driven UI. Properties, action parameters, and object metadata provide enough information to auto-render tables, forms, detail pages, and API documentation. Custom UI overrides the default — it doesn’t replace the mechanism.Feature Maturity
Every major primitive is versioned and tracked by maturity stage.| Stage | Meaning |
|---|---|
| Stable | Production API. Versioned. Breaking changes require a major version bump and deprecation period. |
| Experimental | Architecture defined, implementation in progress. API may change between minor versions. |
| Planned | Concept documented, no implementation yet. |
Current Status
| Primitive | Stage |
|---|---|
| Objects | Experimental |
| Actions | Experimental |
| Properties & Schemas | Experimental |
| Workflows | Experimental |
| Data Tables | Experimental |
| Forms | Experimental |
| Layouts & Pages | Experimental |
| Connectors | Planned |
| Connectors — Importer | Experimental |
| Object Interfaces | Planned |
| Notifications | Planned |
Core does not yet have a stable v1. All APIs are subject to change between minor versions. Follow the upgrade guide when updating Core in your project.
Further Reading
Objects
The domain entity model, capabilities, and interfaces.
Actions
Typed operations, parameter schemas, and authorization.
Pages
Page templates and extension points for UI.