Skip to content

TravStats vs. Jetlog

Jetlog is a small, self-hostable personal flight tracker and viewer (GPL-2.0): one Docker container, a SQLite file, a world map and statistics. It does one thing and keeps it simple. If you are weighing it against TravStats, the real question is how much you want your logbook to do.

TravStatsJetlog
HostingYour server (Docker)Your server (Docker)
What runsApp container + PostgreSQL/PostGIS (bundled in the compose file)One container, SQLite in a mounted folder
LicenseAGPL-3.0GPL-2.0
StackNode.js, React, PostgreSQLFastAPI, React, SQLite
Adding flightsDrop a booking email, PDF or boarding pass → automatic; manual formManual form; flight-number lookup via adsbdb
List importsFlightradar24 CSV, any logbook CSV, own spreadsheetMyFlightradar24 CSV, custom CSV
ExportWhole-logbook spreadsheet (re-importable), JSON, database backupCSV, iCal
StatisticsPer domain plus cross-domain; punctuality, records, year in reviewFlight statistics, including visited countries
CruisesYesNo
Hotels / staysYes — a domain of its own since 2.6.0No
TripsYes, spanning every domainNo
Achievements270+No
Multiple usersYes, built for about 1–10Yes
Two-factor / passkeysYes, per account—
API for scriptsREST + OpenAPI, scoped Personal Access Tokens—
MobileWeb (responsive); a Companion app in testing, betaWeb (responsive)

A dash means the Jetlog README does not describe it — not necessarily that it cannot be done.

Jetlog asks you to enter each flight; a flight number can fill in some of it. TravStats reads the booking confirmation you already have — an .eml, an .msg, pasted text, a PDF — or a photographed boarding pass, and shows the result on a review screen before saving. For a backlog of years, that is the difference between an evening and a month of evenings.

The parser is strongest with a local language model (Ollama), which needs several gigabytes of RAM. Without one, built-in templates handle single-leg bookings on common European carriers. See Imports & Parsers.

Jetlog logs flights. TravStats also logs cruises — ship, ports, sea days, the route on the map — and hotel stays, and ties them together as trips. Countries are counted by what proves you were there, so a country you reached by ship or car and slept in counts, and a change of planes can be told apart from a visit. See Countries & passport.

Beyond totals and maps, TravStats computes punctuality, records, a year in review, costs in the currency you paid, and 270+ achievements. The numbers are also reachable over the REST API with a Personal Access Token.

Jetlog is one container and a SQLite file. There is no database server to run, and a backup is a copy of a folder. TravStats needs PostgreSQL with PostGIS next to it — bundled in the compose file, but still a second service with its own volume and upgrades. On a small NAS, that difference is real.

Jetlog’s interface is a map, a flight list, statistics and a settings page. TravStats has domain tabs, trips, an inbox, a beta switch and an admin panel. If you want to log flights and look at a map, Jetlog gets out of the way sooner.

Jetlog uses one outside service (adsbdb) for flight lookups and turns it off with a single environment variable, ENABLE_EXTERNAL_APIS. TravStats talks to more services by design — flight-data providers, exchange rates, airline logos — each configured on its own.

Jetlog exports your flights as iCal, so they can sit in a calendar app. TravStats has no calendar export.

There is no Jetlog importer in TravStats, but Jetlog’s CSV export goes through the column-mapping wizard under Settings → Import → “From any logbook (CSV)”. Export from Jetlog’s settings page, then map:

Jetlog CSVTravStats field
datedate
origindeparture airport
destinationarrival airport
flight_numberflight number
airlineairline
airplaneaircraft
tail_numberregistration
notesnotes

Airports resolve by ICAO or IATA code, so Jetlog’s ICAO codes are fine. Times need one fix: Jetlog stores HH:MM, and the wizard reads HH:MM:SS. Either leave departure_time and arrival_time unmapped, or append :00 in a spreadsheet before importing — a row with a time it cannot read is reported as an error and skipped. Seat, cabin class and purpose have no column in the wizard today. The whole run is one batch and can be reverted — see Import & Export.

If you want a flight log that costs almost nothing to run and nothing to learn, Jetlog is a well-made answer, and there is no shame in staying.

If you have years of booking emails, travel that is not only flying, or a household that wants statistics deep enough to argue over, TravStats does more — at the price of a database server and a bigger interface.