· 4 min read

Building TUI Apps with Rust: Feedo and Hazelnut

With some unexpected free time, I dove into Rust development and built two terminal-based applications. Here's the story behind Feedo and Hazelnut.

My family traveled abroad for a month, and suddenly I had something rare: free time. Instead of binge-watching series or scrolling endlessly, I decided to channel that energy into something I’ve been curious about for a while: Rust development.

I’ve been watching Rust from the sidelines for years. The memory safety, the community, the promise of “fearless concurrency,” all of it interested me. But between work and family life, I never found the right moment to sit down with it properly. This time I had one.

Why Rust?

As a software developer, I’ve worked with many languages over the years. JavaScript and TypeScript dominate my day job, and I’ve dabbled in Python, Go, and others. But Rust felt different. The learning curve is famously steep, but the payoff (fast, safe, reliable code) seemed worth it.

What really drew me in was the terminal ecosystem. Rust has incredible libraries for building command-line and TUI (Text User Interface) applications. Tools like ratatui make it surprisingly pleasant to create rich terminal interfaces.

Feedo: A TUI RSS Reader

The first project I tackled was Feedo, a terminal-based RSS feed reader.

I’ve always liked RSS. It’s the antidote to algorithm-driven feeds: you choose what you want to read, and that’s what you get. But most RSS readers are either web-based or clunky desktop apps. I wanted something fast, keyboard-driven, and integrated into my terminal workflow.

Feedo lets you:

  • Add and organize RSS/Atom feeds
  • Browse articles with vim-like keybindings
  • Open articles in your browser
  • Search through your feeds
  • Choose from multiple themes

Building it taught me a lot about async Rust, HTTP clients, and XML parsing. The ratatui library made the UI work enjoyable, and I’m genuinely happy with how it turned out.

Check it out: feedo.ricardodantas.me | GitHub

Hazelnut: Automated File Organization

The second project, Hazelnut, scratches a different itch. It’s inspired by Hazel, the popular macOS file automation tool.

I’ve always wanted something like Hazel, but cross-platform and terminal-based. Hazelnut watches folders and automatically organizes files based on rules you define. Downloaded a PDF? Move it to Documents. Old screenshots? Archive them. Temporary files older than 30 days? Delete them.

The architecture is split into two parts:

  • hazelnut - The TUI for managing rules and watches
  • hazelnutd - The background daemon that does the actual work

Building the daemon was particularly interesting. It uses the notify crate for cross-platform file watching (inotify on Linux, kqueue on macOS) and supports hot-reloading configuration via Unix signals.

Check it out: hazelnut.ricardodantas.me | GitHub

What I Learned

A month of this taught me more than I expected.

The compiler is strict, and it rejected my code constantly, but when something finally compiled it usually worked. I hadn’t had that kind of confidence in a while.

TUI development turned out to be the part I enjoyed most. Building an interface that runs in a terminal keeps you focused on what the thing actually does.

The month itself mattered too. A fixed block of free time created enough pressure to ship. Without it, both of these would probably still be sitting in “someday.”

And the learning curve is real, but Rust makes you think harder about your code, and some of that carried back into the languages I use at work.

What’s Next?

Both projects are open source and available on GitHub. I’ve already published them on crates.io and set up Homebrew formulas, so you can install them with a simple brew install ricardodantas/tap/feedo or brew install ricardodantas/tap/hazelnut.

There’s still plenty to improve: better documentation, more features, and refinements based on real-world usage. But for now, I’m happy to have shipped two actual tools that I use daily.

If you’re curious about Rust or TUI development, I encourage you to try building something small. The ecosystem is welcoming, the tooling is excellent, and there’s something special about seeing your creation run in the terminal.

Now I just need to figure out what to build next. 🦀