note-cli: One Rust Binary. Every Device. Zero Subscriptions.
Every note app I tried wanted an account, a subscription, or my trust. I built note-cli instead: a Rust binary that fits in my phone, runs offline, and belongs entirely to me.
The Problem
Most personal note tools share the same trade-off: convenience in exchange for dependency. Notion needs a browser and an account. Obsidian Sync charges monthly. Apple Notes locks you to one ecosystem.
I needed notes that:
- Run identically on my laptop and my Android phone (via Termux)
- Work offline, always (no "reconnecting..." spinner)
- Cost nothing to operate
- Don't require trusting a third-party server with my thoughts
None of the tools I tried satisfied all four. So I built one that does.
What I Built
A CLI note app in Rust. Create, tag, search, and list notes, all from the terminal. No GUI. No sync daemon running in the background.
# Create a note
note new "Meeting recap: auth service redesign"
# Search by keyword
note search "auth service"
# List all notes tagged 'work'
note list --tag work
The binary is small. Rust compiles to a single native executable with no runtime dependency. Drop it on any machine and it runs. Drop it on an Android device running Termux and it runs identically, with the exact same commands.
"A tool you control is a tool you can trust. A tool someone else runs is a service with terms and conditions attached."
Why Rust
The choice wasn't about performance. Notes don't require nanosecond latency.
It was about the output: a single binary with no runtime dependencies.
| Language | Single binary | No runtime install | Termux-friendly | Binary size |
|---|---|---|---|---|
| Rust | ✓ | ✓ | ✓ | Small |
| Go | ✓ | ✓ | ✓ | Medium |
| Python | ✗ | ✗ | ✓ (heavy) | N/A |
| Node.js | ✗ | ✗ | ✓ (heavy) | N/A |
Go would have worked too. I chose Rust because I wanted to build real proficiency in it. A bounded CLI tool is a far better learning vehicle than jumping straight into a distributed system.
Running on Mobile via Termux
Termux is a terminal emulator for Android. It gives you a real Linux environment on your phone, package manager included.
# On Android + Termux
pkg install rust
cargo install --git https://github.com/username/note-cli
note new "idea I had on the commute"
No separate Android app. No React Native wrapper. The same binary, the same commands, the same behavior. The CLI is the cross-platform layer. You get it for free.

Key Design Decisions
Local storage only. Notes live on disk in a single directory. No sync server to maintain, no background process to debug, no network call on every read. When I want notes on my phone, I sync the directory manually, or don't sync at all. Either is fine.
Single binary distribution. No install script. No package manager required. Copy the binary, make it executable, run it. That's the entire installation process on any device.
CLI-first interface. Terminal commands work inside Termux without modification. A GUI would require building a separate Android app. The CLI is the interface that works everywhere with zero extra code.
The Strategy Behind It
note-cli isn't a one-off side project. It's a proof of concept for a pattern I now apply to every personal tool I build:
- Rust for the implementation
- CLI as the interface
- Single binary as the distribution format
- Local storage as the data layer
- Termux as the mobile runtime
The result is a suite of personal utilities that are fast, private, and free to operate, and that work identically across every device I own. The subscription economy for developer tools is optional if you're willing to build your own.