Local release and deployment manager — stable HTTPS hostnames and release semantics for local projects
Project description
Berth
Berth is a local release and deployment manager. It gives every project's services a stable, human-readable HTTPS hostname and proper release semantics — versions, environments, deploy, rollback — instead of the usual mess of localhost:3000, localhost:8000, and remembered-by-accident ports.
Quickstart
1. Prerequisites
- Docker Desktop (with WSL2 backend on Windows)
- mkcert —
winget install FiloSottile.mkcert(Windows) /brew install mkcert(macOS) - Python 3.11+
2. Install Berth
PyPI publish is in progress under the distribution name
berth-deploy(theberthname was already taken). Once published:pipx install berth-deploy. Until then, install from git:
pipx install git+https://github.com/AhmadDaghameen/Berth.git
Or pin to a release:
pipx install git+https://github.com/AhmadDaghameen/Berth.git@v0.1.0
3. Bootstrap
berth setup
This installs the mkcert CA, generates a wildcard *.test certificate, starts the Traefik reverse proxy on ports 80/443, and creates the berth-net Docker network.
4. Register a project
# In a directory containing berth.project.yaml:
berth register .
# Or scaffold a new one:
berth init
5. Start a project
berth up myproject
Berth builds images, starts containers, adds hosts entries for all routes, and prints the HTTPS URLs — all with a trusted padlock, no manual port management.
https://app.myproject.test
https://api.myproject.test
6. Check status
berth status
berth doctor # diagnose issues
.test TLD rationale
Berth uses the reserved .test TLD (RFC 2606). Do not use:
.dev— HSTS-preloaded in browsers; causes HTTPS trust failures..local— collides with mDNS/Bonjour on macOS/Linux.
*.localhost auto-resolves to 127.0.0.1 in Chromium/Firefox as a zero-config fallback, but subdomain nesting (e.g. app.myproject.localhost) is not universally supported.
Windows DNS notes
By default, Berth manages hosts entries fenced between # >>> berth managed <<< markers.
Editing the hosts file requires an elevated (Administrator) terminal.
For a wildcard upgrade (no per-hostname hosts edits), install Acrylic DNS Proxy and add a rule: *.test → 127.0.0.1.
Dashboard
Once Berth is set up, the dashboard is available at https://berth.test (Phase 3).
Phase roadmap
- Phase 1 ✅ Routing foundation: setup, register, up/down/status/open
- Phase 2 ✅ Multi-service projects, release management (deploy/rollback/history)
- Phase 3 ✅ Environments & dashboard
- Phase 4 ✅ Compose import, static/external service types, shared infra (Mailpit, Redis)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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 berth_deploy-0.1.0.tar.gz.
File metadata
- Download URL: berth_deploy-0.1.0.tar.gz
- Upload date:
- Size: 64.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e1d5826b6e6a75a68b4f950cd1cf768ebb6fc840da5729a0402cb8689ed2647
|
|
| MD5 |
dff87f9c5a1c03588a579c5ac9626faa
|
|
| BLAKE2b-256 |
e33fa8c485241d2b0270e950016e9536147f95ab2e9e1ac0efe0537f5507ea3e
|
Provenance
The following attestation bundles were made for berth_deploy-0.1.0.tar.gz:
Publisher:
publish.yml on AhmadDaghameen/Berth
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
berth_deploy-0.1.0.tar.gz -
Subject digest:
0e1d5826b6e6a75a68b4f950cd1cf768ebb6fc840da5729a0402cb8689ed2647 - Sigstore transparency entry: 2063063741
- Sigstore integration time:
-
Permalink:
AhmadDaghameen/Berth@5693d0a7e79132ceca34b62b053bfcecacb8b169 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/AhmadDaghameen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5693d0a7e79132ceca34b62b053bfcecacb8b169 -
Trigger Event:
release
-
Statement type:
File details
Details for the file berth_deploy-0.1.0-py3-none-any.whl.
File metadata
- Download URL: berth_deploy-0.1.0-py3-none-any.whl
- Upload date:
- Size: 50.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1526c8d969d40ad586f7006fd55f4feb079df2a487194fc6291cfd95f87f028b
|
|
| MD5 |
8eeab4c3d02cd562f221c03f1d91513f
|
|
| BLAKE2b-256 |
5e433216cd8477e4141f240251308bea8064e4dc84beb5d3fbd924a9c74e6145
|
Provenance
The following attestation bundles were made for berth_deploy-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on AhmadDaghameen/Berth
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
berth_deploy-0.1.0-py3-none-any.whl -
Subject digest:
1526c8d969d40ad586f7006fd55f4feb079df2a487194fc6291cfd95f87f028b - Sigstore transparency entry: 2063063841
- Sigstore integration time:
-
Permalink:
AhmadDaghameen/Berth@5693d0a7e79132ceca34b62b053bfcecacb8b169 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/AhmadDaghameen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5693d0a7e79132ceca34b62b053bfcecacb8b169 -
Trigger Event:
release
-
Statement type: