Releases: thayronarrais/laraenv
LaraEnv 0.4.21 — Command bar runs from the tray; native or xterm.js terminals
Highlights
This release makes the Command Palette work from the tray and gives terminal/SSH commands a native-or-in-app choice.
- Commands work even when LaraEnv is minimized to the tray. Opening a folder, an editor, a browser URL, or toggling a service from the global command bar previously did nothing while the window was hidden — those actions were sent to the hidden UI. They now run directly, so the bar is useful without ever showing the main window.
- Terminal & SSH: native by default, xterm.js on demand. From the palette, Enter opens a native external terminal (or SSH session); Shift+Enter opens it as an in-app xterm.js tab (multi-tab, inside LaraEnv) using your configured default shell. Same behavior in the global command bar and the in-app
Ctrl+Kpalette. - Reliability fix. The first couple of command-bar actions could silently fail (a write/quit race dropped the intent). The bar now waits for the action to be handed off before closing, so commands fire on the first try.
What's new & fixed
Command bar
- Runs from the tray — open folder / open in editor / open in browser and service start/stop/reload execute directly in the backend, independent of the main window's visibility.
- Native vs in-app terminal —
Enter= native external terminal,Shift+Enter= in-app xterm.js tab. Applies to "Open terminal · ", the inline launcher (<project> php artisan …), andssh:<host>. The palette footer and the selected row show the⇧↵ xterm.jshint. - External SSH —
ssh:<host>on Enter opens your default terminal running thesshCLI for the saved host (port, key, and ProxyJump are applied automatically; password hosts prompt in the window).
Fixes
- No more dropped commands — the bar now awaits the intent write before quitting, fixing the intermittent "had to try 2–3 times" behavior.
Install
- Download
LaraEnv-0.4.21.msiand double-click. - SHA-256 in
LaraEnv-0.4.21.msi.sha256. - Auto-update from prior versions picks this up automatically.
Compatibility
- Windows 10+ (x64).
- No config or data migrations — drop-in replacement for 0.4.20.
LaraEnv 0.4.20 — Command Palette & global hotkey
Highlights
This release adds a Command Palette — a Spotlight-style launcher that drives all of LaraEnv from the keyboard — summonable with an OS-wide global hotkey even when the window is hidden in the tray.
- Command Palette (
Ctrl+K). Fuzzy-search and run anything without leaving the keyboard: jump to any page, start/stop/reload services, and act on any project (open its terminal, folder, editor, or browser). - Global hotkey. Bind an OS-wide shortcut (e.g.
Win+Shift+K) that pops the palette as a focused Spotlight bar over any app — even when LaraEnv is minimised to the tray. It opens ready to type, so you can start typing the instant it appears, no mouse click needed. - Inline launcher. Type
project php artisan migrateto run a command in a project's terminal, orssh:hostto open an SSH session. Tab autocompletes projects, artisan/npm commands, and hosts. - Custom commands. Define your own palette entries in Settings — run a terminal command, control a service, or navigate — each with an optional global hotkey of its own.
What's new
Command Palette (new)
- In-app palette on
Ctrl+K(rebindable in Settings → Command Center). - Built-in commands, generated from live app state:
- Navigation — Dashboard, Projects, Terminal, SSH, Cron, Deployments, Libs/Tools, Settings.
- Services — Start / Stop all, Reload web stack, and per-service Start / Stop / Reload.
- Projects — New Project, and per project: open terminal, folder, editor, or browser.
- Launcher mode —
<project> <command…>runs in that project's terminal;ssh:<host>opens SSH. - Keyboard-first — ↑↓ navigate, Tab complete, Enter run, Esc close.
Global hotkey & command bar
- A rebindable OS-wide hotkey summons the palette as a standalone Spotlight bar, even when LaraEnv is hidden or minimised to the tray.
- The bar opens already focused — type the instant it appears, no click required. (On Windows, a freshly spawned WebView2 window does not receive keyboard focus until clicked; LaraEnv now hands focus to the web content the way the window manager expects.)
Custom commands
- Add your own commands in Settings → Command Center: run a terminal command (optionally scoped to a project), control a service, or navigate — each bindable to its own global hotkey.
Install
- Download
LaraEnv-0.4.20.msiand double-click. - SHA-256 in
LaraEnv-0.4.20.msi.sha256. - Auto-update from prior versions picks this up automatically.
Compatibility
- Windows 10+ (x64).
- No config or data migrations — drop-in replacement for 0.4.19.
LaraEnv 0.4.19 — Custom dev commands on Windows, port lifecycle & Ports panel
Highlights
This release makes custom dev commands work properly on Windows (the focus of #3) and ships a batch of dev-server lifecycle fixes plus a new Ports panel.
- Custom dev commands now resolve
php/composerwithout full paths. The dev runner only put the project's Node bin onPATH, so a custom command likecomposer run devorphp artisan servefailed unless you typed full executable paths. It now prepends the project's PHP + Composer + Node bin dirs, just like the embedded terminal. - One-click "Make
composer run devWindows-safe". Laravel 11'sdevscript runsphp artisan pail, which needs thepcntlextension — andpcntlhas no Windows build, socomposer run devcrashes (and--kill-otherstakes the whole stack down). A new button in the dev-command modal rewrites your project'scomposer.jsonto drop just the Pail process, socomposer run devruns natively on Windows. - New Ports panel — see every TCP port LaraEnv holds (dev servers + services), grouped by owner and searchable, with a per-port Kill to reclaim a stuck port.
What's new & fixed
Dev servers (#3)
- PATH includes PHP + Composer + Node — custom dev commands resolve bare
php,composer,artisan, etc. without full paths. - "Make
composer run devWindows-safe" button — strips thephp artisan pailprocess (and its--namesentry) fromcomposer.json'sdevscript. Explicit and user-triggered (never automatic), idempotent, and it only touches that one line — the rest of yourcomposer.jsonformatting is preserved. Stopactually frees the port —composer run dev/php artisan servespawn detached children that a PID-treetaskkillmissed, leaving the port bound so the next Start collided. Stop now also frees the ports the tree was listening on (scoped to our ownphp/nodeprocesses).- Proxy targets the app server, not Vite — for a Laravel
composer run devthat starts bothartisan serve(:8000) and Vite (:5174), the reverse proxy now locks onto the application server instead of the asset server. composer create-project --ignore-platform-reqs— creating a Laravel project no longer aborts on Windows when a package declares POSIX-only extensions (Horizon'sext-pcntl, etc.).
Ports panel (new)
- A Ports in use view (network icon in the title bar): owner · port · process · PID, grouped by owner, with a filter box and a Kill button per port.
App lifecycle
- Single-instance lock — relaunching LaraEnv now focuses the existing window instead of spawning a duplicate process. Previously, closing to the tray and reopening started a second instance that couldn't see the first one's running dev servers and reported their ports as "busy".
- Startup orphan reclaim — stray dev-server ports left by a previous run (e.g. after a crash) are freed on launch, with a notice of what was reclaimed. Strictly scoped to ports LaraEnv reserved and to our own
php/nodeprocesses.
Install
- Download
LaraEnv-0.4.19.msiand double-click. - SHA-256 in
LaraEnv-0.4.19.msi.sha256. - Auto-update from prior versions picks this up automatically.
Compatibility
- Windows 10+ (x64).
- No config or data migrations — drop-in replacement for 0.4.18.
- The "Make
composer run devWindows-safe" button edits your project'scomposer.jsononly when you click it; it's reversible (it's your file, under version control).
LaraEnv 0.4.18 — Detect config loss & storage/ preservation fixes
Highlights
Two data-safety fixes for Deployments, both found while dogfooding 0.4.17:
- Detect no longer erases your deployment config. Running Detect used to overwrite the server-side config blob with detection results only, silently dropping the saved Apply settings (preset, domain, git URL, SSL…) — which also made the Deploy button vanish. Detect now preserves the apply config, mirroring how Apply preserves detection results.
- Re-apply now preserves
storage/too. 0.4.17 protected.env; this release extends the same protection to the wholestorage/directory (user uploads, logs). Re-provisioning a live site no longer destroys client-uploaded files.
What's fixed
Deployments
- Detect preserves the saved apply config — the PATCH sent after detection now carries the existing
applyblob alongside the freshdetectionresults instead of replacing the whole config. Re-running Detect keeps the Deploy button, the chosen preset, and every Apply form value intact. storage/survives re-apply — before the wipe-and-clone,.envandstorage/are moved into a keep directory on the same filesystem (/var/www/.laraenv-keep-<name>), then restored over the fresh clone. Moving (not copying) means zero extra disk usage even for multi-GB storage dirs, and nothing lands in/tmp(often RAM-backed tmpfs).- Crash-safe keep-dir lifecycle — the keep directory is only removed after a successful clone + restore. If the clone fails midway (network drop, bad PAT), the preserved data stays put and the next Apply picks it up. Destroy removes the keep directory along with the deploy dir, so nothing is left behind. At most one keep dir exists per deployment (each backup replaces the previous one).
- DB credentials are never rotated on re-apply anymore — with
.envpreserved, the MySQL bootstrap's idempotent fast path (existing credentials authenticate → skip) now actually triggers on re-apply, so the database user and password stay untouched.
Install
- Download
LaraEnv-0.4.18.msiand double-click. - SHA-256 in
LaraEnv-0.4.18.msi.sha256. - Auto-update from prior versions picks this up automatically.
Compatibility
- Windows 10+ (x64) for the desktop app.
- Cloud deploy targets: Ubuntu/Debian (apt-based).
- No config or data migrations. Drop-in replacement for 0.4.17.
- Note: deployments whose config was already lost to the Detect bug (config saved before 0.4.18, Detect re-run on 0.4.16/0.4.17) need their Apply form filled in once more — this release prevents the loss going forward but can't recover what the server already overwrote.
LaraEnv 0.4.17 — Deploy script presets, .env protection & Stop all fix
Highlights
- Deploy script presets. Deployments now ship with a library of bash pipeline presets — Laravel Production, Laravel Development, Static/Node — that you pick per deployment, adapt with variables, and preview before anything runs. Built-ins are smart:
composer installonly runs whencomposer.json/composer.lockactually changed since the last deploy,npm ci && npm run buildonly whenpackage.json/package-lock.json(orresources/,vite.config.*) changed. First deploys run everything. - "Deploy" is now its own button. Provisioning (Apply) and deploying code (pull + builds) are separate steps. The new green Deploy button on each deployment card runs just the pipeline over SSH with live logs — no packages, vhosts, or SSL touched.
- Your
.envsurvives re-apply. Re-running Apply used to wipe the deploy directory and recreate.envfrom.env.example, silently destroying hand-edited values (mail creds, API keys). Apply now backs up.envbefore the wipe and restores it over the fresh clone. - Fixed: service cards stuck on RUNNING after Stop all. Closing the service-logs viewer silently deregistered every
service:statuslistener in the app, freezing the Dashboard cards until restart — Stop all then looked like a no-op even though services actually stopped.
What's new
Deploy script presets
- Preset manager — "Script presets" button on the Deployments page. Three read-only built-ins; duplicate any of them to create a customizable copy edited in Monaco (shell highlighting).
- Variables — presets resolve
{name},{domain},{raw_domain},{branch},{php_version},{deploy_root},{environment},{git_url},{web_server},{database}from the deployment config, plus custom variables you declare per preset (label + default) and fill per deployment. Bash${VAR}expansion is left untouched. - Per-deployment adaptation — pick a preset in the Apply form, fill its variables, or click "Customize script for this deployment" to edit a private copy (the preset itself stays untouched, with "Reset to preset" one click away).
- Script preview — see the exact rendered bash (variables substituted, execution wrapper included) before saving or running. Unresolved variables are flagged. Preview and execution share one code path, so what you see is literally what runs.
- One pipeline, three triggers — the same rendered script runs as the Apply build step, behind the new Deploy button, and inside the auto-deploy cron on the server.
- Cloud sync — custom presets sync across machines as end-to-end-encrypted resources (Pro + sync enabled); they work fully offline/local otherwise.
- Run history — manual deploys are recorded as runs with encrypted logs, like Apply.
What's fixed
Deployments
.envpreserved on re-apply — backed up to/tmpbefore the wipe-and-clone, restored after. The deploy pipeline itself usesgit fetch + resetand never touches untracked files.- Auto-pull script written via base64 — the cron script is no longer written through a heredoc, so user-authored pipelines containing arbitrary lines can't truncate it.
- Legacy build scripts unchanged — existing deployments with a free-text build script keep producing byte-identical plans; the Apply form preselects "Free-text build script (legacy)" for them.
Dashboard / services
- Stale RUNNING status after Stop all —
EventsOff("service:status")in the service-logs modal removed every listener for the event app-wide (Wails semantics), permanently deafening the kept-alive Dashboard, Projects, and Downloads pages. All shared-event consumers now use the per-listener canceler returned byEventsOn. The same fix was applied toinstall:progress(closing the PHP Extensions or Bootstrap modal no longer kills download progress on the Libs/Tools page).
Install
- Download
LaraEnv-0.4.17.msiand double-click. - SHA-256 in
LaraEnv-0.4.17.msi.sha256. - Auto-update from prior versions picks this up automatically.
Compatibility
- Windows 10+ (x64) for the desktop app.
- Cloud deploy targets: Ubuntu/Debian (apt-based).
- No config or data migrations. Drop-in replacement for 0.4.16.
- Deployments saved before this version keep their free-text build script behavior exactly as-is until you switch them to a preset.
LaraEnv 0.4.16 — Deploy fixes: php-intl & nginx vhost
What's fixed
Two bugs that broke cloud deploys to fresh Ubuntu/Debian hosts:
composer installfailed withClass "Normalizer" not found. The PHP package list installed during apply was missingphp<ver>-intl. Without ext-intl, Symfony String (used by Composer) fatals on startup. Apply now installsphp<ver>-intlalongside the other extensions.nginx -tfailed withinvalid value "http_502". The generated vhost listedhttp_502infastcgi_next_upstream. Unlikeproxy_next_upstream, the FastCGI variant does not accepthttp_502/http_504(those are gateway errors nginx emits itself, not FastCGI backend responses). The directive now useshttp_500 http_503only.
If you already have a host that failed mid-deploy, you can unblock it manually:
sudo apt install php8.4-intl && sudo systemctl restart php8.4-fpm
sudo sed -i 's/http_500 http_502 http_503/http_500 http_503/' /etc/nginx/sites-enabled/*.conf
sudo nginx -t && sudo systemctl reload nginxThen re-run the deploy — both steps are idempotent and will overwrite cleanly.
Install
- Download
LaraEnv-0.4.16.msiand double-click. - SHA-256 in
LaraEnv-0.4.16.msi.sha256. - Auto-update from prior versions picks this up automatically.
Compatibility
- Windows 10+ (x64) for the desktop app.
- Cloud deploy targets: Ubuntu/Debian (apt-based). No changes for Windows-local stacks.
- No config or data migrations. Drop-in replacement for 0.4.15.
LaraEnv 0.4.15 — English-only UI strings
English-only UI strings
Translated the remaining Portuguese strings that surfaced in the UI to English:
- Libs/Tools catalog notes (MySQL, PostgreSQL, Redis, Node.js, PHP, Cmder, Mailpit).
- Service start/stop/restart error toasts.
- Installer progress and error messages.
Install
Run LaraEnv-0.4.15.msi. Existing installs update in place; the in-app updater will also offer it. Verify against LaraEnv-0.4.15.msi.sha256.
LaraEnv 0.4.14 — Service logs, running badges & context-aware splits
Service logs, running indicators & smarter splits
View service logs
A new button next to the window controls opens a Service logs viewer. Each service's stdout/stderr is captured into a rolling buffer, so you can read the output of any started service — nginx, MySQL, PostgreSQL, Mailpit, Redis, php-fpm — and quickly see why one failed to come up.
Libs/Tools shows running state
Each service in Libs/Tools now shows a live RUNNING / STOPPED badge. A service that's running but hidden from the dashboard no longer looks "off".
Splits open in the same folder
Splitting a terminal pane now opens the new pane in the active pane's working context (the project folder / the directory it was started in) instead of the default install directory.
Install
Run LaraEnv-0.4.14.msi. Existing installs update in place; the in-app updater will also offer it. Verify against LaraEnv-0.4.14.msi.sha256.
LaraEnv 0.4.13 — Service start/stop feedback & live terminal PATH
Dashboard & terminal quality-of-life
Service cards show a transitional state
Starting or stopping a service (nginx, MySQL, Postgres, Mailpit, Redis…) now shows an amber STARTING… / STOPPING… state immediately and disables the card until the real status arrives. No more wondering whether your click registered — or accidentally double-clicking a service (like nginx, which also brings up its php-fpm dependencies) while it's still coming up.
Terminal resolves the live PATH
The embedded terminal used to inherit the PATH snapshot from when LaraEnv launched, so a CLI you installed afterwards (global npm bins, claude, etc.) showed up as "command not found" until you fully quit and reopened the app. It now re-reads the live machine + user PATH from the Windows registry every time a shell opens, so newly installed tools work without restarting LaraEnv.
Install
Run LaraEnv-0.4.13.msi. Existing installs update in place; the in-app updater will also offer it. Verify against LaraEnv-0.4.13.msi.sha256.
LaraEnv 0.4.12 — Terminal workspace: floating groups & detachable windows
Terminal workspace — floating groups & detachable windows
The Terminal page is now a flexible workstation built for "vibe coding": run many shells, SSH sessions and project terminals side by side, arrange them however you like, and even pop them out into their own windows.
What's new
- Floating group windows — each group is a movable, resizable window with its own browser-style tab strip. Overlap them, bring one to front, maximize, or snap to a screen edge/quadrant (Windows Snap style).
- Drag-to-split panes — drag a tab or pane onto another pane's edge to split it; drop on the center to merge as a tab. The split buttons remain as a shortcut.
- Browser-style tabs — reorder within a group, drag a tab into another group to merge, or tear it off onto the canvas to spin up a new group.
- Detach to an independent window — pop a group out into its own OS window (opens maximized) with the ⧉ button or by dragging it outside LaraEnv. Bring it back anytime with the ⇤ button.
- Layout persistence — your groups, tabs and splits are restored on the next launch, with each terminal re-opened (SSH reconnects with the live progress timeline).
- Polish — the first terminal opens maximized, panes have rounded corners and a small text inset, and a closed-out canvas always offers a New terminal button.
Install
Run LaraEnv-0.4.12.msi. Existing installs update in place; the in-app updater will also offer it.
Verify the download against LaraEnv-0.4.12.msi.sha256.