meshdb
A lightweight Python library for storing Meshtastic node, telemetry, and message data in per-node SQLite databases.
Installation
You can install meshdb directly from PyPI using pip:
pip install meshdb
Or install from source within a virtual environment:
git clone https://github.com/pdxlocations/meshdb.git
cd meshdb
pip install -e .
Or install via Poetry:
poetry install
Quick Usage Example
Set a default database path and handle incoming packets:
from meshdb import handle_packet, set_default_db_path
set_default_db_path("./data")
packet = {
"from": 12345678,
"rxTime": 1700000000,
"decoded": {
"portnum": "NODEINFO_APP",
"user": {"longName": "TestNode"}
}
}
handle_packet(packet, node_database_number=12345678)
Network Connection Options (Serial/TCP/Virtual Node)
meshdb now includes a connection helper that supports:
serial(default)tcpudpvirtual-node mode
import meshdb
conn = meshdb.connect(
transport="udp",
virtual_node=meshdb.VirtualNodeConfig(
node_id="!89abcdef",
long_name="MeshDB Virtual Node",
short_name="MDB",
channel="LongFast",
key="AQ==",
mcast_group="224.0.0.69",
mcast_port=4403,
),
)
print(conn.transport, conn.owner_node_num)
When receiving packets from udp, use meshdb.normalize_packet(packet, "udp")
before passing to meshdb.handle_packet(...).
CLI Listener
You can run:
meshdb
meshdb --db ./data --transport tcp --tcp-host 127.0.0.1:4403
meshdb --transport udp --node-id !89abcdef --channel LongFast
This connects to the mesh, listens for new packets, and persists them into the owner database until you stop it with Ctrl+C.
The CLI is configured with explicit arguments rather than environment variables. For udp transport, you can also pass:
--long-name--short-name--hw-model--key--mcast-group--mcast-port
Owner Database
meshdb stores data per owner node. The owner_node_num value selects which owner's SQLite database and table set you are reading or writing.
That matters because the same remote node can appear differently depending on which local node observed it. Signal, last-heard time, hops, and even the available node list are owner-specific.
If you have a live Meshtastic interface and want to import its current NodeDB snapshot, you can do:
import meshdb
count = meshdb.sync_nodes_from_interface(owner_node_num, interface)
print(f"imported {count} nodes")
Lookups in Code
import meshdb
meshdb.set_default_db_path("./data")
node = meshdb.get_node(12345678, owner_node_num=12345678)
battery = meshdb.get_node_metric("TestNode", "battery_level", owner_node_num=12345678)
Project Status
Early development. Schema and API changes may occur.
License
GPL-3.0-only. See LICENSE.
Meshtastic® is a registered trademark of Meshtastic LLC. Meshtastic software components are released under various licenses, see GitHub for details. No warranty is provided - use at your own risk.
Metadata
Release files for meshdb 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| meshdb-0.2.0.tar.gz | 35.8 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| meshdb-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 73.2 kB
Release files / meshdb-0.2.0.tar.gz
| Download URL | meshdb-0.2.0.tar.gz |
|---|---|
| Size | 35.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e811c1973900c7e1fbfa7da5ad8f4dd93c18e85107c0c40da18428c0c83a85f2
|
|
BLAKE2b-256 checksum How to use checksums |
abd4b8e85292151741d741ff851e098db3c1c7daa10ec2123e1934d880febcae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 26, 2026.
Transparency logRelease files / meshdb-0.2.0-py3-none-any.whl
| Download URL | meshdb-0.2.0-py3-none-any.whl |
|---|---|
| Size | 37.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6019fbc61480e187b95f63dbf7cf6b11c8ba2172c83e846591ae550cdcc1f362
|
|
BLAKE2b-256 checksum How to use checksums |
0eecd95c94e245ffc1b3d9e5e8c9a09dc9d30d3d6a9931a44db74c0c53f38567
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 26, 2026.
Transparency logSecurity for meshdb 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for meshdb-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 26, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.