All notable changes to this project. Format loosely follows Keep a Changelog.
- Bookmarks — save reusable launch recipes (label + cwd + cmd + port) to
~/.portman/bookmarks.json. Drawer with one-click LAUNCH and add form. - Autostart on Windows logon via Task Scheduler (
PORTMANtask, runs as user, no UAC). UI buttons + CLI:portman autostart-install/autostart-uninstall/autostart-status. - Sparklines for RAM and CPU — last 30 samples (~90s) rendered inline as SVG.
- Process tree —
↳<ppid>shown next to each process name (parent PID viaGet-CimInstance Win32_Process). - System tray icon via
portman tray— PowerShell NotifyIcon with Open UI / Toggle AUTO / Quit menu, auto-updating tooltip. - Public tunnels — auto-detect
cloudflaredorngrokin PATH. Per-row 🌐 TUNNEL button spawns tunnel and renders the public URL once detected.
- Health check —
GET /ping for registered servers, colored dot in NAME column, hover for HTTP code + ms. - Event log — append-only
~/.portman/log.jsonlwith 2 MB rotation, viewer drawer. - Project detection — parse
package.json/Cargo.toml/go.mod/requirements.txt/Gemfile/composer.json. 19 frameworks recognized (Next.js, Nuxt, Astro, SvelteKit, Vite, Remix, Vue, Angular, CRA, Express, Fastify, Koa, Hapi, Electron, Rust, Go, Python, Ruby, PHP). Neon framework chip in row. - Keyboard shortcuts:
/search,gAUTO,pping,bbookmarks,llog,,settings,1-5filters,?help,Escclose.
- Self-protection — portman cannot kill its own process or own UI port anymore. KILL button hidden in own row; API returns
403 protected (reason: self)if frontend bypassed.
- Standalone
portman.exe(~41 MB single file, no Node required) via@yao-pkg/pkg. npm run build→dist/portman.exe.
- 80s synthwave UI redesign: logo, perspective grid, neon glow, chrome gradient title.
- i18n — language switcher EN / KO / DE / ES, persistent in
localStorage. - README translations in all 4 languages.
- Live RAM and CPU per process via
Get-ProcessPowerShell batch. - Clickable
localhost:PORTlinks in row. - Filter chips (ALL / DEV / ACTIVE / IDLE / PROTECTED), instant search, sort by RAM / CPU / PORT / AGE / IDLE.
activity.js: new processes initializelastActiveAt = nowso auto-mode no longer ignores idle-from-birth servers.index.html: HTML-escape process names/labels/cmd in table rows (XSS).server.js: prunenameCachefor dead PIDs.server.js: dedupeautoSweeptimer.
- Web UI on
http://127.0.0.1:9876with phosphor green CRT theme. - Three-layer protection: hardcoded names, port whitelist, server-side enforcement.
- Auto-mode for killing idle dev servers.
- One-click desktop launcher via VBS +
.lnk. - CLI:
ui,ps,kill,run,auto. - Zero npm dependencies at runtime.