Vision: Build the "Post-SaaS Operating System" — an open-core, local-first ecosystem that virtualizes data and unifies business logic through metadata-driven protocols.
Last Updated: 2026-01-20
Status: Active Development
Current Version: v0.1.1
This roadmap outlines the complete development plan for the ObjectStack Protocol (@objectstack/spec), the "Constitution" that powers the ObjectStack ecosystem. The plan considers all future possibilities and ensures the protocol can support enterprise-grade applications while maintaining simplicity and developer experience.
| Phase | Focus Area | Completion | Priority |
|---|---|---|---|
| P0 | Core Protocols | 80% ✅ | Critical |
| P1 | Advanced Features | 40% 🔵 | High |
| P2 | Platform & Extensibility | 20% 🟠 | High |
| P3 | Enterprise & Governance | 30% 🟡 | Medium |
| P4 | AI & Intelligence | 10% 🟣 | Medium |
| P5 | Developer Experience | 25% 🔴 | High |
| P6 | Cross-Platform Integration | 15% 🟤 | Medium |
| P7 | Performance & Scale | 5% ⚫ | Low |
| P8 | Documentation & Standards | 35% 📚 | High |
Goal: Establish the fundamental "DNA" of ObjectStack that enables all higher-level features.
-
✅ Field Schema (
src/data/field.zod.ts)- 25+ field types (text, number, lookup, formula, etc.)
- Comprehensive constraints (required, unique, min/max, etc.)
- Relationship configuration (lookup, master-detail)
- Formula and summary operations
-
✅ Object Schema (
src/data/object.zod.ts)- Object capabilities (trackHistory, apiEnabled, etc.)
- Field definitions as record map
- Database indexes
- Datasource configuration
-
✅ Validation Rules (
src/data/validation.zod.ts)- Rule conditions and error messages
- Field-level validation
-
✅ Permission & Sharing (
src/data/permission.zod.ts,src/data/sharing.zod.ts)- CRUD permissions
- Field-level security
- Sharing rules
-
✅ Workflow & Flow (
src/data/workflow.zod.ts,src/data/flow.zod.ts)- State machine workflows
- Visual flow orchestration (autolaunched, screen, schedule)
-
✅ Query Protocol (
src/data/query.zod.ts)- Abstract syntax tree for queries
- Filter conditions, sorting
-
✅ Dataset & Mapping (
src/data/dataset.zod.ts,src/data/mapping.zod.ts)- Data transformation schemas
-
✅ App & Navigation (
src/ui/app.zod.ts)- Navigation tree structure
- Object, Dashboard, Page, URL, Group nav items
- App branding configuration
-
✅ View Protocol (
src/ui/view.zod.ts)- ListView types (grid, kanban, calendar, gantt)
- FormView types (simple, tabbed, wizard)
- Column definitions, filters
-
✅ Dashboard (
src/ui/dashboard.zod.ts)- Grid layout system
- Widget configurations
-
✅ Report (
src/ui/report.zod.ts)- Report types (tabular, summary, matrix, chart)
-
✅ Action (
src/ui/action.zod.ts)- Button actions, URL navigation
- Screen flow triggers
-
✅ Page Layout (
src/ui/page.zod.ts)- FlexiPage regions and components
-
✅ Manifest (
src/system/manifest.zod.ts)- Package definition (
objectstack.config.ts) - Version, dependencies, metadata
- Package definition (
-
✅ Datasource (
src/system/datasource.zod.ts)- External data connections (SQL, NoSQL, SaaS)
-
✅ API Contract (
src/api/contract.zod.ts)- REST/GraphQL endpoint definitions
- Request/response envelopes
-
✅ Identity & Role (
src/system/identity.zod.ts,src/system/role.zod.ts)- User, session management
- Role-based access control
-
✅ License (
src/system/license.zod.ts)- License types and restrictions
-
✅ Webhook (
src/system/webhook.zod.ts)- External HTTP callbacks
-
✅ Translation (
src/system/translation.zod.ts)- i18n support
-
✅ Discovery (
src/system/discovery.zod.ts)- Metadata introspection
- ✅ Agent Schema (
src/ai/agent.zod.ts)- AI agent configuration
- Knowledge base, tools, model config
File: src/ui/widget.zod.ts
// Define standard interface for custom field components
export const FieldWidgetPropsSchema = z.object({
value: z.any().describe('Current field value'),
onChange: z.function().describe('Value change handler'),
readonly: z.boolean().default(false),
required: z.boolean().default(false),
error: z.string().optional().describe('Validation error message'),
field: FieldSchema.describe('Field metadata'),
record: z.record(z.any()).optional().describe('Full record context'),
options: z.record(z.any()).optional().describe('Widget-specific configuration'),
});Why Critical: Without this, third-party developers cannot build custom field components (e.g., map picker, color selector) that integrate seamlessly into ObjectUI forms.
Use Case:
- Custom address picker with Google Maps
- Rich text editor with custom toolbar
- Signature pad for legal documents
File: src/system/plugin.zod.ts
// Define plugin lifecycle hooks
export const PluginLifecycleSchema = z.object({
onInstall: z.function().optional().describe('Called when plugin is installed'),
onEnable: z.function().optional().describe('Called when plugin is enabled'),
onDisable: z.function().optional().describe('Called when plugin is disabled'),
onUninstall: z.function().optional().describe('Called before plugin removal'),
onUpgrade: z.function().optional().describe('Called during version upgrade'),
});
export const PluginContextSchema = z.object({
ql: z.any().describe('ObjectQL data access API'),
os: z.any().describe('ObjectOS system API'),
logger: z.any().describe('Logging interface'),
metadata: z.any().describe('Metadata registry'),
events: z.any().describe('Event bus'),
});Why Critical: This is the contract between ObjectOS and all plugins/extensions. Without it, the plugin ecosystem cannot function.
Use Case:
- Analytics plugin runs migration on install
- Email plugin registers custom field types on enable
- Backup plugin schedules jobs on enable
File: src/system/driver.zod.ts
// Standardize database driver implementation
export const DriverInterfaceSchema = z.object({
name: z.string().describe('Driver name (e.g., "postgres", "mongodb")'),
version: z.string().describe('Driver version'),
// Core CRUD operations
find: z.function().describe('Query records'),
findOne: z.function().describe('Get single record by ID'),
create: z.function().describe('Insert new record'),
update: z.function().describe('Update existing record'),
delete: z.function().describe('Delete record'),
bulkCreate: z.function().describe('Bulk insert'),
bulkUpdate: z.function().describe('Bulk update'),
bulkDelete: z.function().describe('Bulk delete'),
// Schema management (DDL)
syncSchema: z.function().describe('Create/alter table from Object definition'),
dropTable: z.function().describe('Drop table'),
// Transaction support
beginTransaction: z.function().optional(),
commit: z.function().optional(),
rollback: z.function().optional(),
// Capabilities
supports: z.object({
transactions: z.boolean(),
joins: z.boolean(),
fullTextSearch: z.boolean(),
jsonFields: z.boolean(),
arrayFields: z.boolean(),
}),
});Why Critical: This enables ObjectQL to work with any database (SQL, NoSQL, Excel, Salesforce) through a unified interface.
Use Case:
driver-postgres: PostgreSQL adapterdriver-mongodb: MongoDB adapterdriver-excel: Excel file as databasedriver-salesforce: Salesforce as datasource
File: src/data/trigger.zod.ts
// Define context passed to trigger code (beforeInsert, afterUpdate, etc.)
export const TriggerContextSchema = z.object({
action: z.enum(['insert', 'update', 'delete']).describe('Operation type'),
timing: z.enum(['before', 'after']).describe('Before or after operation'),
// Record data
doc: z.record(z.any()).describe('Current record data'),
previousDoc: z.record(z.any()).optional().describe('Previous values (for update)'),
// User context
userId: z.string().describe('User performing the operation'),
user: z.record(z.any()).describe('Full user object'),
// API access
ql: z.any().describe('ObjectQL API for querying other objects'),
logger: z.any().describe('Logging interface'),
// Utilities
addError: z.function().describe('Prevent operation with error message'),
getOldValue: z.function().describe('Get field value before change'),
});Why Critical: Standardizes how business logic code is written, enabling AI and tooling to generate trigger code consistently.
Use Case:
// Before insert trigger
async function beforeInsertAccount(ctx: TriggerContext) {
if (!ctx.doc.industry) {
ctx.addError('industry', 'Industry is required');
}
// Auto-populate account number
const count = await ctx.ql.count('account');
ctx.doc.account_number = `ACC-${count + 1}`;
}Goal: Add sophisticated features that power complex enterprise applications.
- ✅ Test infrastructure with Vitest
- ✅ JSON Schema generation from Zod
- ✅ Documentation generation scripts
- ✅ 13 test files with good coverage
File: src/data/field.zod.ts (extend)
// Add to FieldType enum
export const FieldType = z.enum([
// ... existing types
'location', // GPS coordinates {lat, lng}
'address', // Structured address object
'richtext', // Quill/TipTap editor
'code', // Code editor (syntax highlighting)
'json', // Raw JSON field
'color', // Color picker
'rating', // Star rating (1-5)
'slider', // Numeric slider
'barcode', // QR/barcode scanner
'signature', // Digital signature
'duration', // Time duration (hours:minutes)
]);File: src/data/validation.zod.ts (enhance)
- Cross-field validation (e.g., "end_date > start_date")
- Async validation (e.g., check uniqueness across datasources)
- Custom validator functions
- Conditional validation rules
File: src/data/query.zod.ts (enhance)
// Add aggregation support
export const AggregationSchema = z.object({
groupBy: z.array(z.string()).describe('Group by fields'),
having: FilterSchema.optional().describe('Filter after grouping'),
aggregates: z.array(z.object({
function: z.enum(['count', 'sum', 'avg', 'min', 'max']),
field: z.string(),
alias: z.string(),
})),
});
// Add join support
export const JoinSchema = z.object({
type: z.enum(['inner', 'left', 'right', 'full']),
object: z.string().describe('Object to join'),
on: z.string().describe('Join condition'),
alias: z.string().optional(),
});File: src/ui/page-builder.zod.ts (new)
Define drag-drop layout builder schema for custom pages.
File: src/ui/component.zod.ts (new)
Standardize reusable UI component definitions (cards, tabs, accordions).
File: src/ui/theme.zod.ts (new)
export const ThemeSchema = z.object({
colors: z.object({
primary: z.string(),
secondary: z.string(),
success: z.string(),
warning: z.string(),
error: z.string(),
background: z.string(),
surface: z.string(),
text: z.string(),
}),
typography: z.object({
fontFamily: z.string(),
fontSize: z.object({
xs: z.string(),
sm: z.string(),
base: z.string(),
lg: z.string(),
xl: z.string(),
}),
}),
spacing: z.object({
unit: z.number().describe('Base spacing unit (e.g., 4px)'),
}),
borderRadius: z.string(),
shadows: z.record(z.string()),
});File: src/system/notification.zod.ts (new)
Define in-app, email, SMS, push notification schemas.
File: src/data/attachment.zod.ts (new)
File management, versioning, storage configuration.
File: src/data/feed.zod.ts (new)
Chatter-style collaboration schema (posts, mentions, likes).
File: src/data/audit.zod.ts (enhance)
Field-level tracking, retention policies, export formats.
File: src/system/migration.zod.ts (new)
ETL mapping, transformation rules, error handling.
File: src/system/job.zod.ts (new)
Scheduled tasks, cron expressions, retry logic.
File: src/ui/email-template.zod.ts (new)
Email composition, merge fields, attachments.
File: src/ui/print-template.zod.ts (new)
PDF generation, layout, headers/footers.
Goal: Enable a thriving plugin ecosystem and multi-tenant SaaS deployments.
- ✅ Basic manifest structure
- ✅ Discovery protocol
File: src/system/marketplace.zod.ts (new)
export const MarketplaceListingSchema = z.object({
id: z.string(),
name: z.string(),
description: z.string(),
category: z.enum(['integration', 'analytics', 'productivity', 'industry']),
pricing: z.object({
model: z.enum(['free', 'freemium', 'paid', 'enterprise']),
price: z.number().optional(),
currency: z.string().optional(),
}),
screenshots: z.array(z.string()),
ratings: z.object({
average: z.number(),
count: z.number(),
}),
compatibility: z.object({
minVersion: z.string(),
maxVersion: z.string().optional(),
}),
});File: src/system/manifest.zod.ts (enhance)
dependencies: z.record(z.object({
version: z.string().describe('Semver range (e.g., "^1.0.0")'),
optional: z.boolean().default(false),
peer: z.boolean().default(false).describe('Peer dependency'),
})),File: src/system/plugin-permissions.zod.ts (new)
OAuth-style scopes for plugin security:
object.read:accountobject.write:*api.external:*user.email
File: src/system/extension.zod.ts (new)
Allow plugins to add fields to existing objects without modifying core.
File: src/system/hooks.zod.ts (new)
Define extension points:
beforeObjectCreateafterRecordSaveonPageRenderonMenuBuild
File: src/system/context.zod.ts (new)
Detailed ctx object available to all plugin code.
File: src/system/tenant.zod.ts (new)
Tenant isolation, shared vs isolated data models.
File: src/system/workspace.zod.ts (new)
Environment separation (dev/staging/prod), metadata versioning.
File: src/system/gateway.zod.ts (new)
Rate limiting, throttling, caching, CORS.
File: src/system/service-mesh.zod.ts (new)
Microservice communication patterns, service discovery.
File: src/system/events.zod.ts (new)
Pub/sub event definitions, event routing.
File: src/system/realtime.zod.ts (new)
WebSocket/SSE event streaming, presence detection.
Goal: Meet enterprise compliance, security, and operational requirements.
- ✅ Basic policy schema
- ✅ Territory management
- ✅ Role-based access control
- Advanced Security - Field-level encryption, PII masking
- Compliance Framework - GDPR, HIPAA, SOC2 configuration
- Data Retention Policy - Archival rules, purge schedules
- Sandbox/Clone Protocol - Environment cloning
- Change Management - Deployment pipeline, change sets
- Version Control Integration - Git-based metadata tracking
- Dependency Analysis - Impact analysis for schema changes
- Performance Monitoring - APM, metrics, logging
- SLA/Quota Management - Resource limits, throttling
- Disaster Recovery - Backup, restore, failover
- Cross-org Data Sharing - B2B data exchange
Goal: Make ObjectStack the most AI-friendly platform for software generation.
- ✅ Basic agent schema
- AI Model Registry - LLM configuration, prompt templates
- RAG Pipeline Schema - Vector DB, embedding configuration
- AI Training Data Protocol - Dataset management
- Recommendation Engine - Collaborative filtering
- Predictive Analytics - ML model deployment
- Natural Language Query - NLQ to AST transformation
- AI Workflow Automation - Intelligent process suggestions
- Anomaly Detection - Pattern recognition
- Sentiment Analysis - Text analysis pipeline
- AI Governance - Model versioning, A/B testing
Goal: Make ObjectStack a joy to use for developers.
- ✅ TypeScript type inference from Zod
- ✅ Basic documentation site
- ✅ Example CRM application
- ✅ Example TODO application
- CLI Tool Specification - Command schemas for
objectstack-cli - IDE Extension Protocol - LSP, autocomplete, validation
- Test Framework - Unit test, integration test helpers
- Mock Data Generator - Faker integration
- Performance Benchmarks - Schema validation benchmarks
- Migration Assistant - Schema diff, upgrade paths
- VS Code Extension - Syntax highlighting, snippets
- GraphQL Schema Generation - Auto-generate from Object definitions
- OpenAPI/Swagger Generation - REST API documentation
- SDK Generation - Multi-language clients (Python, Go, Java)
- Debugging Protocol - Trace, inspect metadata execution
Goal: Enable ObjectStack to integrate with existing enterprise systems.
- ✅ Basic datasource schema
- Mobile App Protocol - React Native component mapping
- Desktop App Protocol - Electron/Tauri configuration
- Web Components - Framework-agnostic UI components
- Salesforce Adapter - SOQL to AST mapping
- ServiceNow Adapter - GlideRecord compatibility
- SAP Integration - RFC/BAPI connector schema
- Microsoft Dynamics - CRM entity mapping
- Slack/Teams Integration - Bot command schemas
- Excel/Google Sheets - Spreadsheet sync protocol
- Email Provider - SendGrid, AWS SES configuration
- Payment Gateway - Stripe, PayPal integration
- IoT Device Protocol - MQTT, sensor data ingestion
Goal: Ensure ObjectStack can handle billions of records and thousands of concurrent users.
- Caching Strategy - Redis, CDN configuration
- Database Sharding - Horizontal partitioning
- Read Replica - Load balancing
- Connection Pooling - Database connection management
- Lazy Loading Protocol - On-demand field resolution
- Pagination Standards - Cursor vs offset pagination
- Bulk Operation Optimization - Batch size, parallelism
- Index Strategy - Composite index recommendations
- Query Optimization - Cost-based query planning
- Asset CDN Protocol - Static file serving
Goal: Provide world-class documentation that makes ObjectStack accessible to all.
- ✅ Basic concept docs (manifesto, architecture, terminology)
- ✅ API reference generation
- ✅ Getting started guide
- ✅ Project structure guide
- Complete Specification Docs - Deep dive for each protocol layer
- Migration Guides - Version upgrade documentation
- Best Practice Guides - Enterprise patterns, anti-patterns
- Video Tutorials - Recorded walkthroughs
- Interactive Playground - Browser-based schema editor
- Case Studies - Real-world implementations
- Performance Guidelines - Optimization recommendations
- Security Checklist - Hardening guidelines
- Accessibility Standards - WCAG compliance guide
- Internationalization Guide - Multi-language setup
- Implement Field Widget Contract (
src/ui/widget.zod.ts) - Implement Plugin Lifecycle Interface (
src/system/plugin.zod.ts) - Implement Driver Interface (
src/system/driver.zod.ts) - Implement Trigger Context Protocol (
src/data/trigger.zod.ts) - Add tests for all new protocols
- Update documentation
- Add aggregation support to Query Protocol
- Add join support to Query Protocol
- Implement cross-field validation
- Implement async validation framework
- Add enhanced field types (location, richtext, code)
- Generate complete OpenAPI/GraphQL schemas
- Build interactive documentation playground
- Create comprehensive code examples
- Add mock data generator for testing
- Improve test coverage to 80%+
- Protocol Completeness: All critical P0-P2 protocols defined (Target: 100% by Q2 2026)
- Test Coverage: All schemas have comprehensive tests (Target: 80%+)
- Documentation Quality: Every schema has examples and use cases
- Community Adoption: 10+ external plugins built on the protocol (Target: Q3 2026)
- Performance: Schema validation < 1ms for typical objects
- Enterprise Readiness: Support for 1000+ objects, 10M+ records per table
This roadmap is a living document. Contributions are welcome:
- Propose New Protocols: Open an issue with the
protocol-proposallabel - Prioritization Input: Comment on existing roadmap items
- Implementation: Pick an item and submit a PR
Contact: ObjectStack Core Team
Repository: https://github.com/objectstack-ai/spec