JynJyn Docs

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:

FeaturePurpose
Due datesDate-based task tracking and overdue detection
RecurrenceRRULE-based repeating tasks (daily, weekly, custom patterns)
Personal projectsThematic 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

AspectJoyJyn
WorkspaceMultiple per user (one per team)One per user (personal)
ProjectsFuture multi-product groupingThematic: Personal, Sport, etc.
Item typesepic, story, task, bug, rework, decision, ideaAlways "task"
RecurrenceNot supportedRRULE-based repeating tasks
Due datesNot a core featureFirst-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.yaml

The 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.