{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreihk4wfdttuz6mrgs5uz5psvtdq2c3xbhm3arvijh2svav3jvo3dsu",
"uri": "at://did:plc:t4aigbwuwix7x3q42qzjc6mn/app.bsky.feed.post/3mpuvdp2axhl2"
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreieehsdjufgnt5zvf4kxa6epwcf7khbcyxkdkokrnu55p2eh774xxe"
},
"mimeType": "image/jpeg",
"size": 2453
},
"path": "/link/535/17372536/new-faster-na",
"publishedAt": "2026-07-04T06:53:00.000Z",
"site": "https://brett.trpstra.net",
"tags": [
"NA",
"TaskPaper",
"doing rust version",
"open an issue",
"github.com/ttscoff/na_rust",
"README Prompt hooks section",
"issues page",
"/projects/na",
"on Mastodon",
"Bluesky",
"Twitter",
"Click here if you'd like to help out.",
"Mastodon",
"GitHub",
"everywhere else",
"@na",
"@search",
"@started",
"@done"
],
"textContent": "If you use NA, you’re going to love this: the Rust rewrite is **noticeably faster** than the original Ruby gem â especially in prompt hooks, where a quick `cd` into a project shouldn’t mean waiting on a script before you get your shell back. Same commands, same TaskPaper files, less lag.\n\n### What is NA?\n\n**na** (“next action”) is a command-line tool for managing todos in plain-text TaskPaper files. The idea is simple: keep a `*.taskpaper` file in your project (or a global file for everything), tag the items you’re ready to work on with `@na`, and run `na` whenever you need to see what’s next. You can add actions from the shell, search across files, move items between projects, mark things done, archive finished work, run saved searches, and even pipe results through custom plugins â all without opening an editor. Because the data is plain text, it plays nicely with git, diff, sync, and whatever editor you already use. It’s the kind of tool that stays out of your way until you need it, and then it’s exactly what you need.\n\n### Ruby to Rust\n\nThe original **na** was a Ruby gem. It worked well, but Ruby startup time adds up â especially when a prompt hook fires on every directory change. The new version is a complete rewrite in Rust (inspired by the doing rust version by Aaron Mallen), aimed at **behavioral parity** with the Ruby tool while being faster and more reliable for daily use.\n\nFor practical purposes, think of it as **high nineties compatibility**. Every command from the Ruby version is implemented: `next`, `find`, `add`, `update`, `archive`, `saved`, `plugin`, `scan`, and the rest. `@search(...)` expressions, saved searches, time tracking with `@started` / `@done`, theme formatting, plugins, and legacy flags like `-a` / `-r` all carry over. Differential test harnesses run the Ruby and Rust binaries side by side on shared fixtures to keep output aligned.\n\nA few small differences remain:\n\n * **Interactive menus** use `inquire` instead of `fzf` / `gum` â same idea, different UI\n * **`initconfig`** doesn’t yet persist every global (`--pager`, `--color`, `--include_ext`) to `na.rc`\n * **Prompt hooks** detect your current shell automatically; the Ruby version also let you pass `bash`, `zsh`, or `fish` explicitly to `show` / `install`\n * **Nested output polish** â a handful of theme edge cases around timed nested lines\n\n\n\nIf something doesn’t match the Ruby behavior you expect, open an issue â that’s the fastest way to get it fixed.\n\n### Install\n\n\n brew tap ttscoff/thelab brew install ttscoff/thelab/na\n\nOr, if you prefer Cargo:\n\n\n cargo install na_rust\n\nSource and docs: github.com/ttscoff/na_rust\n\n### Prompt hooks\n\nThis is where the speed difference really shows. **na** can automatically display your next actions whenever you `cd` into a project directory â no remembering to run a command, no pause while a Ruby interpreter boots.\n\nInstall the hook for your shell:\n\n\n na prompt install\n\nOr preview what it will add:\n\n\n na prompt show\n\nWorks with Zsh, Bash, and Fish. If you use a global todo file, set `--cwd_as project` or `--cwd_as tag` so the hook knows how to filter actions for the current directory:\n\n\n na --global-file ~/todo.taskpaper --cwd_as project prompt install\n\nAfter installing, open a new terminal session and `cd` into a project with a `.taskpaper` file â your next actions should appear right in the prompt area. Add `-r` on the `na next` call inside the hook (or set depth in config) to recurse into subdirectories.\n\nMore detail in the README Prompt hooks section.\n\n### Bug reports and feature requests\n\nThe project lives at github.com/ttscoff/na_rust. Please file bugs and feature requests on the issues page â especially if you’re migrating from the Ruby gem and hit a compatibility gap.\n\nThe project page at /projects/na is updated to point to the Rust version as well.\n\nLike or share this post on Mastodon, Bluesky, or Twitter.\n\n* * *\n\nBrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.\n\nFind Brett on Mastodon, Bluesky, GitHub, and everywhere else.",
"title": "New, faster NA",
"updatedAt": "2026-07-04T06:53:00.000Z"
}