-
Notifications
You must be signed in to change notification settings - Fork 0
Storage Backends
Wylie Standage-Beier edited this page Dec 8, 2025
·
1 revision
TaskFlow supports multiple storage backends for flexibility.
| Backend | Format | Best For |
|---|---|---|
| JSON | .json |
Default, portable, human-readable |
| YAML | .yaml |
Human-editable, configuration-friendly |
| SQLite | .db |
Large datasets, performance |
| Markdown | .md |
Version control, text-based workflows |
Human-readable JSON format.
~/.local/share/taskflow/tasks.json
{
"tasks": [
{
"id": "abc123",
"title": "Complete report",
"status": "todo",
"priority": "high",
"due_date": "2025-12-20",
"tags": ["work", "urgent"],
"project_id": "proj-1"
}
],
"projects": [
{
"id": "proj-1",
"name": "Work",
"color": "blue"
}
]
}- Human-readable
- Easy to edit manually
- Portable across systems
- Good for small to medium task lists
- Slower with very large datasets
- No concurrent access protection
YAML format for human-friendly editing.
taskflow --backend yamlOr in config:
[storage]
backend = "yaml"~/.local/share/taskflow/tasks.yaml
tasks:
- id: abc123
title: Complete report
status: todo
priority: high
due_date: 2025-12-20
tags:
- work
- urgent
project_id: proj-1
projects:
- id: proj-1
name: Work
color: blue- Very human-readable
- Easy manual editing
- Good for version control diffs
- Configuration file familiarity
- Whitespace-sensitive
- Slightly slower parsing than JSON
Database storage for large task lists.
taskflow --backend sqliteOr in config:
[storage]
backend = "sqlite"~/.local/share/taskflow/tasks.db
- Excellent performance
- Handles large datasets (10,000+ tasks)
- ACID transactions
- Concurrent access support
- Not human-readable
- Requires SQLite tools to inspect
- Binary format
- Large task collections
- Performance-critical workflows
- Multi-instance access needs
Plain text Markdown format.
taskflow --backend markdownOr in config:
[storage]
backend = "markdown"~/.local/share/taskflow/tasks.md
# Tasks
## Work
- [ ] Complete report !high due:2025-12-20 #work #urgent
- [x] Review PR #code
## Personal
- [ ] Buy groceries due:today
- [ ] Call mom sched:saturday- Version control friendly
- Editable with any text editor
- Portable and universal format
- Great for Git-based workflows
- Limited metadata support
- Manual editing may lose some data
- Parsing complexity
- Git-tracked task lists
- Simple workflows
- Obsidian/Logseq integration
| Scenario | Recommended |
|---|---|
| Starting out | JSON (default) |
| Manual editing | YAML or Markdown |
| Large task list (1000+) | SQLite |
| Git version control | Markdown |
| Team shared file | SQLite |
| Obsidian integration | Markdown |
-
Export current data:
Ctrl+e → Export CSV -
Change backend in config
-
Restart TaskFlow
-
Import data:
Ctrl+i → Import CSV
TaskFlow doesn't directly convert between backends. Use export/import.
All backends store data in:
~/.local/share/taskflow/
Override with:
taskflow --data-dir /path/to/dataOr in config:
[storage]
data_dir = "/path/to/data"Regular file backup:
cp ~/.local/share/taskflow/tasks.json ~/backup/Use SQLite backup:
sqlite3 ~/.local/share/taskflow/tasks.db ".backup ~/backup/tasks.db"Add to crontab:
0 * * * * cp ~/.local/share/taskflow/tasks.* ~/backup/taskflow/| Backend | 100 tasks | 1,000 tasks | 10,000 tasks |
|---|---|---|---|
| JSON | Instant | Fast | Noticeable |
| YAML | Instant | Fast | Noticeable |
| SQLite | Instant | Instant | Fast |
| Markdown | Instant | Fast | Slower |
- Start with JSON - Default is fine for most users
- Switch to SQLite - If you have 1000+ tasks
- Use Markdown - For Git-tracked workflows
- Backup regularly - Regardless of backend
- Import-Export - Moving data between formats
- Configuration - Backend settings
- CLI-Options - Command line backend selection