Kai is a small desktop app that remembers your projects and their commands, so you stop opening terminals and retyping the same thing every morning.
All releases · Source · Unsigned build, on first launch right-click the app and choose Open.
Name, folder, command, env vars, autostart. A native folder picker, and config that survives restarts.
stdout and stderr in real time, ANSI colour rendered rather than printed raw, stderr visually distinct.
Every running app keeps buffering in the background, not only the one you are looking at. 5000 lines each.
Detach any app's logs into their own window and park it wherever you like.
One application can hold several sub-applications. Start the whole monorepo, or just the API.
Entries without a folder of their own run in a global folder you configure, for anything not tied to a project.
# clone and install git clone https://github.com/omthorat2004/Kai.git cd Kai npm install # develop, Vite plus Electron with hot reload npm run dev # package a dmg or an nsis installer npm run build:mac npm run build:win
A double-clicked app inherits launchd's environment, not your shell's, so npm is simply missing. Kai spawns through a login shell, so nvm and Homebrew paths apply.
child.kill() kills the shell and leaves the dev server holding the port. Kai kills the whole process group, escalating to SIGKILL, and taskkill /T /F on Windows.
A data event can carry three lines or half of one. Kai buffers per stream and keeps the incomplete tail for the next chunk.
Auto-scroll engages only when you are already at the bottom, so scrolling up to read a stack trace never yanks you back down.
Every child is killed before the app quits, so closing Kai never leaves a server running in the background.
contextIsolation: true, nodeIntegration: false, no ipcRenderer in the page. One narrow preload bridge, and a strict CSP in the packaged build.