MeshTerm goes out under the Apache License, Version 2.0 — free to use, modify, and redistribute, commercially or otherwise. The patent grant and the built-in trademark clause (§6) are why Apache over MIT. The "MeshTerm" name and any logo are reserved as trademarks outside the code license (NOTICE), and the app's donate link is called out as supporting this project specifically — a fork can take the code, but not the name or the donations that come with it. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
56 lines
1.7 KiB
TOML
56 lines
1.7 KiB
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "meshterm"
|
|
version = "0.1.0"
|
|
description = "A modern command-line toolkit for tuning and exploring a MeshCore mesh."
|
|
readme = "README.md"
|
|
requires-python = ">=3.10"
|
|
authors = [{ name = "Jean-Pierre Martineau" }]
|
|
license = { text = "Apache-2.0" }
|
|
keywords = ["meshcore", "lora", "mesh", "radio", "cli"]
|
|
|
|
dependencies = [
|
|
"meshcore>=2.3", # companion-device protocol (serial/BLE/TCP)
|
|
"pycryptodome>=3.20", # AES/HMAC for decrypting overheard channel packets
|
|
"pyserial>=3.5", # serial-port enumeration for device discovery
|
|
"bleak>=0.22", # Bluetooth LE scanning + companion connection
|
|
"typer>=0.12", # scripted CLI; subcommands mirror the menu
|
|
"rich>=13.7", # modern console rendering (progress, tables, panels)
|
|
"markdown-it-py>=3.0", # CommonMark parser behind the written About pages
|
|
"prompt_toolkit>=3.0", # full-screen interactive TUI (terminal, input, resize)
|
|
"segno>=1.6", # pure-Python QR codes (channel share links)
|
|
"tomli>=2.0; python_version < '3.11'", # TOML config reader on 3.10
|
|
"tomli-w>=1.0", # TOML writer for device-config backups
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest>=8.0",
|
|
"pytest-asyncio>=0.23",
|
|
"ruff>=0.4",
|
|
]
|
|
|
|
[project.scripts]
|
|
meshterm = "meshterm.cli:main"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["meshterm"]
|
|
|
|
[tool.ruff]
|
|
line-length = 100
|
|
target-version = "py310"
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "I", "UP", "B", "D"]
|
|
ignore = ["D203", "D213"] # pick one blank-line-before-class / multi-line-summary style
|
|
|
|
[tool.ruff.lint.pydocstyle]
|
|
convention = "google"
|
|
|
|
[tool.pytest.ini_options]
|
|
asyncio_mode = "auto"
|
|
testpaths = ["tests"]
|