Bitwarden Auto-Backup Manager banner

Bitwarden Auto-Backup Manager

12 devlogs
31h 22m 54s

Updated Project: I added full cross-platform support for macOS and Linux, made UI improvements with a new logo and tray icon, refactored the entire project into dedicated modules, and made various bug fixes!
<br>
Bitwarden Auto-Backup Manager …

Updated Project: I added full cross-platform support for macOS and Linux, made UI improvements with a new logo and tray icon, refactored the entire project into dedicated modules, and made various bug fixes!

Bitwarden Auto-Backup Manager is a user-friendly application that creates local, encrypted auto-backups for your Bitwarden vault (without unsafe storage of your master password).

For some context: Bitwarden (the password manager) has refused to implement backup functionality into their password manager for the longest time now (more specifically the cloud-hosted option). This leaves us without an easy way to safely back up our vault in the event of emergency. This Electronjs-based application fixes this problem by allowing you to schedule local, automatic backups that you control.

This project uses AI

Used Amp Code for debugging, researching library syntax, and determining OS-specific limitations.

Demo Repository

Loading README...

Brian

Shipped this project!

Hours: 18.28
Cookies: 🍪 354
Multiplier: 19.35 cookies/hr

I made some huge changes to Bitwarden Auto-Backup Manager, my app that makes automatic, encrypted local backups for your Bitwarden vaults.

During this ship, I managed to expand this tool from a Windows-only app to a cross-platform one supporting macOS and Linux! I learned how to better organize my code by splitting it into nice dedicated modules, and migrated to ESM from the (now ancient I guess??) CommonJS. I also learned more about how each operating system functions and their limitations compared to others, like macOS’ specific dock requirements or Linux’s keychain restrictions on applications installed using containerized package managers (looking at u snap and flatpak).

I’m very proud of making it this far with my project, and hopefully helping some people along the way :]

Brian

Just finished adding full support for Linux! Tested it on both Ubuntu and Fedora, works great.

I made some crazy README.md changes since the old one was long, had some old (now inaccurate) information, and super confusing.

Just released v2.3.2 as alpha! Going to leave it installed on all of my devices for some more testing :D

Attachment
Attachment
0
Brian

Bitwarden Auto-Backup Manager on macOS IS HERE!!! :D

I had to make a bunchhhhhh of changes since macOS has a bunch of quirks that Windows doesn’t (and uses different configuration for stuff like trays and menus). macOS also doesn’t like it when you try reading the app data for another application (which in this case… we kinda need Bitwarden Desktop), so I added some permission checks to prompt the user at the start to enable Full Disk Access.

Oh and I got a new logo now!! Re-designed in Adobe Illustrator straight from the original Bitwarden logo.

Linux is next!

Attachment
Attachment
Attachment
Attachment
Attachment
0
Brian

Just a few more minor bug fixes! I removed some dead code, added some more precise calculation for next backup time (now we use Date to add days/weeks/months instead of hardcoded numbers like 30 for month), fixed some logic and added minor changes to prevent future screw-ups.

Oh and for some reason the tray would only update its status text (for “last automatic backup”) only during a background check, meaning it would say “never” for the first minute of the app staying open. Kinda silly, fixed it!

I’m planning on testing this software on macOS and Linux a little bit, and potentially releasing full cross-compatibility :D right now it’s only available on Windows, but maybeeeee 👀 definitely needs loads of testing though, so still thinking about what I want to do.

Attachment
0
Brian

I refactored the entire project file structure, yippee! index.js has been split into dedicated modules and I added a more robust software update check with policies that I can configure on the API (which rn is hosted on GitHub Pages).

I also added a few helper functions, made a ton of small bug fixes and improvements, and updated the file name formatting to make more sense (now backups use the format bitwarden_encrypted_export_20260302160654.json, similar to Bitwarden’s client).

Attachment
Attachment
0
Brian

I updated the scroll bar design since the Electron upgrade made it ugly, and added a custom notifications toast which looks much nicer and native (compared to Electron’s Notification API)!

Attachment
Attachment
0
Brian

I worked on installing and configuring eslint for Electron and fixed all the errors (also installed a new version comparison library)! Also added CSP for the input modal since I forgot to do that.

Attachment
0
Brian

Made a lot more changes for better cross-compatibility across older Bitwarden/Vaultwarden versions since the older ones used a different API response JSON structure. We’re now using API response models straight from the latest bitwarden/clients source and added minification to the esbuild command to make the file size smoller (🤏). I also added some proper HTTP status handling for the API requests (w/ better error logging during vault sync).

Other than that I removed some now-unused stuff and also made a couple silly bug fixes and improvements like graceful app closing. Oh yeah, and I migrated everything to ESM now! Updated Electron as well as some other libraries and removed unused ones.

v2.2.1 & v2.2.2 has been released!

Attachment
0
Brian

Shipped this project!

Hours: 13.05
Cookies: 🍪 155
Multiplier: 11.9 cookies/hr

I made massive improvements to my Electron app Bitwarden Auto-Backup Manager, which allows you to make automated, encrypted backups of your password vault locally! As I was working on this project, it was fairly difficult navigating through Bitwarden’s source code to create the backups properly, but I managed to build and implement their internal code for this project! I’m really proud of this tool because it’s one of the only options available out there, and lots of people have thanked me for making it. :D

Brian

Final commits before I push out a pre-release! I spent a while researching the best PII (Personal Identifiable Information) practices, and cleaned up a couple of the logs which may contain some unwanted info. I also added some error sanitization to remove emails with a regex from emailregex.com!

Why did this take an hour? Couldn’t tell ya. Honestly was just experimenting a lot of small changes I decided not to push out.

Oh, and I also made a handy GitHub Action to simplify compilation of the Bitwarden clients library! :D

Attachment
0
Brian

Completely forgot to make a devlog, got lost in fixing a few things..

Since the last devlog, I’ve re-organized the file structure of my project and removed it from extraResources since silly me wasn’t bundling any of the static files into the executable (which is definitely not smart)…

Most of this time was spent migrating to the latest @bitwarden/common source code, since it’s been about 7 months since I’ve updated it. This is when I noticed Bitwarden has done MASSIVE changes to their codebase, and have also built a separate @bitwarden/sdk-internal npmjs library that it’s now dependent on. So yeah, I spent a while re-building the source code and making changes to some of my cryptographic functions which broke during the update (also decided to use esbuild from now on to minimize the file size and leave behind any unused files).

I might cleanup my crypto.js functions for better clarity (renaming some things) but for now it’ll work just fine.

… oh and I also updated the project license to GPLv3 because I’m using Bitwarden’s source code and never fixed it.

Attachment
0
Brian

Finally finished updating the error dialogs! I’ve also added a custom dialog utility that’ll be used for master password prompts (previously I was using electron-prompt but it’s buggy and doesn’t match the UI theme).

Attachment
0
Brian

I finally added more robust error logging using electron-log in both the main process and renderer.

I’ve also worked on major error handling improvements for my utility libraries (cryptography, API, etc), and added an “Ignore” option for critical updates (addressing a previous issue where users were forced to update to a potentially incompatible version).

Still working on making some changes to the error dialogs to display more information!

Attachment
0
Brian

First devlog! So far I’ve implemented CSP on the page and moved inline handlers to my JS code, and created a renderer.js to use instead of a script tag (since it’s safer).

I’ve also made some minor changes like making the copyright year dynamic and fixing a small bug which removes null bytes from credentials (since Windows stores credentials as UTF-16LE).

I’m currently working on adding error logging to make troubleshooting easier. I have a GitHub issue I’m trying to resolve right now so hopefully this helps.

Attachment
0