Skip to content

Releases: thayronarrais/laraenv

LaraEnv 0.4.21 — Command bar runs from the tray; native or xterm.js terminals

18 Jun 15:39

Choose a tag to compare

Highlights

This release makes the Command Palette work from the tray and gives terminal/SSH commands a native-or-in-app choice.

  1. 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.
  2. 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+K palette.
  3. 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 terminalEnter = native external terminal, Shift+Enter = in-app xterm.js tab. Applies to "Open terminal · ", the inline launcher (<project> php artisan …), and ssh:<host>. The palette footer and the selected row show the ⇧↵ xterm.js hint.
  • External SSHssh:<host> on Enter opens your default terminal running the ssh CLI 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.msi and 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

17 Jun 19:21

Choose a tag to compare

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.

  1. 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).
  2. 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.
  3. Inline launcher. Type project php artisan migrate to run a command in a project's terminal, or ssh:host to open an SSH session. Tab autocompletes projects, artisan/npm commands, and hosts.
  4. 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

20260617-1926-14 4788598

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.msi and 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

15 Jun 12:07

Choose a tag to compare

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.

  1. Custom dev commands now resolve php / composer without full paths. The dev runner only put the project's Node bin on PATH, so a custom command like composer run dev or php artisan serve failed unless you typed full executable paths. It now prepends the project's PHP + Composer + Node bin dirs, just like the embedded terminal.
  2. One-click "Make composer run dev Windows-safe". Laravel 11's dev script runs php artisan pail, which needs the pcntl extension — and pcntl has no Windows build, so composer run dev crashes (and --kill-others takes the whole stack down). A new button in the dev-command modal rewrites your project's composer.json to drop just the Pail process, so composer run dev runs natively on Windows.
  3. 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 dev Windows-safe" button — strips the php artisan pail process (and its --names entry) from composer.json's dev script. Explicit and user-triggered (never automatic), idempotent, and it only touches that one line — the rest of your composer.json formatting is preserved.
  • Stop actually frees the portcomposer run dev / php artisan serve spawn detached children that a PID-tree taskkill missed, leaving the port bound so the next Start collided. Stop now also frees the ports the tree was listening on (scoped to our own php/node processes).
  • Proxy targets the app server, not Vite — for a Laravel composer run dev that starts both artisan 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's ext-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/node processes.

Install

  • Download LaraEnv-0.4.19.msi and 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 dev Windows-safe" button edits your project's composer.json only when you click it; it's reversible (it's your file, under version control).

LaraEnv 0.4.18 — Detect config loss & storage/ preservation fixes

10 Jun 20:24

Choose a tag to compare

Highlights

Two data-safety fixes for Deployments, both found while dogfooding 0.4.17:

  1. 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.
  2. Re-apply now preserves storage/ too. 0.4.17 protected .env; this release extends the same protection to the whole storage/ 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 apply blob alongside the fresh detection results 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, .env and storage/ 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 .env preserved, 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.msi and 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

10 Jun 20:06

Choose a tag to compare

Highlights

  1. 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 install only runs when composer.json/composer.lock actually changed since the last deploy, npm ci && npm run build only when package.json/package-lock.json (or resources/, vite.config.*) changed. First deploys run everything.
  2. "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.
  3. Your .env survives re-apply. Re-running Apply used to wipe the deploy directory and recreate .env from .env.example, silently destroying hand-edited values (mail creds, API keys). Apply now backs up .env before the wipe and restores it over the fresh clone.
  4. Fixed: service cards stuck on RUNNING after Stop all. Closing the service-logs viewer silently deregistered every service:status listener 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

  • .env preserved on re-apply — backed up to /tmp before the wipe-and-clone, restored after. The deploy pipeline itself uses git fetch + reset and 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 allEventsOff("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 by EventsOn. The same fix was applied to install:progress (closing the PHP Extensions or Bootstrap modal no longer kills download progress on the Libs/Tools page).

Install

  • Download LaraEnv-0.4.17.msi and 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

09 Jun 22:24

Choose a tag to compare

What's fixed

Two bugs that broke cloud deploys to fresh Ubuntu/Debian hosts:

  • composer install failed with Class "Normalizer" not found. The PHP package list installed during apply was missing php<ver>-intl. Without ext-intl, Symfony String (used by Composer) fatals on startup. Apply now installs php<ver>-intl alongside the other extensions.
  • nginx -t failed with invalid value "http_502". The generated vhost listed http_502 in fastcgi_next_upstream. Unlike proxy_next_upstream, the FastCGI variant does not accept http_502/http_504 (those are gateway errors nginx emits itself, not FastCGI backend responses). The directive now uses http_500 http_503 only.

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 nginx

Then re-run the deploy — both steps are idempotent and will overwrite cleanly.

Install

  • Download LaraEnv-0.4.16.msi and 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

09 Jun 22:07

Choose a tag to compare

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

09 Jun 22:01

Choose a tag to compare

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

09 Jun 21:40

Choose a tag to compare

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

09 Jun 21:19

Choose a tag to compare

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.