← All extensions

PlainTasks

v0.1.0 · by Chris Seelus · added 3 November 2026

Todo list management with syntax highlighting, interactive code actions to toggle task states, automatic timestamps, and tag completion.

LanguagesLanguage servers

How to install

With Forge Super installed, the button above opens the app on this extension, where you press Install. Nothing is installed until you do.

You can also open the Extensions panel in the app and search for PlainTasks. The extension's id is plaintasks.

Don't have Forge Super yet? Download it here.

README

From the extension's repository, written by its authors and not by Mentenaz. See the source.

PlainTasks for Zed

A Zed extension for managing todo lists with syntax highlighting and interactive task management. Inspired by Todo+ for VSCode and PlainTasks for Sublime Text.

Features

  • ✅ Syntax highlighting for .todo, .tasks, and .taskpaper files
  • ✅ Interactive task management via Language Server Protocol
  • ✅ Code actions to toggle task states (Done/Cancelled/Pending)
  • ✅ Automatic timestamps when marking tasks complete
  • ✅ Tag completion - type @ to see suggestions
  • ✅ Project outline - navigate between projects via symbol picker
  • ✅ Priority tags with special colors (@critical, @high, @today, @low)

Quick Start

1. Install the Extension

Search for "PlainTasks" in the Zed extensions panel (Cmd+Shift+X).

2. Set Up Keybindings (Required!)

Zed extensions cannot automatically add keybindings - you need to configure them manually.

Open your keymap (Cmd+K, Cmd+S or Zed → Settings → Open Keymap) and add:

Standard Keybindings
[
  {
    "context": "Editor && language == Todo",
    "bindings": {
      "alt-d": "editor::ToggleCodeActions",
      "alt-c": "editor::ToggleCodeActions"
    }
  }
]
  • Alt+D: Toggle task (Done/Pending)
  • Alt+C: Toggle task or Mark as Cancelled
Vim Mode Keybindings
[
  {
    "context": "Editor && language == Todo && VimControl && !VimWaiting && !menu",
    "bindings": {
      "+": ["workspace::SendKeystrokes", "o ☐ escape"],
      "=": "editor::ToggleCodeActions",
      "ctrl-m": "editor::ToggleCodeActions"
    }
  }
]
  • + (normal mode): Create new task
  • = (normal mode): Toggle Done/Pending
  • Ctrl+M (normal mode): Mark as Cancelled

💡 Tip: The LSP automatically applies the most relevant action based on context, so pressing = directly toggles tasks without showing a menu!

For more keybinding options, see KEYBINDINGS.md.

Usage

Task Management

Put your cursor on a task and use code actions (or your configured keybindings):

Current StateActionResult
☐ TaskMark as Done✔ Task @done(25-12-31 00:30)
☐ TaskMark as Cancelled✘ Task @cancelled(25-12-31 00:30)
✔ Task @done(...)Revert to Pending☐ Task
✘ Task @cancelled(...)Revert to Pending☐ Task

Tag Completion

Type @ and you'll see suggestions for:

  • Common tags: @today, @high, @medium, @low, @critical
  • Time tags: @done, @cancelled, @started, @est, @lasted
  • Any tags you've already used in the document

File Format

Project Name:
  ☐ Pending task @today
  ✔ Completed task @done(25-01-18 14:30)
  ✘ Cancelled task @cancelled(25-01-18 15:00)
  
  Notes and comments without a symbol
  
  Sub Project:
    ☐ Nested task @high @est(2h)

Archive:
  ✔ Old completed task @done(25-01-17 09:00)

Screenshot

PlainTasks screenshot

Supported File Extensions

  • .todo, .todos
  • .task, .tasks
  • .taskpaper

How It Works

PlainTasks uses two components:

  1. Tree-sitter Grammar: Provides syntax highlighting and project outline
  2. Language Server (LSP): Provides interactive features like code actions and tag completion

The LSP server (plaintasks-lsp) runs automatically when you open a .todo file.

Development

Prerequisites

  • Rust installed via rustup (required by Zed for extension development)
  • The wasm32-wasip1 target for building the extension

Quick Start

# 1. Setup (one-time)
make setup

# 2. Build and install LSP server
make install-lsp

# 3. Build extension for development
make dev-extension

# 4. Install in Zed
# Open Zed → Extensions (Cmd+Shift+X) → Install Dev Extension → Select this directory

Build Commands

make help              # Show all available commands
make setup             # Install Rust targets and check dependencies
make build             # Build extension (debug) + LSP server
make build-release     # Build extension (release) + LSP server
make install-lsp       # Build and install LSP to ~/.cargo/bin/
make dev-extension     # Build everything for dev extension use
make clean             # Remove all build artifacts

Manual Building

If you prefer not to use the Makefile:

# Install the wasm32-wasip1 target
rustup target add wasm32-wasip1

# Build the extension
cargo build --release --target wasm32-wasip1
ln -sf target/wasm32-wasip1/release/plaintasks.wasm extension.wasm

# Build and install the LSP server
cd lsp
cargo build --release
cp target/release/plaintasks-lsp ~/.cargo/bin/

Project Structure

  • src/extension.rs - Zed extension (WASM component)
  • lsp/ - Language Server Protocol implementation (native binary)
  • grammars/todo/ - Tree-sitter grammar (separate repo: tree-sitter-todo)
  • languages/todo/ - Language configuration

Troubleshooting

Code actions not working?

  • Make sure you've added keybindings to your keymap.json
  • Check that the file has a .todo extension
  • Try restarting Zed (Cmd+Q and reopen)

Tag completion not showing?

  • Type @ and wait a moment
  • Check if Copilot or other completion providers are overriding it
  • Try pressing Ctrl+Space to manually trigger completion

LSP not starting?

  • Check Zed's logs: tail -f ~/Library/Logs/Zed/Zed.log | grep plaintasks
  • Reinstall the extension

Contributing

Contributions are welcome! Please feel free to submit issues or pull requests.

Roadmap

  • Tree-sitter grammar with syntax highlighting
  • Language Server Protocol implementation
  • Code actions for task state management
  • Tag completion
  • Project outline support
  • Archive functionality (move completed tasks)
  • Create new task command
  • Statistics view (task counts, time tracking)

License

MIT

Acknowledgments