mirror of
https://github.com/zadam/trilium.git
synced 2025-10-03 03:57:44 +08: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