Local Test
Your folder, live on your machine.
Pick a folder. Hit Deploy. It’s live at
localhost:8000, instantly, privately, no terminal.
When the folder is software rather than a site, Local Test notices and
runs it instead; when you want to change something first, the files and the
editor are already in the window.
AI mode coming soon VIP coming soon
Rehearse the deploy
This is a hand-built replica of the Local Test window, not a video, not the real app. Press Deploy and it behaves the way the app does on your machine.
portfolio
LIVE~/Sites/portfolio
Local deployment
Not deployed. Hit Deploy to serve this folder at http://localhost:8001.
Your site is live at
Activity
- Deployed, serving on port 8001
- GET / → 200 (3ms)
- GET /styles.css → 200 (0.8ms)
Live at http://localhost:8001/, the Activity tab has the request log.
A replica. Nothing is served, and no button here reaches your machine.
What it does
Serves a folder
Deploy starts a static server that follows the rules a static host follows: index.html at directory roots, your own 404.html, a redirect when a directory URL is missing its slash, a clean listing when a folder has no index page, correct content types, and Range requests so video and audio seek properly.
Live reload is on by default, save a file and the open page refreshes itself. Per project you can turn listings off, switch on SPA fallback for client-side routers, or name the folder to serve; left on auto, Deploy serves the project root, or finds the built site in _site, dist, build, public, or out when the root has no index page. A port that is already taken gives a plain error and a one-click move to the next free one.
Runs software, too
When the folder is a program rather than a site, Deploy becomes Run. Adding a folder with a package.json start or dev script, a Cargo.toml, a go.mod, or a Python entry point prefills the command; you can write any command you like instead.
Its output streams into the Activity feed line by line, a KEY=value block sets environment variables for the run, and Stop kills the whole process tree rather than leaving children behind.
Files, and an editor
Every project opens on four tabs, Overview, Files, Activity, Settings. Files browses the project and renders its README the way a code host does, and you can create, rename, and delete files there (deletes go to the Trash).
Any text file opens in an editor with edit, split, and preview modes: a Markdown toolbar, Cmd/Ctrl+B, I and K, find and replace, lists that continue themselves, word and reading-time counts, and an auto-save switch that pairs with live reload so the browser keeps up as you type. Inserting an image copies it into the project for you. Cmd/Ctrl+F searches every text file in the project and drops you into the editor at the line you pick.
Git and GitHub, one button deep
The project’s Settings tab shows the branch, the changed files, ahead and behind counts, and the last commit. One button commits everything with your message; another pushes, using the git credentials you already have.
Link a project to an owner/name repository and Sync now clones it or fast-forward-pulls it, optionally before every deploy. App settings can add a repository straight from GitHub into a clone folder you choose.
A window to work in
Cmd/Ctrl+K opens a command palette over everything, and a cheat sheet lists the rest of the shortcuts. Drag the sidebar to reorder projects, and search it when the list gets long. Five starter templates scaffold something deployable into an empty folder.
The menu-bar icon starts and stops projects without opening the window; on macOS the Dock badge counts what is live. Preview opens the running site at phone, tablet, or desktop size. Activity logs every request with the time it took beside a running uptime, and exports to a file. Your project list and settings export and import, for moving to another machine.
Eight themes and a font size. Open in Cursor, VS Code, Windsurf, Zed, Sublime Text, WebStorm, IntelliJ, or Neovim when they are installed, plus Open terminal here.
Local by default
Servers bind to 127.0.0.1, so a deployed site is visible to your machine and nothing else, until you turn on LAN sharing for the day you want your phone to see it. Every request is jailed to the project folder with symlinks resolved, so a cloned repository can’t serve something from elsewhere on your disk.
There is no account, no analytics, and no telemetry, nothing about you or your projects is collected. What does use the network is short and deliberate: the update check on launch, which asks whether a newer version exists (switchable off), the download when you choose to install an update, and git clone, pull, and push when you press those buttons.
How it works
- 1
Add a folder
Any folder, a class project, a portfolio, a prototype. Deploying it only ever reads; nothing is written unless you edit a file yourself.
- 2
Deploy
Or Run, if the folder is software. A port that is already taken gives a plain error and a one-click move to the next free one.
- 3
Open it
Your browser opens at
http://localhost:8000. Edit the files; live reload refreshes the page as you save.
Ten themes
All ten ship with the app, alongside a font size. Two of them are pocket consoles. Click any one to look closer.
Default follows whatever your system is set to, which is why its capture is dark here.
Why not just…
| Task | Local Test | Terminal servers | A hosted static site |
|---|---|---|---|
| Getting a site up | one click | remember flags & ports | push to a repo first |
| Who can reach it | your machine, by default | your machine | the whole internet |
| Runs your software | built in | separate tools | no |
| Live reload | built in | extra tooling | no |
| Editing files | built-in editor | your editor | your editor |
| Show your phone | one switch | IP juggling | public URL |
All three are good tools. Local Test is for the moments you want the first column.
What it deliberately isn’t
Most of this is scope that was decided against. The last two are simply not done yet.
- No build pipelines. Files are served as they are, no Jekyll, Vite, or webpack. Run your own build; Deploy will serve
_site,dist,build,public, oroutwhen it finds one, or the serve folder you name. - No HTTPS, no custom domains, no proxying. It is a development server on
http://localhost. - No deploying to the internet. “Deploy” means localhost. LAN sharing reaches devices on your own Wi‑Fi and stops there.
- No accounts, no analytics, no telemetry. Nothing about you or your projects is collected or sent anywhere.
- Not a code editor. The built-in editor is a plain text area with Markdown preview, a formatting toolbar, and find and replace, no syntax highlighting, no language tooling. Your real editor is one button away.
- Not a git client. Status, commit everything, push, clone, fast-forward pull. No branching, staging, merging, or conflict resolution.
- Not code-signed. An Apple Developer ID and a Windows certificate are both paid, yearly, and this project has neither, which is why a downloaded macOS copy needs one right-click → Open, and why an update swaps itself in on relaunch instead of quietly in the background.
- Not yet proven on Windows or Linux. The Windows paths, installer, uninstaller, and process handling are written, but nothing has been run on real Windows hardware, everything so far has been exercised on macOS. Linux should work and has not been tried.
Questions people actually ask
What is “localhost”, actually?
It’s the address your computer uses to talk to itself. http://localhost:8000 means “this machine, channel 8000.” It looks and behaves like a real website in your browser, because it is one, it just lives entirely on your computer.
Does anything leave my computer?
Your files don’t. A deployed project is served by a server bound to 127.0.0.1, which only your own machine can reach, and there is no account, no analytics, and no telemetry, nothing about you or your projects is collected.
Three things do use the network, and all three are things you asked for: on launch the app asks whether a newer version exists (a switch in Settings turns that off); choosing Install downloads that release; and git clone, pull, and push run when you press those buttons. The LAN switch is the only setting that widens who can see a deployed site, and only to devices on your own Wi‑Fi.
Do I need to know how to code?
No. If you have a folder with an index.html in it (from a class, a template, an export) you can use Local Test. If you don’t have one, Cmd/Ctrl+N builds a starter project (blank page, landing page, docs site, single-page app, portfolio) that deploys immediately. There’s a tutorial built into the app that assumes nothing.
Does it work on Windows?
The code is written for it: Windows paths throughout, an NSIS installer and uninstaller, process-tree kill through taskkill, and the Windows shell behind the editor and terminal buttons. What hasn’t happened is a validation pass on real Windows hardware, development and testing so far have been on macOS.
So: supported, and unproven. Running from source works the same way it does on a Mac; no Windows installer has been built or published yet. A bug report from a Windows machine is the single most useful thing anyone could send. One known quirk: turning on LAN sharing may raise the Windows firewall prompt on the first deploy, which is expected.
Will it change the files in my folder?
Serving only reads. Everything that writes is something you pressed: saving in the editor (or leaving auto-save on), inserting an image, which copies the file into the project, renaming a file, deleting one, which moves it to the Trash, scaffolding a template into an empty folder, and git commit, push, or a sync that pulls, including the pull-before-deploy setting, if you turned that on for a linked repository.
Does it update itself?
It checks. On launch it reads the public releases feed and stays quiet unless something newer exists; you can turn that check off in Settings, or run it by hand from the version badge. If you choose to install, it downloads the release and (on macOS) swaps the app in place and reopens it; on Windows it hands off to the installer. Because the app isn’t code-signed, that swap happens visibly on relaunch rather than silently in the background.
Why won’t macOS open the download?
Because it isn’t signed with an Apple Developer ID. That’s a paid yearly membership, and this is a free project, so the first launch of a downloaded copy is right-click (or Control-click) → Open, then Open again in the dialog. Once, and it opens normally after that. A copy you build from source never shows it at all.
My site has a build step, can it still serve it?
Local Test serves files exactly as they are; it doesn’t run your build. Run it the way you normally do, and Deploy will find the result: when the project root has no index page, it serves _site, dist, build, public, or out, whichever has one. You can also name the folder yourself in the project’s Settings tab.
Can I look at it on my phone?
Yes, with a deliberate switch. LAN sharing is off by default; turning it on in Settings binds new deploys to your network interface as well, and the project shows a second address like http://192.168.1.20:8000 that devices on the same Wi‑Fi can open. If you only want to check how it looks at that size, the Preview buttons open the live site in a phone-, tablet-, or desktop-sized window without any of that.
What does it cost?
Nothing. Local Test is free to download and use, no account, no trial, no telemetry, nothing to buy. If it saves you time, there’s a coffee link in the footer.
Get Local Test
Free to download and use. No account, nothing to buy, and nothing about you is collected.
Downloads are prepared per release. If a button is greyed out that file is not on the server right now, the terminal option below works on any platform.
Check the download is the file we published
The app is not signed by Apple or Microsoft, so your computer cannot vouch for it. You can still confirm the file you got is byte-for-byte the one published here: run the command for your system and compare the result to the checksum below. If they differ, do not open the file.
macOS
shasum -a 256 <file>
Windows
Get-FileHash <file> -Algorithm SHA256
- macOS installer
- not published yet
- Windows installer
- Source archive
All checksums are also listed in
SHA256SUMS.txt, which
shasum -a 256 -c SHA256SUMS.txt can check in one step.
The app verifies this same checksum itself before installing an update.
The macOS build is not signed with an Apple Developer ID, that certificate costs money every year and this is a free app, so the first launch is right-click → Open rather than a double-click. Once, then never again. Windows shows its own equivalent warning on first run.
Verify your download
Optional, but it is the only way to know the file you got is the file that was built. Run the command on your download and compare it with the digest above, they should match character for character. The same list is published as SHA256SUMS.txt.