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.

free to use · macOS · Windows

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.

Local Test local pages

Projects (1)

  • portfolio :8001

v1.4.2

portfolio

LIVE

~/Sites/portfolio

Local deployment

Your site is live at

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

Defaultfollows your system
Pocket Greenhandheld LCD
Berry Pockettranslucent purple
Midnight Harbordeep navy
Neon Driftcyan on violet
Amber TerminalCRT amber
Rose Quartzpastel pink
Matcha Creamsoft green
Glaciericy blue
Paper & Inkwarm serif

Default follows whatever your system is set to, which is why its capture is dark here.

Why not just…

Local Test compared with the two usual ways of previewing a folder.
TaskLocal TestTerminal serversA hosted static site
Getting a site upone clickremember flags & portspush to a repo first
Who can reach ityour machine, by defaultyour machinethe whole internet
Runs your softwarebuilt inseparate toolsno
Live reloadbuilt inextra toolingno
Editing filesbuilt-in editoryour editoryour editor
Show your phoneone switchIP jugglingpublic 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.

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

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.

Your download has started

macOS will block it the first time

This is expected, and it is not a virus warning. Local Test is not signed with an Apple Developer ID, because that is a paid yearly membership and this app is free. macOS treats any unsigned app the same way, so it stops the first launch and shows something like:

“Local Test” can’t be opened because Apple cannot check it for malicious software.

macOS Sequoia (15) and newer

Apple removed the old right‑click shortcut in these versions, so use this one.

  1. Drag Local Test into your Applications folder, then double‑click it once. It will be blocked. Click Done.
  2. Open System Settings and go to Privacy & Security.
  3. Scroll down to the Security section. You will see a line saying Local Test was blocked.
  4. Click Open Anyway, then confirm with your password or Touch ID.

macOS Sonoma (14) and older

  1. Drag Local Test into your Applications folder.
  2. Right‑click (or Control‑click) the app icon and choose Open.
  3. In the dialog that appears, click Open again.

You only do this once. After the first launch the app opens normally, and updates install without asking again.

Make sure the file is really ours first

Since macOS cannot vouch for the app, you can check the download yourself. In Terminal, from your Downloads folder:

shasum -a 256 <file>

Compare the result with the checksum shown under the download button, or in SHA256SUMS.txt. If they differ, delete the file and do not open it.

If you would rather use the Terminal

This removes the quarantine flag macOS puts on downloaded files:

xattr -d com.apple.quarantine "/Applications/Local Test.app"

Only run that on a file you have checked. It is the same permission you grant by clicking Open Anyway, just typed out.