A self-hosted data logger and dashboard for your Rivian.
Drives, charging, battery health, and live vehicle state, recorded in your own database and shown on a dashboard you can open from anywhere.
Features · Screenshots · Quick start · Configuration · Contributing
- Self-hosted and private. Run RivianMate on your own infrastructure using Docker Compose. Your vehicle data stays on your server, with no third-party cloud services or telemetry.
- Read-only integration. RivianMate monitors vehicle data without sending commands to your Rivian. API usage is designed to minimize unnecessary requests and avoid interfering with the official Rivian app.
- R1 and R2 support. Compatible with Rivian R1T, R1S, and R2 vehicles.
- Live dashboard displaying battery level, estimated range, charge limits, vehicle closures, tire pressures, climate, and software information.
- Interactive vehicle map with live location tracking and active navigation details, including estimated arrival time and battery level at destination.
- Real-time updates pushed directly to the browser as new vehicle data becomes available.
- Automatic trip detection and logging.
- Interactive route maps with speed and elevation profiles.
- Detailed trip statistics, including distance, duration, efficiency, and energy consumption.
- Start and destination address identification.
- The weather on each drive (temperature, conditions, wind), and efficiency charted by temperature, speed, climb, length and weather.
- A trip is its dates. Pick the day it started: it runs until you got home, or to the day you pick, and you untick anything that wasn't part of it. A drive or charge belongs to one trip at a time.
- Make one before you leave or partway through, with no end date yet: drives and charges join on their own as they finish, and its figures update while you're on the road. End it when you're home. Anything you untick stays out.
- A map colored by day with numbered stops, where a road driven more than once is drawn once, and a replay that draws the journey in order. Beside it, a timeline with overnight stays worked out from when the vehicle was parked.
- The trip day by day and where you stayed each night, with highlights, the battery and elevation across the whole trip, where the time went, and who drove.
- Totals for distance, driving time, time charging, energy, efficiency and cost, which say when they're estimated or don't cover every drive or charge.
- Add notes and your own dates. Works for TeslaMate vehicles too. Trips read your existing records, so they add almost nothing to your database, and nothing about them leaves your server.
- Automatic charging session tracking with detailed power curves, energy delivered, range added, peak charging power, and estimated costs.
- Historical charging sessions imported from your Rivian account.
- Configurable electricity rates for home charging cost calculations.
- Long-term battery capacity monitoring.
- Parked energy consumption tracking.
- Individual tire pressure trends to help identify gradual pressure loss.
- Software update history with a timeline of installed vehicle versions.
- Interactive charts for distance traveled, energy consumption, efficiency, and charging costs.
- Historical views ranging from 24 hours to 90 days.
- Battery level charts annotated with driving and charging events.
- Configurable alerts for open doors or windows, unlocked vehicles, completed charging sessions, low battery levels, tire pressure, and software updates.
- Notification delivery through Discord or Apprise.
- Responsive web interface optimized for desktop, tablet, and mobile devices.
- Full access to dashboards, trip history, charging sessions, and analytics from any screen size.
- Ready-made dashboards for people who already run Grafana, reading RivianMate's database read-only.
- A vehicle picker on every dashboard for accounts with more than one vehicle.
- Load them by pointing Grafana at the folder; see docs/GRAFANA.md.
- Tested with Grafana 13.2.4 only; other versions may work but have not been tried.
RivianMate runs with Docker Compose and includes everything needed to get started, including a PostgreSQL database.
- Docker with Docker Compose
- A machine capable of running Docker, such as a home server, NAS, or VPS
- A Rivian account with a supported vehicle (R1T, R1S, or R2)
1. Download the configuration files
mkdir rivianmate && cd rivianmate
curl -LO https://raw.githubusercontent.com/blike/rivianmate/main/docker-compose.yml
curl -Lo .env https://raw.githubusercontent.com/blike/rivianmate/main/.env.example
2. Configure environment variables
Generate a secure application secret:
openssl rand -hex 32
Edit .env and set the following values:
APP_SECRET=your-generated-secret
POSTGRES_PASSWORD=your-secure-database-password
Keep your APP_SECRET safe. It is used to encrypt stored Rivian authentication tokens and must
remain unchanged across restarts and updates.
3. Start RivianMate
docker compose up -d
4. Complete initial setup
Open http://localhost:4000 or http://<your-server-ip>:4000 in your browser.
Follow the setup wizard to create an application password, sign in to your Rivian account, and enter the verification code provided by Rivian.
Once connected, RivianMate will begin collecting vehicle data automatically.
Rivian authentication tokens are stored encrypted, allowing data collection to resume after restarts without requiring you to sign in again.
Remote access: For access outside your local network, use a reverse proxy with HTTPS (such as Caddy, Traefik, or nginx) or a private network like Tailscale. Do not expose port 4000 directly to the public internet.
RivianMate is configured using environment variables defined in the .env file. Docker Compose
automatically loads these values when starting the application.
| Variable | Required | Description |
|---|---|---|
APP_SECRET |
Yes | Secret used to encrypt Rivian tokens and sign sessions. Generate with openssl rand -hex 32. Must remain consistent across restarts and updates. |
POSTGRES_PASSWORD |
Recommended | Password for the bundled PostgreSQL database. Defaults to rivianmate. |
APP_PORT |
No | Port used to access the web interface. Defaults to 4000. |
APP_PASSWORD |
No | Preconfigures the application password on first startup, bypassing the password setup screen. Must be at least 12 characters and not a common password or pattern. |
DATABASE_URL |
No | PostgreSQL connection string. Configured automatically by Docker Compose; override when using an external database. |
LOG_LEVEL |
No | How much to log: error, warn, info (default) or debug. debug adds every HTTP request and routine live-stream renewals. |
LOG_FORMAT |
No | pretty (default) for readable docker logs output, or json for one object per line to feed a log collector. |
TZ |
No | Time zone for times mentioned in log messages, such as America/Los_Angeles. Defaults to UTC. Dates in the app always follow your browser. |
Additional preferences are configured directly in the web interface under Settings, including:
- Units and currency
- Address and weather lookups
- Saved locations and electricity rates
- Vehicle management
- Notification preferences
Logs go to the container's output (docker compose logs rivianmate; add -t for timestamps). They
never include tokens, passwords, your email or vehicle locations.
When reporting a bug, set LOG_LEVEL=debug, reproduce the problem, and attach the output of
docker compose logs rivianmate (or the file from Settings → Logs → Download).
RivianMate supports configurable vehicle alerts through:
- Discord — Send notifications directly to a Discord channel using webhooks.
- Apprise API — Integrate with Pushover, ntfy, Telegram, Slack, email, and many other notification services.
Configure notification providers and alert preferences under Settings → Notifications.
Bring your history across from another app under Settings → Import Data: choose New import, pick the source, add its export files, and check the preview before importing.
| Source | Getting the export | Files |
|---|---|---|
| Rivian Roamer | Account (from the menu by your name) → Data → Download a copy; request it, then Download ZIP once ready | one .zip |
| ElectraFi | Settings → Account → Advanced → Download Data, then Download All | .csv, .csv.gz |
- Imports add drives, charging sessions, and vehicle history.
- A Rivian Roamer copy is matched to your Rivian by VIN, and brings each charge's curve and energy breakdown.
- Anything already recorded stays as it is, and an existing charge only gets what it's missing.
- Undo removes what an import added, apart from drivers and saved places, which stay.
Also have a Tesla logged by TeslaMate? Add its database under Settings → General → Accounts and its cars join the vehicle menu, on the same dashboard, drives, charging, history and health pages, with drives and charging sessions updating live while they happen.
RivianMate only reads from TeslaMate: it opens a read-only session, copies nothing into its own
database, and never writes to TeslaMate's. Enter a Postgres URL such as
postgres://teslamate:password@192.168.1.10:5432/teslamate. The database has to be reachable from
the RivianMate container, for example by publishing TeslaMate's Postgres port or by putting both on
the same Docker network. The URL is stored encrypted with APP_SECRET.
TeslaMate doesn't log some things Rivian reports, such as locks, doors, the charge limit and pending software updates, so those parts of the pages are left out for Tesla vehicles, and notifications only cover Rivian vehicles.
To update RivianMate to the latest version, run the following commands from your installation directory:
docker compose pull
docker compose up -d
Database migrations are applied automatically when the application starts.
Before updating, back up your PostgreSQL database and retain your existing .env file, especially
APP_SECRET. Changing this secret will invalidate encrypted Rivian tokens and require
reauthentication.
See the Changelog for release notes and changes.
Prebuilt images are available on Docker Hub under
mitchvitale/rivianmate.
| Tag | Description |
|---|---|
latest |
Latest stable release (default) |
0 / 0.6 |
Latest release within the specified major or minor version |
0.6.0 |
Specific release version |
edge |
Latest development build from main, including unreleased changes |
For most installations, the latest tag is recommended. Use a version-specific tag if you prefer to
control when upgrades occur.
RivianMate is designed to keep your vehicle data under your control.
- Local data storage. Vehicle data and history are stored in your own PostgreSQL database.
- Encrypted authentication. Your Rivian password is used during authentication and is never
stored. Authentication tokens are encrypted using AES-256-GCM with your
APP_SECRET. - Application authentication. Access to the web interface is protected by a password hashed using scrypt.
- Read-only vehicle access. RivianMate retrieves vehicle data without sending commands to the vehicle.
- Isolated database. The bundled PostgreSQL database is accessible only within the Docker network and is not exposed publicly.
- No application telemetry. RivianMate does not send your vehicle data to a RivianMate-operated analytics or cloud service.
RivianMate connects to these outside services:
- Rivian, for vehicle data and sign-in.
- OpenFreeMap, for map tiles.
- OpenStreetMap's Nominatim, for drive addresses, and for place search when you save a location.
- Open-Meteo, for the weather on each drive.
- Your TeslaMate database, read-only, if you add one.
Address and weather lookups are optional. Choose during setup, or change them later under Settings → General → Outside services.
- Addresses sends where each drive starts and ends. When off, places you haven't saved show as coordinates.
- Weather sends a point every 10 minutes along each drive, and the drive's date. It doesn't send times of day: your server matches the readings to the drive's times. When off, drives have no weather.
Neither sends your account, name or vehicle details. Turning a lookup back on also fills in the drives made while it was off. Place search runs only when you search.
For more information, including how to responsibly disclose security vulnerabilities, see the Security Policy.
RivianMate is built with TypeScript across the frontend and backend.
Technology Stack
- Frontend: React, Vite, Tailwind CSS, MapLibre
- Backend: Node.js, Fastify
- Database: PostgreSQL, Drizzle ORM
- Deployment: Docker, Docker Compose
To run RivianMate locally, you'll need Node.js 22+, pnpm 10+, and Docker.
1. Clone the repository
git clone https://github.com/blike/rivianmate.git
cd rivianmate
2. Start PostgreSQL
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d postgres
3. Install dependencies and configure the environment
pnpm install
cp .env.example .env
Edit .env to configure APP_SECRET, enable DATABASE_URL, and optionally enable MOCK_RIVIAN
for development without a vehicle.
4. Start the development servers
pnpm dev
In a separate terminal:
pnpm dev:web
The development servers are available at:
| Service | URL |
|---|---|
| API | http://localhost:4000 |
| Web interface | http://localhost:5173 |
RivianMate includes a simulated vehicle for development and testing without a Rivian account.
Enable the following in .env:
MOCK_RIVIAN=1
With mock mode enabled:
- Sign in using any email and password.
- Enter
000000when prompted for a verification code. - A simulated R1S generates driving, parking, and charging activity.
- Vehicle dashboards, charts, and historical data populate automatically.
See CONTRIBUTING.md for development guidelines, testing, database migrations, and code conventions.
Contributions are welcome! Whether you're reporting a bug, suggesting a feature, improving documentation, or submitting code, your help is appreciated.
- Bug reports and feature requests: Open a GitHub issue.
- Code contributions: Fork the repository and submit a pull request.
- Larger changes: Please open an issue to discuss your proposal before beginning significant work.
Before submitting a pull request, review the Contributing Guidelines.
RivianMate is developed with assistance from AI coding tools. All contributions, whether AI-assisted or manually written, are held to the same standards for code quality, correctness, and maintainability.
Contributors are expected to understand, test, and take responsibility for the code they submit. AI-generated changes should be reviewed and validated before submission.
Project maintainers review contributions and remain responsible for changes merged into the project.
For information about the release process, see RELEASING.md.
RivianMate uses these free services and open datasets. The same credits appear in the app under Settings → About.
- Map data and addresses: © OpenStreetMap contributors, available under the Open Database License (ODbL).
- Map tiles: OpenFreeMap, built with OpenMapTiles.
- Address lookups: Nominatim.
- Outside temperature: weather model data by Open-Meteo.com, licensed under CC BY 4.0. RivianMate interpolates it along each drive's route and averages it over the drive.
Copyright © 2026 Mitch Vitale and contributors.
RivianMate is free and open-source software licensed under the GNU General Public License v3.0 (GPL-3.0).
You are free to use, modify, and redistribute the software under the terms of this license. See LICENSE for the complete license text.
The software is provided without warranty.
RivianMate is an independent, community-developed project and is not affiliated with, sponsored by, or endorsed by Rivian Automotive, Inc. or any other vehicle manufacturer, software project, or third-party service.
RivianMate relies on unofficial Rivian APIs that may change or become unavailable without notice. Functionality and compatibility are not guaranteed.
Use at your own risk.

