Open source · Self-hosted

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.

Server v0.3.21 Android app v0.3.3 Android 10+ License AGPL-3.0 No tracking, no ads

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.

Android app

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
Server & web dashboard

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.

BusinessPrivateCommuteUnclassified

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.

Live demo

Try it before you install it

Start your own private demo server with a sample vehicle and trips at demo.fahrtenbuch.app. Nobody else sees your changes, and the instance is deleted automatically after 15 minutes.

Try the live demo
Open beta

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.

  1. Open the beta link on your Android phone and sign in with your Google account.
  2. Tap “Become a tester”. You can leave the test at any time on the same page.
  3. Install the app from Google Play and use it in local mode or with your own server.
  4. 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
ComponentStack
Android appKotlin, Jetpack Compose, Room, WorkManager, osmdroid
BackendNode.js, Express, PostgreSQL 16, Redis 7
Web dashboardReact, Vite, Tailwind CSS, MapLibre GL
APIREST /api/v1, OpenAPI 3, JWT with refresh rotation
RequirementsDocker, HTTPS reverse proxy (for passkeys), Android 10+
Never run docker compose down -v for a routine restart – it removes the volumes and can permanently delete your database and backups.

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.

Privacy policy