
Trusted localhost HTTPS — local CA, /etc/hosts, mDNS LAN sharing, reverse proxy. Maps https://name.local → localhost:port
Echtes HTTPS für lokale Entwicklung – mit TUI und LAN-Freigabe.
mkdev führt vertrauenswürdiges HTTPS auf *.local aus. Ein einzelnes Go-Binary: Zertifizierungsstelle + Reverse Proxy + /etc/hosts + mDNS-Broadcast + eine vollständige TUI.
Was es anders macht:
https://app.local von Ihrem Telefon oder einem anderen Gerät im selben Wi-Fi auf.mkdev ohne Argumente startet die TUI.internal/safeexec). Keine PATH-basierte Verschleierung, keine gruppenschreibbaren Abkürzungen.knownHost-Zulassungsliste abgesichert. Kein Wildcard, nicht vorgefertigt.mkdev install # CA + Vertrauen + Daemon-Dienst + Menüleisten-Autostart
mkdev add myapp localhost:3000 # leitet https://myapp.local → localhost:3000 weiter
curl https://myapp.local # 200 von Ihrer lokalen App
install ist einmalig: generiert die CA, vertraut ihr im System-Trust-Store, installiert und aktiviert den Daemon-Benutzerdienst (launchd / systemd), registriert die Menüleiste für den Start beim Login und startet die Leiste sofort, wenn eine GUI-Sitzung vorhanden ist. Der Daemon verwaltet den Proxy; die TUI (mkdev ohne Argumente) und mkdev add | remove | list kommunizieren mit ihm über ~/.mkdev/daemon.sock.

Das Hauptmerkmal von mkdev. Teilen Sie eine Route mit jedem Gerät im selben Wi-Fi mit echtem TLS – keine Warnungen, kein Tunneldienst.
s, um die Spalte SHARE auf LAN zu setzen.<name>.local → LAN-IP dieses Rechners bekanntgegeben.https://<name>.local auf. Sobald das Gerät der mkdev-CA einmal vertraut, erscheinen keine Warnungen..local-Routen werden per mDNS gesendet. Andere TLDs werden weiterhin proxied, sind aber nicht über den LAN-Namen erreichbar.s erfolgt live – mDNS-Werbung und die LAN-seitige ACL werden bei der nächsten Anfrage aktualisiert. Kein Neustart.brew install venkatkrishna07/tap/mkdev
Später aktualisieren:
brew update
brew upgrade mkdev
go install github.com/venkatkrishna07/mkdev/cmd/mkdev@latest
Auf eine bestimmte Version aktualisieren:
go install github.com/venkatkrishna07/mkdev/cmd/[email protected]
Vorkompilierte Binärdateien für macOS (Intel + Apple Silicon), Linux (amd64 + arm64) und Windows (amd64) werden auf der Releases-Seite veröffentlicht. Jede Version enthält checksums.txt sowie eine Cosign-schlüssellose Signatur (checksums.txt.sig + .pem) – siehe SECURITY.md#verifying-releases für den Befehl zur Überprüfung.
Unter macOS, wenn Gatekeeper einen direkt heruntergeladenen Binärdatei blockiert:
xattr -d com.apple.quarantine ./mkdev
git clone https://github.com/venkatkrishna07/mkdev.git
cd mkdev
task build
cp bin/mkdev ~/bin/ # oder /usr/local/bin
Erfordert Go 1.25+.
mkdev install # CA, Vertrauen, Daemon-Dienst, Leisten-Autostart – ein Befehl
mkdev # TUI starten
Nach install läuft der Daemon im Hintergrund und die Menüleiste erscheint (macOS, Linux GNOME/KDE, Windows). Die Leiste zeigt Daemon-Status, Routenliste und pro Route Aktivierungs-/LAN-Freigabe-Umschalter; Quit beendet die Leiste, ohne den Daemon zu stoppen.
Die Leiste ist die ständig sichtbare Benutzeroberfläche. Sie befindet sich im System-Tray und kommuniziert mit dem Daemon über ~/.mkdev/daemon.sock. Wird beim Login gestartet (Autostart von install registriert); auch im Vordergrund mit mkdev bar ausführbar.
Was sie anzeigt:
mkdev v0.4.0 + Daemon-PID + Betriebszeit + lauschender Proxy-Port.name.tld → target plus Suffix-Abzeichen ( · deaktiviert, · LAN).Was sie tut (Klick auf eine Route):
https://name.tld mit dem System-Standard-Handler.pbcopy / wl-copy / xclip / clip.exe).Enabled-Flag der Route um. Deaktivierte Routen bleiben im Store, werden aber nicht mehr proxied.Aktionen auf Leistenebene:
DisableUnit auf, damit launchd/systemd KeepAlive nicht sofort neu startet, sendet dann Shutdown über den Socket.Hinweise:
mkdev daemon stop) beenden den überwachten Daemon sauber – das direkte Killen des Daemon-Prozesses führt dazu, dass er von launchd/systemd neu gestartet wird.Ersetzen Sie das Binary (brew upgrade / go install ...@latest / neuer Download). Beim nächsten Ausführen eines beliebigen mkdev-Unterbefehls gleicht das Binary die außerhalb liegenden Teile ab: es schreibt die Daemon-Plist/systemd-Unit und den Leisten-Autostart-Eintrag neu, um auf das neue Binary zu verweisen, setzt /etc/hosts für aktivierte Routen zurück und vertraut der CA erneut, falls sie entfernt wurde. Sudo-Eingabeaufforderungen laufen inline. Wenn nur der Daemon läuft und Sie die CLI nie verwenden, erledigt der Daemon die sicheren (kein Sudo) Teile beim eigenen Start und stellt den Rest bis zum nächsten CLI-Befehl zurück.
Ein erneutes Ausführen von mkdev install macht dasselbe explizit und ist immer sicher – jeder Schritt ist idempotent.
Erkannte Linux-Distributionen: Debian/Ubuntu (/usr/local/share/ca-certificates), RHEL/Fedora (/etc/pki/ca-trust/source/anchors), Arch (/etc/ca-certificates/trust-source/anchors), openSUSE (/usr/share/pki/trust/anchors).
Firefox verwendet seinen eigenen NSS-Speicher und wird noch nicht unterstützt – System-Chrome/Safari/Edge/curl/wget funktionieren alle.
<target> akzeptiert jedes von:
host:port z.B. localhost:3000
http://host[:port]/path z.B. http://localhost:3000/api
https://host[:port]/path z.B. https://gitlab.example.com
Bei HTTPS-Upstreams (z.B. ein privates GitLab im Firmen-VPN) muss das TLS-Zertifikat des Upstreams gegenüber dem System-Trust-Store verifizieren. Private CAs müssen ihr Root-Zertifikat zur OS-Keychain hinzugefügt werden.
hosts-helper ist nicht dazu gedacht, direkt aufgerufen zu werden. add / remove rufen dasselbe Binary unter sudo erneut auf, um den privilegierten Schreibzugriff auf /etc/hosts durchzuführen.
Hinweis zur TLD.
.local-Routen benötigen einen mDNS-Responder (unter macOS immer aktiv, unter Linux verfügbar wennnss-mdnsinstalliert ist)..test/.dev/.localhostfunktionieren überall nur über/etc/hosts. Setzen Sietldin der Konfiguration entsprechend.
Die Konfiguration liegt unter ~/.mkdev/config.toml. Standardwerte:
tld = ".local" # wird an bloße Namen in `add` angehängt
proxy_port = 443 # Bindung an :443 erfordert sudo beim serve
theme = "auto" # für zukünftige TUI reserviert
log_retention = "7d" # reserviert
log_max_size = "100MB" # reserviert
Überschreiben Sie das Konfigurationsverzeichnis mit --home <pfad> oder MKDEV_HOME=....
~/.mkdev/ca/. Der private Schlüssel hat Modus 0o400.security), Linux-CA-Bundle-Verzeichnis + update-ca-*, Windows ROOT-Store via crypt32.dll. Die Trust-Store-Integration ist von mkcert (BSD-3) adaptiert – siehe LICENSE-MKCERT.add schreibt der Daemon eine Route in einen bbolt-KV-Speicher unter ~/.mkdev/state.db und fügt eine 127.0.0.1 <name>.<tld>-Zeile zu /etc/hosts hinzu, über einen mit sudo aufgerufenen Hilfsbefehl.Dieses Tool installiert eine private CA in Ihren System-Trust-Store. Jeder mit Lesezugriff auf ~/.mkdev/ca/rootCA-key.pem kann TLS-Zertifikate ausstellen, denen Ihr Rechner vertraut. Der Schlüssel wird mit 0o400 (nur Besitzer lesen) erstellt.
0.0.0.0, aber eine Verbindungsquellen-ACL gibt bei LAN-Anfragen an nicht explizit als shared markierte Routen einen 403. Loopback ist immer erlaubt.add / remove rufen sudo auf, um /etc/hosts zu ändern. Siehe SECURITY.md für das Bedrohungsmodell und eine bekannte Einschränkung bezüglich os.Executable()-aufgelöster Hilfspfade.mkdev uninstall # stoppt + deaktiviert Daemon, entzieht CA-Vertrauen, löscht /etc/hosts,
# entfernt Daemon-Dienst + Leisten-Autostart, löscht ~/.mkdev/
Wenn etwas hängen bleibt, öffnen Sie Schlüsselbundverwaltung.app, suchen Sie nach mkdev und löschen Sie es von Hand. Dann grep mkdev /etc/hosts und bereinigen Sie eventuelle Überbleibsel.
Der Daemon verwaltet den Proxy und den Routenspeicher. Er stellt eine lokale HTTP-API auf ~/.mkdev/daemon.sock (nur Besitzer 0600) bereit. Die TUI, CLI-Unterbefehle und die Menüleiste sind Clients des Daemons – nur der Daemon hält die bbolt-Sperre.
mkdev install installiert den Daemon als Benutzerdienst (launchd LaunchAgent unter macOS, systemd --user unter Linux) und aktiviert ihn. Er läuft im Hintergrund und überlebt Abmelden/Anmelden.
mkdev daemon status # installiert / aktiviert / läuft
mkdev daemon stop # stoppen + deaktivieren (verhindert Neustart)
curl --unix-socket ~/.mkdev/daemon.sock http://x/v1/status
curl --unix-socket ~/.mkdev/daemon.sock http://x/v1/routes
curl --unix-socket ~/.mkdev/daemon.sock -X POST http://x/v1/routes \
-H 'Content-Type: application/json' \
-d '{"name":"foo","target":"localhost:3000"}'
curl --unix-socket ~/.mkdev/daemon.sock -X DELETE http://x/v1/routes/foo
Als nächstes:
/api → 8080, /ws → 9000 auf einer einzelnen Domäne).~/.mkdev/ca/rootCA.pem manuell unter Einstellungen → Datenschutz & Sicherheit → Zertifikate → Zertifikate anzeigen → Behörden → Importieren.proxy_port = 8443 in ~/.mkdev/config.toml und verwenden Sie https://name.local:8443.mkdev add fragt ständig nach Sudo. Der Sudo-Cache pro Sitzung läuft ab (Standard 5 Min.). Verwenden Sie stattdessen die TUI-Registerkarte Domänen – sie erhöht die Rechte über osascript (macOS GUI-Eingabeaufforderung) oder pkexec (Linux Polkit)./etc/hosts enthält bereits einen Eintrag für diesen Namen. mkdev add ist idempotent und fügt nur hinzu, wenn kein von mkdev verwalteter Eintrag existiert. Entfernen Sie den vorherigen Eintrag von Hand oder wählen Sie einen anderen Namen.Siehe CONTRIBUTING.md.
Die Trust-Store-Integration von mkdev – Keychain/security unter macOS, CA-Bundle + update-ca-* unter Linux, crypt32.dll ROOT-Store unter Windows und die angrenzenden NSS-Pfade – ist von mkcert von Filippo Valsorda, BSD-3, adaptiert. Ohne diese Vorarbeit wäre dieses Projekt erheblich schwieriger gewesen. Siehe LICENSE-MKCERT für die upstream-Lizenz.
Die TUI basiert auf Charmbracelet's Bubble Tea / Bubbles / Lipgloss. mDNS über hashicorp/mdns. Local KV über bbolt.
MIT LICENSE.
| Plattform | Trust-Store | Berechtigungserhöhung |
|---|
| macOS | System Keychain (security add-trusted-cert) | sudo / osascript |
| Linux | update-ca-trust / update-ca-certificates / trust extract-compat | sudo / pkexec |
| Windows | ROOT-Systemstore über crypt32.dll | UAC (PowerShell RunAs) |
| Befehl | Zweck |
|---|
install | Einmalig: CA + Vertrauen + Daemon-Dienst + Leisten-Autostart. Mit --no-service nur CA. |
add <name> <target> | Route hinzufügen. Fügt einen 127.0.0.1-Eintrag zu /etc/hosts hinzu. |
remove <name> | Route und ihren /etc/hosts-Eintrag entfernen. |
list | Routen im Store auflisten. |
tui | TUI starten (auch Standard, wenn ohne Argumente ausgeführt). |
daemon serve | Daemon im Vordergrund ausführen (normalerweise vom Dienst-Einheit gesteuert). |
daemon stop | Laufenden Daemon stoppen und Benutzerdienst deaktivieren. |
daemon status | Installierten/aktivierten/laufenden Status des Dienstes melden. |
bar | Menüleisten-App starten. Wird von install automatisch gestartet. |
uninstall | CA entziehen, /etc/hosts-Einträge entfernen, Daemon + Leisten-Autostart deinstallieren, ~/.mkdev/ löschen. |
version | Version, Commit, Build-Datum ausgeben. |
completion <bash|zsh|fish|powershell> | Shell-Vervollständigungsskript ausgeben. |
hosts-helper | Versteckt. Wird über sudo aufgerufen, um /etc/hosts atomar zu ändern. |
| Flag / env | Wirkung |
|---|
--home <pfad> | ~/.mkdev-Zustandsverzeichnis überschreiben. |
--verbose, -v | Debug-Level-Logging auf stderr. |
--version | Version ausgeben und beenden. |
MKDEV_HOME=<pfad> | Entspricht --home. |
| Feld | Standard | Hinweise |
|---|
tld | .local | Wird automatisch angehängt, wenn add <name> keinen Punkt enthält. |
proxy_port | 443 | Setzen Sie 8443, wenn Ihre Plattform dem Benutzerdienst keine Bindung an :443 erlaubt. |
theme | auto | Reserviert für die kommende TUI. |
log_retention | 7d | Reserviert. |
log_max_size | 100MB | Reserviert. |
0.0.0.0:<proxy_port>, erstellt bei Bedarf Blattzertifikate pro SNI mit der Root-CA und proxyed Reverse an den konfigurierten Upstream.add / remove im Prozess neu geladen, kein Neustart.0.0.0.0, aber Nicht-Loopback-Anfragen erhalten einen 403, es sei denn, die passende Route ist als shared markiert – siehe LAN-Freigabe.Location und Set-Cookie Domain, damit Clients keine Anmeldedaten verlieren.