local-preview
A local-first preview-deployment orchestrator: every commit of a registered
git repository becomes a servable preview at its own subdomain
(<sha>-<repo>.preview.localhost:8080), built once, deduplicated by
content, and served from a single binary.
local-preview resolves each commit into a (frontend artifact, backend
artifact) pair by content-addressing the relevant subtrees. Commits that
don't touch the frontend (or backend) reuse the existing artifact — and the
already-running backend process. Backend state follows git lineage: a new
backend version forks its data from the nearest deployed ancestor, so
previews feel continuous on a straight line of commits while divergent
branches can never corrupt each other.
Install
uv tool install local-preview
This installs the binary to ~/.local/bin/preview.
Make sure to have that on your PATH.
Run
preview serve
The server listens on :8080. Open http://localhost:8080/ for the
dashboard.
Or with Docker Compose:
docker compose up -d
📖 Documentation
Full documentation lives at https://jmelahman.github.io/local-preview/:
- Quickstart — register a repo, deploy a commit, open the preview.
- Configuration — flags and env vars.
- REST API — endpoints exposed by the running server.
- CLI —
serve,repo,deploy,install-hook.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file local_preview-0.14.1-py3-none-manylinux_2_17_x86_64.whl.
File metadata
- Download URL: local_preview-0.14.1-py3-none-manylinux_2_17_x86_64.whl
- Upload date:
- Size: 8.1 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c18441456857df1114c3d2e8830c7d9ab7994926e6b3bf786d5e1837260a5c0
|
|
| MD5 |
5caba6e8b262946bc975ac125d8f19cf
|
|
| BLAKE2b-256 |
995b620d6042f0e140e522d2c5ae6ad10ed6ae2ec19cf280f49d00e77e63cf07
|
File details
Details for the file local_preview-0.14.1-py3-none-manylinux_2_17_aarch64.whl.
File metadata
- Download URL: local_preview-0.14.1-py3-none-manylinux_2_17_aarch64.whl
- Upload date:
- Size: 7.4 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
67609f3bf627d6afabcd21e5e923ea19e4086b38c010e51197f33ef34767fc30
|
|
| MD5 |
dc777e8fffe839eac8a3a294590a80ad
|
|
| BLAKE2b-256 |
3a84e48cf03482603b7d16fe1aec8f8038e52ab1fbc56eaedb0c5801dcf0fdc8
|
File details
Details for the file local_preview-0.14.1-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: local_preview-0.14.1-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 7.7 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd83a571d97edc0ae4d2072fa696eebf3a01c04a097232c61baea70edba1f632
|
|
| MD5 |
2630123db8ecd03a52334345fb877f35
|
|
| BLAKE2b-256 |
9689d1f6f7db02657e827996992d20a2118a0c15ad0c194a043fbfbc5f31a6c9
|
File details
Details for the file local_preview-0.14.1-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: local_preview-0.14.1-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 8.1 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95095bc9bcd58ecd23eb750289b0fc884a41127f0e78ca83a5bf41643259ab7a
|
|
| MD5 |
694c6eb923f6fd24a4fdf9a198a9e9c4
|
|
| BLAKE2b-256 |
bcab95fe67f20447e05f2fda50b5890f2c3d4eb097b56001ec9423fc605f3b8f
|
File details
Details for the file local_preview-0.14.1-py3-none-any.whl.
File metadata
- Download URL: local_preview-0.14.1-py3-none-any.whl
- Upload date:
- Size: 8.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
237a7eb9f3872dd4481f2f0a7860e96abe0ee0b23e418d99cd3ecf847b585437
|
|
| MD5 |
c148af77183c55602c41f792a90bab79
|
|
| BLAKE2b-256 |
dc9bea4701e792fd6ab59e325c64a7879cec4c973ddda6945150be9e765c60d6
|