Architecture
Jyn's internal architecture - crate structure, data model, and integrations.
Crate Structure
Jyn is built on top of Joy's shared library. The jyn-core crate extends joy-core with personal task features like recurring tasks and due dates. The jyn-cli crate provides the user-facing command-line interface.
What jyn-core Adds
Jyn extends the base Joy item model with features specific to personal task management:
| Feature | Purpose |
|---|---|
| Due dates | Date-based task tracking and overdue detection |
| Recurrence | RRULE-based repeating tasks (daily, weekly, custom patterns) |
| Personal projects | Thematic grouping for personal use (Personal, Sport, Work) |
Data Model
Jyn uses a simplified version of the Joy data model. Every Jyn workspace is personal (one per user), and all items are always of type "task".
Key Differences from Joy
| Aspect | Joy | Jyn |
|---|---|---|
| Workspace | Multiple per user (one per team) | One per user (personal) |
| Projects | Future multi-product grouping | Thematic: Personal, Sport, etc. |
| Item types | epic, story, task, bug, rework, decision, idea | Always "task" |
| Recurrence | Not supported | RRULE-based repeating tasks |
| Due dates | Not a core feature | First-class with overdue tracking |
Configuration
Jyn has its own config layer on top of joy-core. Two YAML files are merged at load time with the project-local layer winning over the personal global layer, and both winning over built-in code defaults:
code defaults < ~/.config/jyn/config.yaml < ./.jyn/config.yamlThe schema is strict (serde(deny_unknown_fields) at every level),
so jyn config set validates the merged file before writing and
rejects typos instead of silently persisting them. Config resolution
lives in jyn-core::config and is consumed by jyn-cli to gate
library-level features - starting with the joy-core fortune output
via the output.fortune and output.fortune-category keys.
Integrations
Jyn connects to external systems through the Joyint platform and can receive tasks dispatched from Joy.
Integration Details
- Git - All data is stored as YAML in
.jyn/and versioned with Git, same as Joy. - CalDAV - The platform exposes Jyn tasks via CalDAV for sync with calendar and reminder apps.
- Apple Reminders - Tasks sync through CalDAV. Due dates and completion status stay in sync.
- Google Calendar - Tasks appear as calendar entries through CalDAV integration.
- Joy dispatch - Team leads can dispatch tasks from a Joy backlog to individual Jyn inboxes.