Varun Lakshmaiah62 downloadsTrack service schedules, fuel and charging, expenses, receipts and renewals for your cars, motorcycles and EVs. See what needs doing next and get reminded before it is overdue.
Service schedules, fuel and charging, expenses, receipts and renewals for your cars, motorcycles, scooters and EVs, inside your Obsidian vault.
See what needs doing next, and get reminded before it is overdue.
Car apps want an account, show ads, and keep your history on their servers. Garage keeps everything in your vault, works offline, and opens on the one question that matters: what needs doing next?
The garage leads with everything that is overdue or due soon across all your vehicles, most urgent first. Each card says how far past or how close it is (250 km overdue · 35d overdue, in 18 days) with a progress bar and one action: Mark done for a service item, Renew for a document. Vehicle tiles below are stamped Overdue or Due soon.
Pick a vehicle to see its odometer (tap to update), mileage, cost per km and total spend, then its maintenance schedule with progress bars and its documents with expiry dates.
Logging a service asks which schedule items the work covered. Tick them and they reset to that date and reading, so an oil change and a tyre rotation in one visit are both marked done.
Log costs that are not service or fuel: insurance, tax and registration, loan or EMI, parking, tolls, cleaning, fines and accessories. They count towards spend and cost per km.
Attach a receipt to any entry: pick a photo or PDF already in your vault, or tap Add photo to use your phone's camera. Receipts are saved to Garage/Receipts/ and open from the entry or the log.
Spend this month, this year or all time, by kind and by vehicle, plus the last 12 months. Pick one vehicle to also see how its mileage and the price you pay per litre have moved.
Every service, fill, charge and expense, newest first, filtered by kind. Tap an entry to edit it; right-click or long-press to edit, open its receipt or delete it. Every delete has Undo.
Once a day, when your vault opens, a notice lists what is overdue or due soon, with a button to open the garage. Turn it off in settings, or run Show what needs attention any time.
```vehicle-garage
```
lists what needs attention across all vehicles, and
```vehicle-card
vehicle: Swift
```
shows one vehicle's mileage, cost per km, spend and due items, with buttons to log a service or a fill. Both update as your data changes. Put them in a daily note, a vehicle note or your home page.
Garage adapts to the width of its pane, not the window: a phone, a narrow sidebar, a split or a full tab. On narrow panes every control is at least 44px tall. It uses your theme's colours and font in light and dark mode.
| Command | What it does |
|---|---|
| Open dashboard | Opens the garage (also the car icon in the ribbon) |
| Add vehicle | New vehicle with a schedule that fits its type |
| Log service | Pick a vehicle, then log work done |
| Log fuel or charge | Pick a vehicle, then log a fill or charge |
| Log other expense | Pick a vehicle, then log a cost |
| Update odometer | Pick a vehicle, then enter the reading |
| Show what needs attention | The reminder notice, on demand |
| Export backup (JSON) | Everything, to a file in your vault |
| Export log (CSV) | Every log entry, as a spreadsheet |
| Import backup or CSV log | From a .json or .csv file in your vault |
main.js, manifest.json and styles.css from the latest release.<vault>/.obsidian/plugins/garage/.Garage makes no network requests. Your vehicles and log are stored only in this plugin's data file, <vault>/.obsidian/plugins/garage/data.json, so they travel with your vault and its sync. Exports and receipts are ordinary files in your vault. There is no account, no telemetry and no analytics.
Import accepts a CSV with a header row that has a date column and an odometer column. Other columns are matched by name: litres or fuel, cost or total or price, full, missed, notes. Rows go to the vehicle they name, or to one you pick. Rows already in the log (same date, odometer and cost) are skipped, so importing a file twice is harmless.
Dates such as 05/02/2024 are read day first. Numbers with a decimal comma (1.234,5) are not supported.
The plugin is plain JavaScript in src/main.js, with no runtime dependencies. esbuild bundles it into main.js (not minified, so you can read exactly what runs in your vault), and Obsidian's official lint rules check it on every push.
git clone https://github.com/varunlakshmaiah/obsidian-garage.git
cd obsidian-garage
npm install
npm run dev # rebuild main.js on every change
npm run lint # Obsidian's review rules
npm test # build, then the logic tests
python3 -m http.server 8765 # then open http://127.0.0.1:8765/preview/index.html
The preview runs the built plugin in a browser against a stand-in for the Obsidian API, with fictional demo data and switches for theme, accent and pane width (full, 900, 600 and 390px).
To try changes in Obsidian, copy main.js, manifest.json and styles.css (or symlink the repository) into <vault>/.obsidian/plugins/garage/ and turn the plugin off and on. Design rules are in DESIGN.md.
Add a section for the new version to CHANGELOG.md, then run npm version patch (or minor, major). That updates package.json, manifest.json and versions.json, commits, and tags. Push with git push --follow-tags. The release workflow lints, tests, builds and attaches main.js, manifest.json and styles.css to a GitHub release, with this version's changelog as its notes.
Found a bug or have an idea? Open an issue.
MIT © Varun Lakshmaiah