ObjectStackObjectStack

Runtime Capabilities

Understanding ObjectStack's subsystem capabilities (ObjectQL, ObjectUI, ObjectStack)

Runtime Capabilities

The ObjectStack Capabilities Schema describes what features and functionalities are available in a running ObjectStack instance. This information is critical for:

  • Frontends: Knowing which UI components to render
  • AI Agents: Understanding platform constraints for code generation
  • API Clients: Discovering available endpoints and features
  • Development Tools: IDE support and validation

Architecture Overview

ObjectStack capabilities are organized into three subsystems that correspond to the three-layer architecture:

┌─────────────────────────────────────────────────────────┐
│  ObjectUI Capabilities (User Interface Layer)           │
│  • View types (List, Form, Kanban, Calendar, Gantt)    │
│  • Dashboards, Reports, Charts                         │
│  • Customization (Pages, Themes, Components)           │
│  • Mobile optimization & Accessibility                 │
└─────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────┐
│  ObjectStack Capabilities (System/Runtime Layer)           │
│  • API protocols (REST, GraphQL, OData)                │
│  • Real-time (WebSockets, SSE, Event Bus)              │
│  • Security (Authentication, RBAC, RLS, FLS)           │
│  • Platform services (Jobs, Audit, Storage, i18n)      │
└─────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────┐
│  ObjectQL Capabilities (Data Layer)                     │
│  • Query operations (Filters, Joins, Aggregations)     │
│  • Advanced SQL features (Window Functions, Subqueries)│
│  • Data types (JSON, Arrays, Vectors, Geospatial)      │
│  • Business logic (Workflows, Triggers, Formulas)      │
└─────────────────────────────────────────────────────────┘

Schema Structure

import type { ObjectStackCapabilities } from '@objectstack/spec';

const capabilities: ObjectStackCapabilities = {
  data: { /* ObjectQL capabilities */ },
  ui: { /* ObjectUI capabilities */ },
  system: { /* ObjectStack capabilities */ },
};

ObjectQL Capabilities

The Data Layer capabilities define what query operations, data types, and business logic features are supported.

Query Operations

CapabilityDefaultDescription
queryFilterstrueWHERE clause filtering
queryAggregationstrueGROUP BY and aggregation functions (COUNT, SUM, AVG)
querySortingtrueORDER BY sorting
queryPaginationtrueLIMIT/OFFSET pagination
queryWindowFunctionsfalseWindow functions (ROW_NUMBER, RANK, LAG, LEAD)
querySubqueriesfalseNested SELECT statements
queryDistincttrueSELECT DISTINCT
queryHavingfalseHAVING clause for aggregations
queryJoinsfalseSQL-style joins

Advanced Data Features

CapabilityDefaultDescription
fullTextSearchfalseFull-text search capabilities
vectorSearchfalseVector embeddings and similarity search (RAG/AI)
geoSpatialfalseGeospatial queries and location fields

Field Type Support

CapabilityDefaultDescription
jsonFieldstrueJSON field types
arrayFieldsfalseArray field types

Data Validation & Logic

CapabilityDefaultDescription
validationRulestrueValidation rule engine
workflowstrueWorkflow automation
triggerstrueDatabase triggers
formulastrueFormula fields

Transaction & Performance

CapabilityDefaultDescription
transactionstrueDatabase transaction support
bulkOperationstrueBulk create/update/delete

Driver Support

CapabilityDescription
supportedDriversArray of available database drivers (e.g., ['postgresql', 'mongodb', 'sqlite'])

ObjectUI Capabilities

The User Interface Layer capabilities define what UI components and views are available.

View Types

CapabilityDefaultDescription
listViewtrueList/grid views
formViewtrueForm views
kanbanViewfalseKanban board views
calendarViewfalseCalendar views
ganttViewfalseGantt chart views

Analytics & Reporting

CapabilityDefaultDescription
dashboardstrueDashboard creation
reportstrueReport generation
chartstrueChart widgets

Customization

CapabilityDefaultDescription
customPagestrueCustom page creation
customThemesfalseCustom theme creation
customComponentsfalseCustom UI components/widgets

Actions & Interactions

CapabilityDefaultDescription
customActionstrueCustom button actions
screenFlowsfalseInteractive screen flows

Responsive & Accessibility

CapabilityDefaultDescription
mobileOptimizedfalseMobile-optimized UI
accessibilityfalseWCAG accessibility support

ObjectStack Capabilities

The System Layer capabilities define runtime, API, security, and platform service features.

System Identity

FieldRequiredDescription
versionObjectStack kernel version (e.g., "1.0.0")
environmentRuntime environment (development, test, staging, production)

API Surface

CapabilityDefaultDescription
restApitrueREST API available
graphqlApifalseGraphQL API available
odataApifalseOData API available

Real-time & Events

CapabilityDefaultDescription
websocketsfalseWebSocket support
serverSentEventsfalseServer-Sent Events support
eventBusfalseInternal pub/sub event bus

Integration

CapabilityDefaultDescription
webhookstrueOutbound webhook support
apiContractsfalseAPI contract definitions

Security & Access Control

CapabilityDefaultDescription
authenticationtrueAuthentication system
rbactrueRole-Based Access Control
fieldLevelSecurityfalseField-level permissions
rowLevelSecurityfalseRow-level security/sharing rules

Multi-tenancy

CapabilityDefaultDescription
multiTenantfalseMulti-tenant architecture support

Platform Services

CapabilityDefaultDescription
backgroundJobsfalseBackground job scheduling
auditLoggingfalseAudit trail logging
fileStoragetrueFile upload and storage

Internationalization

CapabilityDefaultDescription
i18ntrueInternationalization support

Plugin System

CapabilityDefaultDescription
pluginSystemfalsePlugin/extension system

Additional Fields

FieldDescription
featuresArray of active feature flags
apisArray of available API endpoints
systemObjectsList of globally available system objects (e.g., ['user', 'role', 'permission'])
limitsPlatform constraints (max objects, API rate limits, file upload size, etc.)

Usage Examples

Example 1: Production Configuration

import type { ObjectStackCapabilities } from '@objectstack/spec';

const productionCapabilities: ObjectStackCapabilities = {
  data: {
    queryFilters: true,
    queryAggregations: true,
    querySorting: true,
    queryPagination: true,
    queryWindowFunctions: true,
    querySubqueries: true,
    queryDistinct: true,
    queryHaving: true,
    queryJoins: true,
    fullTextSearch: true,
    vectorSearch: true,
    geoSpatial: true,
    jsonFields: true,
    arrayFields: true,
    validationRules: true,
    workflows: true,
    triggers: true,
    formulas: true,
    transactions: true,
    bulkOperations: true,
    supportedDrivers: ['postgresql', 'mongodb', 'mysql'],
  },
  ui: {
    listView: true,
    formView: true,
    kanbanView: true,
    calendarView: true,
    ganttView: true,
    dashboards: true,
    reports: true,
    charts: true,
    customPages: true,
    customThemes: true,
    customComponents: true,
    customActions: true,
    screenFlows: true,
    mobileOptimized: true,
    accessibility: true,
  },
  system: {
    version: '1.0.0',
    environment: 'production',
    restApi: true,
    graphqlApi: true,
    odataApi: true,
    websockets: true,
    serverSentEvents: true,
    eventBus: true,
    webhooks: true,
    apiContracts: true,
    authentication: true,
    rbac: true,
    fieldLevelSecurity: true,
    rowLevelSecurity: true,
    multiTenant: true,
    backgroundJobs: true,
    auditLogging: true,
    fileStorage: true,
    i18n: true,
    pluginSystem: true,
    systemObjects: ['user', 'role', 'permission', 'object', 'field'],
    limits: {
      maxObjects: 1000,
      maxFieldsPerObject: 500,
      maxRecordsPerQuery: 10000,
      apiRateLimit: 1000,
      fileUploadSizeLimit: 10485760, // 10 MB
    },
  },
};

Example 2: Development Configuration

const developmentCapabilities: ObjectStackCapabilities = {
  data: {
    // Basic query operations
    queryFilters: true,
    queryAggregations: true,
    querySorting: true,
    queryPagination: true,
    queryWindowFunctions: false,
    querySubqueries: false,
    queryDistinct: true,
    queryHaving: false,
    queryJoins: false,
    fullTextSearch: false,
    vectorSearch: false,
    geoSpatial: false,
    jsonFields: true,
    arrayFields: false,
    validationRules: true,
    workflows: false,
    triggers: false,
    formulas: true,
    transactions: true,
    bulkOperations: true,
    supportedDrivers: ['memory', 'sqlite'],
  },
  ui: {
    listView: true,
    formView: true,
    kanbanView: false,
    calendarView: false,
    ganttView: false,
    dashboards: true,
    reports: true,
    charts: true,
    customPages: true,
    customThemes: false,
    customComponents: false,
    customActions: true,
    screenFlows: false,
    mobileOptimized: false,
    accessibility: false,
  },
  system: {
    version: '0.1.0',
    environment: 'development',
    restApi: true,
    graphqlApi: false,
    odataApi: false,
    websockets: false,
    serverSentEvents: false,
    eventBus: false,
    webhooks: true,
    apiContracts: false,
    authentication: true,
    rbac: true,
    fieldLevelSecurity: false,
    rowLevelSecurity: false,
    multiTenant: false,
    backgroundJobs: false,
    auditLogging: false,
    fileStorage: true,
    i18n: true,
    pluginSystem: false,
    systemObjects: ['user', 'role', 'object'],
    limits: {
      maxObjects: 100,
      maxFieldsPerObject: 200,
      maxRecordsPerQuery: 1000,
      apiRateLimit: 100,
      fileUploadSizeLimit: 5242880, // 5 MB
    },
  },
};

Example 3: Capability Checking

// Helper: Check if a capability is enabled
function hasCapability(
  capabilities: ObjectStackCapabilities,
  subsystem: 'data' | 'ui' | 'system',
  capability: string
): boolean {
  const subsystemCaps = capabilities[subsystem] as any;
  return subsystemCaps?.[capability] === true;
}

// Check if vector search is available
if (hasCapability(capabilities, 'data', 'vectorSearch')) {
  console.log('✅ Vector search is available for RAG workflows');
}

// Check if GraphQL API is enabled
if (hasCapability(capabilities, 'system', 'graphqlApi')) {
  console.log('✅ GraphQL endpoint is available');
}

// Check if Kanban view is supported
if (hasCapability(capabilities, 'ui', 'kanbanView')) {
  console.log('✅ Kanban boards are available');
}

Discovery Endpoint

The REST server exposes a discovery document at the API base path (/api/v1) and at /api/v1/discovery. The response follows the DiscoverySchema (@objectstack/spec), where routes is a flat map of service-name → route-path and services is the single source of truth for per-service availability:

// GET /api/v1/discovery
{
  "name": "ObjectStack Instance",
  "version": "1.0.0",
  "environment": "production",
  "routes": {
    "data": "/api/v1/data",
    "metadata": "/api/v1/meta",
    "ui": "/api/v1/ui",
    "auth": "/api/v1/auth",
    "graphql": "/graphql"
  },
  "locale": {
    "default": "en",
    "supported": ["en", "zh-CN"],
    "timezone": "UTC"
  },
  "services": {
    /* per-service { enabled, status, route, provider } entries */
  }
}

This allows clients to:

  1. Discover which services are available (via services)
  2. Resolve endpoint paths without hardcoding URLs (via routes)
  3. Adapt UI based on availability
  4. Validate API requests

Best Practices

1. Progressive Enhancement

Design your application to gracefully handle missing capabilities:

// Good: Check before using advanced features
if (capabilities.data.vectorSearch) {
  await performSemanticSearch(query);
} else {
  await performTextSearch(query); // Fallback
}

2. AI Agent Guidance

When generating code, AI agents should respect capability constraints:

// AI Agent checks capabilities before generating code
if (!capabilities.data.queryWindowFunctions) {
  // Don't generate ROW_NUMBER queries
  // Use alternative implementation
}

3. Environment-Specific Configuration

Use different capability sets for different environments:

const capabilities = 
  process.env.NODE_ENV === 'production'
    ? productionCapabilities
    : developmentCapabilities;

4. Documentation

Always document which capabilities your feature requires:

/**
 * Semantic Search Component
 * 
 * **Required Capabilities:**
 * - objectql.vectorSearch: true
 * - objectql.fullTextSearch: true
 */
export function SemanticSearch() { /* ... */ }

See Also

On this page