Skip to content

Storage Backends

Wylie Standage-Beier edited this page Dec 8, 2025 · 1 revision

Storage Backends

TaskFlow supports multiple storage backends for flexibility.


Available Backends

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

JSON Backend (Default)

Human-readable JSON format.

File Location

~/.local/share/taskflow/tasks.json

Example Format

{
  "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"
    }
  ]
}

Pros

  • Human-readable
  • Easy to edit manually
  • Portable across systems
  • Good for small to medium task lists

Cons

  • Slower with very large datasets
  • No concurrent access protection

YAML Backend

YAML format for human-friendly editing.

Enabling YAML

taskflow --backend yaml

Or in config:

[storage]
backend = "yaml"

File Location

~/.local/share/taskflow/tasks.yaml

Example Format

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

Pros

  • Very human-readable
  • Easy manual editing
  • Good for version control diffs
  • Configuration file familiarity

Cons

  • Whitespace-sensitive
  • Slightly slower parsing than JSON

SQLite Backend

Database storage for large task lists.

Enabling SQLite

taskflow --backend sqlite

Or in config:

[storage]
backend = "sqlite"

File Location

~/.local/share/taskflow/tasks.db

Pros

  • Excellent performance
  • Handles large datasets (10,000+ tasks)
  • ACID transactions
  • Concurrent access support

Cons

  • Not human-readable
  • Requires SQLite tools to inspect
  • Binary format

When to Use

  • Large task collections
  • Performance-critical workflows
  • Multi-instance access needs

Markdown Backend

Plain text Markdown format.

Enabling Markdown

taskflow --backend markdown

Or in config:

[storage]
backend = "markdown"

File Location

~/.local/share/taskflow/tasks.md

Example Format

# Tasks

## Work

- [ ] Complete report !high due:2025-12-20 #work #urgent
- [x] Review PR #code

## Personal

- [ ] Buy groceries due:today
- [ ] Call mom sched:saturday

Pros

  • Version control friendly
  • Editable with any text editor
  • Portable and universal format
  • Great for Git-based workflows

Cons

  • Limited metadata support
  • Manual editing may lose some data
  • Parsing complexity

Best For

  • Git-tracked task lists
  • Simple workflows
  • Obsidian/Logseq integration

Choosing a Backend

Decision Guide

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

Switching Backends

Export Then Import

  1. Export current data:

    Ctrl+e → Export CSV
    
  2. Change backend in config

  3. Restart TaskFlow

  4. Import data:

    Ctrl+i → Import CSV
    

Direct Conversion

TaskFlow doesn't directly convert between backends. Use export/import.


Data Location

All backends store data in:

~/.local/share/taskflow/

Override with:

taskflow --data-dir /path/to/data

Or in config:

[storage]
data_dir = "/path/to/data"

Backup Recommendations

JSON/YAML/Markdown

Regular file backup:

cp ~/.local/share/taskflow/tasks.json ~/backup/

SQLite

Use SQLite backup:

sqlite3 ~/.local/share/taskflow/tasks.db ".backup ~/backup/tasks.db"

Automated Backup

Add to crontab:

0 * * * * cp ~/.local/share/taskflow/tasks.* ~/backup/taskflow/

Performance Comparison

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

Tips

  1. Start with JSON - Default is fine for most users
  2. Switch to SQLite - If you have 1000+ tasks
  3. Use Markdown - For Git-tracked workflows
  4. Backup regularly - Regardless of backend

See Also

Clone this wiki locally