2025-07-21 19:41:29 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# CLAUDE.md
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Overview
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-09-03 18:23:47 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								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.
							 
						 
					
						
							
								
									
										
										
										
											2025-07-21 19:41:29 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Development Commands
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								### Setup
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  `pnpm install`  - Install all dependencies 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  `corepack 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 application 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  `pnpm run server:build`  - Build server application 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  `pnpm run electron:build`  - Build desktop application 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								### Testing
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  `pnpm test:all`  - Run all tests (parallel + sequential) 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  `pnpm test:parallel`  - Run tests that can run in parallel 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  `pnpm 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 interface
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  `desktop/`  - Electron desktop application
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  `web-clipper/`  - Browser extension for saving web content
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  Additional tools: `db-compare` , `dump-db` , `edit-docs` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  **packages/**: Shared libraries 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  `commons/`  - Shared interfaces and utilities
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  `ckeditor5/`  - Custom rich text editor with Trilium-specific plugins
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  `codemirror/`  - Code editor customizations
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  `highlightjs/`  - 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 metadata 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  `BBranch`  - Hierarchical relationships between notes (allows multiple parents) 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  `BAttribute`  - Key-value metadata attached to notes 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  `BRevision`  - Note version history 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  `BOption`  - Application configuration 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#### Widget-Based UI
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Frontend uses a widget system (`apps/client/src/widgets/` ):
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  `BasicWidget`  - Base class for all UI components 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  `NoteContextAwareWidget`  - Widgets that respond to note changes 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  `RightPanelWidget`  - 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
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								1.  **Application Entry Points ** : 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   -  `apps/server/src/main.ts`  - Server startup
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   -  `apps/client/src/desktop.ts`  - Client initialization
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								2.  **Core Services ** : 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   -  `apps/server/src/becca/becca.ts`  - Backend data management
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   -  `apps/client/src/services/froca.ts`  - Frontend data synchronization
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   -  `apps/server/src/services/backend_script_api.ts`  - Scripting API
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								3.  **Database Schema ** : 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   -  `apps/server/src/assets/db/schema.sql`  - Core database structure
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								4.  **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
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								1.  Create widget in `apps/client/src/widgets/type_widgets/`  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								2.  Register in `apps/client/src/services/note_types.ts`  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								3.  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
  
						 
					
						
							
								
									
										
										
										
											2025-09-03 18:23:47 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								-  Uses pnpm for monorepo management 
						 
					
						
							
								
									
										
										
										
											2025-07-21 19:41:29 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								-  Vite for fast development builds 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  ESBuild for production optimization 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  pnpm workspaces for dependency management 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  Docker support with multi-stage builds