Hey everyone,
I wanted to share a tool I’ve been working on called Caudata
.
Quick Install: curl -fsSL https://raw.githubusercontent.com/quaywin/caudata/main/install.sh | sh

Why I built this
My main frustration was tailing Docker and system logs across multiple remote servers. I always ended up opening a bunch of terminal tabs, SSH-ing into each box, and running docker logs -f manually.
Web-based dashboards like Portainer or Dozzle are great, but they require installing agents, setting up web servers, or exposing Docker sockets on the remote hosts, which I wanted to avoid for security and maintenance reasons.
Caudata is a local TUI tool that reads your existing ~/.ssh/config profiles, logs into your servers, auto-discovers running Docker containers/systemd services, and streams their logs into a single terminal window. Zero configuration or agents required on the target servers.
What it does
- Flexible Authentication: It parses your
~/.ssh/configfile to connect automatically using your private keys. If you need to connect to a new host manually, it also supports adding connections with custom hostname, username, and password credentials securely via an in-app modal. - Auto-discovery & reconnects: Automatically detects running Docker containers (and systemd services) and reconnects the log streams if a container restarts or rebuilds.
- TUI visual copy: You can press
vto enter visual select mode in the log pane and copy lines directly to your system clipboard withy. - Server metrics: Displays basic CPU, RAM, and Disk usage for each server on the sidebar.
- Single-binary distribution: Packaged with Burrito, so users can download and run it without needing Elixir or Erlang installed on their machine.
Some technical notes on the Elixir/OTP stack
Using Elixir for a CLI/TUI utility was a great experience, and a few things really stood out:
- Erlang’s
:sshmodule is a hidden gem: I didn’t need to wrap any SSH CLI binaries or pull in heavy dependencies. Erlang’s native:sshand:ssh_sftphandle secure connections and stream multiplexing perfectly. Each server connection maps nicely to a supervised GenServer. - ex_ratatui: TUI rendering is powered by
@mcass19’sex_ratatui(Rust’s Ratatui bindings via Rustler). It brings LiveView-like ergonomics to terminal rendering. - Web rendering in dev mode: During local development, I used
phoenix_ex_ratatuito render the TUI directly in the browser via LiveView. It made debugging UI layouts and sizing much faster. - Self-upgrades with Burrito: The release is bundled into a single file. We also wrote a quick
caudata upgradecommand that checks GitHub releases, downloads the target-specific binary, and swaps it in-place.
The project is still in its early stages. I’d love to hear your feedback on the OTP architecture, codebase structure, or the TUI UX.
Check out the repo here:






















