You are browsing as a guest. Sign up (or log in) to start making projects!

Clientwarden

  • 38 Devlogs
  • 185 Total hours

A nice, aestheticly appealing UI intended to replace the desktop Bitwarden Client which uses electron making it very inefficient. Clientwarden is created natively for each platform to be resource-efficient without using electron. Currently only Logins are clickable in the Clientwarden UI and only Username, Password's and Websites are able to be displayed.

Open comments for this post

8h 38m 21s logged

Finished Android UI

So I was able to finally finish off the Android UI, and I was able to finish it off dramatically faster than I spent on the Mac OS UI. Mainly because, with the Mac OS UI, I had to spend a lot more time on the architecture and I had to revamp the Vault itself. My favorite part about making the UI is the About Screen, where I can hide tons of really cool effects and easter egg. If you download the Android App and go to Settings and about, you will see an App Icon which if you click 3 times, will spin around, kinda like the chrome easter egg.

0
0
21
Open comments for this post

8h 40m 37s logged

Android UI - Details Screen

I was able to implement the Password History Screen as well as the Reprompt UI and the Clientwarden Image class so that I can use an Image, Icon or App Resource. I still need to add a progress bar to the Attachment Item, Add callbacks for the top bar, add multi select support (tbh i dont really know how Im going to implement this) and do the rest of the stuff from the readme. I do want to focus more on the Mac OS side as well, bc I want to support Golden Gate and add a few features. The Main features that need to be implemented are the Sign Up support, Offline Vault support, and a ton more. If you want to help with the project, dm me at @CT5 on slack.

0
0
41
Super Star

As a prize for your great work, look out for a bonus prize in the mail :)

Open comments for this post

9h 7m 44s logged

Android Support

So I decided to work mainly on Android UI Support for now and then move onto Iced on Linux. I was able to work on the Details Screen as well as finish the Items Screen and fix some main stuff for the Nav Screen like adding Folder support and stuff. I also started work on getting the Android UI to compile on CMake and it looks like its going to be way harder than I thought it would be initially. Tbh it looks like Apple’s XCode Swift UI combo is generally the best, since they have a declarative style UI and things are pretty easy to Implement. With Windows, its XAML which wouldn’t fit in my situation, and for Android its almost perfect, except gradle is a pain and there a hundred types of everything, like the IconButton, Button, FilledTonalButton, TextButton, etc, and those are just the ones I learnt rn. Unlike Android, SwiftUI just has one type of button which can do everything which is pretty good for beginners and advanced ppl. And the best part, Swift UI can have negative padding, which is genuinaly PEAK!

0
0
36
Open comments for this post

8h 58m 54s logged

Linux + Android Support

I was able to do a ton of work for the past few days. I was working on Linux Support in Rust using Iced but it was pretty difficult to use to look good since it didn’t have any native nav panel elements and required me to make my own. So I decided to go to the Android side. Working with Android Kotlin was a bit difficult at first, but then it became much much easier. It was kinda annoying that I have to import literally everything, including the conversion things. By the end of the day, my imports were basically half the file. Either way, I decided to work on the Nav Screen first, and then the Items Panel which went pretty well. I think it turned out pretty well, but if you have any feedback, share it in the comments.

0
0
20
Open comments for this post

6h 10m 55s logged

Bug Fixes + Linux UI

Ok, so I added an easter egg (see if you can find it), and I also switched to the list type Nav Panel which I had implemented but stashed before. I decided to restore it because it looked better and was a bit more organised, code-wise, and I thought it would help remove the shadows to fix light mode. I also had to change the folder button to glass and I also did a bit of work on the wiki. I decided to restart with the Windows UI, and I was planning on having a NavPanel, ItemsPanel and SidePanel with GenericItem’s which could perform the role of the TOTP Field, Text Field, Password Field, etc. However, I couldn’t do that bc WinUI isn’t declaritive like SwiftUI so I had to either create a bunch of xaml files and types, or just hide and show elements. Now that I think of it, I could’ve also populated it via C++, but I already moved on to the Linux side. For Linux, I was thinking of using QT with a catppuccin theme, since I’m very very bad at making color palette’s and stuff and the palette is pretty important. Anyway, after battling with QT with QML to work on MacOS and to even configure, bc it couldn’t find the deps from Conan, I was finally able to get it to work. I’m going to start working on the NavPanel tmrw. For now, Im going to have to develop the Linux UI on Mac, but after I finish the UI, ill move onto linux to finish it off.

0
0
49
Open comments for this post

5h 40m 36s logged

Adding Tests

Since I wanted to revamp the old crypto stuff to support Argon2ID, I decided to create some tests to know if I’ve implemented it correctly or if I mess smth up. It took me waaay too long to figure this out. I had to fix a lot of stuff like adding a fake Clipboard, Storage and UI Bridge just so that I could link the backend, but in the end it was worth it.

0
0
16
Open comments for this post

4h 25m 24s logged

Autofill Support

Ok, so it took me a while to figure out how to implement Autofill support. I dont have the Apple Dev License yet, so unfortunatly I couldn’t test it and the only thing I could do is see compiler errors and fix them. So the way it works, is that it has a notification thing, and the extension notifies the vault app, asking for all the logins that match the website, it then puts the website in the keychain so that the app can access it and then the app checks the keychain, writes the result to the same keychain and notifies the extension. I also made this cool screenshots of it infront of a really cool bg and it looks sooo cool.

0
0
20
Open comments for this post

2h 27m 16s logged

Drag and Drop Support

Usually if I want to implement a new feature, I would ask Claude how I would do it and what APIs I should use, note that Im not just vibe coding everything, Im just asking it how to do smth. This time tho, I decided not to do that and to directly look at Apple Docs, and it was pretty helpful. I was able to figure out how to implement more animations and figure out how to implement drag and drop support which was kinda hard but I was able to implement it. I also fixed a folder bug and did some stuff for the wiki.

1
0
275
Open comments for this post

4h 44m 33s logged

Multi Select Support

I added a multi-select support thing so that you can press shift and select all the items you want to delete, restore, perm delete, archive or un archive. I also made it so that there would be a biometric button on the autofill unlock window and I also made it shake when the password is incorrect, its kinda fun to just press unlock 100 times to see it shake. Next, Im going to add animation and add support for device unlock.

2
0
118
Open comments for this post

1h 33m 21s logged

Archive Support

Ok, so Im still waiting for the Apple Developer License so until then I can’t implement a lot of the really good features. Currently I’ve just implemented Archive Support and some fixes like to Check for missing Websocket Events. Im going to be doing a full test soon, once I finish all the features for v1.1.0. I also added a networking page for the wiki.

0
0
37
Open comments for this post

5h 18m 4s logged

Passkey + Biometric Support + Security Updates

So I was talking to @/Darren and they told me that I shouldn’t store auth keys in plaintext. I didn’t think that storing the keys would be a big issue since you needed a master Password to use them, but I decided to be safe anyway and I stored them in Keychain. Currently I can’t really implement most of the Keychain stuff because I don’t have an Apple Developer License yet. I also implemented broken passkey login support and also broken biometric support. They are broken bc I can’t really use them without a dev license

0
0
18
Open comments for this post

7h 50m 36s logged

AutoFill Unlock Window

So while waiting to get the Apple Developer License for the App Group Setup and Code Signing Setup, I decided to work on AutoLock Support for v1.1.0 and the tiny AutoFill unlock window. I also tried to add support for logging in via passkeys, until I realised that I can’t since I need the dev license and I need to add my app bundle name to my vaultwarden instance for it to work. I also implemented support for clientwarden to stay open in the background. The second screenshot is just a cool little failure bc I forgot to give it a liquid glass background.

0
0
17
Open comments for this post

55m 21s logged

Crypto Docs

Currently Im working on the Wiki, but after that, Ill work on v1.1.0 and the security stuff for v1.0.0. There really isn’t much so say here, bc its mostly just adding more stuff so docs.

0
0
14
Open comments for this post

8h 11m 28s logged

First Release Candidate - Functionality

So I was able to fix quite a few bugs and implement a bunch of the last features I needed to add for the first release candidate. So I changed the network timeout, fixed the annoying padding on some generic items, fix sync, remove duplicate ciphers, fix race conditions, fix item duplication when offline, login view exceptions, change the title placeholder to value, prevent click to copy when editing, prevent sshKey and note from creating linked field, add delete folder message and make the button red, add a custom item for identity so that there arent 4 different fields for the name, add the remove field button, create the codeql thing and fix some stuff so that clientwarden would work with the official Bitwarden servers.

0
0
9
Open comments for this post

5h 57m 39s logged

Icon + Password Generator

I fixed the SSH Key Cannot decrypt error and I also finished off a few things for the beta release. I designed an icon in Icon Composer, which is a really great app btw, why can’t windows have a proper UI app like that, and fixed the cmake so that it would show up. I also changed the about page to have a uniform height. The only issue is that there is a ton of blank space, so Im probably going to have to make some art for it myself. I also made a really cool password generator UI for passwords and stuff in the Login Item. I still need to make an ssh key thing, although I might do that on the next release.

2
0
59
Open comments for this post

7h 33m 58s logged

Clipboard + Screenshot Support & Settings UI

I’ve pretty much fixed most of the larger bugs so I’m currently just working on the essential missing features that ClientWarden needs. I was able to add clipboard support, settings bridge, screenshot option, finish off websocket stuff, a proper versioning system and a much better settings UI, as well as proper folder support and a reprompt window for those sensitive notes. I’m probably going to make a cool graphic for the about window soon, so stay tuned.

0
0
15
Open comments for this post

3h 59m 27s logged

Bug Fixes

Currently Im just focusing on making bug fixes and then working on new features. Because I’d rather fix it and then work on new features, rather than work on new features and fix a bunch of them later. A bunch of the bugs were caused by the vault rewrite or just me forgetting to finish implementing it. Anyway, so I fixed the Upload, Remove and Download Attachment, as well as the Add Website Button, invalid password vault unlock crash, I also made it to preserve the current tab (Bitwarden or Custom Server), refresh items panel every 5s, remove password after login and unlock, edit when creating an item, show deletion date and show password history date. I also noticed that when I create an empty ssh key and edit it with bitwarden, it fails, making a [cannot decrypt] error.

0
0
11
Open comments for this post

6h 35m 46s logged

Bug Fixes

So I’ve done a lot of stuff. I just finished porting the Vault UI Bridge to the new Vault API which requires you to get an item from Vault. I also forgot to implement saving support for Card, Identity, Note and SSH Key, so I implemented that too. Also I fixed the favorites issue. I also fixed the TOTP field, bc when it was empty it would just have no code and would still show. The only other bugs I have left to fix are the add website bug, attachment bug and password preservation bug. Then I can get started on the other features like folder support, password gen support, pfp support, folder tree view support and clipboard support.

0
0
22
Open comments for this post

9h 25m 57s logged

Vault Rewrite

The Vault rewrite is going pretty well so far. I’ve already finished the Vault Rewrite, but the only thing I have left is porting the old GenericItem stuff to the new Vault. At first, I was just fixing stuff that ended up in the error log, which was a bad idea, so I decided to skim through all the files and fix them as I saw them, which went pretty well. @/Dexrn suggested that I should make builders like Generic Item from the Vault and to have all the other Login Item and stuff a derived class from Generic Item using templates so that GenericItem would still output a LoginItem*. So I decided to have the normal Generic Item and then an Impl one based on Generic Item with all the Implementation functions in a protected part in Generic Item. Then Generic Item has its own GenericItem* ones, but the derived ones have their own LoginItem* ones from GenericItem Impl. Its pretty confusing but its easier to understand once you have a look. There is just a bit code that I need to fix, mainly CW Thread and then I should be done

0
0
9
Open comments for this post

9h 12m 21s logged

Vault Rewrite

So I’ve faced a couple of vault bugs over the past few days like [error could not decrypt] which is a serious error that could destroy anyone’s Bitwarden vault. The other issue that I’d been delaying for a while was the Vault Revamp, since the vault was incredibly messy and held stuff for networking, crypto and session, so I decided to start from scratch and copy and fix the code as I went. When I started from scratch, my mind went blank, I didn’t even know where to start, since the Network stuff needed session stuff and the crypto stuff, so I was beyond confused. I spent a day or two figuring it out, with no success. Then I asked ChatGPT because my Claude credits had just expired, and the second it gave me an answer, I knew I was cooked. I then asked Gemini, with the same results. Afterward I asked Claude, and the solution it gave me didn’t really work. It did tell me that it was a good idea to separate it into a Network, Session and Crypto class. Then I asked @/dexrn and they helped me figure out how to separate it. Essentially, what I ended up with is Vault does the CreateItem stuff which calls funcs in the Network and Session classes. The crypto class only holds the funcs and so does the Networking class. The session class holds all the vaultData and secret data.

0
0
13
Open comments for this post

5h 31m 52s logged

Attachment Support + Bug Fixes

I was able to clean up the messy bridge code and add attachment support. I also fixed some bugs, like when you enter an incorrect email or password, it would crash the whole app in the login view, and also I added an error toast for each of the errors. I still need to implement a ton more stuff, like the freezing issue with the vault and the random signouts as well as making the vault faster.

0
0
9
Open comments for this post

3h 35m 58s logged

Login Item Support - SidePane

I was able to finish the login viewer part of the SidePane which is the hardest part since it needs to show not only the username and password, but the totp code and the websites part. The only other part I need to work on, is the attachments callback and the card, identity, note and sshKey parts. I also fixed the padding for the details on the bottom which were touching the very bottom. I also had to add a few funcs into the backend to get the creation, modification and deletion date.

0
0
13
Open comments for this post

1h 41m 9s logged

Bug Fixes

I was able to fix a few things in the Nav Panel Bridge, mainly renaming support. I also implemented Items Panel and a bit of the SidePanel. The Sidepanel is the hardest part, especially the part where it needs to save and the part where it needs to be populated. I also made items to automatically open when they are created. The only other things that I need to do are PFP support, make the vault faster, implement the bridge for the settings menu, add an option to allow screenshotting in settings and fix the random signouts in the vault.

0
0
10
Open comments for this post

2h 49m 13s logged

Finish up Nav Panel Bridge

So I was able to finish building the Nav Panel Bridge. It was a bit difficult since I needed to fix a few things in the UI code, so that it could map the callbacks correctly. For some reason, Objective-C doesn’t have any syntax highlighting and it doesn’t check for errors at compile time, so you just end up with it breaking at runtime. I also forgot to add a UI element to rename the folder and the Vault is kinda slow to open. I also need to highlight the selected Item and add an animation for when the window extends.

0
0
8
Open comments for this post

4h 16m 40s logged

Start on the UI Bridge

I was able to wire up the Vault and the UI today. I haven’t finished adding callbacks for the NavPanel or the Items Panel or the SidePanel, which is pretty much the whole vault, but I was able to do the Login, Unlock and ClientwardenApp callbacks. I had to make these callbacks in objective c, and it was soo hard, bc there wasn’t any good syntax highlighting and if there was an error, I had to wait for it to build and then look through the messy build logs and figure out what was wrong. I also noticed that the password field was a normal text field so I changed that and I also made it so that you can’t screenshot the vault. The login and unlock buttons also behaved kinda weird, so I fixed that. The only part of the Login Page that I haven’t done yet is the profile picture. I also added a loading screen btw.

0
0
11
Open comments for this post

2h 10m 50s logged

Cleaning Up Item Classes

I decided to clean up my backend Vault Code since the item management code was pretty much the same copy pasted thing, so I decided to make all item classes, LoginItem, CardItem, IdentityItem, NoteItem, SSHKeyItem, a derived class from GenericItem. This was pretty difficult tho, because GenericItem returns GenericItem, and LoginItem and all the rest need GenericItem to return their class. I asked @dexrn, and they told me about covariant returns, where basically you can return GenericItem but then override it in LoginItem and return a LoginItem by calling the the GenericItem func and then converting it to LoginItem. I also noticed that the attachment code in the individual Item classes were out of date, so this helped organise them. There isn’t really much so show so Ill just post a scrshot of the build.

0
0
9
Open comments for this post

2h 43m 38s logged

Settings Page + Lock Support + Attachment Item

So I was able to finish off some simple tasks as well as adding a settings page, a lock button on the menu bar under Vault and making the trash tool bar icons. I also added an Attachment Item with a progress bar. I also fixed added a proper roadmap in the readme for Mac OS, Windows and Linux Support. After I get MacOS working, ill probably replace the Windows image with a Mac OS one.

0
0
7
Open comments for this post

2h 38m 38s logged

UI States

So I was able to finish off the UI by adding a Login and Unlock Page and adding states so that when the app runs, a getState callback func is run to know if the vault should present the Login Page or the Unlock Page. Once the vault is Unlocked or Logged into, the state will be switched to VaultUI. I also made the Unlock page fixed to a small window since it doesn’t really present much info.

0
0
9
Open comments for this post

1h 30m 20s logged

Unfortunatly, just as I was going to push my changes after the last devlog, I wanted to remove some files, so I ran git-filter-repo and it removed all my staged files. So basically, pretty much all the work I did for the past 4h yesterday were gone. I tried using reflog and even Disk Drill, but I wasn’t able to get it back. Thankfully, while I was trying to figure out how animations worked yesterday by asking claude, some of my code was there. It wasn’t a lot but I was able to reconstruct the rest from memory. I did remember some things today as well so I fixed those too. There will be another devlog today so stay tuned.

0
0
9
Open comments for this post

3h 57m 38s logged

Finish off Item Panel + Bug Fixes

I was able to finish off the Items Panel by making the search bar and the new item button. I also fixed the animation issue that was present before. I also added some content things where it says No Items and stuff so that it doesnt look incomplete and blank. I was able to also get it to run in CMake and get it built into an app. There is still much to do, like changing the icon and making a github actions thing, and the UI Bridge. The UI Bridge should be pretty easy, hopefully.

0
0
26
Open comments for this post

7h 7m 55s logged

Finish off SidePanel + Nav Panel + Items Panel

I spent wayy too long getting animations to work and it still doesnt work. Anyway, so I was able to finish off the SidePanel and the Navigation Panel as well as the Items Panel. The Navigation Panel now has a callback which passes the Items which are then passed to ItemsPanel to display them. The issue is that I can’t create an animation because of Swift States or smth. If I go to another navigation tab and then go back, the animation doesnt apply. I also added a mininum window width and height. I almost forgot, I was also able to add edit support which involved rewriting a bunch of code.

0
0
9
Open comments for this post

5h 5m 56s logged

Finished Generic Item + Field Item

Ok, so I got a lot done. I was able to finish creating Generic Item and FieldItem. I decided to combine Websites in the Generic Item struct since it was going to be grouped together anyway, but maybe I should make a derived struct or class or smth next time. I might try and clean it up tho, because I’d rather clean it up now rather than never. I also added the TOTP and Websites Editable thing which were the hardest parts to add. Here are a couple of screenshots of all the stuff I’ve added.

0
0
10
Open comments for this post

3h 30m 18s logged

Sidepane Stuff

I was able to get most of the sidepane working. The only thing I have left is the custom fields and the bottom dates and attachment stuff. I used an array of a data struct which is used to store the fields that need to be displayed. This way I can separate the UI from the Vault UI code and the Vault. The VaultUI just bridges the Vault and UI code. I think it looks good so far, and I even added a nice glow effect when you reveal a password or item.

0
0
10
Open comments for this post

6h 2m 38s logged

UI Design

So I made a lot of progress in designing the UI for the native MacOS version. It was really fun to design a UI with liquid glass. Usually I don’t like liquid glass on phones, but on a computer it really looks good. But when I try and close the nav menu, it has this sliding animation where it goes underneath the other icons with the border which looks kinda off. Im not too sure how to disable the collapse button, but it should be fine for now. Ive implemented an error modal as well to notify the user of errors instead of making them read the log files. The font kinda looks off and the sizing as well, but Im not sure how to fix it. If you know how to improve it, tell me in the comments. Next devlog, Im going to try and get it to work with cmake or ill just keep developing the UI.

0
0
10
Open comments for this post

1h 27m 5s logged

Switch to MacOS

tbh the WinUI code is insanely messy and needs to be fixed, so I’ll be fixing it later. I think it would be good for me to start on the mac os side of things because it would allow me to work on less messy code. I think it would be much better to work on new code rather than fixing old code. There are still a ton of random bugs where sometimes editing will not work and some things will fail randomly.

0
1
99
Open comments for this post

2h 16m 47s logged

Getting ClientWarden Working Again!

After almost 2 weeks of setting up my mac, I was finally able to create a windows VM and get Clientwarden to build on ARM64. Although it was a bit difficult.
First I needed to get all the vcpkg dependencies, so I did vcpkg install. One of the dependencies was boost which needed to build some python library. For some reason it was giving me a heap error stating that it didn’t have enough heap space. I looked at task manager and it did indeed use up all my 8GB of ram. I tried increasing my windows swap but it didn’t work, so I had to increase the ram on the vm to 64GB, even though I had 16GB of ram. Mac OS was able to speedily transfer and compress all that memory to its swap, and after a while, it finally built the lib taking about ~30GB of memory

0
0
10
Open comments for this post

1h 39m 39s logged

Bug Fixes

I finally got the bugs fixed and after a long time of debugging I was able to fix the folder error. I still have a ton of bugs to fix, but the folder one was the hardest one so far.

0
0
22
Open comments for this post

1h 12m 31s logged

Quality Checks + Documentation

I just finished quality checking the whole app and it is kinda buggy in some places so I decided to write it all down. I want to address these bugs before I work on more features, as well as documenting the code and the Bitwarden/Vaultwarden API. Vaultwarden API is a mess of the old and new Bitwarden API. Anyway I caught a ton of bugs that I will address before finishing off WebSockets.

1
0
138

Delete project?

Are you sure you want to permanently delete this project? This action cannot be undone.

All devlogs, followers, and associated data will be removed.

Followers

Loading…