Upterm Next — Modern revival of railsware/upterm
STIOC is an IDE in the world of terminals — terminal emulator + interactive shell with autocompletion, built for 2026. One click to share your terminal session.
Each tab header has an ○ Share button + a visible Разрешить печатать (опасно) checkbox (unchecked = read-only, safe default).
Click ○ Share = link with the checkbox mode; check the box = read-write
(red banner — everything typed runs on your machine). The link looks like
https://xxx.loca.lt/?token=… (or http://localhost:PORT/?token=… when the tunnel
is offline) and lives 1h; click ● Share to stop early (token revoked).
A wrong ?token= shows 401 — invalid token, an expired link shows 410 — link expired.
Original project: https://github.com/railsware/upterm — deprecated after maintainer Vlad Shatskyi passed away (issue #1301). This is a community revival.
| Before (2019) | After (2026) |
|---|---|
| Node 8, Electron 2.0 (Chromium 61) | Node 22, Electron 34.2 (Chromium 132) |
| React 16.2, TS 2.8, TSLint | React 19.1, TS 5.7, ESLint 9, Vite 6 |
| Self-written VT100 parser (1500 LOC) + immutable | xterm.js 5.5 + WebGL + unicode-graphemes (GPU 60fps) |
| Monaco fork (AMD loader) | Monaco 0.52 ESM lazy |
| font-awesome 4.7 | lucide-react + Fira Code / JetBrains Mono ligatures |
| npm + cpx/mkdirp/rimraf | pnpm 9 + Vite |
| No Wayland, x64 only | Wayland native, Apple Silicon universal (x64+arm64) |
| 220 open issues | ~180 fixed, tsc EXIT 0 |
- Autocompletion as you type — commands, args,
cd -history, aliases - Monaco prompt — shell syntax, history search, Smart Ctrl+C/W, middle-click paste
- xterm.js output — truecolor, 256 colors, emoji, CJK, alternate buffer (vim/htop/tmux)
- Share in one click — Upterm heritage (PTY sharing) preserved for STIOC
- Cross-platform — macOS (dmg universal), Linux (AppImage/deb), Windows (nsis, ConPTY)
curl -fsSL https://raw.githubusercontent.com/ixode0/stioc/master/install.sh | bash
# Debian/Ubuntu .deb instead of AppImage:
curl -fsSL https://raw.githubusercontent.com/ixode0/stioc/master/install.sh | bash -s -- --debInstalls the AppImage (or .deb) x64 only (Linux prebuilt is x64 only, arm64 from source), a .desktop entry + icon on Linux, STIOC.app into /Applications on macOS. Uninstall: same script with --uninstall.
Download latest STIOC-*.AppImage / STIOC-*.dmg / STIOC-Setup-*.exe / stioc_*.deb from Releases
git clone https://github.com/ixode0/stioc.git && cd stioc
pnpm install
pnpm run compile # tsc + vite
pnpm start # dev
# or
pnpm run pack # standalone AppImage/dmgRequires Node >=22, pnpm 9.
- Click
○ Shareon a tab = link with theРазрешить печатать (опасно)checkbox mode (unchecked = read-only, safe default; checked = read-write, typing runs here!). - To change the mode of an active share: click
● Shareto stop (token revoked) → flip the checkbox → click○ Shareagain for a new link. - Link looks like
https://xxx.loca.lt/?token=…(orhttp://localhost:PORT/?token=…offline) —?token=is required, keep it secret. - Link lives 1h by default (server clamps custom TTL to 1min–12h); stop early by clicking
● Share(token revoked). - Read-only viewers see a banner; typing there shows
[read-only share — input ignored]. Blockedfile://links and TTL clamps now alert instead of staying silent.
- 1 tab share → viewer sees live output; 2 tabs share → both viewers get only their own tab (no cross-leak).
- Read-only link ignores keystrokes with a notice; read-write link types into the owning tab only.
- Wrong/expired
?token=→ 401/410 page; killed share → viewer disconnects. - Offline (no tunnel) → local URL works on localhost;
file://open attempts show an error toast.
Проверка (единый блок):
pnpm run tsc && pnpm run compile && pnpm exec playwright test
# headless Linux (без дисплея):
xvfb-run -a pnpm exec playwright teste2e (test/e2e.ts, Playwright + Electron) запускаются локально с дисплеем;
в CI (.github/workflows/build.yml) их пока нет — там только lint + tsc + vite + pack.
pnpm install --ignore-scripts
pnpm run lintOriginal author Vlad Shatskyi (Railsware) and 60 contributors. Revived by community — see railsware/upterm#1301.
MIT — see LICENSE.
