Open-source treadmill engine · GPLv3

The engine under the desk.

Trot is a small, headless Rust daemon that reads your under-desk treadmill over Bluetooth and serves it as plain HTTP + WebSocket. Run trot daemon, point anything at it. It's the open-source core the Nowhere app is built on.

Rust · GPLv3 · runs offline · zero telemetry

trot — it's really only treadmilling
What it is

One binary between your treadmill and everything else.

No GUI, no account, no cloud. Trot connects to the belt, keeps the record, and exposes it on localhost. What you build on top is up to you.

ble

Reads the treadmill

Native LifeSpan support plus generic FTMS, straight over Bluetooth LE. No dongle, no vendor app.

api

Local HTTP + WebSocket

A tiny axum server on loopback: poll /api/state or subscribe to /ws for a live stream of steps, speed and distance.

rec

Records sessions

Every walk is written to a local SQLite database with per-minute rollups and retention. Your history, on your disk.

svc

Headless daemon

trot daemon runs quietly in the background — drop it behind systemd, launchd, or a login item and forget it.

priv

Nothing leaves

No accounts, no analytics, no phone-home. Trot binds to 127.0.0.1 and speaks only when spoken to.

rust

Small & portable

One dependency-light Rust binary. Builds and runs on Linux, macOS and Windows from the same source.

Compatibility

Which treadmills work.

Trot connects over Bluetooth Low Energy. There are two ways in.

Native

LifeSpan

First-class support for LifeSpan under-desk treadmills using their own Bluetooth protocol — developed and tested against a LifeSpan walking pad.

Standard

FTMS treadmills

Any treadmill that advertises the standard Bluetooth Fitness Machine Service (FTMS). A large, growing set — NordicTrack, Peloton, Woodway, Technogym and many more.

If your machine speaks FTMS, trot scan will find it. Compatibility is best-effort and interoperability-based — we can't promise a specific model, but the standard covers most under-desk treadmills.

™ Trademarks of their respective owners. See Trademarks.

Install

Clone, build, walk.

Trot is a Cargo project. You need a Rust toolchain and a Bluetooth adapter — that's it.

# build from source $ git clone https://github.com/marcuspuchalla/trot $ cd trot $ cargo build --release # the binary lands in target/release/trot
# pair a treadmill (once), then run the engine $ trot scan # scan + pick one to pair $ trot daemon # track; auto-connects to it
# then, anytime $ trot status # is it up? treadmill connected? $ trot today # today's totals $ trot log --week # recent sessions

Prefer a polished UI over a terminal? Nowhere is the desktop, mobile and web app that runs on this exact engine.

The contract

A local API you can build against.

The daemon picks a free port and writes it to a handshake file; trot status/today/log and Nowhere read it automatically. These are the same endpoints the app uses — nothing is private.

EndpointReturns
GET /api/stateConnection status + the live sample (steps, speed, distance, duration) + today's totals.
GET /api/todayToday's totals with an hourly breakdown.
GET /api/sessionsSession history; /api/sessions/:id for one.
GET /api/analyticsAggregated trends over time.
GET /api/exportA full, lossless dump of your data (sessions + samples).
WS   /wsLive push: every new sample and session event as it happens.

Point curl, a script, a Grafana panel, or your own front-end at it. The /api + /ws boundary is deliberately the seam between Trot and Nowhere, so anything Nowhere does, you can too.

Trot & Nowhere

Trot is the engine. Nowhere is the app.

Same author, clean split: an open engine anyone can run and fork, and a polished product that pays for the work. Neither hides the other.

Open source · this page

Trot

The GPLv3 Rust daemon. Talks to the treadmill, keeps the database, serves the API. Headless, hackable, yours.

  • Command line + background daemon
  • Local HTTP + WebSocket API
  • Fork it, script it, self-host it
GitHub
The product · nowhere.fitness

Nowhere

The calm, privacy-first app built on Trot — live sessions, history, analytics and optional encrypted sync, on every platform.

  • macOS, Windows, Linux, iOS, Android, Web
  • One codebase, no data collection
  • Buying Plus keeps the engine funded
nowhere.fitness
Questions

The short answers.

Which treadmills work?+
LifeSpan under-desk treadmills are supported natively. Beyond that, Trot speaks the generic FTMS Bluetooth profile, which covers a lot of walking pads and treadmills — NordicTrack, Peloton, Woodway, Technogym and more. If your machine advertises FTMS, Trot can read it. See Supported treadmills.
Do I need an account or the internet?+
No. Trot runs entirely offline. It binds to 127.0.0.1, keeps no account, and never phones home — no telemetry, no sign-in, nothing leaves the machine.
Where is my data stored?+
In a local SQLite database on your own disk, with per-minute rollups and retention. Pull a full, lossless dump anytime with GET /api/export.
Which platforms does it run on?+
Linux, macOS and Windows, from the same Rust source. You need a Bluetooth adapter and a Rust toolchain to build it.
Is there a graphical app?+
Trot is terminal-first and complete on its own. A graphical companion that runs on this same /api + /ws is in the works — but Trot never depends on it, and you're free to build your own client.
How is it licensed?+
Under the GNU GPLv3. Run it, read it, modify it, share it — and keep modified versions open.

Free as in freedom. GPLv3.

Trot is released under the GNU General Public License v3. Run it, read it, change it, share it. If you ship a modified version, keep it open — that's the whole deal.