Skip to content

Releases: LunarWerxs/DevWebUI

v0.5.4

Choose a tag to compare

@github-actions github-actions released this 16 Jul 23:57

Release v0.5.4.

v0.5.3

Choose a tag to compare

@github-actions github-actions released this 16 Jul 09:22

Release v0.5.3.

v0.5.2

Choose a tag to compare

@github-actions github-actions released this 16 Jul 06:50

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-size kept 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: true on 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

Choose a tag to compare

@github-actions github-actions released this 16 Jul 05:49

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 --app launch into a running Chromium instance ignores both --window-size and 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

Choose a tag to compare

@github-actions github-actions released this 16 Jul 04:44

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 .lnk boots the daemon if it isn't running, loads the project if it isn't registered, starts
    the process — bringing up its links group 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 through wscript.exe and 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/shortcut and POST /api/projects/:id/shortcut endpoints, plus the
    create_process_shortcut / create_project_shortcut MCP tools (now 31 total).
  • The compiled binary is now also the CLI. dist/devwebui.exe previously 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-process and
    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 without windowsHide, so whether a console appeared depended on the
    console the daemon itself happened to own — invisible under the tray (which starts the daemon
    with CreateNoWindow, 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 sets windowsHide so the result is the same
    on every launch path. cli.ts's daemon boot states it too, so "no window" survives someone
    dropping detached.
  • 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 a compact density (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 start from the compiled binary. It hardcoded a spawn of bun 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 via cmd /c start "", whose CreateProcess inherits 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 one localhost_/ 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 .lnk stores open-process <file> <id>, never a
    URL), and the old query form still renders for a window or bookmark left on it.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 13 Jul 19:50

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
    color field in the .devwebui file (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 new PUT /api/projects/:id endpoint.
  • 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,
    and clone_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

Choose a tag to compare

@github-actions github-actions released this 13 Jul 10:38

Added

  • Linked servers — group processes so starting or stopping one starts/stops the whole group (plus companion processes, 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

Choose a tag to compare

@github-actions github-actions released this 10 Jul 03:21

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/locker SDKs
    instead of a hand-rolled client. Both are optional dependencies that are only ever loaded
    (via dynamic import()) 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 to AI_GUIDE.md.
  • Release notes come from the CHANGELOG (the tagged version's section) rather than an
    auto-generated commit list; dropped a redundant bun install in release.yml.
  • The bun workspace was internally renamed from devdeck to devwebui to match the
    product name (no user-visible effect).

Fixed

  • /oauth/login now 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
    two noExplicitAny warnings in tests/auto-update.test.ts (the fixtures are now typed as
    UpdateStatus / UpdateApplyResult). Bumped actions/cache + actions/checkout to clear the
    Node.js 20 deprecation warning, and fixed the release.yml "stage binary" step that failed on
    Linux/macOS (ls of a per-OS path under set -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.