Skip to content

Your machine.
From anywhere.

Run Chan where your code lives. Connect your desktop through ssh or Eternal Terminal; terminals, files, and workspace state stay on the remote machine.

One connection carries your environment.
YOUR COMPUTERChan Desktophttp://localhost:9901Windows and tools
HTTP +
WebSocket
ENCRYPTED TRANSPORTssh or ETLocal port 9901
↔ remote port 8787
Forwarded
connection
REMOTE MACHINEChan devserver127.0.0.1:8787Shells, files, workspaces

Input and requests travel to the host. Terminal output, file bytes, and workspace updates return over the same tunnel. The devserver listens on the remote machine's loopback address.

  • Your existing accessUse your ssh account and keys.
  • Compute stays remoteBuild and run on the host with your code.
  • Sessions keep runningReconnect after a client disconnect.

Install there. Connect here.

  1. 01

    Install Chan on the remote machine.

    Use the CLI installer. The examples below use a Unix host and ~/.local/bin/chan.

  2. 02

    Add it in Computers.

    Choose Add devserver, set a name, then copy the Address and Connect script from either example below. Replace user@host with your ssh destination.

  3. 03

    Connect and open a terminal.

    The script runs in a control terminal. join starts or attaches to the devserver; keep the script running to hold the tunnel. Enable Auto-hide control terminal on success to tuck it away.

ssh

A direct connection.

Address (URL)
http://localhost:9901
Connect script
ssh -L localhost:9901:127.0.0.1:8787 user@host \
  '~/.local/bin/chan devserver join --port 8787'

ETERNAL TERMINAL

Reconnect across interruptions.

Address (URL)
http://localhost:9901
Connect script
et --tunnel 9901:8787 \
  --command '~/.local/bin/chan devserver join --port 8787' \
  user@host

Install ET on both ends. It uses ssh to establish access and its own TCP connection, normally port 2022, to reconnect after interruptions. See the ET setup guide and command reference.

These are alternative configurations for the same address. The URL's port 9901 matches the local end of the tunnel; its remote end 8787 matches --port 8787. For another simultaneous connection, choose a free local port and update both the URL and the tunnel mapping. Full devserver manual →

More than a shell connection.

Run these commands inside the remote Chan terminal. The same tools also work through a gateway.

Upload. Download.

cs upload .
Choose local files to upload here.
cs download report.md
Save a remote file to your computer.
File transfers →

Seamless clipboard integration.

Copy and paste text, rich text, and images between your remote shell and desktop apps.

cs copy < report.md
Copy to your desktop clipboard.
cs paste
Read your clipboard in the remote shell.
Clipboard integration →

cs tunnel

Forward a remote service to your desktop. In one remote Chan terminal, keep this running:

cs tunnel 8080

In another remote pane, serve the current directory with Python 3:

python -m http.server 8080 \
  --bind 127.0.0.1 --directory .

Open http://127.0.0.1:8080 in your desktop browser. Chan forwards desktop port 8080 to port 8080 on the remote host. Keep both commands running; Ctrl+C in the tunnel pane closes the forward.

Requires Chan Desktop. Through a gateway, use the devserver owner's desktop connection.

One host. Multiple participants.

Chan's workspace protocol coordinates presence, document and drawing updates, and leadership across connected windows. Each client reaches the same devserver through its authorized connection.

The devserver coordinates shared state.
CLIENT AYour window
Events + edits
DEVSERVERShared workspacePresence, documents, terminals
Events + edits
CLIENT BAnother window
cs session list

List this server's clients across terminal and workspace windows.

cs session self --name "laptop"

Name this client and its workspace participant.

cs session info CLIENT_ID

Inspect a client's windows, terminals, and connections.

cs session detach CLIENT_ID

Disconnect that client while keeping terminals and saved layouts. It can explicitly reconnect.

cs session handover

Request workspace leadership. The current leader answers with cs session handover --accept or --reject.

cs session takeover

Take leadership when the leader is gone. --force also permits taking over from a live leader.

Client IDs come from cs session list; workspace leadership belongs to windows. If a shell has multiple viewers, self asks you to identify your client. See Collaboration & sessions in the manual. For account-based access and devserver sharing, set up a gateway.