- assets/branding/: icon (SVG + 512px PNG for Gitea avatar), adaptive-icon foreground/background layers, path-only wordmark for dark/light grounds, 1200x300 README banner, 1280x640 social preview (SVG + PNG) - README: banner hero - build-status: branding decision log (includes the pending website section from the parallel web/ session, interleaved in the same file) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
68 lines
2.8 KiB
Markdown
68 lines
2.8 KiB
Markdown
<p align="center">
|
|
<img src="assets/branding/banner.svg" alt="echolot — measure, don't guess" width="100%">
|
|
</p>
|
|
|
|
# Echolot
|
|
|
|
Free software for detecting and debugging **local network issues** from an Android phone —
|
|
built for people who actually know what a neighbor table is.
|
|
|
|
Most "wifi analyzer" apps show you signal bars. Echolot aims at the layer where home and office
|
|
networks actually break: duplicate DHCP servers, broken IPv6 RAs, MTU black holes, NAT64 weirdness,
|
|
multicast that dies at the AP, DNS that answers differently than it should. It records what it
|
|
observed, separates observation from interpretation, and exports the whole run so you can argue
|
|
with it later.
|
|
|
|
**Status: pre-release.** The capability prober runs on real hardware; the production app and the
|
|
probe server are not built yet.
|
|
|
|
## Repository layout
|
|
|
|
```
|
|
docs/ design docs — the contract for everything below
|
|
echolot-prober/ capability prober: validates the no-root feasibility matrix on real devices
|
|
```
|
|
|
|
The Go probe server and the production app land here as siblings.
|
|
|
|
## Design docs
|
|
|
|
The three specs are draft-complete and reviewed; treat them as the contract.
|
|
|
|
| Doc | What it defines |
|
|
|---|---|
|
|
| [docs/feature-catalog-and-feasibility.md](docs/feature-catalog-and-feasibility.md) | Full feature list + the no-root feasibility matrix |
|
|
| [docs/measurement-schema.md](docs/measurement-schema.md) | Archived/exportable measurement JSON (observation vs finding, two-clock rule, anonymization) |
|
|
| [docs/probe-protocol.md](docs/probe-protocol.md) | Client↔server wire protocol (pinned TLS control plane, binary UDP data plane, STUN, canary DNS) |
|
|
| [docs/build-status.md](docs/build-status.md) | Running log of decisions and next steps |
|
|
|
|
## Privilege tiers
|
|
|
|
Every result records which tier produced it:
|
|
|
|
- **`app`** — no root, no special setup. The bulk of the functionality.
|
|
- **`shizuku`** — ADB-shell privileges via wireless pairing, no root. Shipped in v1.
|
|
- **`root`** — future optional module.
|
|
|
|
## Licensing
|
|
|
|
| Part | License | Why |
|
|
|---|---|---|
|
|
| All code (app, prober, server) | **GPL-3.0-or-later** | The value here is the platform-API research; copyleft keeps derivative apps free |
|
|
| `docs/` (the specs) | **CC-BY-4.0** | A wire protocol and a measurement format should be implementable by anyone, without license anxiety |
|
|
|
|
Full texts: [LICENSE](LICENSE) (GPLv3) and [docs/LICENSE](docs/LICENSE) (CC BY 4.0).
|
|
Sources carry `SPDX-License-Identifier` headers.
|
|
|
|
If you want to build a compatible server or client, the protocol and schema docs are deliberately
|
|
permissive — go ahead.
|
|
|
|
## Building
|
|
|
|
See [echolot-prober/README.md](echolot-prober/README.md). Short version, from `echolot-prober/`:
|
|
|
|
```sh
|
|
echo "sdk.dir=/path/to/Android/sdk" > local.properties
|
|
./gradlew :app:assembleDebug
|
|
```
|