{"id":13453166,"url":"https://github.com/spolu/warp","last_synced_at":"2025-05-16T17:08:01.314Z","repository":{"id":57498021,"uuid":"87136549","full_name":"spolu/warp","owner":"spolu","description":"Secure and simple terminal sharing","archived":false,"fork":false,"pushed_at":"2018-03-06T17:55:07.000Z","size":796,"stargazers_count":1620,"open_issues_count":12,"forks_count":48,"subscribers_count":27,"default_branch":"master","last_synced_at":"2025-04-12T15:58:59.959Z","etag":null,"topics":["command-line","sharing","shell","terminal","tls"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spolu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-04-04T01:20:37.000Z","updated_at":"2025-04-06T09:21:52.000Z","dependencies_parsed_at":"2022-08-28T19:41:42.244Z","dependency_job_id":null,"html_url":"https://github.com/spolu/warp","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spolu%2Fwarp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spolu%2Fwarp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spolu%2Fwarp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spolu%2Fwarp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spolu","download_url":"https://codeload.github.com/spolu/warp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254573589,"owners_count":22093731,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line","sharing","shell","terminal","tls"],"created_at":"2024-07-31T08:00:33.949Z","updated_at":"2025-05-16T17:08:01.285Z","avatar_url":"https://github.com/spolu.png","language":"Go","funding_links":[],"categories":["Go","Utilities","\u003ca name=\"terminal\"\u003e\u003c/a\u003eTerminals"],"sub_categories":["Terminal Sharing Utilities"],"readme":"# README\n\n```\n  _      ______ __________ \n | | /| / / __ `/ ___/ __ \\\n | |/ |/ / /_/ / /  / /_/ /\n |__/|__/\\__,_/_/  / .___/ \n                  /_/        v0.0.3\n```\n\n*Secure and simple terminal sharing*\n\n`warp` lets you securely share your terminal with one simple command: `warp\nopen`. When connected to your warp, clients can see your terminal exactly as if\nthey were sitting next to you. You can also grant them write access, the\nequivalent of handing them your keyboard.\n\n`warp` distinguishes itself from \"tmux/screen over ssh\" by its focus and\nease of use as it does not require an SSH access to your machine or a\nshared server for others to collaborate with you.\n\nDespite being still quite experimental, `warp` has already proven itself useful\nespecially in the context of:\n\n- Interaction with remote team-members\n- New engineer onboarding (navigating code in group without projection)\n\n## Installation\n\n#### MacOSX (using Homebrew)\n\n```shell\n# Requires Homebrew installed. See https://brew.sh/\n\nbrew install warp\n```\n\n#### From source code\n\n```shell\n# Requires Go to be installed on your machine. You can easily install Go from\n# https://golang.org/doc/install\n\ngo get -u github.com/spolu/warp/client/cmd/warp\n```\n\nIn case of difficulties, please refer to \n[Troubleshooting your `warp` installation](https://github.com/spolu/warp/wiki/Troubleshooting-your-warp-installation).\n\n## Usage\n\nInstantly start sharing your terminal (read-only) under warp ID **goofy-dev**\nwith:\n\n```shell\n# You can name your warps however you want (here **goofy-dev**). In particular\n# a cryptographically secure random ID will be generated for you if you don't\n# specifiy a name.\n\n$ warp open goofy-dev\n```\n\nThis will create a new warp **goofy-dev** and will connect you to it locally\nwith write-access. From there, anyone can connect (read-only) to your warp\nwith:\n\n```shell\n$ warp connect goofy-dev\n```\n\nCreating a new warp spawns a new shell, and closing it is therefore as easy as\nkilling that shell with `exit` or `CTRL-D`.\n\n#### Granting and revoking write-access\n\nFrom inside a warp, retrieve the list of connected users with:\n```shell\n$ warp state\n```\n\nGrant write-access to a client (**be extra careful!** see the *Security*\nsection below):\n\n```shell\n$ warp authorize stan\n```\n\nRevoke previously granted write-access with:\n```shell\n$ warp revoke stan\n```\n\n## Security\n\n`warp` is a powerful, and therefore, dangerous tool. Its misuse can potentially\nenable an attacker to easily gain arbitrary remote code execution priviledges.\n\n#### TLS connections\n\nThe connection between your host as well as your warp clients and the `warpd`\nserver are established over TLS, protecting you from man in the middle attacks.\n\n#### Read-only by default\n\nBy default, warps are created read-only. Being protected by TLS does not\nprotect you from phishing. Be extra careful when running `warp authorize`.\n\n#### IDs are secure and secret\n\nGenerated warp IDs are cryptographically secure and not publicized. If you want\nto authorize someone to write to your warp, we recommend you use a generated\nwarp ID (to protect yourself against phishing attacks).\n\n#### Trustless read-only\n\nIn particular, when your warp does not authorize anyone to write, it does not\ntrust the `warpd` daemon to enforce that noone other than you can write to it.\nWhen at least one client is authorized to write, `warp` does trust the `warpd`\ndaemon it is connected to to enforce the read/write policy of clients.\n\n## Roadmap\n\n- [x] *v0.0.2 \"bare\"*\n  - bare functionalities (see [TODO](TODO))\n- [x] *v0.0.3 \"safe\"*\n  - persisted user token/secret\n  - graceful host reconnection\n- [ ] *v0.0.4 \"vt100\"*\n  - terminal emulation to achieve:\n    - full redraw on connection\n    - top status bar\n    - terminal truncation\n    - no resize required anymore\n  - web-socket / HTTPS instead of raw sockets\n- [ ] *v0.0.5 \"cipher\"*\n  - e2e encryption based on warp ID\n- [ ] *future releases*\n  - `warp voice :warp` lets you voice-over a warp\n  - warp signin and verified usernames\n\n## Notes\n\n#### `warp` is not a fork of tmux\n\n`warp` is not a fork of tmux[0] and is not a terminal emulator (for now). It\nreally simply multiplexes stdin/stdout to raw ptys between host and clients.\nFor that reason, if you connect to a warp already running a GUI-like\napplication (tmux, vim, htop, ...) it might take time or host interactions for\nthe GUI-like application to visually reconstruct properly client-side.\n\nIn particular, since `warp` does not emulate the terminal it cannot reformat or\ntruncate the output of the host terminal to fit client terminal windows which\nmay lead to distorted outputs client side if the terminal sizes mismatch. To\nmitigate that, `warp` relies on automatic client terminal resizing (pending\n*v0.0.4*, see Roadmap).\n\n#### Automatic client terminal resize\n\nOnce connected as a client and whenever the host terminal window size changes,\n`warp` will attempt to resize your terminal window to the hosting tty size. For\nthat reason it is recommended to run `warp connect` from a new terminal\nwindow[1].\n\n#### Development of warp\n\nDevelopment of `warp` is generally broadcasted in **warp-dev**. Feel free to\nconnect at any time.\n\n-- \n\n[0] You can run a warp from within tmux (or screen) or tmux from within a warp.\nIt's also fine to run a warp from within a warp.\n\n[1] Terminals supporting window resizes based on the `\\033[8;h;wt` ANSI escape\nsequence:\n\n| Terminal        | Support |\n| --------------- |:-------:|\n| MacOSX Terminal | Y       |\n| XTerm           | Y       |\n| Hyper           | N       |\n| iTerm2          | N       |\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspolu%2Fwarp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspolu%2Fwarp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspolu%2Fwarp/lists"}