mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 21:19:01 +01:00 
			
		
		
		
	
		
			
				
	
	
	
		
			6.3 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			6.3 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 NX, 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 nx run server:serve- Alternative server start commandpnpm nx run desktop:serve- Run desktop Electron apppnpm run server:start-prod- Run server in production mode
Building
pnpm nx build <project>- Build specific project (server, client, desktop, etc.)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 nx test <project>- Run tests for specific projectpnpm coverage- Generate coverage reports
Linting & Type Checking
pnpm nx run <project>:lint- Lint specific projectpnpm nx run <project>:typecheck- Type check specific project
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:
nx.json- NX workspace configurationpackage.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 NX for monorepo management with build caching
 - Vite for fast development builds
 - ESBuild for production optimization
 - pnpm workspaces for dependency management
 - Docker support with multi-stage builds