Tamarix maps Matrix's decentralized Room/Space model onto task management. Every task is a Matrix Room, every project a Matrix Space. Data lives on the Matrix federation -- no proprietary backend required -- with built-in support for real-time collaboration, cross-server federation, and end-to-end encryption.
Matrix is an open standard for decentralized, real-time communication.
It provides:
- End-to-end encrypted messaging -- secure conversations by default
- Federated architecture -- no single point of control or failure
- Interoperability -- bridges to other chat platforms (Slack, Discord, IRC, etc.)
- VoIP and video calls -- built-in voice and video support
- Rich messaging -- reactions, threads, file sharing, and more
Learn more at matrix.org.
- Real-time collaboration -- Built on the Matrix sync protocol; every change is pushed instantly
- Federated communication -- Users on different homeservers can collaborate on the same tasks
- End-to-end encryption -- Task content is protected by Matrix E2EE (Olm/Megolm)
- Open protocol -- Any Matrix client can participate; no vendor lock-in
- Workflow validation -- Customizable task status transition rules, enforced by Matrix power levels
- Board view -- Drag-and-drop sorting, within-column ordering, bulk operations
- Reports & charts -- Burndown charts, trend charts, status distribution, version progress
- Approval flow -- Approval mechanism based on Matrix reactions
Custom State Events -- the com.tamarix.* namespace
| Event Type | Purpose |
|---|---|
com.tamarix.task_status |
Task status (todo / in_progress / review / done / closed) |
com.tamarix.priority |
Priority (critical / high / medium / low) |
com.tamarix.task_type |
Task type (bug / feature / task / improvement / epic) |
com.tamarix.due_date |
Due date |
com.tamarix.estimate |
Time estimate / Story points |
com.tamarix.tags |
Tags |
com.tamarix.ticket_id |
Ticket ID (e.g. TAM-42) |
com.tamarix.assignee |
Assignee |
com.tamarix.relation |
Task relation (blocks / duplicates / subtask_of) |
com.tamarix.task_archived |
Archive flag |
com.tamarix.description |
Rich-text description (Markdown) |
com.tamarix.worklog |
Worklog entries |
com.tamarix.version |
Project version definition |
com.tamarix.task_version |
Task-version association |
com.tamarix.watcher |
Task watchers |
com.tamarix.notification_prefs |
Notification preferences |
com.tamarix.sprint_meta |
Sprint metadata |
com.tamarix.template |
Task templates |
com.tamarix.custom_field_defs |
Custom field definitions |
com.tamarix.custom_field_values |
Custom field values |
com.tamarix.approval |
Approval status |
com.tamarix.sort_order |
Manual sort order |
com.tamarix.external_links |
External links |
com.tamarix.git_config |
Git integration config |
com.tamarix.integration |
Third-party integration config |
Architecture Mermaid Diagram (collapsible)
graph TB
subgraph External["外部系统"]
MatrixHS["Matrix Homeserver<br/>Rooms / Spaces / Sync / E2EE"]
end
subgraph Tamarix["Tamarix 应用"]
Frontend["Frontend SPA<br/>SvelteKit 2 + Svelte 5 Runes + TS"]
subgraph Routes["页面路由"]
R1["login /"]
R2["register /"]
R3["invite /"]
R4["dashboard /"]
R5["project/[id]<br/>列表 / 看板 / 筛选"]
R6["project/[id]/task/[taskId]<br/>详情 + 多标签页"]
R7["project/[id]/settings /"]
R8["project/[id]/reports /"]
R9["search /"]
R10["settings /"]
end
subgraph UI["UI 层"]
Layout["App Shell<br/>Header + Sidebar"]
TaskUI["Task Components<br/>TaskCard / ListView / Board / Dialog..."]
ProjectUI["Project Components<br/>Header / FilterToolbar / GitConfig..."]
DashboardUI["Dashboard Components<br/>BurndownChart / TeamWorkloadCard..."]
CommonUI["Common Components<br/>MatrixAvatar / TaskIdBadge / Palette..."]
end
subgraph State["状态层 - Svelte 5 Runes"]
AuthStore["Auth Store<br/>login / restore / logout"]
ProjectsStore["Projects Store<br/>project list / fetchProjects"]
TasksStore["Tasks Store<br/>task CRUD / bulkUpdate / cache"]
CommentsStore["Comments Store"]
NotificationsStore["Notifications Store"]
UIStore["UI Store<br/>sidebar / theme / palette"]
end
subgraph Matrix["Matrix 层 - matrix-js-sdk"]
ClientManager["Client Manager<br/>lifecycle + sync"]
TaskRepo["Task Repository<br/>room to Task mapping"]
ProjectRepo["Project Repository<br/>Space to Project mapping"]
StatePrimitives["State Primitives<br/>send / get state events"]
SyncManager["Sync Manager<br/>debounced listeners"]
TimelineBus["Timeline Bus<br/>live comments"]
Workflow["Workflow<br/>status transitions"]
Search["Search<br/>full-text"]
DueChecker["Due Checker"]
NotificationsSvc["Notifications Svc"]
Integrations["Git / External Links<br/>Custom Fields / Approvals<br/>Worklog / Templates"]
end
end
subgraph Domain["领域模型 - TypeScript interfaces"]
Task["Task<br/>roomId / ticketId / status / priority / type<br/>dueDate / estimate / tags / assignee<br/>sortOrder / archived..."]
Project["Project<br/>roomId / name / description / taskCount"]
Comment["Comment"]
Attachment["Attachment"]
Worklog["WorklogEntry"]
Version["VersionInfo"]
Integration["IntegrationInfo"]
Notification["Notification"]
Template["TaskTemplate"]
CustomField["CustomFieldDefinition / Value"]
Approval["ApprovalConfig"]
ExternalLink["ExternalLink"]
GitConfig["GitConfig"]
end
Frontend --> MatrixHS
Matrix --> MatrixHS
Matrix --> SSO
Matrix --> Git
Frontend --> Routes
Frontend --> UI
Frontend --> State
State --> UI
State --> Matrix
Matrix --> Domain
Task --> Project
Task --> Comment
Task --> Attachment
Task --> Worklog
Task --> Version
Task --> Integration
Task --> Template
Task --> CustomField
Task --> Approval
Task --> ExternalLink
Task --> GitConfig
MatrixHS -->|"Space"| Project
MatrixHS -->|"Room"| Task
MatrixHS -->|"com.tamarix.* events"| Task
MatrixHS -->|"Timeline Msg"| Comment
For the full Firmiana-series architecture diagrams, see Firmiana Clover.
| Layer | Technology |
|---|---|
| Framework | SvelteKit 2 + Svelte 5 (runes mode) |
| Language | TypeScript (strict) |
| Styling | Tailwind CSS v4 (CSS-based config) + tailwind-variants (tv()) |
| UI Library | shadcn-svelte (Nova style) + bits-ui primitives |
| Icons | @lucide/svelte |
| Data Layer | matrix-js-sdk -- task data as Matrix room state events (com.tamarix.*) |
| Runtime / PM | Bun |
| Testing | Vitest + Playwright |
| Code Quality | ESLint + Prettier + svelte-check + Husky + lint-staged |
| Requirement | Recommendation |
|---|---|
| Node.js | 18+ |
| OS | Linux / macOS / Windows (WSL2) |
| Homeserver | Palpo |
# Install dependencies
bun install
# Start the dev server
bun run dev
# Type checking
bun run check
# Production build
bun run build && bun run previewsrc/
lib/
components/ # UI components (board, task, project, dashboard, ...)
stores/ # Svelte 5 rune-based stores ($state / $derived)
matrix/ # Matrix SDK integration (auth, client, search, workflow, ...)
i18n/ # Internationalization
routes/ # SvelteKit file-based routing
dashboard/ # Main task board
project/[id]/ # Project views & settings
search/ # Full-text search
settings/ # App settings
| Command | Description |
|---|---|
bun run dev |
Start development server |
bun run build |
Production build |
bun run preview |
Preview production build |
bun run check |
Type checking (svelte-check) |
bun run lint |
Run ESLint |
bun run lint:fix |
Auto-fix lint + format issues |
bun run format |
Format all files with Prettier |
bun run format:check |
Check formatting without modifying |
bun run test |
Run unit tests (Vitest) |
bun run test:watch |
Watch-mode unit tests |
bun run storybook |
Start Storybook |
Palpo -- Next-generation Matrix Homeserver written in Rust.
Matrix JavaScript SDK -- The Matrix Client-Server SDK for JavaScript and TypeScript.
Supported by Upstream Labs.
firmiana -- A local-first Matrix homeserver built on Micronaut 4.10.1 and GraalVM JDK 21.
honeysuckle -- A production-grade multi-agent financial compliance audit system built on the Matrix IM protocol.
Issues and pull requests are welcome. Please open an issue first to discuss what you would like to change. See CONTRIBUTING.md for development setup, code conventions, and the PR process.
This project is licensed under the MIT License.

