<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Documentation on micromux</title><link>https://romnn.github.io/micromux/docs/</link><description>Recent content in Documentation on micromux</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://romnn.github.io/micromux/docs/index.xml" rel="self" type="application/rss+xml"/><item><title>Introduction</title><link>https://romnn.github.io/micromux/docs/introduction/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://romnn.github.io/micromux/docs/introduction/</guid><description>&lt;h1 id="introduction"&gt;Introduction&lt;a class="anchor" href="#introduction"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;micromux&lt;/code&gt; is a &lt;strong&gt;local process supervisor with a terminal UI&lt;/strong&gt;. You describe your dev services in a &lt;code&gt;micromux.yaml&lt;/code&gt;, run &lt;code&gt;micromux&lt;/code&gt;, and it starts them, tracks their state, and gives you one place to watch logs and restart, enable, or disable them.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The problem&lt;a class="anchor" href="#the-problem"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A local dev stack is several long-lived commands at once — an API, a background worker, a database, a frontend dev server. Two ways people usually run them both fall short:&lt;/p&gt;</description></item><item><title>Installation</title><link>https://romnn.github.io/micromux/docs/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://romnn.github.io/micromux/docs/installation/</guid><description>&lt;h1 id="installation"&gt;Installation&lt;a class="anchor" href="#installation"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;micromux ships a single binary, &lt;code&gt;micromux&lt;/code&gt;. It is developed and fully supported on &lt;strong&gt;Linux and macOS&lt;/strong&gt;; on Windows the TUI runs but the control plane does not (see &lt;a href="#platform-support"&gt;platform support&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id="homebrew"&gt;Homebrew&lt;a class="anchor" href="#homebrew"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The quickest way on macOS or Linux:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install --cask romnn/tap/micromux&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="from-source"&gt;From source&lt;a class="anchor" href="#from-source"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;With a &lt;a href="https://rustup.rs"&gt;Rust toolchain&lt;/a&gt; installed:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cargo install --locked micromux-cli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This builds the full binary, including the MCP server. For a lean, TUI-only build with the MCP server compiled out:&lt;/p&gt;</description></item><item><title>Quick start</title><link>https://romnn.github.io/micromux/docs/quick-start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://romnn.github.io/micromux/docs/quick-start/</guid><description>&lt;h1 id="quick-start"&gt;Quick start&lt;a class="anchor" href="#quick-start"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This walks through a first config, a first run, and how to read the UI. It assumes &lt;code&gt;micromux&lt;/code&gt; is &lt;a href="https://romnn.github.io/micromux/docs/installation/"&gt;installed&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="1-write-a-config"&gt;1. Write a config&lt;a class="anchor" href="#1-write-a-config"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;micromux looks for one of &lt;code&gt;micromux.yaml&lt;/code&gt;, &lt;code&gt;.micromux.yaml&lt;/code&gt;, &lt;code&gt;micromux.yml&lt;/code&gt;, or &lt;code&gt;.micromux.yml&lt;/code&gt; in the current directory. Create one describing your services:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# yaml-language-server: $schema=https://github.com/romnn/micromux/raw/main/micromux.schema.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;unless-stopped&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;api&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;sh&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;-c&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;./run-api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;env_file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;.env&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;healthcheck&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;CMD-SHELL&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;curl -fsS http://localhost:8080/health || exit 1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;worker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;./run-worker&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;depends_on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;healthy&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;$schema&lt;/code&gt; comment turns on completion and validation in editors with the YAML language server. Each service needs a &lt;code&gt;command&lt;/code&gt;; everything else is optional. See &lt;a href="https://romnn.github.io/micromux/docs/configuration/"&gt;Configuration&lt;/a&gt; for the full set of fields.&lt;/p&gt;</description></item><item><title>The terminal UI</title><link>https://romnn.github.io/micromux/docs/tui/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://romnn.github.io/micromux/docs/tui/</guid><description>&lt;h1 id="the-terminal-ui"&gt;The terminal UI&lt;a class="anchor" href="#the-terminal-ui"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Running &lt;code&gt;micromux&lt;/code&gt; with no subcommand opens the TUI for the current project. It&amp;rsquo;s the primary way to watch and steer a stack.&lt;/p&gt;
&lt;figure class="mm-figure"&gt;
 &lt;img src="https://romnn.github.io/micromux/images/overview.png" alt="The micromux TUI: a service sidebar beside a log pane" loading="lazy" /&gt;&lt;figcaption&gt;The service sidebar (left) and the selected service&amp;rsquo;s live logs (right).&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id="layout"&gt;Layout&lt;a class="anchor" href="#layout"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sidebar&lt;/strong&gt; — every service, one row each, showing its lifecycle state: pending, starting, running, healthy, unhealthy, exited, or disabled. The selected row drives the panes on the right.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Log pane&lt;/strong&gt; — the selected service&amp;rsquo;s live output. ANSI color and interactive/redrawing output are supported.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Healthcheck pane&lt;/strong&gt; — toggled with &lt;code&gt;H&lt;/code&gt;, it shows the selected service&amp;rsquo;s latest probe: the command, its exit status, and its output.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="keybindings"&gt;Keybindings&lt;a class="anchor" href="#keybindings"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Key&lt;/th&gt;
					&lt;th&gt;Action&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;j&lt;/code&gt; / &lt;code&gt;k&lt;/code&gt;, &lt;code&gt;↓&lt;/code&gt; / &lt;code&gt;↑&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Move the selection&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;r&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Restart the selected service&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;R&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Restart all services&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;d&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Disable / enable the selected service&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;a&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Enter PTY &lt;strong&gt;input mode&lt;/strong&gt; — send keystrokes to the service (exit with &lt;code&gt;Alt+Esc&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Tab&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Move focus between panes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;H&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Toggle the healthcheck pane&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;w&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Toggle log wrapping&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;t&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Toggle follow-tail (stick to the newest logs)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;q&lt;/code&gt; / &lt;code&gt;Esc&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Quit&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Restart, disable, and enable all go through the &lt;a href="https://romnn.github.io/micromux/docs/agent-control/control-plane/"&gt;control plane&lt;/a&gt;, so they respect dependency gating and restart policy.&lt;/p&gt;</description></item><item><title>How it compares</title><link>https://romnn.github.io/micromux/docs/comparisons/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://romnn.github.io/micromux/docs/comparisons/</guid><description>&lt;h1 id="how-it-compares"&gt;How it compares&lt;a class="anchor" href="#how-it-compares"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;micromux sits between two familiar tools. Knowing where it differs makes it clear when to reach for it.&lt;/p&gt;
&lt;h2 id="versus-docker-compose"&gt;versus Docker Compose&lt;a class="anchor" href="#versus-docker-compose"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;micromux borrows Compose&amp;rsquo;s config shape — &lt;code&gt;services&lt;/code&gt;, &lt;code&gt;depends_on&lt;/code&gt; with conditions, &lt;code&gt;healthcheck&lt;/code&gt;, &lt;code&gt;restart&lt;/code&gt;, &lt;code&gt;ports&lt;/code&gt;, &lt;code&gt;environment&lt;/code&gt;, &lt;code&gt;env_file&lt;/code&gt; — but it is &lt;strong&gt;not a container orchestrator&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Runs host processes.&lt;/strong&gt; No images, builds, networks, volumes, or container isolation. Your services are the scripts and binaries already on your machine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fast local workflow.&lt;/strong&gt; Start, stop, and restart your existing commands with a UI, no build step in the loop.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dependency + health gating.&lt;/strong&gt; Delay a service until its dependencies are started, healthy, or completed — the part a plain process runner lacks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you need reproducible environments, networking, volumes, or cross-machine parity, use Docker Compose. If you want to run the processes you already have, quickly and with service awareness, use micromux.&lt;/p&gt;</description></item></channel></rss>