zero-dependency CLI · macOS / Linux무의존성 CLI · macOS / Linux

odpeek.

See the Open Design on your desktop — from your phone. Privately over Tailscale, or anywhere through an authenticated Cloudflare tunnel. Open Design 데스크톱 화면을 폰에서 본다. Tailscale로 비공개로, 또는 인증된 Cloudflare 터널로 어디서든.

0 npm deps의존성 2 exposure modes노출 방식 Basic-auth + lockoutBasic 인증 + 잠금 TTL hard-capTTL 하드 캡 QR handoffQR 코드 MIT
odpeek100% ▰▰▰
What it is무엇인가

Your localhost design, on the small screen.로컬호스트의 디자인을, 작은 화면으로.

The Open Design (OD) desktop app serves its web UI on 127.0.0.1 only, and the port changes on every restart — so a phone can't reach it. odpeek auto-detects the live OD port and exposes it through one of two paths. It only ever exposes the OD running on your own machine. Open Design(OD) 데스크톱 앱은 웹 UI를 127.0.0.1에만 띄우고 재시작마다 포트가 바뀌어 폰에서 접속할 수 없다. odpeek은 현재 OD 포트를 자동 감지해 두 방식 중 하나로 노출한다. 노출되는 건 오직 본인 컴퓨터의 OD뿐이다.

private · tailnet

up — Tailscale

Visible to your own devices only (your phone on your tailnet). Never the public internet.내 기기에만 보임(내 tailnet의 폰). 공개 인터넷에는 열리지 않음.

  • WireGuard-encrypted, freeWireGuard 암호화, 무료
  • Best on Wi-Fi / same private networkWi-Fi나 같은 사설망에서 최적
  • Cellular may be blocked by carrier CGNAT (100.64/10)셀룰러는 통신사 CGNAT(100.64/10) 충돌로 막힐 수 있음
public · authenticated

tunnel — Cloudflare

A public HTTPS URL guarded by Basic auth. Reachable by anyone you hand the URL + password to.Basic 인증으로 보호된 공개 HTTPS URL. URL+비밀번호를 받은 사람만 접속.

  • Works on cellular / any network셀룰러 등 어떤 망에서든 동작
  • Dials out to localhost → bypasses firewall / CGNAT / DNS로컬호스트로 아웃바운드 → 방화벽·CGNAT·DNS 우회
  • No Cloudflare account needed for the quick tunnel빠른 터널은 Cloudflare 계정 불필요
Requirements & prerequisites요구사항 · 전제조건

What you need on each side.양쪽에 필요한 것.

Run odpeek doctor anytime to check which prerequisites are satisfied.odpeek doctor로 어떤 전제조건이 충족됐는지 언제든 점검할 수 있다.

up — Tailscale tunnel — Cloudflare
Host OSmacOS or Linux (uses lsof / pgrep to detect the OD port)macOS 또는 Linux (lsof/pgrep로 OD 포트 감지)
Node.js>= 18
Open Designdesktop app running on the host데스크톱 앱이 호스트에서 실행 중
Tool Tailscale installed + logged in설치 + 로그인 cloudflaredmacOS brew install cloudflared, Linux docs
Account free Tailscale account — host & phone on the same tailnet무료 Tailscale 계정 — 맥·폰이 같은 tailnet none for quick tunnel; account + domain only for a stable named tunnel / Access빠른 터널은 불필요; 고정 URL·Access만 계정+도메인 필요
On your phone폰 쪽 Tailscale app + same accountTailscale 앱 + 같은 계정 just a browser (URL + user/password)브라우저만 (URL + 아이디·비밀번호)

Community tool. odpeek is unofficial and not affiliated with or endorsed by Open Design. It has zero npm dependencies — it only shells out to the tools above.비공식 도구. odpeek은 Open Design과 제휴·보증 관계가 없는 서드파티 도구다. npm 의존성이 전혀 없고 위 도구들을 호출해 쓸 뿐이다.

Install설치

One line. Pick your channel.한 줄이면 끝. 채널만 선택.

npm
npm install -g odpeek
homebrew
brew install ictechgy/tap/odpeek
claude code pluginClaude Code 플러그인
/plugin marketplace add ictechgy/odpeek
/plugin install odpeek

Commands명령

odpeek upExpose OD to your tailnet (Wi-Fi / private)OD를 tailnet에 노출 (Wi-Fi/사설망)
odpeek tunnelPublic Cloudflare HTTPS tunnel, Basic auth (cellular / anywhere) — prints a QR code of the URL공개 Cloudflare HTTPS 터널, Basic 인증 (셀룰러/어디서든) — URL의 QR 코드를 출력합니다
odpeek sessionsRead-only session view: uptime, TTL remaining, auth failures, lockouts, source IPs (masked). Add --json for machine-readable output.읽기 전용 세션 관측: uptime·TTL 잔여·인증 실패·잠금·출발 IP(마스킹). --json으로 JSON 출력도 됩니다.
odpeek statusShow exposure state + detected OD port (--json for machine-readable)노출 상태 + 감지된 OD 포트 (--json으로 JSON 출력 가능)
odpeek doctorDiagnose the environment / prerequisites (--json for machine-readable)환경·전제조건 진단 (--json으로 JSON 출력 가능)
odpeek offTear everything down (serve + tunnel)모든 노출 해제 (serve + 터널)
fixed password (optional)고정 비밀번호(선택)
ODPEEK_PASS=mypw odpeek tunnel   # browser remembers it브라우저가 기억
Security보안

A public URL, hardened.공개 URL, 단단하게.

The tunnel URL is public, so the auth proxy ships hardened by default — but it's still a public exposure you should manage.tunnel URL은 공개되므로 인증 프록시가 기본으로 하드닝되어 있다. 그래도 공개 노출이므로 사용자가 직접 관리해야 한다.

brute-force lockout
8 fails → 15-min block + global throttle8회 실패 → 15분 차단 + 전역 스로틀
auth bypass
WebSocket handshake verified before piping파이프 연결 전 WebSocket 핸드셰이크 검증
headers
HSTS, nosniff, frame & referrer policy; auth header stripped upstreamHSTS·nosniff·프레임/리퍼러 정책, 인증 헤더 미전달
credentials
timing-safe compare; ~71-bit random default; passed via env not argv타이밍 공격에 안전한 비교, ~71비트 난수 기본, argv 대신 env로 전달
idle shutdown
tunnel auto-closes after 30 min idle30분 유휴 시 자동 종료
TTL hard-cap
--ttl <min> closes the tunnel after N min regardless of activity — idle may end it earlier, TTL ends it even when active--ttl <분>으로 활동 무관 절대 최대 수명 설정 — 유휴는 더 일찍, TTL은 활동 중이어도 종료합니다
QR handoff
tunnel / ip / url print a QR code of the address by default (--no-qr to disable, --qr-invert for light backgrounds). QR contains the address only — no credentials.tunnel·ip·url은 기본으로 주소 QR을 출력합니다 (--no-qr로 끄기, --qr-invert로 반전). QR에는 주소만 담깁니다 — 비밀번호는 없습니다.
logs
attempts logged to ~/.odpeek/auth.log (sanitized, never the password)~/.odpeek/auth.log에 기록(제어문자 정리, 비밀번호 제외)

The tunnel URL is public터널 URL은 공개

Run odpeek off when you're done, and be mindful of exposing sensitive designs. Don't share the URL + password loosely.사용을 마쳤으면 odpeek off. 민감한 디자인 노출에 주의. URL+비밀번호를 함부로 공유하지 말 것.

No inbound needed인바운드 불필요

If macOS asks "Allow incoming connections for node?", you can Deny — the design relies on loopback + outbound.macOS가 "node 인바운드 허용?"을 물으면 거부해도 된다. 루프백+아웃바운드 기반 설계이다.