Of Passwords, Libraries, and Apps

Here we are again, coming up to the surface to catch a breath after another month of diving deep into the code. October was a fast month, spent in the wild and woolly world of passwords, libraries, and cross-platform graphical application toolkits. <What did he just say?> Allow me to explain.

First of all, development reached a crossroads this month. Libmensago is a code library for Mensago business logic. Any program that wants to talk to a Mensago server needs this library. It’s complete enough that you can build a kinda-sorta useful app with it. Some important bits are still missing, like cloud sync, but offline support is mostly there. That’s nothing to sneeze at. In fact, I spent a lot of October writing code for the address book and note taking.

Learning Flutter

Some time ago, I heard about Flutter, a toolkit for making mobile applications. Google makes it and it’s really good. It uses the Dart programming language, and Flutter is so good that I wrote a command-line password generator in Dart to get ready to learn it. Sometime soon I intend to put out a release, as well. To learn Flutter itself, I’m working on a mobile app that makes it easy to generate good passwords.

I’m not talking about the half-dozen apps on the Play Store that generate piles of random junk and call them passwords. Those were more or less thrown together with no attention to design. Random passwords like that are terrible to remember, too. Technically, I’m talking about passphrases, which are much better because of the math behind them. In fact, the well-known comic XKCD had a fun comic about them once. I got the app to the point where it did a lot of what I wanted and I learned something in the process: Flutter isn’t great for desktop.

The original intention was to choose one graphical toolkit and use it to write Connect, the desktop program and eventually the mobile apps. With Mensago being a one-man show right now, minimizing the work is critical. Flutter checks all the boxes. I was really excited earlier this year when Flutter 3 became stable for desktop OSes. Unfortunately, stable doesn’t necessarily mean good.

Lots to Choose From

If you search online for software toolkits to write graphical programs in, you’ll find a lot of them. My requirements whittle this large number down pretty quickly:

  • Mature
  • Works with Windows, macOS, Linux, and, preferably, Haiku
  • Can link to the Rust libraries I’ve written
  • Good developer tools
  • Open source
  • Good performance
  • Preferably memory safe

Nothing hits all them. Not. Even. Close. Qt gets all of them except memory safety and good developer tools — the build system is terrible. Flutter gets all of them on mobile, but not on desktop. This has left me to find something else, but it hasn’t been easy.

After a lot of looking, the requirement I am sacrificing is maturity, or at least for now, anyway. The Rust language doesn’t anything mature yet, but the Slint project shows promise. It’s staffed by a bunch of former Qt guys, and they even use a similar business model. Slint is also backed by a commercial entity, so I don’t feel like it’s just going to be suddenly abandoned, either. We’ll see. It’s lightweight and the company has some good tools just for the toolkit, too.

Where Next

With Identity Services largely out of the way, writing Connect is now the focus, so the next step is learning Slint. My goal is to have something for people to try out by the end of 2022. I don’t know if that’ll happen, but it’s the goal anyway. It won’t have even remotely all the features I have planned, but I’m also tired — very tired — of having nothing to show for all my efforts over the last three and a half years. Good offline support is important, so here’s the place to start. I can’t wait to see when news I have for all of you next time.