quaywin

quaywin

Hey everyone,

I wanted to share a tool I’ve been working on called Caudata :lizard:.

Quick Install: curl -fsSL https://raw.githubusercontent.com/quaywin/caudata/main/install.sh | sh

Caudata TUI Demo

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/config file 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 v to enter visual select mode in the log pane and copy lines directly to your system clipboard with y.
  • 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:

  1. Erlang’s :ssh module is a hidden gem: I didn’t need to wrap any SSH CLI binaries or pull in heavy dependencies. Erlang’s native :ssh and :ssh_sftp handle secure connections and stream multiplexing perfectly. Each server connection maps nicely to a supervised GenServer.
  2. ex_ratatui: TUI rendering is powered by @mcass19’s ex_ratatui (Rust’s Ratatui bindings via Rustler). It brings LiveView-like ergonomics to terminal rendering.
  3. Web rendering in dev mode: During local development, I used phoenix_ex_ratatui to render the TUI directly in the browser via LiveView. It made debugging UI layouts and sizing much faster.
  4. Self-upgrades with Burrito: The release is bundled into a single file. We also wrote a quick caudata upgrade command 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:

Showing Posts 1 to 4

dimitarvp

dimitarvp

Oh wow, this is great. I’ll use it.

quaywin

quaywin OP

Glad you like it :slight_smile: !

ghannam80

ghannam80

Seems like something I was looking for but I had some questions:

Can I update the tail command to filter it to content I need?

Can I configure the names and paths of log files?what if the log file is following some log rotation?

quaywin

quaywin OP

  1. No, you can not customize the raw tail command direct. However, this app has a built-in filter feature, just press / to filter logs in real time.
  2. Yes, you can add any custom log paths and it uses tail -F under the hood, which automatically tracks the file when it is rotated. Additionally, the app also support system services by picking from a list instead of typing log paths.
— All posts loaded —

Where Next? Top

Trending in Announcing Top

woylie
Flop is an Elixir library that applies filtering, ordering and pagination parameters to your Ecto queries. offset-based pagination with...
New
MRdotB
I needed to reuse React components from my Chrome extension in my Phoenix/LiveView backend. I noticed that for Svelte/Vue, there are live...
New
woylie
I released Doggo, a collection of unstyled Phoenix components. https://github.com/woylie/doggo Features Unstyled Phoenix components....
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
anuaralfetahe
Hello Published a new library - ProcessHub! ProcessHub is a library designed to manage process distribution within the Elixir cluster. ...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
webofbits
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself. My main conc...
#ai
New
sergio
It’s not that it’s vocabulary is too advanced. It’s something worse. I get lost trying to follow even a paragraph written by Claude. It’...
New
AstonJ
This showed up on my feed.. anyone heard of it? Just hype? Ox Alpha is a reasoning model designed for coding, sustained ag...
New
bartblast
Hey folks, I just published a post about Hologram’s funding and where the project goes next - the short version: Curiosum as Main Spons...
New
sorenone
Today we’re releasing Oban for Python. Not an Oban client in Python. Not a pythonx wrapper embedded in Elixir. Nope, it’s a fully operati...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews