A year of Biff, and the roadmap for 2023

It's been about a year now since the current "era" of Biff started. The very first commit was in March 2020. I publicly released it a few months later, but it was still in an experimental phase and primarily used by myself alone.

Last February I announced a major update/rewrite that I had started working on, which was released in April. I've been very pleased with Biff since then, and it's had much more community usage than it did previously, at least based on activity in the Slack channel (not to mention sponsorship—thank you again as always!).

I've also explicitly branded Biff as a framework for solo developers—"Biff helps solo developers move fast." Biff isn't finished in terms of code or documentation, but it is whole, and it delivers on the value proposition if I may say so myself. I think the traditional put-the-libraries-together-yourself method of web dev in Clojure is often ideal, especially in the case of experienced devs who know what they want. But there are also situations, such as in side projects and pre-PMF startups, where being able to hit the ground running is quite valuable too. Biff is meant to give people options.

As such, I plan to keep Biff's core small—it's still only about 2,000 lines—and expand it mainly through how-to articles, e.g. "how to scale out," "how to use SSO providers for authentication," "how to write drop-in JavaScript components for use with htmx," that sort of thing. Biff itself should only include the essentials, the things that are likely to be needed in a significant number of early-stage projects.

So documentation will continue to be a focus in 2023; however, there is some code I'd like to write as well. I'm in the middle of making secrets management pluggable, with the default implementation being environment variables (instead of storing secrets along with the rest of your config in an EDN file, which is what Biff defaults to currently). After that, I have a handful of things on the docket:

  • I've received access to DigitalOcean's vendor portal, so once I create an image, you'll be able to deploy Biff via a 1-click installer.
  • I'd like to provide tasks that backup and restore XT's contents to/from S3. For serious projects I recommend using a managed Postgres instance, which DigitalOcean sells for $15/month. However, if your app is running on a single production machine, it could be handy to stick with XT's filesystem storage backend and have a cheap backup solution that runs more frequently than the once-per-week disk backups that DO provides; especially if you have multiple such projects. DO's S3 clone costs $5/month and can be shared by many projects.
  • More authentication methods. I originally went with passwordless email-link auth because it was quick to implement (if you do password auth, you'll likely need to include email-link auth anyway for password resets), and it's been good enough for my own use ever since. But it can have usability problems in some situations, like on mobile. At a minimum I'd like to also have email code auth, so users copy-and-paste a six-digit code that you send to them, and I'll provide password auth as well. My general recommendation would still be to go with passwordless auth when possible, but that choice should be up to you.

Once that's finished, I've been itching to do more work on Platypub, the official, real-world, half-baked, flagship example project for Biff. My goals for Platypub are to (1) solve my own publishing needs, and do the same for anyone else with similar needs, (2) provide a non-toy, open-source Biff codebase for people to study, tinker with, and contribute to, (3) be a "killer app" that gets people interested in Biff and Clojure in the first place.

Right now, Platypub partly delivers on 1 and 2. In 2023 I'd like to make it deliver fully on all three goals. As part of that, I want to host a public instance with a free tier so anyone can use it without having to run it locally or self-host. (Platypub has some features which make public hosting nontrivial).

While I progress slowly-but-hopefully-steadily on all that, I'm going to try writing this newsletter more often. Instead of just sending out announcements, I'd like to casually blog about questions and needs that come up, either from other Biff users or in my own work. Even just summarizing discussions from the Slack channel would have some value, I think. This will probably feed into the how-to documentation I mentioned earlier.

I probably won't be doing any more meetups/videos. I enjoyed them, but in an effort to focus on what's most important, I'm going to leave them on indefinite hiatus and instead put my time towards writing code, writing docs, and answering questions. If anyone else wants to organize meetups, you have my blessing ๐Ÿ™‚.

And finally, a commercial bit: I'm planning to put more emphasis on consulting this year. Most of my time has gone and will continue to go into my own (product) business, which is why I didn't put much effort into getting clients last year. But I did happen to get an inbound lead recently, and that engagement is going well for both parties, so I've decided it wouldn't hurt to do some more of that. I've updated my consulting page; take a look if you or your employer could use some Clojure web dev expertise.

Published by Jacob O'Bryant on 19 Jan 2023

Sign up for Biff: The Newsletter
Announcements, blog posts, et cetera et cetera.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.