https://github.com/kt0319/any-console
Web console for shell jobs, Git operations, and terminal access from your browser
https://github.com/kt0319/any-console
fastapi raspberry-pi terminal vue3 web-console
Last synced: about 1 month ago
JSON representation
Web console for shell jobs, Git operations, and terminal access from your browser
- Host: GitHub
- URL: https://github.com/kt0319/any-console
- Owner: kt0319
- License: mit
- Created: 2026-02-20T12:35:42.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-05-21T22:05:41.000Z (about 1 month ago)
- Last Synced: 2026-05-21T22:24:15.769Z (about 1 month ago)
- Topics: fastapi, raspberry-pi, terminal, vue3, web-console
- Language: Python
- Size: 5.37 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# any-console
[](https://github.com/kt0319/any-console/releases/latest)
[](https://github.com/kt0319/any-console/commits/main)
[](https://github.com/kt0319/any-console/actions/workflows/ci.yml)
[](https://codecov.io/gh/kt0319/any-console)
[](LICENSE)
[](https://www.python.org/)
[](https://vuejs.org/)
[](https://fastapi.tiangolo.com/)
**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:
## Why any-console?
- **Seamless across devices** — Start `npm test` on 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 commit` from your phone.
- **Jobs, Git, and terminal in one place** — No tab-switching between tools. Run scripts, commit, and push — all in one tap.
## Features
- **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
## Platform support
The runtime (Python + Node + tmux) is POSIX-portable, but the operational tooling around it is not. Two supported setups:
| Setup | Platforms | `./any-console` CLI | Auto-update | Service mgmt |
|-------|-----------|---------------------|-------------|--------------|
| **systemd** (first-class) | Linux | yes | `./any-console update` | systemd |
| **Docker** | Linux / macOS / Windows | no | manual `git pull` + `docker compose` | docker compose |
macOS / Windows users can run any-console via Docker, but the `./any-console` helper (`start`, `update`, `logs`, etc.) requires systemd and is Linux-only. Daily-use development happens on the systemd path.
## Setup
### systemd (Linux) — first-class
```bash
git clone https://github.com/kt0319/any-console.git
cd any-console
./any-console setup
```
Installs 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](#commands)).
### Docker (Linux / macOS / Windows)
```bash
git clone https://github.com/kt0319/any-console.git
cd any-console
docker compose -f docker/compose.yml up -d
```
Open `http://:8888`.
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.
### Requirements
Required:
- Python 3.11+
- Node.js 18+
- `git` — used by the Git UI
- `tmux` — required for terminal session management
Optional:
- `gh` (GitHub CLI) — for fetching GitHub repos, issues, PRs, and Actions
Installation examples:
```bash
# Debian/Ubuntu
sudo apt install python3 nodejs git tmux
# optional: follow the official gh install guide
# macOS
brew install python node git tmux gh
```
## Authentication
- On first start, if `data/auth.json` does 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.json` is never overwritten.
- The token can be changed from the "Security" settings in the UI.
### Disabling authentication (for closed networks like Tailscale)
```bash
# via environment variable
ANY_CONSOLE_DISABLE_AUTH=1 ./any-console start
# or in config.json
# "auth_disabled": true
```
## Commands
For the systemd setup, all operations go through the `./any-console` command. (Docker users: manage with `docker compose` instead — see [Platform support](#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 version Show version
```
### Updating
```bash
./any-console update
```
Runs `git pull` → update deps → build → restart in one shot. Skips steps where nothing has changed.
## Repository layout
```
api/ Backend (FastAPI)
ui/ Frontend (Vue 3 + Pinia, built with Vite)
docker/ Docker files
docs/ Architecture & design docs
```
See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for the module-level breakdown.
## Configuration
- Workspace settings (icons, job definitions, links, etc.) are stored in `config.json`.
- Generated automatically on first run. To configure manually, copy `config.json.example` and edit it.
- Export/import is available from the settings modal.
## Project Stance
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.
## License
[MIT](LICENSE)