131 lines
4.3 KiB
Markdown
131 lines
4.3 KiB
Markdown
# Orkmode Vision
|
|
|
|
## The Problem
|
|
|
|
Org-mode is exceptional for structured thinking, task management, and knowledge work. But it's trapped in Emacs.
|
|
|
|
Existing alternatives fall short:
|
|
- **Organice** (web): Clunky, slow, limited offline
|
|
- **Orgzly** (Android): Mobile-only, sync issues
|
|
- **VS Code extensions**: No proper AST, just syntax highlighting
|
|
- **Logseq/Obsidian**: Different formats, not org-mode
|
|
|
|
None of these integrate with the Linux desktop. None feel native.
|
|
|
|
## The Goal
|
|
|
|
A native KDE application for org-mode that:
|
|
- Parses org files correctly (tree-sitter AST, not regex)
|
|
- Renders beautifully (Qt/QML, not web views)
|
|
- Edits efficiently (keyboard-driven, Emacs-inspired bindings)
|
|
- Syncs reliably (file-based, works with Syncthing/git)
|
|
- Integrates with KDE (notifications, calendar, search)
|
|
|
|
## Non-Goals
|
|
|
|
- Replace Emacs for power users
|
|
- Support every org-mode feature on day one
|
|
- Build a "second brain" or "PKM" system
|
|
- Cloud/SaaS anything
|
|
|
|
## Design Principles
|
|
|
|
**1. Files are truth**
|
|
Org files on disk are the source of truth. No database. No proprietary format. Edit with Emacs, vim, or orkmode interchangeably.
|
|
|
|
**2. Parse properly**
|
|
Use tree-sitter for a real AST. No regex hacks. Handle malformed files gracefully with error recovery.
|
|
|
|
**3. Keyboard-first**
|
|
Every action reachable by keyboard. Mouse optional. Emacs-inspired bindings where sensible.
|
|
|
|
**4. Desktop-native**
|
|
Use Qt/QML. Respect system themes. Integrate with KDE services (KRunner, Akonadi calendar, notifications).
|
|
|
|
**5. CLI for automation**
|
|
The `ork` CLI enables scripting, agent integration, and headless workflows.
|
|
|
|
## Architecture
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────┐
|
|
│ Qt/QML UI │
|
|
│ (document view, agenda, capture, search) │
|
|
├─────────────────────────────────────────────────┤
|
|
│ orkmode-core (Rust) │
|
|
│ (document ops, queries, mutations, sync) │
|
|
├─────────────────────────────────────────────────┤
|
|
│ org-parser (Rust) │
|
|
│ (tree-sitter AST, incremental parsing) │
|
|
├─────────────────────────────────────────────────┤
|
|
│ org-ast (Rust) │
|
|
│ (type definitions, spans, serialization) │
|
|
└─────────────────────────────────────────────────┘
|
|
↑ ↑
|
|
C FFI for Qt CLI (ork)
|
|
```
|
|
|
|
## Milestones
|
|
|
|
### v0.1 — Parser & CLI (current)
|
|
- [x] Tree-sitter parser integration
|
|
- [x] Core AST types
|
|
- [x] CLI for querying and basic mutations
|
|
- [x] JSON output for tooling
|
|
|
|
### v0.2 — Read-only UI
|
|
- [ ] Qt/QML document viewer
|
|
- [ ] Headline folding/cycling
|
|
- [ ] Syntax highlighting
|
|
- [ ] Basic navigation
|
|
|
|
### v0.3 — Editing
|
|
- [ ] Inline text editing
|
|
- [ ] TODO state cycling
|
|
- [ ] Tag editing
|
|
- [ ] Property editing
|
|
- [ ] Undo/redo
|
|
|
|
### v0.4 — Agenda
|
|
- [ ] Agenda view (day/week)
|
|
- [ ] TODO list view
|
|
- [ ] Tag/property filtering
|
|
- [ ] Scheduled/deadline display
|
|
|
|
### v0.5 — KDE Integration
|
|
- [ ] KRunner plugin (search headlines)
|
|
- [ ] System notifications for deadlines
|
|
- [ ] Akonadi calendar integration
|
|
- [ ] Global capture hotkey
|
|
|
|
### Future
|
|
- Code block execution
|
|
- Diagram rendering (mermaid, plantuml)
|
|
- Table formula evaluation
|
|
- Capture templates
|
|
- Clock/time tracking
|
|
- Mobile companion (Kirigami)
|
|
|
|
## Why Rust + Qt?
|
|
|
|
**Rust** for the parser/core:
|
|
- Memory safety without GC
|
|
- Excellent tree-sitter bindings
|
|
- Easy C FFI for Qt integration
|
|
- Fast incremental parsing
|
|
|
|
**Qt/QML** for the UI:
|
|
- Native KDE integration
|
|
- Powerful text rendering (QTextDocument)
|
|
- Declarative UI with QML
|
|
- Cross-platform if needed later
|
|
|
|
## Contributing
|
|
|
|
See AGENTS.md for AI-assisted development workflow.
|
|
|
|
The codebase is designed for agent collaboration:
|
|
- CLI with JSON output for programmatic access
|
|
- Clear module boundaries
|
|
- Comprehensive type definitions
|