Skip to main content

Contact - A Console UI for Meshtastic

Powered by Meshtastic.org

Install with:

pip install contact

[!NOTE] Windows users must also install:

pip install windows-curses

because the built-in curses module is not available on Windows.

This Python curses client for Meshtastic is a terminal-based client designed to manage device settings, enable mesh chat communication, and handle configuration backups and restores.

Contact - Main UI Screenshot



The settings dialogue can be accessed within the client or may be run standalone to configure your node by launching contact --settings or contact -c

Screenshot 2025-04-08 at 6 10 06 PM

Docker install

Install with Docker:

docker build -t contact .

# Change /tmp/data to a directory you'd like to persist the database in
export DATA_DIR="/tmp/contact"

mkdir -p "$DATA_DIR"
docker run -it --rm -v $DATA_DIR:/data --workdir /data --device=/dev/ttyUSB0 contact --port /dev/ttyUSB0

Message Persistence

All messages will saved in a SQLite DB and restored upon relaunch of the app. You may delete client.db if you wish to erase all stored messages and node data. If multiple nodes are used, each will independently store data in the database, but the data will not be shared or viewable between nodes.

Client Configuration

By navigating to Settings -> App Settings, you may customize your UI's icons, colors, and more!

Notification sounds

Add audio files to Contact's contact/sounds/ folder, then choose one in Settings → App Settings → Notification sound. alert.mp3 is the default selection; choose None to disable notification audio. Supported file types are MP3, WAV, OGG, AIFF, and FLAC.

Remote administration

With the Nodes pane selected, press ` or F12 and choose Remote admin for the highlighted node. Contact requests the node's settings through Meshtastic Remote Admin and displays an error if the node does not authorize your public key. Remote App Settings are intentionally unavailable because they apply only to the local Contact client.

For smaller displays you may wish to enable single_pane_mode:

Screenshot 2025-08-22 at 11 15 54 PM

Commands

  • CTRL + k = display a list of commands.
  • ↑→↓← = Navigate around the UI.
  • F1/F2/F3 = Jump to Channel/Messages/Nodes
  • ENTER = Send a message typed in the Input Window, or with the Node List highlighted, select a node to DM
  • ` or F12 = Open the Settings dialogue
  • CTRL + p = Hide/show a log of raw received packets.
  • CTRL + t or F4 = With the Node List highlighted, send a traceroute to the selected node
  • F5 = Display a node's info
  • CTRL + f = With the Node List highlighted, favorite the selected node
  • CTRL + g = With the Node List highlighted, ignore the selected node
  • CTRL + d = With the Channel List hightlighted, archive a chat to reduce UI clutter. Messages will be saved in the db and repopulate if you send or receive a DM from this user.
  • CTRL + d = With the Note List highlghted, remove a node from your nodedb.
  • ESC = Exit out of the Settings Dialogue, or Quit the application if settings are not displayed.

Search

  • Press CTRL + / while the nodes or channels window is highlighted to start search
  • Type text to search as you type, first matching item will be selected, starting at current selected index
  • Press Tab to find next match starting from the current index - search wraps around if necessary
  • Press Esc or Enter to exit search mode

Arguments

You can pass the following arguments to the client:

Connection Arguments

Optional arguments to specify a device to connect to and how.

  • --port, --serial, -s: The port to connect to via serial, e.g. /dev/ttyUSB0.
  • --host, --tcp, -t: The hostname or IP address to connect to using TCP, will default to localhost if no host is passed.
  • --ble, -b: The BLE device MAC address or name to connect to.
  • --settings, --set, --control, -c: Launch directly into the settings.

If no connection arguments are specified, the client will attempt a serial connection and then a TCP connection to localhost.

Example Usage

contact --port /dev/ttyUSB0
contact --host 192.168.1.1
contact --ble BlAddressOfDevice
contact --port COM3

To quickly connect to localhost, use:

contact -t

Install in development (editable) mode:

git clone https://github.com/pdxlocations/contact.git
cd contact
python3 -m venv .venv
source .venv/bin/activate
pip install -e .

Download files

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

Source Distribution

contact-1.6.9.tar.gz (164.2 kB view details)

Uploaded Source

Built Distribution

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

contact-1.6.9-py3-none-any.whl (175.5 kB view details)

Uploaded Python 3

File details

Details for the file contact-1.6.9.tar.gz.

File metadata

  • Download URL: contact-1.6.9.tar.gz
  • Upload date:
  • Size: 164.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for contact-1.6.9.tar.gz
Algorithm Hash digest
SHA256 0a8a4e64519d6a6a35392ff9e1fef322f83481cb93cf2719006ff69d8d7c814e
MD5 cd9def3f83c695b8d08ea9b00d5f0479
BLAKE2b-256 dc7feff68ecfa9dc23be5e840f5e007f61eaf858607a39992077a80c2e8f9bcf

See more details on using hashes here.

Provenance

The following attestation bundles were made for contact-1.6.9.tar.gz:

Publisher: release.yaml on pdxlocations/contact

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file contact-1.6.9-py3-none-any.whl.

File metadata

  • Download URL: contact-1.6.9-py3-none-any.whl
  • Upload date:
  • Size: 175.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for contact-1.6.9-py3-none-any.whl
Algorithm Hash digest
SHA256 e4bdf472b51c6259007faae2c82442e29540ee1b1f4e64774c98e10a52dfa9ed
MD5 26c4d0fe44d2d2d93592ec35323781e3
BLAKE2b-256 b0e38f2d330123e7b44c92f11e96f3d37463e6e919b92c5e259dfff98eeac07f

See more details on using hashes here.

Provenance

The following attestation bundles were made for contact-1.6.9-py3-none-any.whl:

Publisher: release.yaml on pdxlocations/contact

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.6.12

2 files

1.6.11

2 files

1.6.10

2 files

This release

1.6.9 This release

2 files

1.6.8

2 files

1.6.7

2 files

1.6.6

2 files

1.6.5

2 files

1.6.4

2 files

1.6.2

2 files

1.6.1

2 files

1.6.0

2 files

1.5.14

2 files

1.5.12

2 files

1.5.11

2 files

1.5.10

2 files

1.5.9

2 files

1.5.8

2 files

1.5.7

2 files

1.5.6

2 files

1.5.5

2 files

1.5.4

2 files

1.5.3

2 files

1.5.2

2 files

1.5.1

2 files

1.5.0

2 files

1.4.23

2 files

1.4.22

2 files

1.4.21

2 files

1.4.20

2 files

1.4.19

2 files

1.4.18

2 files

1.4.17

2 files

1.4.16

2 files

1.4.15

2 files

1.4.14

2 files

1.4.13

2 files

1.4.12

2 files

1.4.11

2 files

1.4.10

2 files

1.4.7

2 files

1.4.6

2 files

1.4.5

2 files

1.4.4

2 files

1.4.3

2 files

1.4.2

2 files

1.4.1

2 files

1.4.0

2 files

1.3.17

2 files

1.3.16

2 files

1.3.15

2 files

1.3.14

2 files

1.3.13

2 files

1.3.12

2 files

1.3.11

2 files

1.3.10

2 files

1.3.9

2 files

1.3.8

2 files

1.3.7

2 files

1.3.6

2 files

1.3.5

2 files

1.3.4

2 files

1.3.3

2 files

1.3.2

2 files

1.3.1

2 files

1.3.0

2 files

1.0.5

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page