Let's start with a quote: "Why do programmers like dark mode? Because light attracts bugs.". Yes, you read that right. TeslaMate Webview now has a dark mode.
As always, lots of improvements have been made. Memory usage has been reduced, while performance has been increased — it sounds too good to be true, but it's the reality.
Battery heating is now also shown on the overview dashboard, and the drives dashboard now always shows the consumption.
To make your TeslaMate experience even better, we have also made more than 52 other improvements.
Enjoy!
📄 License Change Notice
As of PR #5131, TeslaMate has transitioned from the MIT License to the GNU Affero General Public License v3.0 (AGPLv3).
What does this mean for you?
- For Private Users: Nothing changes. You can continue to use, host, and modify TeslaMate for your personal use for free, just as before.
- For the Community: This change ensures that TeslaMate remains open and free. It prevents companies from taking the community's hard work and turning it into a closed-source commercial service without giving back.
- For Developers: If you modify or use TeslaMate, you must now share your source code modifications under the same license.
We believe this step is necessary to protect the project from exploitation and to ensure its long-term sustainability.
New features
- feat: add optional dark mode feature (#5065 - @wooter)
- legal: relicense under AGPLv3 (#5131 - @JakobLichterfeld)
- legal: add Trademark notice (#5131 - @JakobLichterfeld)
- feat: use Bulma 1 for dark theme and revised it (#5112 - @swiffer)
Improvements and bug fixes
- feat: use Logger instead of IO.puts in DB check (#5050 - @swiffer)
- feat: Increase max_header_value_length to support oauth2-proxy (#5031 - @ultravail)
- perf: Replace positions indexes from BTREE to BRIN to reduce memory usage (#5075 - @ilya-y-synth)
- feat(grafana): disable update checks as version is handled via docker image (#5115 - @fatbasstard)
- perf: use static asset compression via brotli and zstandard to enhance HTTP Compression (#5113 - @swiffer)
- feat: use Grafana 12.4.0 (#4965 - @swiffer)
- fix(vehicle): update state transition to handle offline scenario after a drive end with no network (#5152 - @jlestel)
Build, CI, internal
- build(deps): bump mdast-util-to-hast from 13.2.0 to 13.2.1 in /website (#5059)
- build(deps): bump js-yaml from 3.14.1 to 3.14.2 in /website (#5043)
- build(deps): bump crate-ci/typos from 1.39.0 to 1.40.0 (#5055)
- build(deps): bump DeterminateSystems/update-flake-lock from 27 to 28 (#5056)
- build(deps): bump express from 4.21.2 to 4.22.1 in /website (#5060)
- build(deps): update flake.lock (#5027)
- fix(website): Bump node-forge to 1.3.3 to resolve CVE-2025-12816, CVE-2025-66030 and CVE-2025-66031 (#5071 - @JakobLichterfeld)
- chore(website): bump qs to fix CVE-2025-15284 (#5091 - @JakobLichterfeld)
- build(deps): bump react and react-dom from 19.2.0 to 19.2.3 in /website (#5084)
- build(deps): bump nix-community/cache-nix-action from 6.1.3 to 7.0.0 (#5082)
- build(deps): bump actions/cache from 4.3.0 to 5.0.1 (#5077)
- build(deps): bump crate-ci/typos from 1.40.0 to 1.41.0 (#5079)
- build(deps): bump actions/stale from 10.1.0 to 10.1.1 (#5080)
- build(deps): bump lodash from 4.17.21 to 4.17.23 in /website (#5109)
- build(deps): bump lodash and @geoman-io/leaflet-geoman-free in /assets (#5126)
- build(deps): bump react and react-dom from 19.2.3 to 19.2.4 in /website (#5124)
- build(deps): bump crate-ci/typos from 1.41.0 to 1.42.3 (#5123)
- build(deps): bump docker/login-action from 3.6.0 to 3.7.0 (#5119)
- build(deps): bump nix-community/cache-nix-action from 7.0.0 to 7.0.2 (#5122)
- build(deps): bump actions/cache from 5.0.1 to 5.0.3 (#5120)
- build(deps): bump webpack from 5.102.0 to 5.105.0 in /website (#5135)
- feat(nix): use nixos-25.11 (#5062 - @JakobLichterfeld)
- chore(nix): update flake.lock with new dependency revisions (#5062 - @JakobLichterfeld)
- build(nix): use elixir 1.19 to align with dockerfile (#5062 - @JakobLichterfeld)
- chore: reorganize CLI definition to avoid elixir 1.19 warning (#5062 - @JakobLichterfeld)
- build: update db_connection to version 2.9.0 (#5062 - @JakobLichterfeld)
- build: use Elixir 1.19.5 OTP 26 (#5130 - @swiffer, @brianmay and @JakobLichterfeld)
- build(deps): bump qs from 6.14.1 to 6.14.2 in /website (#5140)
- build(deps): update & bump mix deps (#5139 - @swiffer)
- build(deps): bump ex_cldr from 2.42.0 to 2.46.0 (#5053 - @JakobLichterfeld)
- build(deps): bump floki & gettext, remove override on ranch, require elixir 1.19 (#5142 - @swiffer)
- feat(grafana-home-dashboard): change cors proxy (#5143 - @swiffer)
- build(deps): update flake.lock (#5141)
- build(deps): relax requirement for elixir to allow 1.17+ and clarify what is supported (#5145 - @swiffer)
- build(deps): update flake.lock (#5148)
- build(deps): update flake.lock (#5154)
- build(deps): bump ajv in /website (#5149)
- chore(website): bump mimimatch to version 3.1.5 to solve CVE-2026-26996, CVE-2026-27903 and CVE-2026-27904 (#5155 - @JakobLichterfeld)
- chore(website): bump serialize-javascript to version 7.0.3 to solve CWE-96 (#5156 - @JakobLichterfeld)
Dashboards
- feat(overview): show battery heating on overview dashboard as well (#5090 - @kaistian)
- feat: optimize reduced_range query and always show consumption kwh in drives dashboard (#5089 - @swiffer)
Translations
Documentation
- docs(traefik): update to v3.6 as 3.6.1 solves issues with docker 29.0 (#5034 - @JakobLichterfeld)
- docs: fix the formatting of the
DATABASE_SOCKET_DIRdescription (#5026 - @IngmarStein) - docs: fix external image rendering with Traefik SSL (#5074 - @swiffer)
- docs(home_assistant): default tesla_active_route_distance_to_arrival sensor to kilometers (#5086 - @kenni)
- docs: Remove hints to now deprecated Grafana VS Code Extension in contribution guide (#5110 - @swiffer)
- docs: Add reference to TeslaMate Achievements (#5134 - @crstian19)