Hello to the Enpass Community and Developers,
First of all, thank you for the great app! Enpass has been my password manager of choice for more than 2 years and I have enjoyed my time using it. One of the main reasons I chose Enpass originally was for its great cross-platform compatibility and support. The Linux support was especially important and mostly unique to Enpass at the time.
That being said, Enpass has been traditionally distributed on Linux through the use of various third-party repositories that depend on the distribution used. This has had various disadvantages:
Each distribution needs its own installation instructions, which is in stark contrast to the easy one-click install that is offered through the App Store and Microsoft Store
Each distribution requires its own packaging format, which adds complexity to releases
The dependencies of the app aren't always included and are updated independently of the app, allowing for possible compatibility issues
The installation process requires root privileges which aren't always available and are a security concern
As such, in order to work around these issues, I would like to present my efforts of turning Enpass into a Snap package.
Snap is a packaging format by Canonical that aims to bring the app experience on Linux on-par with other modern platforms. It focuses on:
Discoverability - by showcasing Snap apps on the Snap Store, which is included in all Ubuntu releases (accounting for the majority of active Linux machines) and many other distributions
Compatibility - by being available on almost every Linux distro
Ease of development - by offering a plethora of metrics and auto updates
Security - with sandboxing technologies that limits the app's access to system users and ensures the user's privacy
Stability - by including all necessary dependencies at build time
Snap is easy to develop for, regardless of if you're starting from an existing .deb file or are building from source. As a proof of concept, I have successfully converted Enpass into a Snap package starting from the deb. The app functions as expected for the most part, and most people would likely be unable to tell the difference between the Snap version and the traditional package. You can check out my progress and install the app on the following GitHub repository:
https://github.com/chrismin13/enpass-snap
This is a personal effort and is not associated with Sinew Software Systems. Because of that, this Snap has not been published to the Snap Store yet. While the app is ready for the most part, there are a few show-stoppers that I would like to have your collaboration in resolving, as I am unable to solve them on my own.
Most importantly, Enpass' Terms of Use state that redistribution is not allowed. I am especially concerned with ensuring that Sinew Software Systems are in full accordance with any redistribution preformed and it is why I found it especially important to contact you on the forums in regards to this matter. I have taken this initiative as I recognize that the Enpass developers are busy with more important manners and I wanted to contribute in my own way to the development of the app. For that reason, I would like to publish the app on the Snap Store. However, that does not mean that I hold any rights to the app or its publication. At any point, you are able to contact Canonical to set up an official account and transfer ownership of the Snap Store page. Please let me know if you allow this instance of redistribution. I would be happy to discuss the matter further, either here or personally, if you would like further clarification on anything.
More details in relation to this issue can be found here: https://github.com/chrismin13/enpass-snap/issues/4
There are also two issues that have to do with the app itself and its compatibility with the sandboxing environment of Snaps. I am unable to fix these issues since I do not have access to the code of Enpass. As such, the help of the Enpass developers would be especially appreciated.
First of all, the command displayed for the assistant is incorrect and causes some side effects. This is a rather simple fix, as I have added the `enpass` command through the Snap package, which could be shown instead. All details for this issue are found here: https://github.com/chrismin13/enpass-snap/issues/1
Second, the browser extension does not work under `strict` confinement. This means that while the app is sandboxed, the browser extension does not function correctly. While this problem can be overcome by using `classic` confinement, which disables the sandboxing, it also voids many of the advantages of the Snap platform and isn't allowed on the store without contacting Canonical to ask for permission. The reason this problem occurs is because Enpass detects a different user is running the client and does not allow the browser to connect. You can view related logs and more details here: https://github.com/chrismin13/enpass-snap/issues/3
Assuming these two issues are fixed, the app will be fully functional as a Snap and indistinguishable from its APT and RPM counterparts!
Thank you for taking the time to read through this rather large post. I hope that you share my excitement on this matter and that you will consider this initiative. I will be more than happy to answer any questions or concerns.
Best regards,
Chris.