mirror of
https://github.com/zadam/trilium.git
synced 2025-10-26 07:46:30 +01:00
5.8 KiB
5.8 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Overview
Trilium Notes is a hierarchical note-taking application with advanced features like synchronization, scripting, and rich text editing. It's built as a TypeScript monorepo using pnpm, with multiple applications and shared packages.
Development Commands
Setup
pnpm install- Install all dependenciescorepack enable- Enable pnpm if not available
Running Applications
pnpm run server:start- Start development server (http://localhost:8080)pnpm run server:start-prod- Run server in production mode
Building
pnpm run client:build- Build client applicationpnpm run server:build- Build server applicationpnpm run electron:build- Build desktop application
Testing
pnpm test:all- Run all tests (parallel + sequential)pnpm test:parallel- Run tests that can run in parallelpnpm test:sequential- Run tests that must run sequentially (server, ckeditor5-mermaid, ckeditor5-math)pnpm coverage- Generate coverage reports
Architecture Overview
Monorepo Structure
-
apps/: Runnable applications
client/- Frontend application (shared by server and desktop)server/- Node.js server with web interfacedesktop/- Electron desktop applicationweb-clipper/- Browser extension for saving web content- Additional tools:
db-compare,dump-db,edit-docs
-
packages/: Shared libraries
commons/- Shared interfaces and utilitiesckeditor5/- Custom rich text editor with Trilium-specific pluginscodemirror/- Code editor customizationshighlightjs/- Syntax highlighting- Custom CKEditor plugins:
ckeditor5-admonition,ckeditor5-footnotes,ckeditor5-math,ckeditor5-mermaid
Core Architecture Patterns
Three-Layer Cache System
- Becca (Backend Cache): Server-side entity cache (
apps/server/src/becca/) - Froca (Frontend Cache): Client-side mirror of backend data (
apps/client/src/services/froca.ts) - Shaca (Share Cache): Optimized cache for shared/published notes (
apps/server/src/share/)
Entity System
Core entities are defined in apps/server/src/becca/entities/:
BNote- Notes with content and metadataBBranch- Hierarchical relationships between notes (allows multiple parents)BAttribute- Key-value metadata attached to notesBRevision- Note version historyBOption- Application configuration
Widget-Based UI
Frontend uses a widget system (apps/client/src/widgets/):
BasicWidget- Base class for all UI componentsNoteContextAwareWidget- Widgets that respond to note changesRightPanelWidget- Widgets displayed in the right panel- Type-specific widgets in
type_widgets/directory
API Architecture
- Internal API: REST endpoints in
apps/server/src/routes/api/ - ETAPI: External API for third-party integrations (
apps/server/src/etapi/) - WebSocket: Real-time synchronization (
apps/server/src/services/ws.ts)
Key Files for Understanding Architecture
-
Application Entry Points:
apps/server/src/main.ts- Server startupapps/client/src/desktop.ts- Client initialization
-
Core Services:
apps/server/src/becca/becca.ts- Backend data managementapps/client/src/services/froca.ts- Frontend data synchronizationapps/server/src/services/backend_script_api.ts- Scripting API
-
Database Schema:
apps/server/src/assets/db/schema.sql- Core database structure
-
Configuration:
package.json- Project dependencies and scripts
Note Types and Features
Trilium supports multiple note types, each with specialized widgets:
- Text: Rich text with CKEditor5 (markdown import/export)
- Code: Syntax-highlighted code editing with CodeMirror
- File: Binary file attachments
- Image: Image display with editing capabilities
- Canvas: Drawing/diagramming with Excalidraw
- Mermaid: Diagram generation
- Relation Map: Visual note relationship mapping
- Web View: Embedded web pages
- Doc/Book: Hierarchical documentation structure
Development Guidelines
Testing Strategy
- Server tests run sequentially due to shared database
- Client tests can run in parallel
- E2E tests use Playwright for both server and desktop apps
- Build validation tests check artifact integrity
Scripting System
Trilium provides powerful user scripting capabilities:
- Frontend scripts run in browser context
- Backend scripts run in Node.js context with full API access
- Script API documentation available in
docs/Script API/
Internationalization
- Translation files in
apps/client/src/translations/ - Supported languages: English, German, Spanish, French, Romanian, Chinese
Security Considerations
- Per-note encryption with granular protected sessions
- CSRF protection for API endpoints
- OpenID and TOTP authentication support
- Sanitization of user-generated content
Common Development Tasks
Adding New Note Types
- Create widget in
apps/client/src/widgets/type_widgets/ - Register in
apps/client/src/services/note_types.ts - Add backend handling in
apps/server/src/services/notes.ts
Extending Search
- Search expressions handled in
apps/server/src/services/search/ - Add new search operators in search context files
Custom CKEditor Plugins
- Create new package in
packages/following existing plugin structure - Register in
packages/ckeditor5/src/plugins.ts
Database Migrations
- Add migration scripts in
apps/server/src/migrations/ - Update schema in
apps/server/src/assets/db/schema.sql
Build System Notes
- Uses pnpm for monorepo management
- Vite for fast development builds
- ESBuild for production optimization
- pnpm workspaces for dependency management
- Docker support with multi-stage builds