r/commandline
Cosmo - Real-time PostgreSQL TUI Dashboard (v0.2.0)
Just shipped Cosmo β a clean TUI to monitor your Postgres database in real-time.
Github: https://github.com/mujib77/cosmo
Live overview, active queries, WAL rate, locks, and more.
Iβm actively developing more features and older version support.
Would love your feedback and suggestions!
Back to the roots: 'Tetro TUI' is very customizable but runs purely in the terminal
As shrimple as that (apart from a gazillion terminal limitations and implementing NES style using text???) @ https://github.com/Strophox/tetro-tui :-)
Do you guys use zsh/oh-my-zsh or bash on the daily?
I was an active oh-my-zsh user for 6 years, when I began to customize my shell, and never really saw any downside. However, nowadays I see a lot of annoying parts of omz that made me switch over to bash. One thing is just copying huge curl commands or json text. With omz, it literally pauses and posts it character by character and even when I turn off the paste bracketing, it's slow af.
I switched over to bash recently and it's been identical to omz without all the bloat and buggy/slow nonsense. Additionally, it makes copying my dotfiles over to machines with only bin/bash installed much easier than setting up a z shell in every machine. What's yall's thoughts?
Raxol: Same OTP app rendering as a terminal UI, LiveView, MCP server, Telegram bot, and Watch push
Update on Raxol, an OTP-native runtime I've been building.
Raxol lets you build a TEA module (Model, Update, View, i.e. the Elm Architecture) that renders to all of these:
- A terminal UI via the Raxol VT100 emulator
- A Phoenix LiveView in the browser
- Auto-derived MCP tools for AI agents
- Telegram inline keyboards
- Apple Watch and Android push cards
- A JSON API
Raxol's update/2 doesn't care where the message came from.
A keystroke, an LLM token, a x402 response, a sensor reading: all messages. When the Telegram bridge drops, the LiveView keeps rendering. When a job in raxol_symphony crashes, the orchestrator stays up.
Agents and human-facing apps want the same shape.
The human reacts to keystrokes.
The agent reacts to LLM tokens. update/2 can't tell them apart.
e.g. Raxol.Agent is Raxol.Core.Runtime.Application with a different message source. ReAct, chain of thought, an FSM with guards: different bodies, same shape.
Per-process wallets work on the BEAM in a way they don't elsewhere. raxol_acp gives you one supervised process per ACP job, a NonceServer GenServer per wallet so concurrent jobs don't race on the nonce, and DETS-backed memo persistence so restarts resume mid-flight. Every other ACP seller is a Python script with a threading. Lock and a polling loop.
... Anyways, if you're down to clown we're open to contributions!
Otherwise lmk your ideas-- happy to collaborate.
Github: Raxol 11 of 13 packages on Hex. raxol_acp and raxol_symphony still pre-alpha.
Nerdier, wordier, write-up with the cockpit framing & where this goes: https://droo.foo/posts/raxol-terminal-for-the-gundam
My 500 bytes Forth that wants to be fun to read and hack on.
(Permalink as of this post.)
I present Nictoforth: a space-and-pedagogy-constrained art Forth. It's carefully crafted to be read top-to-bottom:
- The repo README sets the stage. Boot sector, serial IO via BIOS.
- The assembly source is packed with narrative, rationale, and cross-reference. Search for:
- "[0]" architecture if you want to dig in.
- "[5]" interpreter, the heart of a Forth.
- "[7]" the lovely straightforward compiler.
- "[8]" the extremely wacky bootstrap. It's full of character but damn dense!
- If you clone the repo you can do
make terse | bat -l nasmor| lessto cut away all the asides and just read the code. - An example demo session log. See it working.
u/s1nical posted their Milliforth fork the other day so I figured why not post mine too. It was lots of fun to write and educational besides!
Dirplot 0.5.0 β Local and remote directory treemaps, as snapshots and animations
Dirplot creates clean, squarified treemaps where rectangle area is proportional to file/folder size, with smart per-extension coloring. This started as a vibe-coding experiment to replicate the functionality of tools like GrandPerspective, but then evolved to work far beyond a local disk.
Key Features
- Supports local dirs, archives (zip/tar/7z/...), SSH, AWS S3, GitHub repos (public + private), Docker containers, Kubernetes pods, and Google Drive.
- Inline terminal display (iTerm2, Kitty, Ghostty, WezTerm, Warp), no separate image window needed, but can also open the system's image viewer.
- Git & Mercurial history animation β MP4 / APNG / MOV timelapses.
- Live watch mode + event recording + replay.
- diff between any two sources (including two git tags/commits) with color-coded added/removed/changed borders.
- dirplot metrics for detailed stats (top extensions, largest files, JSON output).
- Outputs: PNG, SVG (slightly interactive), APNG, MP4, MOV. Custom canvas size and --log-scale supported.
Quick Start
Bash
# Recommended install
uv tool install dirplot
# Basic usage
dirplot map . # current directory β opens in viewer
dirplot map . --inline # beautiful inline in terminal
dirplot map github://pallets/flask
dirplot git . -o history.mp4 # animate your repo's growth
dirplot diff . # see uncommitted changes as treemap
Usecases
- Understand large codebases or monorepos at a glance.
- Visualize cloud storage or container images without downloading everything.
- Create compelling git history growth animations.
- Compare directory versions or releses.
- Monitor live filesystem changes.
Links
- GitHub: https://github.com/deeplook/dirplot
- Documentation: https://deeplook.github.io/dirplot
Would love to get feedback and ideas for new use cases!
YT-X v0.8.0 (Browse youtube plus other yt-dlp supported sites from your terminal)
Its been sometime since i made any change to the script, had some free time and decided to go all out
The script has been rewritten improving alot of the existing features and making it easy to maintain and read.
Plus now the script introduces a ton of cmdline options, to make it easier to script and connect to keybinds
Features (from github)
π Search & Discovery
- Comprehensive Search Capabilities: Directly search for videos, playlists, channels, shorts or movies.
- Advanced Search Filters: Apply colon-prefixed quick filters directly to search queries:
- Time:
:hour,:today,:week,:month,:year - Type:
:video,:movie,:live,:short,:long - Features:
:4k,:hd,:hdr,:subtitles,:360,:vr,:3d,:local - Sort by:
:newest,:views,:rating
- Time:
- Search History & Recall: Automatically saves search history. Allows quick recall of previous searches using bang syntax (e.g.,
!1for the most recent search,!2for the second, etc.). - YouTube Feeds: Access personal feeds including the Home Feed, Trending, Watch Later, Liked Videos, Watch History, and Clips.
- Channel Browsing: Deep dive into channels with dedicated menus for Videos, Featured content, Playlists, Shorts, Live Streams, Podcasts, and Channel-specific search.
- Channel Subcommand: Jump directly into a channel from the command line (e.g.,
yt-x channels -n "Linus Tech Tips" -v) β perfect for scripting and keyboard-driven workflows.
π₯οΈ User Interface & Experience
- Dual Launcher Support: Operates flawlessly in the terminal using FZF (Fuzzy Finder) or as a graphical desktop menu using Rofi.
- Rich Media Previews: Supports inline previews for search results containing:
- High-resolution thumbnails rendered directly in the terminal via
chafa,icat,kitten icat, orimgcat. - Detailed metadata including Channel Name, Follower Count, View Count, Duration, Upload Timestamp, Live Status, and formatted descriptions.
- High-resolution thumbnails rendered directly in the terminal via
- Theming & Styling: True-color (24-bit) support with a default "Tokyo Night" inspired color scheme. Fully customizable UI formatting.
- Multi-language Support: Loadable language files (
.lang) to easily localize the UI prompts and messages. - Pagination: Smoothly browse through massive lists with Next/Previous pagination controls (fetches a configurable number of items per page, default is 30).
- Selection Skipping: New
--playlist-skip(-ps) flag forces the launcher to automatically pick the first item in any list, bypassing interactive selection β ideal for nonβinteractive scripts. - Media Action Shortcuts: Directly perform actions (play, listen, download, save, etc.) without opening the media action menu β see βMedia Action Shortcutsβ below.
π¬ Playback & Media Handling
- Multiple Player Support: Out-of-the-box integration with
mpv,vlc, andtplay. - Video & Audio Modes: Choose to "Watch" (video) or "Listen" (audio-only, launching without a video window).
- Playlist Actions: Play individual videos, queue/play entire playlists, or queue "Listen to All" for audio-only marathon sessions.
- Auto-Mix Generation: Dynamically generates
.m3u8playlist mixes based on a single video (YouTube "Mix" feature replication). - Background Playback: Option to disown the media player process (
CONFIG_DISOWN_PLAYER), allowing the UI to remain unblocked while media plays. - Media Action Shortcuts (Skip the Media Menu):
--play/--play-all: Watch selected video or whole playlist.--listen/--listen-all: Audioβonly playback.--download/--download-all: Download video(s).--download-audio/--download-audio-all: Download audio only.--save: Save current video to saved list.--save-playlist: Save current playlist to custom playlists.--shell: Drop into a stateful subshell.- Many of these (e.g.,
--play-all,--save-playlist) implicitly enable--playlist-skipfor seamless nonβinteractive operation.
πΎ Downloading & Archival
- Powered natively by
yt-dlp. - Granular Downloads: Download single videos, entire playlists, or extract audio-only (MP3 format).
- Smart Archiving: Utilizes a download archive directory to track previously downloaded media and prevent duplicate downloads.
- Organized File Structure: Automatically routes downloads into structured directories (e.g.,
video/individual/ChannelName/oraudio/PlaylistName/ChannelName/). - Enumeration Toggle: Easily toggle file prefix enumeration (
01 -,02 -) to keep downloaded playlist items in order.
π Library & Data Management
- Local Subscriptions Sync: Syncs your actual YouTube subscriptions locally by passing browser cookies to
yt-dlp, creating a private, locally stored subscription feed. - Local Watch History (Recent): Automatically tracks recently watched media in a local JSON file to resume or re-watch easily.
- Saved Videos & Playlists: Create local "Saved Videos" and "Custom Playlists" natively within the CLI without needing a YouTube account.
- Cookie Integration: Seamlessly imports cookies from installed browsers (Brave, Chrome, Firefox, Safari, Edge, etc.) to access age-restricted or account-specific content.
βοΈ Extensibility & Power User Features
- Custom Commands: Create custom macros that execute specific URLs and
yt-dlpoptions (e.g., setting up a command to browse a completely different streaming site). - Extension System: Modular architecture allowing the autoloading of custom scripts, sites, themes, and commands placed in
$HOME/.config/yt-x/extensions/. - Stateful Sub-Shell Execution: Drop into a system shell (
fishorsh) pre-loaded with the environment variables of your current session (current video title, URL, channel info, etc.) for advanced custom scripting on the fly. - Desktop Integration: Built-in command (
-E) to generate a.desktopentry file, allowingyt-xto be launched natively from application menus (Linux). - Cache Management: Automatically cleans up stale preview images, auto-generated playlists, and logs older than a configurable retention period (default 7 days).
- Direct Shortcut Flags: Skip the interactive menu entirely with dedicated flags like
--feed,--subscriptions-feed,--watch-later,--saved,--recent,--liked,--watch-history,--clips, and more β ideal for keybindings and scripting. - NonβInteractive Exit Helpers:
--cmd-exitterminates the script after executing a shortcut, while--media-exitdoes the same after any media action β perfect for oneβoff commands and aliases. - Direct Access to Saved Items: Open a specific saved video (
-sv,--saved-video), custom playlist (-cp,--custom-playlist), or custom command (-cc,--custom-cmd) without browsing menus, with tab completion in supported shells.
π οΈ Cross-Platform & Infrastructure
- OS Support: Works across Linux, macOS, Windows (via WSL/MSYS/Cygwin), and Android (uses
am startintents to open media natively in Android apps like VLC or MPV). - Configuration Management: Generates a robust
configfile automatically on first run. Allows editing configuration files directly from the UI menu. - Auto-Updater: Built-in update checker that securely pulls the latest version from GitHub and prompts the user to apply updates inline.
- Shell Completions: Generates native shell autocomplete definitions (fish, with dynamic channel name completion from
subscriptions.json, custom playlist and saved video name completion, and extension completion from~/.config/yt-x/extensions/).
The readme is mostly generated by ai due to time constraints and effort required. But it was fully involved it did most of the writing and i did the thinking and even with it it took hours. I just did not want to spend several more weeks on a readme(1000+ lines) after manually rewriting the script which is now over 4k+ lines/
Chawan 0.4.0 TUI web browser (2026-05-17)
I like w3m, but Chawan is better, has some CSS rendering and Image support OOTB. You can browse a lot more sites with this. For banking, your still need a GUI Web Browser like Firefox.
- Watch the Gallery with some pages rendered by Chawan
- Previous version (0.30) post
- It's available in many distros:
- AppImage
- Compile it is easy (I was able to do it and I'm not a programmer).
How I Take Notes In The Terminal With zk And Helix (Zettelkasten-inspired)!
In this video I explain my note-taking workflow using zk and Helix together.
I constructed a Python CLI that generates Shakespearean, corporate, Gen Z and sarcastic insults with heat scoring and rhyme detection.
Been working on a side project called Roast Machine.
It generates insults across 6 tones from the command line:
π Sarcastic β dry, deadpan, weaponised politeness
π Shakespearean β thee, thou, and ruin
πΌ Corporate β passive-aggressive office speak
π Gen Z β chaotic internet energy
π¬ Dramatic β every word is a monologue
π₯° Wholesome Savage β a hug with a knife inside
Some of my favourite outputs so far:
ββββββββββββββββββββββββββββββββββββββ
SHAKESPEAREAN β "my landlord"
Hark, thou most grievously confused boil upon the
backside of progress. Thou art like a jester who
hath forgotten the jest. Get thee to a library.
[Heat: π₯π₯π₯π₯π₯π₯π₯ 7/10]
ββββββββββββββββββββββββββββββββββββββ
CORPORATE β "whoever scheduled this meeting"
Per our last interaction, you remain a strategically
misaligned walking action item that never gets completed.
You are like a mandatory fun event nobody RSVP'd to.
I will not be following up on this.
[Heat: π₯π₯π₯π₯π₯π₯ 6/10]
ββββββββββββββββββββββββββββββββββββββ
WHOLESOME SAVAGE
I genuinely love you, which is why I must say β you
are a tenderly catastrophic golden retriever who has
wandered off the path again. You are like a Roomba
confidently stuck in a corner. But you are still my
favourite person.
[Heat: π₯π₯π₯π₯π₯ 5/10]
ββββββββββββββββββββββββββββββββββββββ
Technical bits for those interested:
β Pure Python 3.10+
β Rich terminal UI with colour panels and heat bars
β Alliteration and rhyme detection via CMU Pronouncing Dictionary
β Seeded generation β share a seed, reproduce the exact insult
β Batch export to CSV (up to 100 at once)
β Combo mode merges two tones into one hybrid insult
β No API keys, no internet required, works fully offline
β ~39KB zipped
Built the whole thing on an iPad using GitHub Codespaces.
Happy to answer questions about how any of it works.
[Help] Antigravity CLI (agy) crashing in Termux/PRoot (TCMalloc 48-bit VA error)
Hi everyone,
Iβm trying to install and run the new Antigravity CLI (agy) inside an Ubuntu PRoot environment on Termux (ARM64) Samsung Tab S8+, but I've hit a wall with a persistent memory allocation error.
Whenever I try to run agy --version, the binary crashes immediately with this error:
1 third_party/tcmalloc/internal/system_allocator.h:595] MmapAligned() failed -unable to allocate with tag ...
2 third_party/tcmalloc/internal/system_allocator.h:602] Note: the allocation may have failed because TCMalloc assumes a 48-bit virtual address space size; you may need to rebuild TCMalloc with TCMALLOC_ADDRESS_BITS defined to your system's virtual address space size
3 third_party/tcmalloc/arena.cc:61] CHECK in Alloc: FATAL ERROR: Out of memory trying to allocate internal tcmalloc data
The Problem:
It seems the binary is compiled with Google's tcmalloc, which is hard-coded to expect a 48-bit virtual address space. My Android kernel (like most) is limited to a 39-bit VA space. When tcmalloc tries to map metadata to high addresses, the kernel rejects it.
What Iβve already tried (none worked):
- Setting
PROOT_NO_SECCOMP=1before login. - Using
export TCMALLOC_SKIP_MMAP=true. - Attempting to
LD_PRELOADdifferent allocators (libc.so.6, libjemalloc.so). - Running the
x86_64version of the CLI viaqemu-x86_64(fails with the same VSS error). - Using a custom C shim to intercept
mmapcalls and strip high-address hints.
My Questions:
* Is there any way to force a pre-compiled tcmalloc binary to respect a 39-bit address space without having the source code to recompile it?
* Has anyone found a workaround for this specific "48-bit assumption" in other Google-distributed binaries (like Envoy or Bazel) when running in Termux?
* Is there a "compatible" build of agy available that I might have missed?
Any help or crazy workarounds would be much appreciated!
lazydiff β a terminal-native diff reviewer with semantic diffs, persistent notes, and 60fps rendering
Most code review tools are either a browser tab that pulls you out of your terminal or a pager that dumps colored text and forgets everything when you close it. I wanted something that stays in the terminal, remembers where I was, and actually understands what changed.
lazydiff is a keyboard-driven diff reviewer built in Rust with ratatui. Some highlights:
- Renders 10k+ line diffs at 60fps with sub-2ms frame times, virtualized scrolling, only viewport rows hit the buffer
- Tree-sitter syntax highlighting that reconstructs both sides of the diff independently so deleted code highlights correctly in its original language
- Inline word-level diffs using LCS on tokenized line pairs, highlights the exact tokens that changed, not the whole line
- Split and unified view, fuzzy file navigation powered by nucleo, vim keybindings
- Semantic diffs powered by https://github.com/Ataraxy-Labs/sem, parses changes into entity graphs of functions, classes, and methods instead of just showing lines
- Threaded comments anchored to exact lines, leave notes and instructions for your coding agents, they read and reply via CLI
- Everything persists to SQLite locally, close the terminal, come back tomorrow, pick up where you left off
Built for the workflow where you're already in the terminal working with coding agents and don't want to context-switch to a browser to review what they wrote.
User Friendly License: Dual-licensed MIT/Apache-2.0.
Open Source Repo: https://github.com/Ataraxy-Labs/lazydiff
Ratty β A terminal emulator with inline 3D graphics
In Ratty:
- your terminal cursor is a spinning rat,
- your whole terminal is a 3D canvas,
- you can insert 3D models and sprites into the terminal.
Try it out: https://ratty-term.org/
Blog post: https://blog.orhun.dev/introducing-ratty/
Demo: https://www.youtube.com/watch?v=cY9AX5j-osY
GitHub: https://github.com/orhun/ratty
tui youtube player for music with mcp and can sync channels to sqlite
Hi! it's my first project with bubble tea and lipgloss. also uses sqlite, mpv, and yt-dlp.
It plays music you curate with any agent via mcp connectors. the agent can manage and create playlist, also play and pause any songs for you. you can favorite a song or download to ~/music/tuitube/ and play it offline. there are 14 themes and 2 visualizers and the db i made ships with 8000+ songs. there are no ads as it uses yt-dlp.
there are probably other similar tui app but it's got the features that I mainly use and very easy nav imo + agent native tooling.
https://github.com/gitcoder89431/tuitube
open source with mit license, 2 releases cause i only have a linux and mac os machine. I can publish on homebrew or aur if anyone needs it. thank you for your time. π
Lazytf: a terminal UI for reviewing Terraform plans
Iβve been working on lazytf, a terminal UI for reviewing Terraform plans and apply history.
The goal is to make large Terraform plans easier to inspect locally, especially for teams that are not using Terraform Cloud but still want a cleaner diff review flow in the terminal.
It currently supports:
- running plan/apply/init/validate/format flows inside the TUI
- targeted plan and apply workflows
- read-only mode
- piping `terraform plan -no-color` into lazytf
- opening existing saved plan files
- apply history
- workspace and folder environment detection
- YAML, NixOS, and Home Manager configuration
- presets and project overrides
- Terraform and OpenTofu binary selection
- themes and lazygit-style keybindings
Github Repo: https://github.com/ushiradineth/lazytf
Blog post: https://ushira.com/blog/introducing-lazytf
Demo: https://assets.ushira.com/introducing-lazytf/demo.mp4
Iβd especially like feedback from people managing larger Terraform/OpenTofu projects locally.
Monkeypatsh - Simplify shell monkey patching
I got tired of writing wrapper functions by hand or creating aliases that take too much mental space when I just wanted to patch an existing API.
That's why I created Monkeypatsh.
Monkeypatsh is a tool for easily monkey patching commands in the shell:
- It wraps any command you register with it,
npm,docker,rm... and lets you easily attach custom behavior to any existing or new subcommands, flags, or default invocation, while keeping the command's API intact. - It centralizes all your patches under one tool and extends the original completion with them.
- Choose whether these patches stay only in your interactive shell, or are globally available through the
$PATHvariable.
The gif above shows how easy it is to patch npm run <script> to log the run to a log file.
Would appreciate some feedback. Thanks.