1 Commits
5 changed files with 13 additions and 29 deletions

No files matched your search

-13
View File
@@ -1,18 +1,5 @@
# Changelog # Changelog
## [0.2.3] - 2026-04-06
### Changed
- README: clarify that the bridge relays raw LoRa packets and works with any
protocol (Meshtastic, MeshCore, etc.) simultaneously.
## [0.2.2] - 2026-04-06
### Fixed
- TUI now fits in 80-column terminals (was 86).
## [0.2.1] - 2026-04-06 ## [0.2.1] - 2026-04-06
### Fixed ### Fixed
Generated
+1 -1
View File
@@ -906,7 +906,7 @@ dependencies = [
[[package]] [[package]]
name = "donglora-bridge" name = "donglora-bridge"
version = "0.2.2" version = "0.2.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"blake3", "blake3",
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "donglora-bridge" name = "donglora-bridge"
version = "0.2.3" version = "0.2.1"
edition = "2024" edition = "2024"
authors = ["Stephen Waits <steve@waits.net>"] authors = ["Stephen Waits <steve@waits.net>"]
license = "MIT" license = "MIT"
+8 -11
View File
@@ -4,19 +4,16 @@
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
![Rust](https://img.shields.io/badge/rust-1.94.1%2B-orange) ![Rust](https://img.shields.io/badge/rust-1.94.1%2B-orange)
**donglora-bridge** relays raw LoRa packets over the internet. Every packet your **donglora-bridge** connects LoRa radios to the internet so packets heard by one
radio hears is forwarded to every other bridge running the same passphrase, and radio can be retransmitted by another radio anywhere in the world.
their radios retransmit it locally. Because it operates on raw packets, it works
with any protocol built on LoRa --
[Meshtastic](https://meshtastic.org/),
[MeshCore](https://github.com/rocketgithub/meshcore-firmware),
or anything else -- simultaneously and without configuration. If your radio can
hear it, the bridge will relay it.
[LoRa](https://en.wikipedia.org/wiki/LoRa) is a long-range, low-power wireless [LoRa](https://en.wikipedia.org/wiki/LoRa) is a long-range, low-power wireless
modulation used by off-grid mesh networks. A single radio might cover a few protocol used by off-grid mesh networks like
kilometers. This bridge removes that limit, extending a local LoRa network [MeshCore](https://github.com/rocketgithub/meshcore-firmware). A single LoRa
across a larger geographic area. radio might cover a few kilometers. This bridge removes that limit: any packet
your radio hears gets relayed over the internet to every other bridge running the
same passphrase, and their radios retransmit it locally. The result is a single
mesh network across a larger geographic area.
There is no central server. Bridges discover each other automatically using the There is no central server. Bridges discover each other automatically using the
[Mainline DHT](https://en.wikipedia.org/wiki/Mainline_DHT) and communicate [Mainline DHT](https://en.wikipedia.org/wiki/Mainline_DHT) and communicate
+3 -3
View File
@@ -245,8 +245,8 @@ fn draw_ui(
series: &TimeSeries, series: &TimeSeries,
) { ) {
// Minimum terminal size for the 3-column layout. // Minimum terminal size for the 3-column layout.
if area.width < 80 || area.height < 12 { if area.width < 86 || area.height < 12 {
let msg = format!("Terminal too small ({}x{}), need 80x12+", area.width, area.height); let msg = format!("Terminal too small ({}x{}), need 86x12+", area.width, area.height);
frame.render_widget( frame.render_widget(
Paragraph::new(msg).alignment(Alignment::Center).style(Style::default().fg(C_RATE_DROP)), Paragraph::new(msg).alignment(Alignment::Center).style(Style::default().fg(C_RATE_DROP)),
area, area,
@@ -266,7 +266,7 @@ fn draw_ui(
// Packet log columns: Age=5 Hash=8 RF=4 Net=4 Size=6 RSSI=6 SNR=5 Act=5 = 43 + 2 border + 1 pad = 46 // Packet log columns: Age=5 Hash=8 RF=4 Net=4 Size=6 RSSI=6 SNR=5 Act=5 = 43 + 2 border + 1 pad = 46
let cols = Layout::default() let cols = Layout::default()
.direction(Direction::Horizontal) .direction(Direction::Horizontal)
.constraints([Constraint::Length(30), Constraint::Length(46), Constraint::Min(4)]) .constraints([Constraint::Length(30), Constraint::Length(46), Constraint::Min(10)])
.split(rows[1]); .split(rows[1]);
// Left column: Network, Radio, Stats stacked. // Left column: Network, Radio, Stats stacked.