Releases: LunarWerxs/DevWebUI
Releases · LunarWerxs/DevWebUI
Release list
v0.5.4
v0.5.3
v0.5.2
Fixed
- Resizing a launcher window now sticks. Chromium stores a saved placement whose key
contains a dot — every focus window's does, the process id is<projectId>.<localId>—
as nested dicts, not under the flat key, so the kit's "has the user sized this window?"
probe never saw launcher placements and--window-sizekept overriding the user's
resize on every fresh launch. The probe now reads both storage forms (and ignores
degenerate zero-area rects), and the size hint carries the user's saved size to
forwarded launches, so a resized launcher keeps its size in every launch path. - A maximized window stays maximized. Chromium stores
maximized: trueon the saved
placement with the rect holding the pre-maximize restore bounds; the size hint would
have resized a deliberately maximized window back down to those bounds on its next
open. A maximized placement now sends no hint at all — fresh launches restore the
maximized state natively. - "Open dashboard" can't spawn duplicates, and corrected windows stay on-screen. The
launcher's dashboard button now ignores re-entry while a request is in flight (a fast
double-click used to open two dashboard windows), and after the page applies a size
hint it clamps the window back inside its monitor's available area — a forwarded
launch inherits the launcher's position, so growing from a corner could push most of
the window off-screen.
v0.5.1
Fixed
- The launcher's "Open dashboard" button opens a real dashboard window, not a 440x220 one.
It used to navigate the launcher window itself to/, cramming the full dashboard into the
launcher's mini-viewer geometry with zero room for any rows. It now asks the daemon to open/
as its own portable window — its own first-run size, its own remembered geometry, zero
interference with the launcher's — and closes the launcher; if no Chromium can be spawned it
falls back to the old in-place navigation so the button is never a dead end. The dashboard's
first-run size is a measured 840x760 (the layout caps content at 800px, so wider is dead
margin; 13 process rows visible), joining the launcher's measured 440x220. - Portable windows opened while another one is already up now get their intended size. A
forwarded--applaunch into a running Chromium instance ignores both--window-sizeand the
window's own saved placement — it just inherits the existing window's geometry (verified,
Edge 150). That made "Open dashboard" produce a launcher-sized dashboard even with a first-run
size in place, since the launcher is by definition running when you click it. The daemon now
tags each portable window's URL with the size it should have (the user's remembered size when
one exists, the measured first-run size otherwise) and the page corrects itself once with
window.resizeTo— queries are not part of Chromium's geometry key, and a page-initiated
resize saves onto the window's own slot, so the hint can't disturb any other window.
v0.5.0
Added
- Desktop shortcuts for one server (or a whole repo). The process ⋮ menu gains Add desktop
shortcut; the project ⋮ menu gains the same for every process in the codebase. Double-clicking
the.lnkboots the daemon if it isn't running, loads the project if it isn't registered, starts
the process — bringing up itslinksgroup and the project's companions, since it goes through
the ordinary start action — and opens a small focused window showing just that server: status,
metrics, logs, and a Stop button. No console flash (the shortcut runs throughwscript.exeand a
generated launcher), and clicking it twice is a no-op rather than a restart. Windows only;
elsewhere the action reports that instead of failing. Backed by new
POST /api/processes/:id/shortcutandPOST /api/projects/:id/shortcutendpoints, plus the
create_process_shortcut/create_project_shortcutMCP tools (now 31 total). - The compiled binary is now also the CLI.
dist/devwebui.exepreviously only booted the
daemon, so a portable install had no command line at all and nothing for a shortcut to invoke.
Any argument now dispatches to the CLI (devwebui.exe status,… start-process web,… mcp),
while a bare launch still boots the daemon exactly as before. Two new verbs,open-processand
open-project, are what the shortcuts run.
Fixed
- A managed server no longer pops a console window. Every dev server is spawned through
cmd(shell: true) but withoutwindowsHide, so whether a console appeared depended on the
console the daemon itself happened to own — invisible under the tray (which starts the daemon
withCreateNoWindow, and children inherit that headless console), but a desktop shortcut boots
the daemon detached with no console, and Windows then gave each dev server a brand-new console
of its own. With Windows Terminal set as the default terminal that surfaced as a real window that
stayed up for the life of the server. The spawn now setswindowsHideso the result is the same
on every launch path.cli.ts's daemon boot states it too, so "no window" survives someone
droppingdetached. - The shortcut's focus window opens small, and remembers the size you give it. It never passed
a size, and Chromium's default for a window it has never seen is roughly the whole work area
(~1905x2092 on a 4K display) — so "a small focused window" was neither small nor sized. It now
opens at a first-run size measured to fit the card exactly, and yields to your own resize
afterwards (Chromium persists a manual resize but not a--window-size, which is what makes
"small by default, yours once you touch it" work rather than fighting you every launch). - The focus window reads as a launcher, not a shrunken dashboard. It reused the dashboard's
full-size ProcessCard, so a small window just clipped a big card: label-above-value metrics
three rows tall, plus star / enable / edit / engine-chip / overflow controls that a launcher has
no use for. ProcessCard gained acompactdensity (the same component — status, logs, metrics
and Start/Stop must never fork into a launcher copy that drifts) which tightens the type and
spacing, folds the metrics into one icon+value line, and drops the config-only affordances. The
window hugs the result at 440x220 instead of 520x300. devwebui startfrom the compiled binary. It hardcoded a spawn ofbun server/src/index.ts,
a path that doesn't exist outside a checkout. Daemon launches now resolve the right vector for the
build they're running in.- Restarting the daemon no longer hops it off its own port. The chromeless window the shortcut
opens was launched viacmd /c start "", whoseCreateProcessinherits the parent's handles —
including the daemon's listening socket. The browser then pinned the daemon's port for as long as
its window stayed open, so a restart (or auto-update relaunch) found the port still held by the
dead daemon's ghost socket and moved to the next one. The launch now goes through WMI
(Win32_Process.Create), where the service creates the process and it inherits nothing of ours —
still fully detached from the daemon's tree, but no longer holding its socket.
Changed
- The focus view moved from
/?process=<id>to/focus/<id>. Chromium keys a saved app-window
placement by host + path only — the query string isn't part of it — so every focus window and the
dashboard shared onelocalhost_/geometry slot: no focus window could keep its own size, and
resizing one silently resized the others. A path per process gives each window its own remembered
geometry. Nothing on disk needs migrating (a.lnkstoresopen-process <file> <id>, never a
URL), and the old query form still renders for a window or bookmark left on it.
v0.4.0
Added
- Edit project (rename + accent color). The project ⋮ menu gains an Edit project action that
opens a small dialog to rename the project and pick an accent color — shown as a tint on the
project's stacked-servers icon in the panel header. Project color is a new optional top-level
colorfield in the.devwebuifile (any CSS color string; the picker writes#rrggbb, and
clearing it falls back to the theme accent). Renaming or recoloring rewrites the file in place and
never restarts running servers. Backed by a newPUT /api/projects/:idendpoint. - MCP server: 11 new tools (now 29 total). The MCP server gained the config-editing and
observability tools it was missing, so an agent can do what the GUI can — not just start/stop.
New:update_project(rename/recolor),add_process,update_process,remove_process,
set_process_starred,start_project/stop_project(transient, distinct from
enable/disable),free_port,get_log_file(tail the persisted rotating log),scan_projects,
andclone_project. Native file-picker dialogs are intentionally excluded (they can't run
headless).AI_GUIDE.md's tool reference was updated to match.
v0.3.0
Added
- Linked servers — group processes so starting or stopping one starts/stops the whole group (plus
companionprocesses, like a shared DB, that come up with any sibling). - Portable window mode — run in a chromeless app window instead of a browser tab.
Changed
- Settings split into tabs (General / Servers / Projects).
- Brand tray/taskbar icon regenerated.
v0.2.0
Release-readiness audit: makes a public bun install (no private LunarWerx registry access)
boot cleanly, clarifies what "Sign in with Connections" actually does, and cleans up some
internal duplication. No new network calls, install IDs, or update-check behavior — nothing
tracking-related changed.
Changed
- Sign in with Connections now uses the official
@cnct/connect/@cnct/lockerSDKs
instead of a hand-rolled client. Both are optional dependencies that are only ever loaded
(via dynamicimport()) when you actually use sign-in — so installing DevWebUI without
access to the private LunarWerx package registry still boots the daemon cleanly; sign-in
simply reports itself unavailable instead of crashing anything. - Existing sign-ins are migrated to the new SDK's token storage automatically on first boot
after upgrading — no need to sign in again. "Forget" now also revokes the credential with
the server, not just locally. - README clarifies the two optional, off-by-default things that ever touch the network:
settings sync (requires explicitly signing in with a Connections account) and an anonymous,
install-id-only usage ping that only exists if the person who built your copy configured
it — with an env var to force it off either way. - README rewritten for humans, with real screenshots (dashboard, live logs, de-duplicated
error log, light theme) and a release badge; the full 17-tool MCP list moved toAI_GUIDE.md. - Release notes come from the CHANGELOG (the tagged version's section) rather than an
auto-generated commit list; dropped a redundantbun installinrelease.yml. - The
bunworkspace was internally renamed fromdevdecktodevwebuito match the
product name (no user-visible effect).
Fixed
/oauth/loginnow redirects back to the app with an error instead of returning a server
error (HTTP 500) when the sign-in machinery isn't available.- CI is green again.
bun run lint(Biome) had been failing on pre-existing format drift plus
twonoExplicitAnywarnings intests/auto-update.test.ts(the fixtures are now typed as
UpdateStatus/UpdateApplyResult). Bumpedactions/cache+actions/checkoutto clear the
Node.js 20 deprecation warning, and fixed therelease.yml"stage binary" step that failed on
Linux/macOS (lsof a per-OS path underset -e -o pipefail).
Internal
- De-duplicated several bits of internal logic that had drifted into multiple copies: the
helper that captures a spawned process's stdout, the shared log-line cap constant, the
error-event type, and the file-store path normalizer. - The settings sync UI now cleans up its background refresh timer when it's closed, and the
in-memory log buffer trims old lines more efficiently (O(1) instead of shifting an array). - Removed lingering references to the private internal kit-repo name from source comments.