Aumont.fr

I vibecoded a Rust alternative to Dawarich. It uses 30x less RAM.

7 min read.
Oct 2026
  1. Home
  2. β€Ί Posts
  3. β€Ί I vibecoded a Rust alternative to Dawarich. It uses 30x less RAM.

A few months ago I wrote that Claude Code on FreeBSD is a game changer for self-hosters. I thought I had seen everything. I was wrong. πŸ˜…

Dawarich : a great app #

Dawarich is a self-hosted alternative to Google Timeline. Your smartphone (via OwnTracks or Overland) sends its position to your server, and Dawarich shows you where you went : a map of your trips, a heatmap, the countries and cities you visited, distances, transport modes, statistics per year... It can even import your old Google Timeline history and plug into Immich to show the photos you took along the way.

I love it. Opening the map in the evening and seeing my day drawn on it is satisfying.
And having this data on my server rather than at Google's is the whole point of self-hosting.

... but a pain to install on FreeBSD #

As usual, the official installation is a docker-compose.yml and good luck with the rest.
Dawarich is a Ruby on Rails application, with a Puma web server, Sidekiq workers for background jobs, Redis for the queues, Node.js and Tailwind for the assets, and PostgreSQL with PostGIS.

Installing all of that in a FreeBSD jail by hand would have been a long, long weekend.
Claude Code did it by itself in a few minutes. Gems, assets, rc scripts, migrations : done. 🀯

... and very, very bloated #

Then I looked at top and felt a rush of heat...

Puma, two workers, Sidekiq, Redis... around 1.35 GB of RAM just to store GPS points from a single smartphone.
On a front server with 16 GB, that's 8 % of the RAM for one app. And updates mean bundle, npm, Tailwind, assets, migrations, and sometimes data backfills running for hours fiouuu ... no way.

That's when I had a stupid idea.

"Claude, rewrite it in Rust, and doesn't make any mistakes" #

Of course I have no clue about Rust. I just know it's compiled, superfast, efficient, kind of "secure" with borrowing and ownership. But it does not mean bugless.
But the ecosystem is now mature enough to offer a wide variety of β€œcrates” (modules) for different use cases.

So I opened Claude Code in plan mode, pointed it at the Dawarich source code, and asked for a lightweight Rust backend with the same features, compatible with the same mobile apps.

Plan mode is important here : before writing a single line, Claude reads the original code, proposes an architecture and a list of steps, and I validate (or correct) the plan. Then it executes, step by step :

  1. Ingestion of OwnTracks and Overland points, with the same API keys as Dawarich, and an import of my existing Dawarich database
  2. The anomaly filter (the GPS points that teleport you to the other side of the bay)
  3. Offline reverse geocoding : countries, cities, towns. No external service
  4. Transport mode detection (walking, cycling, car, train, plane...), ported from Dawarich
  5. The web interface : map, heatmap, statistics, settings
  6. GeoJSON and GPX export
  7. And the Immich integration : the photos of the day appear on the map, with thumbnails linking to Immich

I had no clue about the stack that claude recommended to me : axum for the web server, sqlx for PostgreSQL/PostGIS, Askama for server-side HTML templates, and a single JavaScript file for the MapLibre map.
Other than Axum, I didn't know of any library or have any recommendations, so I looked into what SQLX and Askama were.
They seemed like big projects to me, so I told him, β€œGo for itβ€”my brother uses those.”

Everything is embedded in the binary. No JavaScript build step, no Redis, no job queue : a background task processes new points every minute.

About half a day, some commits and almost 10,000 lines of Rust later ...

I did not just press "Enter" all afternoon. Well, actually, yes... :D

I already had a Dawarich instance up and running with over 5 years of data imported from Google.

So Claude was able to go directly into the databases and compare the data between the Dawarich and Dawarich-RS instances... to make sure he hadn't coded anything too unrealistic.
Claude even added a few things Dawarich doesn't do, like filtering the network positions Android sends when the GPS is asleep, or using Google Timeline's own transport labels when importing old data.

Some screenshots : #

I'm so proud ... :P

dawarich-rs map: a month of trips across Brittany, with the heatmap and layers panel

And the statistics page, my favorite one : distance per month, records and streaks, and a GitHub-style calendar of every day of the year.πŸ€“

dawarich-rs statistics: yearly distance, records, distance per month and a calendar of every tracked day

And the Immich integration : on the trips page, each day shows the route on the map next to the photos I took that day, pulled from my Immich server.
The Immich API key never leaves the server : thumbnails are proxied by dawarich-rs, and a click opens the photo in Immich.

dawarich-rs trips page: the route from Nantes to Bordeaux on the map, with the day's Immich photos next to it

Same features, same mobile apps, same Immich integration. Here is the comparison on my server.

Dawarichdawarich-rsSavings
RAM~1.35 GB (Puma 223 MB + 2 workers at 415 MB each + Sidekiq 300 MB)46 MB~1.3 GB, i.e. 8 % of the server's 16 GB
Processes4 (+ Redis)1Redis is no longer needed for this service
PostgreSQL database904 MB216 MB (including geocoding data : countries, cities, towns)~690 MB
Application on disk270 MB, not counting Ruby and its gems62 MB (14 MB binary + geocoding data)~210 MB, plus Ruby and Node
Updatesbundle, npm, Tailwind, assets, migrations, backfills of several hoursreplace one binaryβ€”

46 MB instead of 1.35 GB. Roughly 30 times less RAM. And on FreeBSD, an update is now : copy the binary, restart the service. That's it. 😎

Dawarich is a great project and does much more than my personal needs (multi-user, families, sharing, trips, many import formats...). dawarich-rs only covers what I use. Rewriting 100 % of an app with years of work behind it is another story. Rewriting the 20 % you actually use is now an afternoon.

Repo Where's the code ?
For now the repo stays private on my personal Git server. I'm not going to pollute the internet with yet another vibecoded app. πŸ˜„

What it says about self-hosting in 2026 #

For years, the deal with self-hosting was : you take the software as the developer ships it. If it's a Rails ... with Redis and three workers :(

Situation is changing.
When an app is great but too heavy, too complex to install, or simply not designed for your platform, you can now rebuild the part you need, tailored to your setup. In an afternoon.
Without knowing the language.

And honestly ? It kind of freaks me out. An app that took years of work, and someone who doesn't even write the language rebuilds it in an afternoon... Software development is going completely crazy.

It raises questions too. I now maintain my own fork-in-spirit of a project, without its community, its bug fixes or its future features. If Dawarich adds something great tomorrow, I'll have to port it myself (well, ask Claude to πŸ˜…).
And I owe a lot to the Dawarich developers : without their code, their algorithms and their test scenarios to port, none of this would have been possible in half a day.

But for a single-user app running on my own server, the trade-off is obvious : 1.3 GB of RAM back, one process instead of five, and an update that takes three seconds. With the current price of RAM, I'll take it. πŸš€

The 2030 question #

There is something I really don't get. Why all the open source developers with Python / JS / Ruby apps don't start a big migration with LLMs to rewrite the whole project in Rust (or equivalent) ? With the price of RAM today, the gain is real.

Of course it should be done more seriously than my afternoon of vibecoding, with a LOT of regression tests etc. But come on ... who really believes that in 2030 humans will still write code by hand ?! πŸ€”
The argument "I want to control the quality of the code" is a bit egocentric, and in 2026 it doesn't work anymore. Several people who know the subject much better than me say it : the last frontier models write very high quality code, often better than humans.
For me the human part should be about tests. Test, test, and test again ! Say what the software must do, write the scenarios, check the results with real data. The machine writes the code, the human checks it does the right thing.

Immich , you'r eating to much RAM : #

Watch out, Immich, you're next on my list... I love you, but you eat way too much RAM for my taste. I'm going to vibecode you in Rust too.

#self-hosting #FreeBSD #AI #Rust

Mathieu Aumont - 2026

Posts | Tags | About

Last build : Oct 2026