Entities
Entity System#
Trilium's data model is based on five core entities:
graph TD
Note[Note<br/>BNote]
Branch[Branch<br/>BBranch]
Attribute[Attribute<br/>BAttribute]
Revision[Revision<br/>BRevision]
Attachment[Attachment<br/>BAttachment]
Note -->|linked by| Branch
Note -.->|metadata| Attribute
Branch -->|creates| Revision
Note -->|has| Attachment
style Note fill:#e1f5ff
style Branch fill:#fff4e1
style Attribute fill:#ffe1f5
style Revision fill:#f5ffe1
style Attachment fill:#ffe1e1Entity Definitions#
1. BNote (apps/server/src/becca/entities/bnote.ts)
- Represents a note with title, content, and metadata
- Type can be: text, code, file, image, canvas, mermaid, etc.
- Contains content via blob reference
- Can be protected (encrypted)
- Has creation and modification timestamps
2. BBranch (apps/server/src/becca/entities/bbranch.ts)
- Represents parent-child relationship between notes
- Enables note cloning (multiple parents)
- Contains positioning information
- Has optional prefix for customization
- Tracks expansion state in tree
3. BAttribute (apps/server/src/becca/entities/battribute.ts)
- Key-value metadata attached to notes
- Two types: labels (tags) and relations (links)
- Can be inheritable to child notes
- Used for search, organization, and scripting
- Supports promoted attributes (displayed prominently)
4. BRevision (apps/server/src/becca/entities/brevision.ts)
- Stores historical versions of note content
- Automatic versioning on edits
- Retains title, type, and content
- Enables note history browsing and restoration
5. BAttachment (apps/server/src/becca/entities/battachment.ts)
- File attachments linked to notes
- Has owner (note), role, and mime type
- Content stored in blobs
- Can be protected (encrypted)
6. BBlob (apps/server/src/becca/entities/bblob.ts)
- Binary large object storage
- Stores actual note content and attachments
- Referenced by notes, revisions, and attachments
- Supports encryption for protected content
Widget-Based UI#
The frontend uses a widget system for modular, reusable UI components.
Located at: apps/client/src/widgets/
// Widget Hierarchy
BasicWidget
├── NoteContextAwareWidget (responds to note changes)
│ ├── RightPanelWidget (displayed in right sidebar)
│ └── Type-specific widgets
├── Container widgets (tabs, ribbons, etc.)
└── Specialized widgets (search, calendar, etc.)Base Classes:
- BasicWidget (
basic_widget.ts)- Base class for all UI components
- Lifecycle: construction → rendering → events → destruction
- Handles DOM manipulation
- Event subscription management
- Child widget management
- NoteContextAwareWidget (
note_context_aware_widget.ts)- Extends BasicWidget
- Automatically updates when active note changes
- Accesses current note context
- Used for note-dependent UI
- RightPanelWidget
- Widgets displayed in right sidebar
- Collapsible sections
- Context-specific tools and information
Type-Specific Widgets:
Each note type has a dedicated widget, which are located in apps/client/src/widgets/type_widgets.