D E A D M E S H

meshtastic-deadlight | LoRa Internet Bridging

By sandman | 11/17/2025
2

meshtastic-deadlight LoRa Internet Gateway, an origin story


How a proxy project evolved into something I didn't expect


The Problem

There are places where people have devices and apps but no Internet access:

  1. Rural areas - Too far from infrastructure
  2. Disaster zones - Towers down for weeks
  3. Network shutdowns - Deliberate censorship

Existing solutions all have tradeoffs:

Satellite Internet (Starlink, etc.)

Mesh messaging apps (Firechat, Briar)

LoRa projects

The gap: People want to use their existing apps in places with no connectivity, ideally on hardware that's affordable and can run on solar power.

I built something to explore this problem.


What Deadlight Does

Deadlight is a multi-protocol proxy written in C that I've been developing for a while. It handles HTTP/HTTPS, SOCKS, SMTP, IMAP, and other protocols through a unified architecture. Recently, I added Meshtastic support as a plugin.

How It Works

Your device connects to Deadlight as a standard proxy. Deadlight:

  1. Terminates the connection and parses the protocol
  2. Fragments the data into ~220-byte chunks
  3. Transmits over LoRa using Meshtastic's protobuf format
  4. A gateway node (with real Internet) reassembles the stream
  5. Forwards your request to the actual destination

Responses follow the reverse path.

Result: Standard applications work over LoRa mesh without modification. You can send email, browse text-heavy sites, or make API calls—just at ~5 kbps with higher latency.


Why This Approach

Protocol-Aware Bridging

Most attempts at LoRa Internet bridging fall into two categories:

IP-over-LoRa: Tunnel raw packets

Application-Specific: Build custom email-over-LoRa, web-over-LoRa, etc.

Deadlight's approach: Terminate and understand protocols, then repackage at the message level.

This enables:

Why Now

The timing worked out because:


Real-World Scenarios

Where this makes sense:

Disaster Response

Deploy solar-powered nodes after infrastructure failure. Responders and affected people can check weather, coordinate via email, access online resources—using their existing devices and apps.

Rural Connectivity Sharing

One satellite uplink serves dozens of users across 20+ kilometers via LoRa mesh. Communities share infrastructure costs.

Censorship Circumvention

When networks are shut down, traffic tunnels through LoRa mesh to border nodes with access. Difficult to block without widespread jamming.

Remote Operations

Field teams maintain connectivity for critical operations (research stations, remote worksites) without traditional infrastructure.

The core insight: Application compatibility often matters more than bandwidth. People will tolerate slow Gmail rather than abandoning the entire Internet application ecosystem.


Technical Architecture

┌─────────────────────┐
│   Standard App      │ ← Normal application behavior
├─────────────────────┤
│   TCP Connection    │
├─────────────────────┤
│   Deadlight Proxy   │ ← Protocol termination
│   (Client Side)     │   Fragmentation
├─────────────────────┤
│   Meshtastic/LoRa   │ ← 220-byte chunks
│   868/915 MHz       │   Mesh routing
└─────────────────────┘
         │
         │  [Multi-hop mesh network]
         │
         ↓
┌─────────────────────┐
│   Meshtastic/LoRa   │ ← Chunk reassembly
│   (Gateway)         │
├─────────────────────┤
│   Deadlight Proxy   │ ← Stream reconstruction
│   (Gateway Side)    │   Internet forwarding
├─────────────────────┤
│   Internet          │
└─────────────────────┘

Key Implementation Details

Protocol Termination

Smart Fragmentation

Delay Tolerance

Security


Current Status

What's Working (v1.0.0):

Tested Protocols:

Known Limitations:


Why This Might Be Novel

I haven't seen this exact approach shipped elsewhere, though I could be missing prior art.

Similar Projects:

What's Different:

If similar work exists, I'd be interested to learn about it.


Realistic Expectations

This approach has a specific sweet spot:

Good For:

Not Good For:

The use case is delay-tolerant applications where ~5 kbps is sufficient and the alternative is no connectivity.


Open Questions

Areas where I'd value input:

  1. Deployment experience: Real-world performance in challenging RF environments
  2. Regulatory compliance: LoRa usage rules vary significantly
  3. Economic viability: Cost/benefit vs. alternatives in different scenarios
  4. Security posture: Comprehensive audit needed for sensitive use cases
  5. Scalability: Gateway capacity under realistic loads

Next Steps

Immediate:

Future Possibilities:


Get Involved

Deadlight is open source and this is an active experiment:

Code: github.com/gnarzilla/proxy.deadlight
Blog: deadlight.boo
Support Development: ko-fi.com/gnarzilla

Particularly interested in:

If you see potential applications or fundamental issues, I'd like to hear about them.

Layer-by-Layer Translation

┌─────────────────────┐
│   Gmail App         │ ← User just sees "slow internet"
├─────────────────────┤
│   SMTP (TCP port    │
│   587)              │
├─────────────────────┤
│   Deadlight Proxy   │ ← Terminates SMTP connection
│   (Client Side)     │   Parses: "MAIL FROM: alice@..."
├─────────────────────┤
│   Meshtastic        │ ← Breaks into 220-byte chunks
│   Fragmentation     │   Chunk 1: [Header + "MAIL FROM..."]
│                     │   Chunk 2: [Continuation...]
├─────────────────────┤
│   LoRa Radio        │ ← 868 MHz, ~5 kbps, 10 km range
│   (Physical)        │
└─────────────────────┘
         │
         │  [Mesh hops: Node B → Node C → Gateway]
         │
         ↓
┌─────────────────────┐
│   LoRa Radio        │
│   (Gateway Side)    │
├─────────────────────┤
│   Meshtastic        │ ← Reassembles chunks
│   Reassembly        │   Back into "MAIL FROM: alice@..."
├─────────────────────┤
│   Deadlight Proxy   │ ← Opens real TCP to smtp.gmail.com
│   (Gateway Side)    │   Forwards reconstructed SMTP
├─────────────────────┤
│   Internet          │
│   (smtp.gmail.com)  │
└─────────────────────┘

November 2025 - This is active development. Sharing the approach and looking for feedback from people working on similar problems.

Next: readme

Comments

First