A seamless dev console across phone and PC. A self-hosted web environment where the same tmux session is accessible from any device via a browser.
Website: https://any-console.highedge.net/
- Seamless across devices — Start
npm teston your PC, check the output on your phone during commute, and pick up where you left off when you get home. tmux sessions persist — closing the browser doesn't end the session. - Serious mobile input — A custom virtual keyboard with flick input. Practical enough to run
git commitfrom your phone. - Jobs, Git, and terminal in one place — No tab-switching between tools. Run scripts, commit, and push — all in one tap.
- Persistent sessions — tmux × WebSocket; switch devices without losing your session
- Mobile-optimized input — Custom flick keyboard with swipe support
- Web terminal — xterm.js based, multi-tab and split-pane
- Git UI — Branch switching, commit, push/pull, diff, history, stash, merge/rebase
- Job runner — One-tap shell script execution; define and edit jobs from the UI
- PWA — Installable on phone and desktop
- Lightweight stack — Vue 3 + Pinia + FastAPI, built with Vite
Client side: any OS, any device with a modern browser. This is the whole point of any-console — open https://<your-host>/ from your phone, laptop, or any browser and you get the full UI.
Host (server) side: Linux only for real use. The runtime is POSIX-portable, but the operational pieces that make any-console useful (systemd for service management, tmux for persistent sessions, the ./any-console helper) all assume Linux.
| Host setup | Platforms | Status |
|---|---|---|
| systemd (first-class) | Linux | Supported. Daily-use target. |
| Docker | Linux / macOS / Windows | Demo / sandbox only — not suitable for real workspaces. |
The host running any-console needs Linux. Browser access from macOS / Windows / iOS / Android is fully supported and is the intended client experience. Docker exists to let curious users try the UI without provisioning a Linux box; the host's workspaces, SSH keys, git/gh config, and shell environment are intentionally not threaded into the container.
git clone https://github.com/kt0319/any-console.git
cd any-console
./any-console setupInstalls dependencies, builds the frontend, and registers a systemd service in one step. After this, manage the service with ./any-console start|stop|update|logs|... (see Commands).
git clone https://github.com/kt0319/any-console.git
cd any-console
docker compose -f docker/compose.yml up -dOpen http://<host>:8888.
The default compose file mounts only ./work inside the repository as the workspace root. The container has its own user, no host SSH keys, no host git/gh config, and no access to the host shell environment. That makes Docker fine for trying any-console out, but ill-suited for daily work on your real projects.
The ./any-console CLI does not manage Docker containers. Use docker compose directly for start/stop/logs, and git pull && docker compose ... up -d --build to update.
Required:
- Python 3.11+
- Node.js 18+
git— used by the Git UItmux— required for terminal session management
Optional:
gh(GitHub CLI) — for fetching GitHub repos, issues, PRs, and Actions
Installation examples:
# Debian/Ubuntu
sudo apt install python3 nodejs git tmux
# optional: follow the official gh install guide
# macOS
brew install python node git tmux gh- On first start, if
data/auth.jsondoes not exist, a random 32-character token is generated and saved automatically. - The connection URL is printed to stdout and journalctl once. Open it on your device to start an authenticated session.
- On subsequent starts,
data/auth.jsonis never overwritten. - The token can be changed from the "Security" settings in the UI.
# via environment variable
ANY_CONSOLE_DISABLE_AUTH=1 ./any-console start
# or in config.json
# "auth_disabled": trueFor the systemd setup, all operations go through the ./any-console command. (Docker users: manage with docker compose instead — see Platform support.)
./any-console setup First-time setup (install deps + build + register systemd)
./any-console update Update to latest (git pull + update deps + build + restart)
./any-console start Start the service (systemctl start)
./any-console stop Stop the service (systemctl stop)
./any-console restart Restart the service (systemctl restart)
./any-console status Show status (service state, URL, version)
./any-console logs Show service logs (journalctl)
./any-console run Run in foreground (no systemd; macOS / WSL / etc.)
./any-console version Show version
run skips systemd entirely and starts the API directly via python3 -m api.main. Useful for macOS / WSL or for quick test runs on a Linux box without registering a service.
./any-console updateRuns git pull → update deps → build → restart in one shot. Skips steps where nothing has changed.
api/ Backend (FastAPI)
ui/ Frontend (Vue 3 + Pinia, built with Vite)
docker/ Docker files
docs/ Architecture & design docs
See docs/ARCHITECTURE.md for the module-level breakdown.
- Workspace settings (icons, job definitions, links, etc.) are stored in
config.json. - Generated automatically on first run. To configure manually, copy
config.json.exampleand edit it. - Export/import is available from the settings modal.
any-console is built primarily for the author's own daily use.
- Issues and PRs are welcome, but responses are best-effort and not guaranteed.
- This project has strong opinions (see
CLAUDE.md). Pull requests that conflict with the existing design philosophy may be declined regardless of code quality. - Fork freely if you want a different direction — that is the spirit of MIT.
- Release cadence is irregular. A quiet month does not mean the project is abandoned.
- No SLA, no roadmap promises. Features land when they are useful to the author.
If these terms work for you, welcome aboard.