What each version of EVLog brought, newest first.
A version gathers a body of work rather than going out one change at a time, so this page moves in steps. Between the steps the work is visible on GitHub, in branches and open issues.
The open milestone lists what the next version is meant to carry.
On the App Store and tagged v3.4.1 on GitHub.
A fix for anyone whose TeslaMate is set to miles or Fahrenheit. TeslaMate API converts distances, speeds, ranges and temperatures to the units picked in TeslaMate's settings before it answers, and EVLog took every figure for kilometres and degrees Celsius, so it converted them a second time: a cabin at 77 °F read 171°, and the odometer, the range and every drive came out 1.6 times too short. The app now reads which units the server answered in and turns the figures back as they arrive, so the units setting in EVLog alone decides what the screen shows. Speeds can be off by up to one mph, since the server rounds them down to whole numbers after converting. On the Timeline, VoiceOver now announces All, Drives and Charges as tabs. The app is built with Xcode 27 against the iOS 27 SDK and still runs from iOS 18. The README had Grafana wrong as well: it said TeslaMate's own setup already lets the app in, but TeslaMate ships its Grafana with anonymous access turned off, and without it the visited map, battery health and countries stay greyed out with nothing saying why. The README now shows the line to add to the override file.
On the App Store and tagged v3.4 on GitHub.
Statistics gains a fourth choice next to Week, Month and Year. Custom takes a start and an end date, set to the last seven days to begin with, and shows the total for those whole days right below the pickers, with the same figures as the other rows: distance, energy added, cost, drives, charges, driving time and efficiency. The row opens the same period view as the others, broken down by day, or by month once the span is longer than two months, and a day still opens that day's drives. The end date cannot pass today and the start cannot pass the end, so a holiday or a road trip adds up without summing day rows by hand. A charge's page gets a card between the tiles and the charge curve that says what set the pace, with the figures behind each line. On AC it sets the current the charger offered against the current the car drew, with the phases and the voltage, so a slow charge reads as, say, a box offering 16 A on one phase; the phase count is worked out from the power the current and voltage make up, since some cars report two phases on three. On either kind of charge it names a battery that started cold, the battery heater when it ran for half the charge or more or while the power was held back, and a charger that gave too little power to heat the battery. On DC it also names a start above half full, where the car itself holds the power back, and stops where charging paused and started again, with how long it stood still. When none of that shows in the log, it says that nothing stands out. Away from the network your server lives on, every request used to wait out a fifteen-second timeout, and each tab found that out on its own. The app now asks each server address once, giving it three seconds to answer, and when nothing answers the tabs say within moments that the server can't be reached from here; a list that loses the server halfway through stops at once instead of waiting out three more timeouts. The answer holds until the app goes to the background, or until Try again, a pull to refresh or Test connection in Settings asks again. Tessie and the Supercharger list live on the internet and are not part of the check. When the Timeline can't load, its period row now stays at the top under the segment, with the message below it, instead of sitting in the middle of the screen. The demo mode's charges carry the new fields, so the card can be seen without a server.
On the App Store and tagged v3.3 on GitHub.
The overview's row of status glyphs gains one for the battery heater: red heat waves, right after the preconditioning fan, while the heater is running. It comes from the last position TeslaMate stored, within the past ten minutes, and stays hidden when the car is asleep or offline, since a reading from before it dozed off says nothing about now. The battery page, which opens from Degradation on the overview, grows two charts under its tiles. Capacity over mileage plots one reading per finished charge — the rated range at its end, scaled to a full battery and turned into capacity — against the odometer, in kilometres or miles, with a dashed line for the capacity when new and a median line through the nearest readings, so a slope shows through the noise. It appears once there are a handful of charges to plot. Below it, two tiles give the share of time the battery has spent above 80 % and below 20 %, and Time at each charge level draws the whole distribution as a histogram in steps of five percent, orange outside the twenty to eighty band and blue inside it. Every stored level counts until the next reading, so a parked car counts for the level it sat at, and a charge that stops at 80 lands in the bar that ends at 80, not in the one above it. The demo mode shows the heater glyph and carries data for both charts, so all of it can be seen without a server.
On the App Store and tagged v3.2 on GitHub.
Costs are shown in your region's currency rather than a fixed one, and a Currency setting under Units lets you pick any other. The region sets the default, as it does for the units; TeslaMate's data is metric and its costs carry no currency, so this changes what is shown, not the figures. Charging statistics now opens with a Costs section, present as soon as a charge has a recorded cost: the total, how the cost splits between AC and DC, the average price per kWh for each, and the cost per 100 km or 100 miles of driving. The averages are taken over the charges with a recorded cost, and charges without one count as free — the footer says how many. A drive shows its elevation profile under the speed graph, smoothed a little to take the noise out of the GPS altitude, with the metres or feet climbed and dropped and the net difference; the marker you drag across the speed graph runs across the profile too and reads out the height. Software updates appear in the timeline as rows of their own, with the version the car went to and how long the update took, and open the release notes when tapped. The software page counts the updates and gives the median time between them. On the overview, tapping a country opens a timeline of the drives that started or ended there and the charges there; the country list itself still counts a drive by where it ended. The demo mode's drives got an elevation profile as well, so the new chart can be seen without a server. The link on the About page now points at evlog.martinstockzell.se.
On the App Store and tagged v3.1 on GitHub.
The visited map now covers any period you choose: the last 7, 30 or 90 days, this year, everything the server holds, or a custom range between two dates, shown on a plain map or on satellite imagery. The map style is remembered; the period starts over each time the app opens. Statistics gains two views. Destinations ranks where the car goes most often and where it covers the most distance, each place opening into the drives behind it, and sets weekdays against weekends with a heat map of when you drive. Temperature and consumption groups your consumption by outside temperature, in the units you have chosen, draws the average through it, and sets the coldest fifth of your driving against the warmest. In the timeline, tapping the segment you are already in scrolls back to the top, as a tap on the status bar does. The About page shows the app icon and links to the donate page for anyone who feels like giving back — the app itself stays free, with nothing to buy inside it. A Tessie key that has passed Test connection is shown as dots, with a Replace button for entering a new one, so the key stays out of screenshots, and archived cars on the Tessie account are left out of the test result instead of appearing as raw VINs. Under the hood, the charts are computed once per rendering rather than once per element, a loading spinner that could keep turning after a pull-to-refresh now stops, and every request shares one session with a 15-second timeout, so an unreachable server is reported sooner.
On the App Store and tagged v3.0.1 on GitHub.
Battery health is now estimated with EVLog's own method. Earlier versions built the figure on a query borrowed from TeslaMate's Grafana dashboards; 3.0.1 replaces it with an estimator written for the app. It takes one reading from the end of every completed charge, scaled to a full battery, treats the best readings as the battery when new and the average of the most recent ones as the battery today, and derives capacity from range. Degradation, capacity and range can therefore shift slightly compared with 3.0 — the estimator changed, not your battery. Nothing else changed in this version.
On the App Store and tagged v3.0 on GitHub.
The app now has a demo mode: with no server configured it starts in three weeks of built-in example data, so you can try every screen before pointing it at your own TeslaMate, and a switch in Settings takes you back to the demo any time. The overview says what the cable is doing — charging, scheduled, complete — and wears TeslaMate's own status glyphs for preconditioning, open doors and windows, tyre pressure and more. The car's name opens a spec sheet, and charge details show what the battery heater and cabin climate drew while the car charged. Short stops that cost the battery something show as parked rows, places in charging statistics open into the charges behind them, average charging power is measured on the charger's side, and the antenna in the corner now means the app cannot reach your server. The app speaks English only, in metric or imperial units, and requires iOS 18.
On the App Store and tagged v2.0 on GitHub.
Drives and Charges have become one Timeline: each day reads as a flow of drives, charges and the parking in between, with a row for what every stop cost the battery, and a row that says so when the car moved while nothing was logged. You choose how far back the timeline reaches, swipe left and right between the details of a day, and a car left plugged in across several charging processes shows as one charge, with a charging curve you can drag to read the time, the power, the battery level and the energy delivered. Drive details show energy and regen side by side, and consumption in Wh/km.
The first version, on the App Store and tagged v1.0 on GitHub.
It arrives with an overview of the car — battery and range, lock state, location, temperatures, Sentry, degradation and software version — drives grouped by day with a route map and a speed graph you can drag along, charges with a charging curve and costs, statistics by week, month and year, battery health, countries visited, and a range map drawn from your own driving. In English and Swedish, reading only from servers you run yourself.