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.1.tar.gz (19.0 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.1-py3-none-any.whl (20.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: concordia_tui-0.0.1.tar.gz
  • Upload date:
  • Size: 19.0 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.1.tar.gz
Algorithm Hash digest
SHA256 a9a60745a6ba3a5841efa1bfe2be3638cb948766cbf69167666444396f2dcc31
MD5 5340733acfa599b1571711eeabb561e1
BLAKE2b-256 b6ab0c7d4fe5f58809efae9040a7e8935059b006c49a2393d3918c35c0247a17

See more details on using hashes here.

File details

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

File metadata

  • Download URL: concordia_tui-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 20.6 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c706e3bd97657656ef178fea440843452c3e48c50314685fc8266435d8239df3
MD5 8bec4d900a975816ccee91c2024c66cd
BLAKE2b-256 bbfb25b4ccf3896f2cf38223b2140896e654348d279ab4f22cd8817ba20d8d58

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