Self-hosted GPS fleet tracking for GT06 trackers and phones. Companies follow their vehicles on a live map, replay trips, get alerts, and keep services and drivers in order. One server hosts many organizations, each with its own people and roles.
Status: in active development. It is tested with simulated trackers, a load test up to 5,000 trackers, and end-to-end browser tests; expect changes before 1.0. Reports from real devices are very welcome.
Tracking
- Live map: positions arrive within about a second, with moving, stopped and offline status, heading and speed.
- History: replay any day, with trips, stops and street addresses (with a geocoder).
- Reports: summary, day by day, trips (with the driver), stops and alerts; CSV and Excel downloads, and scheduled report emails.
- Works on phones: the web app is responsive and installable.
Alerts and notifications
- Tracker alarms (SOS, power cut, vibration, low battery), speeding, entering or leaving zones, going offline, driving after hours, idling, ignition on and off.
- Each person chooses what reaches them by email, browser push or Telegram; organizations can add Telegram groups.
Fleet operations
- Services by distance, engine hours or date, with reminders; odometer and engine hours kept up to date from trips and ignition time.
- Drivers with license expiry reminders, assigned to vehicles, shown on trips.
- Remote engine stop and resume (trackers with a relay): admin only, refused while moving fast, audited.
Organizations and people
- Many organizations on one server; admins, operators and viewers; two-step sign-in; an audit log of changes.
- Vehicle groups, to limit people to their branch's or customer's vehicles.
- A read-only public API with organization API keys, for customers' own systems (docs/public-api.md).
- A platform console for whoever runs the server: organizations, tracker limits, suspension, and a read-only, audited support view.
Running it
- One
docker composestack with automatic HTTPS; runs on a single cloud or office server. - Nightly backups to S3-compatible storage and point-in-time recovery; Prometheus, Grafana and alert rules; self-hosted map tiles if you want no outside map service.
| History with trips and stops | Tracker status and health | On a phone |
|---|---|---|
- GT06-protocol trackers over TCP (port 5023), developed with the OneWay OW-G19 (a WanWay G19): positions, ignition, status reports, alarms and engine commands.
- Concox GT06 4G firmware: 4G positions and alarms, and status reports with battery voltage.
- Phones with the free Traccar Client app (Android, iOS), over the OsmAnd HTTP protocol.
Other GT06-family trackers often work; please open a Tracker model support issue with what you tried.
trackers ─TCP─▶ ingest (Go) ─▶ Redis stream ─┬─▶ Postgres (TimescaleDB, PostGIS)
phones ─HTTPS─▶ └─▶ worker: alerts, notifications, trips, reports
browsers ◀─SSE─ API (Hono, Better Auth) ◀─ Redis pub/sub
- ingest (Go) holds the tracker connections, decodes GT06 and writes positions in batches.
- api (TypeScript) serves the web app's REST API, live updates over server-sent events, and the public API.
- worker (TypeScript) raises alerts, sends notifications, computes trips, stops and daily statistics, and emails scheduled reports.
- web (React, MapLibre) is the dashboard.
On a fresh Ubuntu 22.04 or 24.04 server (any VPS), one command:
curl -fsSL https://github.com/zekhoi/tracker/releases/latest/download/install.sh | sudo bashIt prints the address and a setup code: open it and create your account. Add a domain with HTTPS later with deploy/cloud/domain.sh. Details: docs/deployment.md.
One container with everything (database included), like Traccar's image:
docker run -d --name tracker --restart unless-stopped \
-p 8080:80 -p 5023:5023 -v tracker:/data \
ghcr.io/zekhoi/tracker/all-in-oneOpen http://localhost:8080 (from another computer, add -e PUBLIC_URL=http://<its address>:8080) and create the first account with the setup code from the log (docker logs tracker | grep 'setup code'). Trackers connect to port 5023. The all-in-one image is for trying Tracker out; for real use, deploy it with the compose stack, which adds backups and monitoring.
You need Node 22 or newer, pnpm 12, Go 1.26 or newer, and Docker.
pnpm install
docker compose up -d # Postgres, Redis, Mailpit (http://localhost:8025)
pnpm moon run db:migrate
pnpm moon run ingest:dev api:dev worker:dev web:dev # http://localhost:5173Sign up, create an organization, add a tracker with any 15-digit IMEI under Trackers, then drive it with the simulator:
pnpm moon run gt06-sim:run -- -addr localhost:5023 -imei <that IMEI> -interval 5sStart with deploy/README.md. docs/deployment.md compares a cloud server with your own and sizes the server; docs/operations.md covers settings, trackers, updates, backups and monitoring; docs/privacy.md covers tracking people responsibly.
Contributions are welcome: see CONTRIBUTING.md and the Code of Conduct. AGENTS.md describes the layout, commands and conventions. Please report security problems privately: SECURITY.md.
Apache License 2.0. See NOTICE for third-party credits. Map data © OpenStreetMap contributors.