TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
Low-latency remote desktop for macOS. Control your Mac from any browser in ~20 ms. curl -fsSL glassdesk.dev | sh
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗curl -fsSL glassdesk.dev | sh
Run that on the computer you want to control. A guided setup connects Tailscale, installs the background service, checks each permission, then shows a QR code. Scan it with your iPad and you're in. About two minutes, start to finish.
Most remote desktops ride the same pipeline as video calls, which buffers frames so motion looks smooth. That's fine for watching. It's wrong for typing, dragging and scrolling, where every buffered frame is lag you feel.
Glass is built like a game stream instead: hardware H.264 straight from the encoder, sent as unreliable QUIC datagrams so a lost packet never holds up a newer frame, decoded by the browser's hardware decoder in a worker, and drawn the moment it arrives. No jitter buffer. A live meter shows the real capture-to-display latency, typically 15–30 ms on a home network or tailnet.
And the viewer is just a web page. No app to install, no account to create.
glass mic install, one password); on Linux through PipeWire or PulseAudio, nothing to install.glass notifications).curl -fsSL glassdesk.dev/help | sh and reads you a code; you type it at glassdesk.dev/help and connect once they allow it. Nothing stays installed when they stop.glass link --revoke cuts them all off.--view-only, --no-files, --no-clipboard, --for 1h, --ask (the person at the computer allows each connection) and --passkey (Face ID, Touch ID or a security key every time).glass link --anywhere connects any browser straight to your computer over WebRTC: end-to-end encrypted, no ports opened, no Tailscale needed on the viewer.glass account add puts a computer there; the account only lists computers, so getting in still takes the computer's own sign-in.glass mcp gives Claude Code (or any MCP client) the screens, pointer and keyboard of every computer on your tailnet running Glass. Add it to Claude Code, Claude Desktop or Cursor in one click from the Mac app. You watch every step, pause or stop it, approve anything risky from your phone, and hand it a 2FA code when it's stuck.https://<computer>/admin/: who's connected, requests to allow, links, devices, history, settings, access rules, and an address book of your machines./fwd/3000/) from your tailnet, and recording to MP4.glass acl) per email, domain or group; SCIM provisioning cuts off deactivated accounts.glass config relay.| Glass | Chrome Remote Desktop | Parsec, Moonlight, Jump Desktop | VNC / Screen Sharing | |
|---|---|---|---|---|
| Viewer | Any browser | Any browser | Mostly native apps | Native app (or noVNC) |
| Pipeline | Game-stream style, no jitter buffer | Video-call (WebRTC) | Game-stream style | Pixel diffs |
| Mac and Linux hosts | ✅ (Linux beta) | ✅ | Varies | ✅ |
| Open source | ✅ MIT | ❌ | Moonlight + Sunshine only | Varies |
| Account required | No | Usually | No |
Host (the computer you control):
curl -fsSL glassdesk.dev | sh # installs to ~/.glass, verifies the checksum, opens the Glass app to set up
Run it again any time to update. Prefer to read it first? install.sh. Release tarballs are on the releases page.
Viewer: any browser with WebTransport and WebCodecs: Safari 26.4+ (iPad, iPhone, Mac), Chrome, Edge or Firefox.
glass app # the Glass app (macOS): setup, connections, links, agents, settings
glass setup # guided setup: Tailscale, background service, permissions, QR code
glass status # running? capturing? permissions? remote ready? connect URL
glass restart # restart the background service
glass link # one-time link + QR code for another device
glass link --anywhere # the same, from any network (WebRTC, end-to-end encrypted)
glass link --view-only --no-files --for 1h # limited access
glass link --ask --passkey # asks you first; needs a passkey every time
glass link --list # devices let in by links (with ids)
glass link --revoke [id] # cut off one device, or every device let in by a link
glass remote off # turn off access from outside your tailnet
glass account add # one-time link that puts this computer on your glassdesk.dev/computers account
glass account remove # take this computer off every account
glass viewers / kick # who's connected now; end a session
glass requests / allow / deny # answer connection requests (glass config ask-guests on)
glass chat "be right there" # message everyone viewing
glass privacy on|off # blank this screen and block local input while viewed
glass log # connection history
glass wake <name|mac> # Wake-on-LAN
glass config oidc-issuer https://accounts.google.com # single sign-on (+ oidc-client-id,
# oidc-client-secret, oidc-allow [email protected],@corp.com, oidc-scope)
glass config ldap-url ldaps://dir.example.com # directory sign-in (+ ldap-user-dn
# uid={user},ou=people,dc=example,dc=com, or ldap-base-dn + ldap-bind-dn)
glass acl add group:eng --view-only --for 8h # access rules for SSO/LDAP accounts, first match
glass acl add @example.com # wins: email, @domain, group:name or *
glass acl / glass acl remove 0 # list; remove by position
glass config scim-token new # SCIM provisioning at https://<computer>/scim/v2 (Okta, Entra ID):
# deactivated users can't sign in and lose their sessions
glass config # settings: ask-guests, record, privacy, hevc, forward-ports, name, accent, relay…
glass mcp # MCP server: an AI agent uses this computer while you watch
# (claude mcp add glass -- glass mcp; --machine mac-mini for another)
glass agents # agents from anywhere: list, revoke ID|all, install CLIENT, log, verify,
# on|off, public on|off (publish with Tailscale Funnel)
glass feedback "…" # tell us what broke or what you want
On your tailnet, open https://<computer>.<tailnet>.ts.net on the iPad. Full CLI reference, Sharp text, the console, team sign-in, keyboard tips for iPad and troubleshooting: glassdesk.dev/docs.
Glass ships an agent skill. With it, Claude Code finds a machine on your tailnet, installs Glass over SSH, runs the unattended setup, tells you which permission switch to click on that machine's screen, and verifies the connection.
mkdir -p ~/.claude/skills/glass && curl -fsSL https://glassdesk.dev/skill.md -o ~/.claude/skills/glass/SKILL.md
Then ask: "set up Glass on my Mac mini". Scripts can use the same commands: glass setup --yes --json and glass status --json.
Mac (glass) Browser
ScreenCaptureKit ─▶ VideoToolbox H.264 ─▶ WebTransport ─▶ WebCodecs ─▶ OffscreenCanvas
(IOSurface, (hardware, datagrams (worker)
on change) low-latency RC) over QUIC
CGEvent ◀───────────── input stream ◀──────────────────── pointer / keyboard / touch
NSPasteboard, files ◀─▶ control + file streams ◀─────────▶ clipboard, uploads, downloads
| Path | What |
|---|---|
crates/glass-host | The glass binary: WebTransport/HTTPS server, sessions, files, setup. Platform code in src/macos/ and src/linux/. |
crates/glass-proto | Wire format, mirrored in web/proto.js. |
web | Browser client. Plain JS, no build step. |
site | glassdesk.dev: a Cloudflare Worker with D1, plus the WebRTC introducer (a Durable Object). |
glass remote on.glass account add, this computer's name and public key for your account's list.Found a security issue? Please open a private security advisory rather than a public issue.
Is it free? Yes, and MIT licensed.
Do I need an app on the iPad? No, just Safari. Tailscale is optional when you use glass link --anywhere.
Can Windows be the host? Not yet. Windows works as a viewer in any modern browser.
Can I control a locked Mac? Yes, type your password at the lock screen. After a reboot, FileVault still needs one local login.
Do updates ask for permissions again? No: releases are signed with a stable identity, so macOS keeps the grants. A build you made yourself, or Glass run from a terminal (which uses the terminal's permissions), is a different app to macOS and needs its own grant: run glass setup.
More in the docs.
Requirements: macOS 13+, stable Rust, and Node for the site and tests.
cargo run --release -p glass-host # serves http://localhost:8080
The terminal you run it from needs Screen Recording and Accessibility permission. With Tailscale HTTPS enabled, other tailnet devices can connect at https://<mac>.<tailnet>.ts.net:8080. Logs from the host and connected browsers land in logs/, so you can debug an iPad without a debugger.
scripts/test.sh # everything: Rust, JS, end-to-end, site, Linux (if Docker is running)
scripts/test.sh e2e # just the browser end-to-end suite
./scripts/package.sh # universal release tarball in dist/
scripts/linux/build.sh [test] # Linux x86_64 build/tests in an Arch container
cd site && npm install && npm run dev # site locally (wrangler dev)
glass --test runs the host with fakes: two 640×360 test-pattern displays, recorded input, an in-memory clipboard and /test/* hooks to drop or corrupt frames. It never touches your real screen, so the Playwright suite in tests/e2e (real Chrome) covers connection, auth, input, touch, keyboard modes, clipboard, files, audio, display layouts, loss and corruption recovery, reconnects, machine switching and updates. It runs locally only (scripts/test.sh e2e), not in CI.
Issues and pull requests are welcome. For anything bigger than a fix, open an issue first so we can agree on the approach. Feedback also works from the app (glass feedback "…") or at glassdesk.dev.
If Glass is useful to you, a ⭐ helps other people find it.
MIT © Nathan Tarasiuk