onyx-tasks/README.md
Claude 7bef6b07bc
docs: sync markdown docs with actual codebase state
- README.md: update Phase 4 status to reflect Android preliminaries done
  (file-watcher gating, tauri-plugin-credentials, safe area insets, Android
  targets configured) but init/build not yet run; add tauri-plugin-credentials
  to project structure; expand docs/ tree; add newer GUI features (workspace
  rename, safe area insets, accessibility); add setup screen screenshot;
  update What's Next to note Phase 4 is in progress
- PLAN.md: fix Phase 4 checkboxes — android init and build-succeeds were
  marked [x] but gen/android/ does not exist; correct cfg gate annotation
  from #[cfg(not(mobile))] to #[cfg(not(target_os = "android"))]; update
  dependency snippet to reflect actual keyring/zeroize/sha2/quick-xml usage;
  bump Last Updated to 2026-04-17
- docs/DEVELOPMENT.md: add WEBKIT_DISABLE_DMABUF_RENDERER=1 Wayland note
  to tauri dev command

https://claude.ai/code/session_01MypN7wPNqeSgw8b5DYpMc1
2026-04-17 14:44:33 +00:00

233 lines
6.5 KiB
Markdown

# Onyx
A **local-first, cross-platform tasks application** built with Rust. Inspired by Google Tasks, designed for speed and flexibility.
![Onyx setup screen](screenshot.png)
## Core Principles
- **Local-First**: Your data, your folder, your control
- **Fast**: Sub-second startup, instant response
- **Cross-Platform**: Single codebase, all platforms
- **Flexible**: Multiple workspaces for different contexts
## Project Structure
```
onyx/
├── Cargo.toml # Workspace definition
├── PLAN.md # Detailed project plan
├── README.md # This file
├── crates/
│ ├── onyx-core/ # Core library (backend)
│ └── onyx-cli/ # CLI frontend
├── apps/
│ └── tauri/ # Tauri v2 GUI (Svelte 5 + Tailwind CSS 4)
│ └── tauri-plugin-credentials/ # Cross-platform credential storage plugin
└── docs/
├── API.md # Core library API reference
└── DEVELOPMENT.md # Development guide
```
## Project Status
- **Phase 1** (Core + CLI): Complete
- **Phase 2** (WebDAV Sync): Complete — backend, CLI, and GUI all wired
- **Phase 3** (GUI MVP): Complete
- **Phase 4** (Mobile): In progress — Android preliminaries done (file-watcher gating, `tauri-plugin-credentials`, safe area insets, Android targets configured); needs `tauri android init`, build verification, and iOS setup
### Core Library (`onyx-core`)
- Data models (Task, TaskList, AppConfig, WorkspaceConfig)
- Markdown file I/O with YAML frontmatter
- Local storage with repository pattern
- Multiple workspace support
- Task ordering and grouping
- Subtask hierarchy (parent_id)
- WebDAV sync with three-way diff and offline queue
- Platform keychain credential storage (feature-gated for Android)
- Checksum-based conflict resolution (remote wins, local recovered as duplicate)
### CLI (`onyx-cli`)
- Workspace management (init, add, list, switch, remove, retarget, migrate)
- Task list management (create, show, delete)
- Task operations (add, complete, delete, edit)
- Group-by-date toggle
- WebDAV sync (setup, push, pull, status)
### GUI (`apps/tauri/`)
- Tauri v2 + Svelte 5 + Tailwind CSS 4
- Task CRUD with animated transitions
- Drag-and-drop reordering
- Sliding lists drawer, settings popup
- Workspace switcher with add/remove
- Per-workspace theme system (System default, Light, Dark, Nord, Dracula, Solarized Dark, Black and Gold, Ink)
- Due date picker/editor with optional time
- Subtask hierarchy with three-panel slide navigation
- Move tasks between lists
- List rename, workspace rename, group-by-date toggle, delete completed tasks
- Keyboard shortcuts (Escape priority chain)
- WebDAV setup flow with credential auto-population
- File watcher (auto-reloads on external changes)
- Auto-sync with configurable interval, status indicators
- Swipe gestures on mobile (swipe to toggle completion)
- Custom confirmation dialogs
- Safe area insets for mobile (viewport-fit=cover)
- Accessibility: ARIA labels/roles, keyboard handlers, `prefers-reduced-motion` support
- Desktop packaging (Linux: AppImage + .deb; Windows: MSI)
## Development Setup
### Prerequisites
- Rust 1.70+ (install from [rustup.rs](https://rustup.rs/))
- Git
- Node.js 18+ (for Tauri GUI)
### Build
```bash
# Clone and build
git clone https://github.com/SteelDynamite/onyx.git
cd onyx
cargo build
# Run tests
cargo test -p onyx-core
# Run CLI
cargo run -p onyx-cli -- --help
# Run Tauri GUI
cd apps/tauri && npm install
npm run tauri dev # (Wayland: WEBKIT_DISABLE_DMABUF_RENDERER=1 npm run tauri dev)
```
## Quick Start
### Initialize your first workspace
```bash
# Initialize a new workspace
cargo run -p onyx-cli -- init ~/Documents/Tasks --name personal
# This creates:
# - A workspace named "personal" at ~/Documents/Tasks
# - A default list called "My Tasks"
# - Sets "personal" as the current workspace
```
### Add and manage tasks
```bash
# Add a task
cargo run -p onyx-cli -- add "Buy groceries"
# Add a task with a date
cargo run -p onyx-cli -- add "Review PR #123" --list "Work" --date "2026-11-15"
# List all tasks
cargo run -p onyx-cli -- list show
# Complete a task
cargo run -p onyx-cli -- complete <task-id>
# Edit a task (opens in $EDITOR)
cargo run -p onyx-cli -- edit <task-id>
# Delete a task
cargo run -p onyx-cli -- delete <task-id>
```
### Manage workspaces
```bash
# Add another workspace
cargo run -p onyx-cli -- workspace add shared ~/Dropbox/TeamTasks
# List workspaces
cargo run -p onyx-cli -- workspace list
# Switch workspace
cargo run -p onyx-cli -- workspace switch shared
# Use specific workspace for a command
cargo run -p onyx-cli -- add "Team meeting" --workspace shared
```
### Manage task lists
```bash
# Create a new list
cargo run -p onyx-cli -- list create "Work"
# Show tasks in a specific list
cargo run -p onyx-cli -- list show --list "Work"
# Delete a list
cargo run -p onyx-cli -- list delete "Work"
```
## Data Format
Tasks are stored as markdown files with YAML frontmatter (Obsidian-compatible):
```markdown
---
id: 550e8400-e29b-41d4-a716-446655440000
status: backlog
version: 3
date: 2026-11-15T14:00:00Z
---
Task description and notes go here in **markdown** format.
- Can include lists
- Rich formatting
- Links, etc.
```
## File System Structure
```
~/Documents/Tasks/ # User-selected folder
├── .onyx-workspace.json # Workspace metadata: list ordering, detection
├── My Tasks/ # Task list folder
│ ├── .listdata.json # List metadata: task order, id, timestamps
│ ├── Buy groceries.md # Individual task files
│ └── Call dentist.md
└── Work/
├── .listdata.json
├── Review PRs.md
└── Team meeting prep.md
```
## Testing
Run the test suite:
```bash
# Run all tests
cargo test
# Run tests for specific crate
cargo test -p onyx-core
# Run tests with output
cargo test -- --nocapture
```
## What's Next?
- **Phase 4** (in progress): Complete Android build (`tauri android init` + verification), iOS setup on macOS CI
- **Phase 5**: GUI advanced features (rich markdown editor, search/filter, change storage folder)
- **Phase 6**: Mobile polish and platform-specific integrations
- **Phase 7**: Google Tasks importer and unique features
See [PLAN.md](PLAN.md) for detailed roadmap.
## License
[GNU General Public License v3.0 (GPL-3.0)](https://www.gnu.org/licenses/gpl-3.0.en.html)
This project is free and open-source software.