Skip to main content

Multi-user shared terminal

Project description

Concordia

Concordia is a live, multi-user terminal sharing tool for interactive TUI apps.

Think of it like Google Docs for terminal sessions: one host runs a program, other users join with an invite link, and everyone sees the same live screen and can collaborate in real time.

Why Concordia instead of tmux/ssh

  • Internet-first collaboration with invite codes (no manual SSH account setup per guest).
  • One host-managed runtime for quick pair/mob sessions.
  • Shared live view for all participants, including the host's own terminal stream.
  • Better for ad-hoc collaborative sessions than managing remote shell access and key distribution.

Use tmux/ssh when you want full server administration and long-lived personal shells. Use Concordia when you want fast collaborative live sessions.

Quickstart

  1. Install:
bash install.sh
  1. Set ngrok auth token on the host (required):
export NGROK_AUTHTOKEN=YOUR_NGROK_TOKEN
  1. Start a party and choose the shared program:
concordia_host --program "bash"
  1. Share the invite code printed by host.

  2. Join from another machine:

concordia_client <paste-invite-code> --user alice

What can be shared

Any interactive terminal program that runs on the host, for example:

  • bash, zsh, fish
  • python3 -q, ipython
  • htop, btop
  • vim, nvim
  • lazygit
  • custom internal TUIs

Common commands

# Share a shell
concordia_host --program "bash"

# Share a Python REPL in a specific project
concordia_host --project-dir ~/my-project --program "python3 -q"

# Share a TUI app
concordia_host --program "lazygit"

# Join
concordia_client concordia://<ngrok-host>:<ngrok-port>/<token> --user bob

How it works

  • Host starts a websocket server and launches the chosen program inside a PTY.
  • Clients connect with invite token.
  • Client input bytes are forwarded to host PTY stdin.
  • PTY output bytes are broadcast to all connected clients.
  • Control messages (invite, participants, system, error) are sent as JSON.

Requirements

  • Python 3.9+ on host and clients
  • ngrok auth token on host (NGROK_AUTHTOKEN)
  • The shared program installed on host and available on PATH

Install (global)

pipx install .

If you do not use pipx:

python3 -m pip install --user .

Host and client apps

  • Host command: concordia_host
  • Client command: concordia_client
  • Use --plain for legacy non-TUI mode.

Notes

  • --program is required when creating a party.
  • --project-dir sets the working directory for the shared program process.
  • --no-local-repl runs server without auto-connecting host client.
  • ngrok is required for hosting; invite host/port come from the ngrok tunnel.
  • --public-host and --ngrok are deprecated and ignored.

Docker

docker build -t concordia .
docker run --rm -it \
  -p 8765:8765 \
  --env NGROK_AUTHTOKEN=YOUR_NGROK_TOKEN \
  concordia \
  concordia --create-party --host 0.0.0.0 --program "bash"

Or:

docker compose up --build

Join from another machine:

concordia_client concordia://<ngrok-host>:<ngrok-port>/TOKEN --user alice

Bundled install (standalone)

./scripts/build_bundle.sh
./dist/concordia.pyz --create-party --program "bash"

Releases

./scripts/build_release.sh

Upload artifacts in dist/ to GitHub Releases.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

concordia_tui-0.0.6.tar.gz (19.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

concordia_tui-0.0.6-py3-none-any.whl (21.2 kB view details)

Uploaded Python 3

File details

Details for the file concordia_tui-0.0.6.tar.gz.

File metadata

  • Download URL: concordia_tui-0.0.6.tar.gz
  • Upload date:
  • Size: 19.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for concordia_tui-0.0.6.tar.gz
Algorithm Hash digest
SHA256 199dd653e9dbeba7cfbcba7bdf00e56b42fa014664f5bab757e4fa4613727513
MD5 1704242c236b1681d07cd0015a8b33d6
BLAKE2b-256 4fbd0292ce3b93434033cf98dce58b5e5129c33ff8191922bc90fa6def23c84b

See more details on using hashes here.

File details

Details for the file concordia_tui-0.0.6-py3-none-any.whl.

File metadata

  • Download URL: concordia_tui-0.0.6-py3-none-any.whl
  • Upload date:
  • Size: 21.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for concordia_tui-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 e5a9e5622732d8f65fb278d50cce3b3d62bb9846c325cbc57c9d23174eeb22dd
MD5 315e8283ccbbcb9f99ae012a7ec75b14
BLAKE2b-256 ecbb0b009650f6b0bfccbd7f9700a3437ef66869ce0ca2c0acb5ba44648400bc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page