Your trips.
Your data.
Fahrtenbuch is a self-hosted vehicle trip log made of an Android app and a web server. The app notices via Bluetooth when you get into your car, records the trip and syncs it to your own server – or keeps everything offline on the phone.
Two parts, one trip log
The Android app is for the road, the server is for reviewing, exporting and managing. The app also works without a server.
Record trips without thinking about it
A native app built with Kotlin and Jetpack Compose. Assign your car's paired Bluetooth device (hands-free kit, head unit) to a vehicle and the app starts and stops recording on its own.
- Automatic trip start via Bluetooth, or start manually
- GPS recording as a foreground service, interval 5–60 seconds
- Offline buffer: trips sync once you're back online
- Local mode with no server at all, migrate later
- Sign in via QR code, password, TOTP or passkey
Review, correct, export
Node.js backend with PostgreSQL and Redis, React web dashboard. Runs as a Docker Compose stack on your own server, NAS or homelab.
- Dashboard, map and statistics across all vehicles
- Classify, tag, split and merge trips
- Export to CSV, GPX and PDF – including country formats
- Multi-user with vehicle sharing and permissions
- Full REST API with an OpenAPI specification
Features
Everything a trip log needs for company cars, leased vehicles or your tax return.
Bluetooth detection
When your phone connects to the car, the trip starts. When it disconnects, the trip ends.
GPS routes & addresses
Every trip with its route on the map. Start and end addresses are resolved on the server via Photon, and frequent places can be saved.
Classification
Business, private, commuting or unclassified – with purpose, tags, driver assignment and personal route colours on the map.
Audit history
Corrections are logged and integrity periods protect closed months, so your trip log stays tamper-evident.
Odometer readings
Record actual readings with date and time to reconcile the odometer with recorded trips – even when some trips were never tracked.
Leasing & financing
Track contractual mileage allowances, project end-of-contract mileage and estimate excess-mileage charges or under-mileage refunds.
Tax-ready exports
PDF, CSV and GPX. Country exports for Germany, Austria, Belgium, France, the Netherlands and the United Kingdom.
Vehicles & sharing
Multiple vehicles with plate, VIN and lifecycle. Invite other people to a vehicle – owners keep control of sensitive settings.
Secure sign-in
Passkeys (WebAuthn), TOTP two-factor authentication, QR pairing for the app, plus session and device management.
How it works
From first start to a finished trip log for the tax office.
Start the server
A Docker Compose stack with app, worker, PostgreSQL and Redis on your own hardware.
Connect the app
Open “Connect mobile app” in the web dashboard and scan the one-time QR code.
Assign a vehicle
Create your vehicle and pick the car's paired Bluetooth device.
Just drive
The trip is detected, recorded and synced. Classify and export it later.
Become a beta tester
The Android app is in an open test on Google Play. Anyone can join – no sign-up form, no email. Testers get every new build through the Play Store as soon as it's ready and help shape the first stable release.
- Open the beta link on your Android phone and sign in with your Google account.
- Tap “Become a tester”. You can leave the test at any time on the same page.
- Install the app from Google Play and use it in local mode or with your own server.
- Send feedback via the Play Store or GitHub issues.
Installation
The recommended deployment uses Docker Compose. The container image is published as ghcr.io/cheinisch/fahrtenbuch; named volumes are created automatically and database migrations run on startup.
git clone https://github.com/cheinisch/fahrtenbuch.git
cd fahrtenbuch
cp .env.example .env
# Set secrets, admin credentials and your
# public HTTPS hostname in .env, then:
docker compose up -d
docker compose ps
# Listens on port 3000 by default
curl -s http://127.0.0.1:3000/api/v1/health
| Component | Stack |
|---|---|
| Android app | Kotlin, Jetpack Compose, Room, WorkManager, osmdroid |
| Backend | Node.js, Express, PostgreSQL 16, Redis 7 |
| Web dashboard | React, Vite, Tailwind CSS, MapLibre GL |
| API | REST /api/v1, OpenAPI 3, JWT with refresh rotation |
| Requirements | Docker, HTTPS reverse proxy (for passkeys), Android 10+ |
docker compose down -v for a routine restart – it removes the volumes and can permanently delete your database and backups.
Documentation
Step-by-step guides for installing, using and running Fahrtenbuch.
Installation & updating
Requirements, quick start with Docker Compose and safe upgrades.
User guideTrips, vehicles & statistics
GPS tracking, odometer readings, leasing contracts and sharing.
AdministrationConfiguration & backups
Secrets, HTTPS, passkeys, Swagger UI and backup strategy.
DevelopmentArchitecture
Repository layout, local development and API coverage checks.
APIREST API reference
Authentication, token refresh and the OpenAPI contract.
SourceGitHub
Source code, releases and issue tracker. Licensed under AGPL-3.0.
Your trip data never reaches the developer
No account with us, no analytics SDKs, no ads. The app only talks to the server you enter yourself – or to nobody at all.