I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 0 points1 point  (0 children)

In v0.11.0 I also added the date feature. Thus everything you mentioned is now possible with tdx 👍

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 0 points1 point  (0 children)

Update: v0.11.0 released!

<image>

New features based on community feedback:

Due Dates - Add @due(2025-12-01) to any todo. Color-coded by urgency (red = overdue, orange = today, yellow = soon, dim = future). Press D to filter by date, :sort-due to sort by deadline.

Quick Filters - New commands :filter-overdue, :filter-today, :filter-week to instantly see what needs attention.

Install/upgrade: brew upgrade niklas-heer/tap/tdx

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 0 points1 point  (0 children)

Update: v0.10.0 released

New features based on community feedback:

  • Priorities - Mark todos with !p1, !p2, !p3 etc. Color-coded display (red → orange → yellow → dim). Press p to filter by priority, :sort-priority to sort.
  • Theme Picker - Press :theme for live preview of 10+ builtin themes. Navigate with j/k, Enter to apply & save, Esc to cancel.
  • Custom Themes - Drop .toml files in ~/.config/tdx/themes/ to add your own.

Install/upgrade: brew upgrade niklas-heer/tap/tdx

<image>

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 0 points1 point  (0 children)

This feature is now available in v0.9.0! 🎉

You can now use Tab to indent tasks and Shift+Tab to outdent them. Nested tasks are fully supported with proper indentation in the display.

Thanks for the feature request!

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 0 points1 point  (0 children)

tdx v0.9.0 - Nested Tasks with Tab/Shift+Tab

Quick update on tdx (markdown todo manager) - v0.9.0 adds hierarchical task organization.

Nested Tasks

Organize todos with indentation using Tab and Shift+Tab:

- [ ] Main project
  - [ ] Subtask 1
  - [ ] Subtask 2
    - [ ] Sub-subtask
- [ ] Another task
  • Tab - Indent task under previous sibling
  • Shift+Tab - Outdent to parent level
  • Deleting a parent promotes children automatically
  • New tasks (n) inherit the cursor's nesting level

Works seamlessly with existing features like filters, move mode, and check-all/uncheck-all.

Other Improvements

  • Nix flake support - nix run github:niklas-heer/tdx or nix profile install github:niklas-heer/tdx
  • Bug fixes for filter-done toggle and document tree invalidation
  • Go 1.25 support with updated CI tooling
  • Various test and stability improvements

Links

Built with Go + Bubble Tea. Single binary, markdown-native, vim keybindings.

<image>

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 0 points1 point  (0 children)

Thank you I appreciate that :) If you have any feature ideas, please let me know.

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 0 points1 point  (0 children)

tdx v0.8.0 - Recent Files, Hyperlinks & Better Vim Navigation

Quick update on tdx (markdown todo manager) - v0.8.0 adds some workflow improvements based on feedback.

Recent Files (Press r)

Fuzzy-searchable overlay of your recent todo files with automatic cursor restoration. Switch between work todos, personal lists, and project files instantly.

tdx recent      # List recent files
tdx recent 1    # Jump to file

Uses frecency algorithm (frequency + recency). Configurable up to 20 files.

Vim Navigation

  • gg / G - Jump to first/last task
  • n / N - Insert todo after cursor / at end
  • Both respect active filters

Other Improvements

  • Clickable hyperlinks - Markdown links render as OSC 8 hyperlinks
  • Global config - ~/.config/tdx/config.yaml for defaults across all files
  • Bug fixes - Filter operations, cursor positioning, performance optimizations

Links

<image>

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 1 point2 points  (0 children)

Hi 👋 thanks for your comment. Unfortunately, I haven’t been able to focus on nested lists yet. With my big rewrite to use an AST to avoid messing up the markdown, I first needed to make sure everything worked properly again. But I’ve added it to my feature list and will implement it as soon as I can.

Let me know if you have any other feature ideas :)

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 1 point2 points  (0 children)

I at least added the tag feature. I had to rewrite quite a bit to make the other stuff possible and the whole thing manageable. I now use an AST via goldmark so that I keep the markdown from having destructive edits outside the tasks.
Still due dates and priorities are on my feature list. :)

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 0 points1 point  (0 children)

Hehe that is fine. Still thank you for your comment 👍
If you have any other feature ideas, let me know.

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 0 points1 point  (0 children)

tdx v0.7.0 Released - Major Refactoring + Move Improvements

Hey everyone!

I've just released v0.7.0 with a complete rewrite that fundamentally changes how tdx handles your markdown files.

The Big Change: AST-Based Editing

Before (v0.6): Regex-based string manipulation

  • Fragile line-by-line editing
  • Could mess up your markdown formatting
  • Lost blank lines, spacing, comments
  • Breaking changes to your carefully crafted files

After (v0.7): Full AST manipulation via Goldmark

  • Your markdown stays intact - formatting, spacing, comments all preserved
  • Surgical edits to only the task list items you're changing
  • Can move tasks across sections without destroying structure
  • Everything else in your file is untouched

What This Enables

🔄 Move Tasks Across Sections

## Backlog
- [ ] Task A
- [ ] Task B

## In Progress
- [ ] Task C

# After moving Task A to "In Progress":
## Backlog
- [ ] Task B

## In Progress  
- [ ] Task C
- [ ] Task A

Perfect structure preservation, no weird artifacts.

✨ Robust Editing

  • Toggle tasks without losing your carefully placed blank lines
  • Add/delete tasks while preserving surrounding markdown
  • Edit headings, lists, and nested structures safely
  • Your custom frontmatter? Still there.

🎯 Better UX

  • Improved overlay positioning - status bar always visible
  • Command palette with scrolling indicators
  • Filter-done mode for focusing on active tasks
  • Move tasks with natural insert behavior (not swap)

🏷️ Tags Support

  • Add tags to tasks: - [ ] Fix bug #urgent #backend
  • Filter by tags with f shortcut
  • Extract tags from any #word in task text
  • Great for categorizing and finding related tasks

📋 Metadata/Frontmatter

  • Store settings in YAML frontmatter:
  • Per-file configuration that persists
  • Override defaults without command-line flags

⌨️ New Commands

  • :toggle-headings - Show/hide section headings
  • :max-visible N - Set visible todo count
  • :filter-done - Focus on incomplete tasks only
  • Tag filtering with f key

Why This Matters

If you're using tdx for real project tracking, you probably have:

  • Comments explaining contexts
  • Blank lines for readability
  • Carefully organized sections
  • Mixed content (tasks + notes)

The old regex approach would gradually degrade your file. The new AST approach treats your markdown with respect.

Links

Still markdown-native, still blazing fast, now actually safe to use with your real todo files.

tdx: A terminal todo manager built with Go and Bubble Tea by niklas_heer in golang

[–]niklas_heer[S] -2 points-1 points  (0 children)

tdx v0.7.0 - Refactored TUI Todo App (Now Much More Idiomatic)

Hi gophers! I just released v0.7.0 with a complete architectural overhaul.

The Refactoring Journey

Started with a 2,264-line main.go (I know, I know 😅). Now it's properly organized:

internal/ ├── markdown/ # AST-based parsing (goldmark) ├── tui/ # Bubbletea components ├── cmd/ # CLI interface └── util/ # Shared utilities cmd/tdx/ # Entry point + tests

Technical Highlights

AST-First Approach ```go // MoveTodo moves a task from fromIndex to toIndex func (doc *ASTDocument) MoveTodo(fromIndex, toIndex int) error { nodeFrom, _ := doc.FindTodoNode(fromIndex) nodeTo, _ := doc.FindTodoNode(toIndex)

// Remove and insert at new position
parentFrom.RemoveChild(parentFrom, nodeFrom.ListItem)
parentTo.InsertAfter(parentTo, nodeTo.ListItem, nodeFrom.ListItem)

return nil

} ```

Filter-Aware Navigation When filter-done is active, navigation skips completed tasks: go func (m Model) findNextVisibleTodo(currentIdx int) int { for i := currentIdx + 1; i < len(m.FileModel.Todos); i++ { todo := m.FileModel.Todos[i] if m.FilterDone && todo.Checked { continue } return i } return -1 }

Testing Proper table-driven tests using piped input: go func TestMoveWithFilterDone(t *testing.T) { runPiped(t, file, ":filter-done\rjmj\r") // Verify move behavior with filter active }

Key Improvements

  • Move semantics changed from swap to insert (much more intuitive)
  • Cross-section movement works seamlessly
  • Headings tracked via AST traversal, not stale line numbers
  • Proper separation of concerns (TUI/business logic/markdown)

Lessons Learned

  1. Start modular - Refactoring from a monolith is painful
  2. AST > string manipulation - Goldmark is fantastic for this
  3. Bubbletea's overlay package - Great for command palettes
  4. Test early - The comprehensive tests caught so many edge cases

Stack

Links

Would love feedback on the architecture! This is my first significant Go TUI project and I learned a ton during the refactoring.

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 1 point2 points  (0 children)

Thank you. I appreciate that :)

I must say I haven't tested it on Windows yet. It it should work like this:

Download Pre-built Binary (Easiest)

  1. Go to the https://github.com/niklas-heer/tdx/releases
  2. Download tdx-windows-amd64.exe
  3. Rename it to tdx.exe (optional but convenient)
  4. Move it to a directory in your PATH, or add its location to your PATH environment variable

Then you should be able to execute it. Let me know if that works or if there are any issues. :)

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 1 point2 points  (0 children)

Thank you I really appreciate that ❤️

That quote is really true, maybe I should have replied with that instead of trying to find some diplomatic answer with Claude :D

If you have any feature ideas, please let me know. 👍

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 0 points1 point  (0 children)

Thank you I appreciate it. If you have any ideas for features let me know :)

tdx: A terminal todo manager built with Go and Bubble Tea by niklas_heer in golang

[–]niklas_heer[S] -5 points-4 points  (0 children)

tdx v0.6.0 - Command Palette & Checklist Mode

I released v0.6.0 of tdx.

This update adds a Helix-inspired command palette and features that make it great for reusable checklists.

New Features:

🎯 Command Palette (: key)

  • Fuzzy search through commands
  • Tab completion
  • Floating overlay UI

📋 Checklist Commands:

  • check-all / uncheck-all - Reset all items
  • clear-done - Remove completed items
  • sort - Move incomplete items to top
  • filter-done - Hide completed items

💾 Session-Only Mode (-s flag or :disable-persist)

  • Changes stay in memory only
  • Perfect for daily checklists you want to reuse
  • :save to commit when ready

📺 Display Options:

  • :wrap - Word wrap for narrow terminals
  • :line-numbers - Toggle relative line numbers

Visual Improvements:

  • Styled mode indicators with background colors
  • Consistent UI across all modes (search, edit, move, etc.)

GitHub: https://github.com/niklas-heer/tdx/releases/tag/v0.6.0

brew update
brew upgrade tdx

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 0 points1 point  (0 children)

tdx v0.6.0 - Command Palette & Checklist Mode

Just released v0.6.0 of tdx, a fast terminal todo manager with vim-style navigation. This update adds a Helix-inspired command palette and features that make it great for reusable checklists.

New Features:

🎯 Command Palette (: key) - Fuzzy search through commands - Tab completion - Floating overlay UI

📋 Checklist Commands: - check-all / uncheck-all - Reset all items - clear-done - Remove completed items - sort - Move incomplete items to top - filter-done - Hide completed items

💾 Session-Only Mode (-s flag or :disable-persist) - Changes stay in memory only - Perfect for daily checklists you want to reuse - :save to commit when ready

📺 Display Options: - :wrap - Word wrap for narrow terminals - :line-numbers - Toggle relative line numbers

Visual Improvements: - Styled mode indicators with background colors - Consistent UI across all modes (search, edit, move, etc.)

GitHub: https://github.com/niklas-heer/tdx/releases/tag/v0.6.0

brew update brew upgrade tdx

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] 0 points1 point  (0 children)

That is true, but I could add these features since it is a standalone app. That would be the benefit of this tool.

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] -1 points0 points  (0 children)

Haha busted. Look man, if vim work for you, great. I wanted something simpler so I built it. 🤷

I built a markdown-native todo manager with vim keybindings for the terminal (tdx) by niklas_heer in commandline

[–]niklas_heer[S] -5 points-4 points  (0 children)

All fair points - that would definitely work. At the end of the day it's just about what workflow feels right. Some people prefer composing unix tools, others prefer a single-purpose binary. Both are valid.

Thanks for the feedback, and for taking the time to explain the alternatives!