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.3.tar.gz (19.3 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.3-py3-none-any.whl (20.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: concordia_tui-0.0.3.tar.gz
  • Upload date:
  • Size: 19.3 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.3.tar.gz
Algorithm Hash digest
SHA256 b7bc1be1e5cdd6a6af7b1f24846515df1a46f68a42b4cf1efbe1208036e861b1
MD5 947dc4fd46b3231104afde480cf7a78e
BLAKE2b-256 93833de1511360ab9a41d8219dc0e384272bbf4f2166687e82746c7f281f3363

See more details on using hashes here.

File details

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

File metadata

  • Download URL: concordia_tui-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 20.9 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2fd3b47b777075b58fc2e1dcb1f1f36990795b4b43dd88f1f16ab6615af68b5b
MD5 95f4b9cec95ce4904dbee80fed45b17e
BLAKE2b-256 8f31b268651e1fc27c048e7478b2ae8f15034ac9452e411866657552328149a1

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