Overview
Node models are defined inpackages/core/src/registry/nodes/ and consist of:
- Attribute schema (Zod validation)
- Permission handlers (create, update, delete, react)
- Text extraction (for search)
- Mention extraction (for @mentions)
Step-by-step guide
Define the node model
Create a new file in
packages/core/src/registry/nodes/. Each node model must implement the NodeModel interface.packages/core/src/registry/nodes/task.ts
Register the node type
Add your node model to the registry in
packages/core/src/registry/nodes/index.ts:packages/core/src/registry/nodes/index.ts
Add database migrations
Create migrations for both server (PostgreSQL) and client (SQLite) databases.Server migration (Client migration (
apps/server/src/data/migrations/):packages/client/src/databases/migrations/):Permission patterns
Brainbox uses a role-based permission system with three levels:- admin: Full control (create, update, delete)
- member: Can create and edit content
- viewer: Read-only access
Common permission patterns
Document support
To enable rich text editing for your node type, add a document schema:Text extraction for search
TheextractText method makes node content searchable:
Mention extraction
If your node supports @mentions, implementextractMentions:
Next steps
After creating your node model:- Create mutations in
packages/client/src/mutations/for create/update/delete operations - Add UI components in
packages/ui/src/components/ - Create API routes in
apps/server/src/api/client/routes/ - Add commands if needed in
packages/client/src/commands/
File locations
- Node models:
packages/core/src/registry/nodes/[type].ts - Type exports:
packages/core/src/registry/nodes/index.ts - Server migrations:
apps/server/src/data/migrations/ - Client migrations:
packages/client/src/databases/migrations/