Changelog
Local Test went from its first commit to v1.38.0 over two days, so the 61 releases below are closely spaced. Newest first. Versions follow SemVer and the app's own badge rule: anything under 1.0.0 reads as Beta, 1.0.0 and up reads as v.
- Latest release
- Releases
- 61
- Current
- v1.38.0
The 1.x line
49 releases, starting with the first stable build. Local Test has not been in beta since 1.0.0.
-
v1.38.0
CurrentThrowing away your changes to a file, or putting a file back from an old commit, now has to be the project you are actually looking at. Both operations named the file in their confirmation and not the project, so an id muddled anywhere between the click and the handler would have destroyed real work in a real folder behind a dialog that read as entirely correct. Both dialogs now name the project and its folder, and a request for anything other than the project on screen is refused rather than performed. And the Minecraft setup says plainly where a server jar comes from and what is actually checked: the digest proves the file matches what the publisher listed, it does not prove who the publisher is, nobody signs these jars with anything checkable, and pretending otherwise would be worse than saying so.
-
v1.37.0
Your GitHub token, your AI provider key and your licence key are no longer sitting in a file in the clear. They go through the operating system's own store, Keychain on macOS and DPAPI on Windows, so a backup of the settings file, a synced profile folder or a copied disk image no longer hands all three to whoever has it. Existing keys move across on the next launch, with nothing to do and nothing to re-enter. A profile carrying a key sealed on a different machine says exactly that, rather than showing an empty box that looks like the app lost it. And an update feed that publishes a version older than the one you are running is now called what it is, a stale feed, instead of being reported as "you are on the latest version" in a green toast, which is the answer that keeps somebody on an old build while the app tells them all is well.
-
v1.36.0
A running Minecraft server is now something you can administer from Local Test rather than a wall of log: a list of who is on, and a console that takes the commands a server console takes, with the arrow keys walking back through what you have already sent. Backing up a world is one button, into the project's own backups folder, and the app says plainly that a copy taken while people are playing can be a few seconds behind what they are doing, because it can. Two backups pressed in the same second used to leave one archive, having deleted the other first, which is fixed. And backing up no longer types anything at a project that is not a Minecraft server, which it did, three commands at a time, into whatever that program was in the middle of.
-
v1.35.0
The command palette now knows about the whole app rather than the eight things that existed when it was written: 78 actions across nine groups, with their shortcuts, and searchable by what you would actually type, so "shut down" finds Stop. Errors no longer vanish with the toast that showed them. A project whose folder you deleted or moved says so instead of looking fine until you press Deploy, and offers to find it again. A Minecraft server is now stopped the way Minecraft wants, by sending it "stop" and letting it save, rather than being killed. And the app will only ever hand a plain http or https link to your browser, through one gate, with a test that fails if anybody adds a second way round it.
-
v1.34.0
Minecraft servers, natively. Pick Paper, Vanilla, Spigot or CraftBukkit and a version, choose where it goes and whether it gets a subfolder of its own, and Local Test fetches it, checks it against the checksum its publisher published, and sets it up. It tells you which Java the version needs before the download rather than after a stack trace, refuses to install on top of an existing world, and will not accept Mojang's EULA for you. Spigot and CraftBukkit are compiled on your machine with BuildTools, because they may not lawfully be handed out as files, and the app says so rather than leaving you watching a twenty minute silence.
-
v1.33.0
The editor highlights the bracket matching the one under your cursor, and marks one that has no partner, which is usually the reason a file will not parse and the tedious thing to find by eye. A bracket inside a string or a comment is not counted, because it is not a bracket. And a run that worked now records what it ran on, so if node moves from 20 to 24 underneath a project the app says so rather than leaving you to wonder what changed, since nothing about the project did.
-
v1.32.0
A small mark on a project in the sidebar when there is work in it you have not committed, or commits you have not pushed, so the question of which of eight projects you left something in is answered without opening each one.
-
v1.31.0
Environment variables have a real editor instead of a textarea: a row per variable, a warning when a name is not a valid one, and anything that looks like a credential shown as dots rather than in the clear, so a screen share of this panel does not hand over your keys. The value of a hidden one never reaches the window at all, and editing the row next to it cannot accidentally overwrite it. There is also a button to load a .env file from the folder, which shows you the names it found before it takes anything.
-
v1.30.0
A run that dies now says what happened, in a sentence, with the thing to do next and a button that does it: "That port is taken" and an offer to move to a free one, rather than "exited with code 1". Dependencies that were never installed are noticed before you press Run rather than after it fails, with the right package manager picked from the lockfile that is actually there. A project can restart itself when it dies, off by default and backing off so a crash loop is visible rather than endless, and the dot on a project row now tells running apart from running and actually answering.
-
v1.29.0
The Git panel is now worth using instead of a terminal: the history with what each commit touched, the actual diff of a file before you commit it, tick boxes so one stray edit does not ride along with every commit, throw away the changes to a single file, put a file back as it was at an earlier commit, branches, and one button to start a repository in a folder that has none. It also checks, every time, for things that should never be committed, and says plainly when one of them is already in the history, because a .gitignore does not help then. Selecting a project in the sidebar could run a program the repository chose, which is fixed.
-
v1.28.0
More than one file can be open at once, with tabs, and coming back to one puts you where you left it rather than at the top. Closing a tab drops you into the next file instead of back to the file list, and a tab with unsaved changes says so. Closing a file with unsaved changes now asks the real question, which has three answers and not two: save it, close it anyway, or never mind.
-
v1.27.0
AI mode now needs an API key rather than a paid tier, which is what was actually gating it all along: it runs on your key, billed to your account, and Local Test takes no cut, so putting it behind a tier that is not on sale meant nobody could use it at all. You can now choose the provider and the model, and Ollama runs on your own machine with no account, no key, no bill and nothing leaving the computer. There is an AI button beside the editor and the commit message box, on Cmd/Ctrl+I, that works on what you have selected: a reply that changes your file arrives as a diff with Apply and Discard, never applied on its own, and one Cmd/Ctrl+Z puts it back.
-
v1.26.0
The editor is now a code editor. Eighteen languages are highlighted by a real tokenizer written for this app, so a hash inside a Python string is not a comment and a slash that opens a regular expression is not a division. There are line numbers, the caret says which line and column it is on, Enter keeps and adds indentation, Tab indents a whole selection, typing a bracket or a quote brings its partner and typing the closer steps over it, Cmd/Ctrl+/ comments the selected lines, and JSON, YAML, JavaScript, CSS and HTML are checked for errors as you type with the line, the column, and a message that says what you actually did rather than naming a token. JSON, CSS, HTML, YAML and Markdown have a Format button that refuses a file with an error in it and can be undone with one Cmd/Ctrl+Z.
-
v1.25.0
Sharing a project now answers only devices that are actually on your network. Sharing had started listening on IPv6 as well as IPv4, which is what makes it work on a modern network, but IPv6 has no router doing NAT in front of it, so on a machine with a public v6 address "let the other devices on my wifi see this" had quietly become "let anyone who learns this address see this". A request from a network device could also run script on your site's own origin, because the page explaining a refusal quoted the file extension back without escaping it. And the two switches that page told you to turn on did not exist anywhere in the app; they do now, along with a place to name a tunnel or a hosts file entry so it stops getting a 403 from a server that is working perfectly.
-
v1.24.0
Cmd/Ctrl+F now searches the file you have open, which is what it means in every other editor and is not what it did here: it left your file alone and went off to filter the file list. The keyboard sheet had drifted out of true in both directions, promising shortcuts that were not registered and omitting ones that were, and its last three rows were being clipped out of sight by a panel that had stopped being tall enough, so it showed a heading with nothing under it.
-
v1.23.0
Closes two ways a repository could run a program of its own choosing on your machine: a git config naming an askpass helper, or naming its own upload-pack or receive-pack command, each of which git honours on a plain pull or push and neither of which the existing guard covered. Also stops the editor buttons taking the whole app down when the editor has been uninstalled, stops a folder full of files choosing which program opens it on Windows, and stops a folder cloned from one repository quietly syncing itself from another. The activity log can now be filtered by response, so asking for the 404s is one click.
-
v1.22.0
Sharing a site with other devices now works at every address your machine actually has, instead of picking one at random and refusing the rest, and it no longer hands a browsable listing of your project folder to anyone on the network, which the setting had promised all along. A saved API key or GitHub token now says on screen that it is saved, rather than showing a grey hint that looks identical to an empty box.
-
v1.21.0
Fixes three ways the guided tour came apart under you: pressing Add or Enter with a half-typed repository name started a real clone the step could never finish, so Add now stays closed until it matches and a stray click or Escape can no longer shut the Settings panel a step is pointing at; opening the template menu distorted the whole sidebar, because lighting it dropped it out of its own positioning; and skipping that step reopened the menu instead of moving on. Removing a project now asks you to type its name, the way GitHub does.
-
v1.20.0
Local Test is no longer MIT licensed: the source stays published so anyone can read it, but redistributing it, selling it, or removing the licensing checks is no longer permitted, which is what makes a paid tier possible at all. Everything released before this keeps the MIT terms it went out under.
-
v1.19.0
Any path on screen can be copied with one click: the project folder, the folder you are browsing, every file and folder in the list, and the clone folder in Settings, each with a small copy button beside it and a note saying what went to the clipboard.
-
v1.18.0
Closes the Windows spellings of a denied file, where the same bytes answer to more than one name: a stream suffix, an old-style short name, or a trailing dot each used to walk straight past the list that protects .env, node_modules and private keys.
-
v1.17.0
Makes the app usable from the keyboard: opening a dialog now puts you inside it, Tab stays in it, closing puts you back where you were, and the tabs and filter buttons say which one is selected rather than only looking it.
-
v1.16.0
Closes a hole where a symlink with an innocuous name served the very files the deny list exists to protect (.env, .git/config, a private key), stops a process that ignores the polite stop signal being orphaned when you quit, no longer leaks a file handle for every cancelled download, keeps multibyte characters intact when output is split across chunks, and gives the toasts, the project name field and both filter boxes something a screen reader can announce.
-
v1.15.0
Fixes three things that never worked and one that could lose everything: New file, New folder and Rename all called a dialog Electron does not have and failed silently, the Edit, Rename and Delete buttons on a file row were swallowed by the row itself, and a settings file that could not be read (a permissions problem, a failing disk) was mistaken for a fresh install and then overwritten, taking every project and every saved key with it.
-
v1.14.0
The two platforms no longer have to be released together: each download in the manifest now records its own version, a platform that was not rebuilt keeps exactly what was published for it instead of being switched off, and the app only offers an update it can actually install on the machine asking.
-
v1.13.1
Picking a second premade prompt now replaces only the prompt, keeping the question you wrote yourself, which the first attempt at this got wrong by mistaking the previous prompt for your own words.
-
v1.13.0
Fixes found by reviewing the three new features line by line: pasting the GitHub URL of a branch, a file, or a pull request now clones that repository rather than the last two words of the link (and a link to another host is refused rather than quietly fetched from GitHub), clones are filed under their owner so two accounts with a same-named repository no longer overwrite each other, exported backups no longer carry the licence key or a project's environment variables, AI mode survives a connection that drops mid-reply instead of leaving Send disabled until restart, a key carrying an invisible character is refused with an explanation, a huge file is skipped rather than read whole into memory, the fixed instruction sent with every question is now printed in full in the panel, and the cost note says twenty cents rather than a few, which is what a whole file actually costs.
-
v1.12.3
Fixes the refusal a full project list gives when you try to add several at once, which said there was room for 0 and then told you to add fewer.
-
v1.12.2
Fixes an in-app updater that refused every real update: it required an installer to sit on the same host as the manifest, but the installers are too large for the site and are served from object storage, so the check is now a fixed list of hosts compiled into the app, with the SHA-256 match against the manifest still the thing that decides whether an update installs.
-
v1.12.1
Points the app at its real home, local-test.app, so update checks, the changelog link, and a new Help menu entry for downloads all resolve, and clears out the claims that Local Test is open source or handed out through GitHub Releases, along with every em dash and en dash in the repo.
-
v1.12.0
Adds AI mode behind VIP: an AI tab on every project with nine premade prompts that arrive already carrying the project's file list, activity log, open file or changed files, assembled where you can read and edit every word before it is sent, answered with your own Anthropic key (stored masked, kept out of backups, never logged, sent only to Anthropic) and priced per answer, with a plain-English tutorial covering what an API key is, where to get one, who pays and roughly how much, and a failure path that never throws away what you typed.
-
v1.11.0
Introduces tiers: Local Test Free keeps five projects and says so plainly when you reach it (with the way past it one click away), anyone who already had more than five keeps every one of them, and VIP (unlocked with a license key in Settings, marked with a gold crown, shown as a masked key you can remove at any time without losing a project) makes projects unlimited.
-
v1.10.0
Adds a repository browser: scan a folder of clones and add any number of them at once (each listed with its branch, whether it has a page or a run command, and its remote, with ones already added shown greyed out rather than hidden), or type a GitHub username and clone several of that account's repositories in one go, with an optional read-only personal access token for private repositories that is masked in the UI, kept out of backups, and never leaves the main process.
-
v1.9.1
The tour now closes a panel the next step does not need, so skipping ahead out of Settings puts Settings away, and its lighting has three levels: the app behind is dimmed, an open panel sits at normal brightness, and the control the step is about is lifted above both.
-
v1.9.0
Security hardening from an external audit, with the update channel now verified end to end (checksum required, HTTPS only, artifact pinned to the manifest origin): an imported backup can no longer plant a run command or arm auto-start, symlinks can no longer serve files from outside a project through an index page, 404 page, SPA shell or serve folder, dotfiles like .env and .git are refused rather than merely hidden, a foreign Host header is rejected so a website cannot read your projects by rebinding DNS, clone and pull run through the hardened git wrapper with filter and diff drivers disabled, the macOS update swap no longer builds a shell command from archive contents, update redirects cannot drop HTTPS or change host, and commands found inside a cloned repo need a look before they run.
-
v1.8.0
Tour fixes from a real run-through: the dim now sits under the app's own modals so Settings is lit rather than blacked out, the panel never covers what it highlights (and follows the template menu once it opens), steps bring their own project to the front so the words match the button, skipping fulfils a step instead of stranding you, leaving clears away the examples the tour created, and starter templates refuse a folder that is not empty with instructions for making one.
-
v1.7.0
Fixes the guided tour so the app stays clickable during it (the overlay was swallowing every click), makes action steps advance when you do the action instead of asking for Continue, verifies what you type as you type it, and never clips its panel at any window size; adds a dependency-free Node server template the tour uses to demo running real software, a Guided tour button in Settings, and update checks that report new commits when Local Test is running from a git clone.
-
v1.6.1
Puts an update status chip next to the version in the corner: "up to date", "checking", "1.7.0 ready" (click to install), or "check failed", with the time of the last check in its tooltip.
-
v1.6.0
Adds a guided tour with spotlight highlighting that walks a first-timer through adding a real GitHub repo, deploying it, editing files, running an app, and deleting both so they finish with a clean slate; the Continue button stays hollow until each step is actually done, Skip jumps ahead, and exiting asks first. Also shows how long ago each project was last updated.
-
v1.5.1
Styles the dropdowns, which were still rendering as raw system controls: the Font size and sort selects now match the app's inputs in every theme, chevron included.
-
v1.5.0
Advanced launch behaviour: a project can start itself when Local Test opens (gated behind typing its exact name, with pasting blocked and the name re-checked in the main process), an "open at login" setting, and update checks that run on launch and hourly while the app is open, each one narrated by a dismissible banner, including the checks that find nothing.
-
v1.4.2
Redraws the app icon as a pocket console with the play mark optically centred on its screen, replacing the window-chrome mark whose triangle leaned left and whose dots crowded the corner curve.
-
v1.4.1
Credits graysonanderson.com throughout the app (Settings, the Help menu, the tutorial, the command palette, the README, and the package metadata) with a test that keeps the link reachable.
-
v1.4.0
Organizing: colour-coded tags on every project with tag filtering, a running/stopped filter, six sort orders (my order, name, recently added, recently deployed, most requests, port), pinning, per-project notes, and a redrawn app icon with the play mark properly centred.
-
v1.3.0
A retro-handheld pass over the look: two new pocket-console themes (Pocket Green and Berry Pocket), tactile shading on the controls, and short reduced-motion-aware animations throughout, plus a decked-out installer with pixel-art DMG artwork, drag-to-Applications layout, and Windows installer branding.
-
v1.2.1
Hardening pass from an adversarial review: project search now honours the symlink jail, Windows editor and terminal launches can no longer be influenced by folder names, git runs with a repo's own config disabled, oversized files can no longer be saved back truncated, undo works after every editor action, per-project environment variables are actually saved, and every theme now meets WCAG AA contrast (with a new test that enforces it).
-
v1.2.0
Editor and workspace polish: find and replace, insert an image from your computer, rename files, a keyboard-shortcut cheat sheet, a template-led first run, drag-to-reorder projects, per-request timings with live uptime, and activity export.
-
v1.1.0
The creator update: a full Markdown editor with live preview, formatting toolbar, and auto-save that pairs with live reload; project text search; one-click git commit and push; five starter templates; per-project environment variables; menu-bar and tray controls with a real application menu; device-sized preview windows; Cursor/VS Code/Zed/Sublime detection plus Open terminal; deploy-all and stop-all; and Local Test now refuses to serve its own installation.
-
v1.0.0
First stable release: a tested self-updating system (download and in-place install on macOS, installer hand-off on Windows, quiet check on launch) with an in-app uninstaller, a Cmd/Ctrl+K command palette, drag-and-drop to add folders, Open in VS Code, a live Dock badge and smart port assignment, a symlink-aware security hardening pass, and refreshed docs.
Beta history, 0.x
12 betas, from the first working build to the release candidate. The app was called Test Run until 0.1.5.
-
Beta 0.1.5
Renames the app to Local Test everywhere (settings migrate automatically from the old Test Run profile) and fixes the two features that broke in Finder-launched builds: Run commands and GitHub sync now recover the real shell PATH (npm, python, git are found again), git fails fast with a clear message on private repos instead of hanging, and the app smoke now also runs a command project end-to-end.
-
Beta 0.1.4
The theme dropdown is now a visual picker (each theme shown as its primary and secondary color swatches with the name set in that theme's font, in black), replacing the separate color/font settings, and Settings gains a GitHub section: pick a clone folder and add any owner/name repo as a project that auto-updates before every deploy.
-
Beta 0.1.3
Settings gains named modern Primary and Secondary color options (Cobalt, Iris, Violet, Emerald, Coral, and more) that restyle any theme's accents and live indicators, plus a named Font setting (System Sans, Geometric, Humanist, Editorial Serif, Typewriter Mono, Soft Rounded) alongside font size.
-
Beta 0.1.2
Deploy now auto-detects build-output folders (_site, dist, build, public, out) and serves the built site instead of a raw repo listing, with a per-project "Serve folder" override.
-
Beta 0.1.1
The screenshot tool can now capture any theme and tab (--shot-theme, --shot-tab) with a richer demo project, used to shoot the website gallery.
-
Beta 0.1.0
Feature-complete release candidate: HTTP Range support for media seeking, keyboard shortcuts (Cmd/Ctrl+O add, Cmd/Ctrl+D deploy/stop), and validation against real projects including Local Test running itself; remaining 1.0 blockers are code signing, signed auto-update, and a Windows pass.
-
Beta 0.0.6
Auto-recognizes software when a folder is added (Node, Vite, Rust, Go, Python/Django) and prefills the run command so it loads as software instead of a static localhost site.
-
Beta 0.0.5
Eight named themes (adaptive Default plus Midnight Harbor, Neon Drift, Amber Terminal, Rose Quartz, Matcha Cream, Glacier, and Paper & Ink) with per-theme fonts, gradients, and button colors, an independent font-size setting, and wrap-safe layouts at any window size.
-
Beta 0.0.4
Cloudflare-inspired project workspace: Overview/Files/Activity/Settings tabs, per-project serving settings (SPA fallback, directory listings, live reload), live reload via file watching, a GitHub-style file viewer that opens the README by default (spec.md as backup), and GitHub repo sync (clone/pull, optional pull-before-deploy).
-
Beta 0.0.3
Projects can now run software: an optional per-project command (like
npm start) with live output and a Run/Stop lifecycle, plus SVG icons replacing all emoji and an in-app beginner tutorial. -
Beta 0.0.2
Adds the app icon, packaged installers (macOS DMG/zip, Windows NSIS config), and a manual update check via the corner version badge.
-
Beta 0.0.1
First working beta: GitHub Desktop-style app for saving local folders as projects and deploying them as static sites on localhost, with settings, activity logs, and smoke tests.
Everything on this page is written into the HTML, so it reads the same with scripts blocked or the network down.