
信頼された localhost HTTPS — ローカル CA、/etc/hosts、mDNS LAN 共有、リバースプロキシ。https://name.local → localhost:port にマッピングします。
ローカル開発向けの本物のHTTPS — TUIとLAN共有付き。
mkdev は *.local 上で信頼されたHTTPSを実行します。単一のGoバイナリ: 認証局 + リバースプロキシ + /etc/hosts + mDNSブロードキャスト + フルTUI。
他との違い:
https://app.local にアクセスできます。mkdev でTUIが起動します。internal/safeexec)。PATHベースのシャドウイングもグループ書き込み可能なショートカットもありません。knownHost 許可リストによって制御されます。ワイルドカードでも事前生成でもありません。mkdev install # CA + trust + daemon service + menu bar autostart
mkdev add myapp localhost:3000 # routes https://myapp.local → localhost:3000
curl https://myapp.local # 200 from your local app
install はワンショットです: CAを生成し、システムストアで信頼し、デーモンのユーザーサービス (launchd / systemd) をインストール・有効化し、ログイン時にメニューバーが起動するよう登録し、GUIセッションが存在する場合は即座にバーを起動します。デーモンがプロキシを所有し、TUI (mkdev 引数なし) と mkdev add | remove | list は ~/.mkdev/daemon.sock 経由でデーモンと通信します。

mkdevの目玉機能。同じWi-Fi上の任意のデバイスと、警告なし・トンネルサービスなしの本物のTLSでルートを共有します。
s を押して SHARE 列を LAN に切り替えます。<name>.local → このマシンのLAN IPとしてアドバタイズされます。https://<name>.local にアクセスします。デバイスがmkdev CAを信頼すれば (初回のみ)、警告は表示されません。.local ルートのみです。他のTLDもプロキシはされますが、名前ではLANから到達できません。s の切り替えはライブ反映です — mDNSアドバタイズとLAN側ACLは次のリクエストで更新されます。再起動は不要です。brew install venkatkrishna07/tap/mkdev
後でアップグレードする場合:
brew update
brew upgrade mkdev
go install github.com/venkatkrishna07/mkdev/cmd/mkdev@latest
特定のバージョンにアップグレードする場合:
go install github.com/venkatkrishna07/mkdev/cmd/[email protected]
macOS (Intel + Apple Silicon)、Linux (amd64 + arm64)、Windows (amd64) 向けのビルド済みバイナリは Releases ページ で公開されています。各リリースには checksums.txt に加えてcosignのキーレス署名 (checksums.txt.sig + .pem) が含まれます — 検証コマンドは SECURITY.md#verifying-releases を参照してください。
macOSで、Gatekeeperが直接ダウンロードしたバイナリをブロックする場合:
xattr -d com.apple.quarantine ./mkdev
git clone https://github.com/venkatkrishna07/mkdev.git
cd mkdev
task build
cp bin/mkdev ~/bin/ # or /usr/local/bin
Go 1.25+ が必要です。
mkdev install # CA, trust, daemon service, bar autostart — one command
mkdev # launch TUI
install 実行後、デーモンはバックグラウンドで動作し、メニューバーが表示されます (macOS、Linux GNOME/KDE、Windows)。バーにはデーモンのステータス、ルート一覧、ルートごとの有効 / LAN共有トグルが表示されます。Quit はデーモンを停止せずにバーのみを終了します。
バーは常時表示のUIです。システムトレイに常駐し、~/.mkdev/daemon.sock 経由でデーモンと通信します。ログイン時に起動します (install が自動起動を登録)。mkdev bar でフォアグラウンドでも実行できます。
表示内容:
mkdev v0.4.0 + デーモンPID + 稼働時間 + リッスン中のプロキシポート。name.tld → target に加えて、接尾辞バッジ ( · disabled、 · LAN) を表示します。操作 (ルートをクリック):
https://name.tld を開きます。pbcopy / wl-copy / xclip / clip.exe)。Enabled フラグを切り替えます。無効にしたルートはストアに残りますが、プロキシされなくなります。バーレベルの操作:
DisableUnit を呼び出して launchd / systemd の KeepAlive が即座に再起動しないようにしてから、ソケット経由でシャットダウンを送信します。注意:
mkdev daemon stop) だけです — デーモンプロセスを直接killすると、launchd / systemd によって再起動されます。バイナリを置き換えます (brew upgrade / go install ...@latest / 新しいダウンロード)。次に mkdev サブコマンドを実行すると、バイナリは自身の外部にある部分を調整します: デーモンのplist / systemdユニットとバーの自動起動エントリを新しいバイナリを指すように書き換え、有効なルートの /etc/hosts を再適用し、CAが削除されていれば再信頼します。sudoプロンプトはインラインで実行されます。CLIに触れずデーモンだけが実行されている場合、デーモンは起動時に安全な (sudo不要の) 部分を自分で処理し、残りは次のCLIコマンドまでキューに入れます。
mkdev install を再実行すると同じことが明示的に行われ、常に安全です — すべてのステップは冪等です。
検出されるLinuxディストリビューション: 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は独自のNSSストアを使用するため、まだ未対応です — システムのChrome/Safari/Edge/curl/wgetはすべて動作します。
<target> は以下のいずれかを受け付けます:
host:port e.g. localhost:3000
http://host[:port]/path e.g. http://localhost:3000/api
https://host[:port]/path e.g. https://gitlab.example.com
HTTPSアップストリーム (例: 企業VPN上のプライベートGitLab) の場合、アップストリームのTLS証明書はシステムのトラストストアに対して検証できる必要があります。プライベートCAのルートはOSのキーチェーンに追加する必要があります。
hosts-helper は直接呼び出されることを想定していません。add / remove は、特権が必要な /etc/hosts 書き込みを実行するために、同じバイナリを sudo で再呼び出しします。
TLDに関する注意。
.localルートにはmDNSレスポンダーが必要です (macOSでは常時稼働、Linuxではnss-mdnsがインストールされている場合に利用可能)。.test/.dev/.localhostは/etc/hostsだけでどこでも動作します。設定のtldをこれに合わせてください。
設定は ~/.mkdev/config.toml にあります。デフォルト:
tld = ".local" # appended to bare names in `add`
proxy_port = 443 # binding :443 requires sudo on serve
theme = "auto" # reserved for future TUI
log_retention = "7d" # reserved
log_max_size = "100MB" # reserved
--home <path> または MKDEV_HOME=... で設定ディレクトリを上書きできます。
~/.mkdev/ca/ に生成します。秘密鍵のモードは 0o400 です。security)、LinuxのCAバンドルディレクトリ + update-ca-*、Windowsの crypt32.dll による ROOT ストア。トラストストア統合は mkcert (BSD-3) から翻案しています — LICENSE-MKCERT を参照してください。add 実行時、デーモンはルートを bbolt KVの ~/.mkdev/state.db に書き込み、sudo で呼び出されるヘルパーサブコマンド経由で 127.0.0.1 <name>.<tld> の行を /etc/hosts に追加します。0.0.0.0:<proxy_port> でTLSをリッスンし、ルートCAを使用してし、設定されたアップストリームへリバースプロキシします。このツールはプライベートCAをシステムのトラストストアにインストールします。~/.mkdev/ca/rootCA-key.pem への読み取りアクセスがあれば、あなたのマシンが信頼するTLS証明書を発行できます。鍵は 0o400 (所有者のみ読み取り) で作成されます。
0.0.0.0 にバインドしますが、接続元ACLが、共有 と明示的にマークされていないルートへのLANリクエストを403にします。ループバックは常に許可されます。add / remove は /etc/hosts を変更するために sudo を呼び出します。脅威モデルと、os.Executable() で解決されるヘルパーパスに関する既知の制限については SECURITY.md を参照してください。mkdev uninstall # stops + disables daemon, untrusts CA, clears /etc/hosts,
# removes daemon service + bar autostart, wipes ~/.mkdev/
何かが動かなくなった場合は、キーチェーンアクセス.app を開き、mkdev を検索して手動で削除してください。その後 grep mkdev /etc/hosts を実行し、残りを掃除してください。
デーモンはプロキシとルートストアを所有します。~/.mkdev/daemon.sock (所有者のみ 0600) でローカルHTTP APIを公開します。TUI、CLIサブコマンド、メニューバーはすべてデーモンのクライアントです — bboltロックを保持するのはデーモンだけです。
mkdev install はデーモンをユーザーサービス (macOSではlaunchd LaunchAgent、Linuxではsystemd --user) としてインストールし、有効化します。デーモンはバックグラウンドで動作し、ログアウト / ログイン後も存続します。
mkdev daemon status # installed / enabled / running
mkdev daemon stop # stop + disable (prevents respawn)
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
次の予定:
/api → 8080、/ws → 9000)。~/.mkdev/ca/rootCA.pem を手動でインポートしてください: 設定 → プライバシーとセキュリティ → 証明書 → 証明書を表示 → 認証局 → インポート。~/.mkdev/config.toml で proxy_port = 8443 を設定し、https://name.local:8443 を使用してください。mkdev add が何度もsudoを要求する。 sudoのセッションキャッシュは期限切れになります (デフォルト5分)。代わりにTUIのDomainsタブを使用してください — osascript (macOSのGUIプロンプト) または pkexec (LinuxのPolkit) で権限昇格します。/etc/hosts にその名前のエントリがすでにある。 mkdev add は冪等で、mkdev 管理のエントリが存在しない場合にのみ追加します。以前のエントリを手動で削除するか、別の名前を使用してください。CONTRIBUTING.md を参照してください。
mkdevのトラストストア統合 — macOSのキーチェーン / security、LinuxのCAバンドル + update-ca-*、Windowsの crypt32.dll ROOT ストア、およびNSS関連パス — は、Filippo Valsorda による mkcert (BSD-3) から翻案されています。この先行技術がなければ、このプロジェクトはかなり困難だったでしょう。アップストリームのライセンスについては LICENSE-MKCERT を参照してください。
TUIは Charmbracelet's Bubble Tea / Bubbles / Lipgloss で構築されています。mDNSは hashicorp/mdns。ローカルKVは bbolt。
MIT LICENSE.
| プラットフォーム | トラストストア | 権限昇格 |
|---|
| macOS | システムキーチェーン (security add-trusted-cert) | sudo / osascript |
| Linux | update-ca-trust / update-ca-certificates / trust extract-compat | sudo / pkexec |
| Windows | ROOT システムストア (crypt32.dll 経由) | UAC (PowerShell RunAs) |
| コマンド | 用途 |
|---|
install | ワンショット: CA + 信頼 + デーモンサービス + バーの自動起動。CAのみの場合は --no-service を指定します。 |
add <name> <target> | ルートを追加します。/etc/hosts に 127.0.0.1 エントリを追加します。 |
remove <name> | ルートとその /etc/hosts エントリを削除します。 |
list | ストア内のルートを一覧表示します。 |
tui | TUIを起動します (引数なしで実行した場合のデフォルトでもあります)。 |
daemon serve | デーモンをフォアグラウンドで実行します (通常はサービスユニットから駆動されます)。 |
daemon stop | 実行中のデーモンを停止し、ユーザーサービスを無効化します。 |
daemon status | サービスのインストール済み / 有効 / 実行中状態を報告します。 |
bar | メニューバーアプリを起動します。install によって自動起動されます。 |
uninstall | CAの信頼を解除し、/etc/hosts エントリを削除し、デーモン + バーの自動起動をアンインストールし、~/.mkdev/ を消去します。 |
version | バージョン、コミット、ビルド日を表示します。 |
completion <bash|zsh|fish|powershell> | シェル補完スクリプトを出力します。 |
hosts-helper | 隠しコマンド。sudo 経由で呼び出され、/etc/hosts をアトミックに変更します。 |
| フラグ / 環境変数 | 効果 |
|---|
--home <path> | ~/.mkdev 状態ディレクトリを上書きします。 |
--verbose, -v | stderrにデバッグレベルのログを出力します。 |
--version | バージョンを表示して終了します。 |
MKDEV_HOME=<path> | --home と同等です。 |
| フィールド | デフォルト | 備考 |
|---|
tld | .local | add <name> にドットがない場合に自動的に追加されます。 |
proxy_port | 443 | ユーザーサービスが :443 にバインドできないプラットフォームでは 8443 に設定します。 |
theme | auto | 今後のTUI用に予約されています。 |
log_retention | 7d | 予約済み。 |
log_max_size | 100MB | 予約済み。 |
add / remove のたびにプロセス内でリロードされます。再起動は不要です。0.0.0.0 にバインドしますが、一致するルートが 共有 とマークされていない限り、非ループバックリクエストは403になります — LAN共有 を参照してください。Location と Set-Cookie Domain がプロキシドメインに書き換えられ、クライアントが資格情報を失わないようにします。