<img src="assets/icon.png" width="32" align="left" alt="" / todoke
<p align="center" <img src="assets/logo.svg" width="560" alt="todoke — rule-driven file dispatcher" / </p
<p align="center" <bA rule-driven file dispatcher that hands incoming paths to the right editor or script — <i届け</i.</b </p
<p align="center" <a href="https://crates.io/crates/todoke"<img src="https://img.shields.io/crates/v/todoke.svg" alt="crates.io"/</a <a href="https://github.com/yukimemi/todoke/actions"<img src="https://github.com/yukimemi/todoke/actions/workflows/ci.yml/badge.svg" alt="CI"/</a <a href="./LICENSE"<img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License: MIT"/</a <a href="https://deepwiki.com/yukimemi/todoke"<img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"/</a <a href="https://codewiki.google/github.com/yukimemi/todoke"<img src="https://img.shields.io/badge/View-CodeWiki-4285F4?logo=google" alt="View Code Wiki"/</a </p
todoke takes one or more file paths and decides what to do with each of them — by regex-matching the path against a TOML ruleset. A rule can target a long-running neovim (reused via msgpack-RPC), any generic CLI editor, or a raw shell script. Perfect as your OS default program for text files, as $EDITOR, or as a standalone file handler.
Features
- Rule-based routing: regex patterns in TOML decide what handles each
file. Different paths → different handlers (VSCode for one project, nvim for another, a shell script for a third).
- Single-instance neovim via named pipes / unix sockets: todoke
connects to a running nvim and sends :edit over msgpack-RPC. Works on Windows via \\.\pipe\... — no Deno, no plugin framework, no cold start.
- Sync or async per rule: sync = true blocks until the handler exits
(perfect for git commit), sync = false fires and forgets (perfect for double-clicking files in the OS file explorer).
- Tera templating throughout the config: {{ filepath }},
{{ env.HOME }}, {% if iswindows() %}…{% endif %}, structural conditionals that include whole editor / rule blocks, every Tera filter.
- Generic CLI support: any command-line tool works (code, vim,
helix, subl, emacsclient, bat, pandoc, …) without custom code.
- Fast: static Rust binary, cold start in milliseconds.