mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 11:39:01 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			152 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 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 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
 | |
| - 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 | 
