Introducing My Sponsorship Program
2024-05-03 ยท 10min read
I've always loved Open Source and have tried to share as much as possible publicly. In 2021, I decided to go full-stack JS and switched to using Node.js for my backend after years of using Laravel. That's when I discovered AdonisJS and instantly fell in love with the framework.
From there, everything picked up quickly. I made my first open-source contributions to the project (notably to the packages.adonisjs.com website and the commands migration:fresh
, db:wipe
, migration:reset
and co), created my first packages for AdonisJS (adonis-sail and adonisjs-prometheus), and became increasingly involved in the community.
A few months later, I joined the Core Team. Since then, I've launched a ton of new features in AdonisJS, made over 200+ PRs, and lots of commits and changes. I also created and maintain many packages, some agnostic and usable outside of AdonisJS, some specifically tied to it:
- ๐ Verrou: a library for managing Locks in Node.js
- ๐ฑ Bentocache: a robust multi-tier caching solution for Node.js applications
- ๐ช Hot Hook: A HMR system for Node.js + ESM, now integrated into AdonisJS and greatly enhancing the DX.
- โก @adonisjs/vite: Vite as a bundler for AdonisJS, replacing Webpack. Also supports SSR.
- โก๏ธ @adonisjs/inertia: An official adapter of Inertia for AdonisJS
- A VSCode extension for AdonisJS and for Japa
- And many more projects...
Current Situation
In fact, my dream has always been to work full-time on open source. Sometimes I try to imagine the daily life of a full-time open-source developer. I think about someone like Anthony Fu, who might wake up one morning, grab a coffee, and on a whim decide to develop UnoCSS, or a devtool for Nuxt, or another super handy little utility library. That's literally the day job I dream of having.
Currently, I'm freelancing, so I can manage my time as I wish, and in recent months I've spent far more time working for free on open source than working for my clients. Not that I lack assignments, quite the opposite, but I'm simply much more stimulated by open-source work than by business work. As a result, I've foregone a portion of my usual income to work on open source and deliver all these new features.
I'm not complaining because it's my choice. But it's not sustainable in the long term: we all need to pay the bills. So, for the first time, I'm planning to monetize some of my open-source work, in the very utopian hope of one day becoming a full-time open-source maintainer.
In a more down-to-earth and short-term perspective, the goal is to start making a bit more money so I can spend even more time on Open Source, and also develop this monetization aspect of my OSS work (which always makes me a bit uncomfortable).
Sponsorship Program
Starting today, I'm opening the Sponsorship Program and will follow the sponsorware release strategy. TLDR: Some things will be reserved for sponsors for a limited time, and after a certain period, they will be released as open-source under the MIT license.
For a sponsorship on GitHub or Polar of $15/month, you get access to this Sponsorship Program and its benefits:
- Access to my Sponsorware packages: latest releases and documentation
- Access to the Roadmap of my projects: vote for what you want to see prioritized, suggest new things, follow progress
- Private access to Discord to receive help or just share ideas
- Be involved in early discussions and decisions
- Prioritized issues
- And of course, support my open-source work if you like it.
If you are a company, then for $99/month you get 10 invitations to the sponsorship program.
The first package to be released as Sponsorware is Tuyau.
Upcoming Projects
Let's quickly talk about the list of things I currently plan to work on with this sponsorship program. Nothing is set in stone. They will likely be adapted and prioritized based on your feedback and needs. New ones may be added/removed based on that as well.
Tuyau (In Progress)
The main goal of this project is to provide some utilities to have better typesafety when creating APIs with AdonisJS. Long-term goals are:
- Done (Experimental): Provide an RPC-like client that is fully e2e typesafe (like tRPC, Elysia Eden, Hono, etc.)
- In Progress: Provide a Ziggy-like helper to generate and use routes in the frontend.
- In Progress: Provide some Inertia helpers to have better typesafety when using Inertia in your AdonisJS project. Things like typesafe
<Link />
anduseForm
. - Not started: Provide a specific Controller class that will allow for better typesafety when creating your endpoints.
- Not started: Having an automatic OpenAPI generation + Swagger/Scalar UI viewer based on Tuyau codegen. Still not sure about this one.
The project is currently in intensive development and also being tested on one of my enterprise projects: a monorepo AdonisJS + Backoffice Inertia + React Native Mobile App. And honestly, it's a real pleasure. Tuyau's RPC client is saving us a ton of time.
As a reminder, Tuyau will therefore be the first sponsorware of the sponsorship program:
- All sponsors at $15 will have immediate access to the latest pre-releases and the Tuyau repo, can follow its development and participate by providing feedback, reporting bugs, etc.
- The package will be made totally open-source and free for everyone when I reach 15 sponsors.
Bentocache x @adonisjs/cache
Goal is to release the version 1.0.0 of Bentocache. The API should be stable, it won't change. Bentocache is already used in production on several sites and works globally fine. But it lacks a bit of polish before it can be released as version 1.0.0: I have some small bug fixes to do, and I'd like to add an API to more easily implement Stale-While-Revalidate.
The second objective is to integrate it with AdonisJS. We currently have an experimental and private @adonisjs/cache
package which is for now a simple wrapper of bentocache. But with this package, I would like to propose specific features for AdonisJS, about which I am not yet sure. Some ideas:
- Russian doll caching for TSX and Edge
- Have a way to cache an HTTP responses ?
- Integration with Lucid for model caching.
- And probably other things. To be thought through!
@adonisjs/prometheus
A broad subject but one that I'd like to tackle because I like monitoring stuff. For V5 I had made a small package adonis-prometheus which simply allowed you to setup Prometheus in your AdonisJS application and to set up a few counters to monitor your application, such as the number of requests per second and per URL, but it was still super basic.
For V6, I am doubting. There are two possibilities. Either build a @adonisjs/prometheus
in a totally more powerful way, with integrations and monitoring for most of the official packages, more customisation, one, or even several, more complete grafana dashboards...
Or build something like Laravel Pulse. Laravel Pulse is ultimately a sort of Grafana / Prometheus, much lighter, but with the advantage of being super simple to set up. The Grafana stack in itself isn't super complicated to install, but it's not necessarily easy for everyone, and probably overkill in some cases. And also require additional infrastructure.
With Laravel Pulse, we have a simple monitoring solution that works from Day One without any headaches and that should suit most applications.
So yeah, also a thing to think about.
AdonisJS Nexus
Three years ago, I started developing Adoscope but eventually abandoned it. However, I've never stopped thinking about a similar tool. As a big fan of these types of tools that improve DX, I want to build a tool called: Nexus
.
The idea is simple: the ultimate dev companion tool for AdonisJS. The idea is still very vague, it will need to be specified and thought through, but the major inspirations are the following:
All in a web interface. The idea is to offer tools for a bit of everything:
- A Postman-like interface, automatically generated from your routes.
- A web log-viewer. Sometimes more convenient than the terminal for debugging.
- A Telescope-like. Quickly see what's happening in your application.
- A database viewer like Prisma/Drizzle studio. Based on Lucid.
- A GUI for Ace. Run commands from a web interface.
- And probably other tools...
It's a big, very big project. Lots of ideas. Lots of things to specifiy. But you get the idea. Some elements will be built agnostically so they can be used outside of AdonisJS.
Lambda Companion
Allow the use of FaaS like AWS Lambda/Cloudflare simply within an AdonisJS application. To be able to combine the best of both worlds:
- Long-running monolithic process for most tasks.
- Use of FaaS occasionally for heavy and spontaneous tasks.
Improving existing packages
In addition to all this, continue to improve and maintain existing packages. Those of AdonisJS and Japa in collaboration with the rest of the Core Team, Bentocache, Verrou, the Vscode extensions, and all the rest of the packages. I have quite a few improvement ideas that I will share in more detail.
That's the overview of the major projects. Lots of uncertain and vague ideas. But these are some things I've wanted to build for a while. I have other ideas, which are already in place on the Roadmap of the Sponsorship Program.
And as a reminder, nothing is set in stone, that's the purpose of the sponsorship program: to work with the most involved and allow you to influence these choices and suggest new things.
I hope you will be interested in this sponsorship program. And especially, that you will understand my decision to start monetizing some of my work in Open Source.
See you soon ! ๐