This repository contains the source code for our Android password manager application. It is publicly available for everyone to audit our code and learn more about how our Android applications work.
We are working with a modularized app, and we plan to publicly release the source code of more modules.
The Android project was started back in 2010 and was written in Java with some usage of native libraries (e.g. cryptography was using a C++ library in common with our desktop apps). We are doing continuous refactoring and adopting new tech, as a consequence, we also have legacy code as our migration plans often focus on new features and code that changes frequently. For example, most of our codebase is now in Kotlin, but we still have a few java classes.
The app used to be monolithic in a single repository and was progressively modularized. Some modules are directly put in our repository while others are built separately and published on a private maven repository to be used by our apps. Overall modularization helped us with our build processes, while also allowing us to reuse modules in our more recently released Authenticator app.
UI architecture pattern
Our current standard architecture pattern used for the views is MVVM. It helps us isolate the business logic in clear layers and components. However, we used MVP for years and not everything is migrated yet to MVVM.
Kotlin, coroutines, and flows
We have adopted kotlin and most but not all of the codebase is converted, so we still have some legacy java classes.
We are making extensive use of Coroutines and Flows in the app. We used a lot of the experimental coroutine APIs (e.g. actors) and now migrate them to Flows, especially where we already migrated to MVVM.
After a long time of using Dagger, we moved to use Hilt at the end of 2021 and used this migration as an opportunity to reduce the number of things that we were getting through our SingletonComponent.
We have a mix of fragments and activities and navigation is handled through the Jetpack Navigation library. See
drawer_navigation.xml as a starter to explore it.
Dashlane is heavy using Cryptography to protect the data of the users. We use the OpenSSL library and Argon2 as cryptography primitive functions to build algorithms for Dashlane. The algorithms serve for Symmetric Cryptography, Asymmetric Cryptography, and Key Derivation.
If you want to learn more about cryptography at Dashlane, have a look at our Security Whitepaper.
How to contribute
If you find a vulnerability or a security issue, please report it on our Hacker One Bug Bounty program.
If there is an improvement for the codebase you would like to share with us, we would be happy to hear your thoughts! Feel free to open an issue on this repository or reach us at email@example.com.
Mobile App Development Best Practices – 03.10
iOS MetaCodable – Supercharge Swift’s Codable implementations with macros meta-programming How to build a Tuist plugin and publish it using...
How to make and use BOM (Bill of Materials) dependencies in Android projects
By using a BOM dependency, you can avoid specifying the versions of each individual library in your app, and let...
Telegram turns 10 years old and revenues stagnate
Telegram seems to want to grow not only through messaging but also through communities, which pretty much means it wants...
MetaCodable – Supercharge Swift’s Codable implementations with macros meta-programming
Supercharge Swift‘s Codable implementations with macros. Overview MetaCodable framework exposes custom macros which can be used to generate dynamic Codable implementations. The core of the framework...
How to get started with Swift Concurrency 🧵 (Beginner Tutorial)
Swift has built-in support for writing asynchronous and parallel code in a structured way. Asynchronous code can be suspended and resumed later,...
Mobile App Development Best Practices – 02.10
Data.ai has summarized the interim results of the year – and once again we have a record. Annual consumer spending...