Documentation
Build on a deterministic infrastructure runtime.
Architecture references, API contracts, and module development guides for teams building high-trust products on top of Altason.
Documents
6
Sections
2
Primary Audience
Systems builders
Documentation
Architecture references, API contracts, and module development guides for teams building high-trust products on top of Altason.
Documents
6
Sections
2
Primary Audience
Systems builders
Developers
How to build submit-ready modules for the marketplace.
This guide defines what an external developer must build to submit a module to the BusinessOS marketplace.
The submission system will be built later. These rules are enforced now to keep the platform consistent and secure.
Every module must support two operational layers:
projectAdminNavigation: injects links under Project Modules in the project sidebarprojectAdminPages: pages mounted under /p/:slug/modules/:moduleId/...projectAdminApiRoutes: APIs mounted under /api/projects/:projectId/modules/:moduleId/...Backoffice pages must:
context.projectId and context.projectSlug)sitePages: pages mounted under the project host (internally rewritten to /site/...)siteApiRoutes: authenticated end-user APIs mounted under /api/site/modules/:moduleId/...siteNavigation: end-user header navigation links (the platform header renders them)End-user pages must:
SiteModulePageProps.context)All module data must be tenant-scoped:
tenant_id UUID NOT NULLproject_id UUID NOT NULL REFERENCES projects(id)tenant_id = current_tenant_id()app_userwithTenantProjectQuery(...) where project context existswithTenantQuery(...)getAdminDb() in module runtime codeproject_id for project-facing dataAll module admin APIs must declare explicit access levels.
projectAdminApiRoutes must set minimumRoleapiRoutes, each of those route entries must also set minimumRoleminimumRole: 'member' for read/list/view endpointsminimumRole: 'admin' for create/update/delete/publish/configure endpointsminimumRole: 'owner' only for tenant-critical operationspermissions aligned with route intent, but treat minimumRole as the enforcement sourceminimumRole (legacy only), permission suffixes must be one of:
read|list|view|write|create|update|delete|publish|manage|admin|configure
Unknown suffixes fail closed with ROUTE_PERMISSION_CONFIG_ERRORIf the module is monetized:
payments-corebg-surface*, border-border, text-content*)text-site-* and bg-site-* tokensDo not build new modules around /dashboard.
If you must support legacy projects:
metadata.siteDashboardSectionssiteApiRouteswithTenantProjectQuery/withTenantQuery (no raw privileged client)projectAdminApiRoutes entry sets explicit minimumRoleapiRoutes entries (if present) set explicit minimumRolesiteNavigation correctlysite-section, site-container, and --site-* tokensdown scriptspnpm lint:module-migrations (no missing RLS, no unscoped tables)metadata.requiredSiteCapabilities declares every site theme capability the module needs (typed as ModuleSiteThemeCapability[], sourced from the MODULE_SITE_THEME_CAPABILITIES constant exported by @v2/modules)registerModule())pnpm --filter @v2/modules exec tsc --noEmit