A simple bridge between meshtastic and XMPP
  • Python 99.3%
  • Dockerfile 0.7%
Find a file
2026-02-06 13:56:08 +02:00
siltamesh Release 0.2.0 2026-02-06 13:56:08 +02:00
.editorconfig Add an .editorconfig file 2024-12-19 15:57:15 +02:00
.gitignore Initial import 2024-11-21 18:09:56 +02:00
Dockerfile Add Dockerfile 2024-12-20 12:52:46 +00:00
LICENSE Add LICENSE and SPDX license headers 2024-12-16 20:21:30 +02:00
pyproject.toml bridge,umap: Use async httpx client in umap 2025-12-20 13:12:17 +02:00
README.md README.md: Add a section on node mapping configuration 2025-12-27 19:33:02 +02:00
setup.cfg setup.cfg: Exclude .venv from flake8 checks 2025-12-27 19:37:51 +02:00
uv.lock Add uv.lock 2025-12-22 17:18:37 +02:00

Siltamesh

A simple bridge between meshtastic and XMPP networks. Supports two-way communication between a meshtastic channel and an XMPP user or channel. Direct meshtastic messages are forwarded to XMPP, but cannot be sent by an XMPP client, at least not yet.

Siltamesh requires an XMPP bot account and must be run on a (Linux) computer which can connect to a meshtastic radio via the network, typically WLAN. An always on single board computer would be an excellent platform for siltamesh.

Installation

Python version 3.11 or greater is required. See the pyproject.toml file in this repository for dependencies.

Running from source tree

You can run siltamesh from the cloned git repository:

python3 -m siltamesh -h

This uses library dependencies from your environment, either from OS packages, or installed with pip.

uv run from source tree

With uv you get a virtualenv with exact package versions from uv.lock.

Change to directory with the checked out git tree and run:

uv run -m siltamesh

pipx install from source tree

Change to directory with the checked out git tree and give this command:

pipx install ./

This also installs dependencies from PyPI to the created virtualenv.

A link to the executable script is now installed to ~/.local/bin/siltamesh. If this directory is in your $PATH you can now run siltamesh anywhere:

siltamesh -h

Configuration

A configuration file in TOML format is required. The default configuration file location is $XDG_CONFIG_HOME/siltamesh/siltamesh.toml (XDG_CONFIG_HOME is typically ~/.config).

The configuration file consists of a general section with the bridge-bot XMPP account and radio address configuration, and channel sections which define the mapping between mesh channels and XMPP accounts or multi-user channels (MUCs).

The best documentation for the configuration is currently the example configuration file.

The meshtastic radio, channels and XMPP user accounts and MUCs need to be configured before using them with siltamesh. Use your favorite meshtastic and XMPP clients to do that.

Mapping nearby nodes

Siltamesh stores received node positions to memory. The positions can be logged to the debug log, stored into a GeoJSON file to make them permanent across restarts (recommended), or sent to an online map service uMap. The map section in the config file controls these features.

For the uMap support, the map needs to be created in the website. Add its secret edit URL to the configuration to enable this feature.

Usage

You can run siltamesh from the command line, or better yet with a supervisor like systemd. There is an example service file for a systemd user instance.

Container

Alternatively, the repo contains a Dockerfile which can be used to build a container image. E.g. using docker:

docker build -t siltamesh .

If you have a config file at ./config/siltamesh.toml, run with:

docker run --rm --network=host -v "$PWD/config:/etc/siltamesh" -v "$PWD/logs:/var/log/siltamesh" siltamesh

Note that .local domains (to connect to the radio) may not work without host network mode, or you may need to use the radio's real address. The --rm flag tells docker to automatically delete the container when you stop it.