Hey there! Hope everyone is having a great week. I set up a weekly job to have AI summarize changes across the AdonisJS repositories with what's new, fixed, etc. This info was originally just for my own gain to keep up-to-date with things easier. However, I figured this might also be beneficial to others as well, so why not put it out as a weekly blog. We'll trial it and see how it goes, let me know if you like this idea or have suggestions in the comments below!
The following is AI generated based on GitHub activity across the AdonisJS repositories.
Router is Now Macroable
This one is probably the most interesting change of the week. The Router class in adonisjs/http-server now extends Macroable, which means you can add custom methods and getters to it from your own code or from a package — without touching the framework source.
If you've used AdonisJS for a while, you may have run into situations where you wanted to attach a convenience method to the router. Before this change, there was no clean, official way to do that. Now there is.
Here's a quick example of what that looks like in practice:
import router from '@adonisjs/core/services/router' import { Router } from '@adonisjs/http-server' Router.macro('apiPrefix', function (this: Router, prefix: string) { return this.group(() => {}).prefix(prefix) }) // Then, anywhere in your routes file: router.apiPrefix('/api/v1').resource('users', UsersController)Copied!
So you're essentially teaching the Router class a new method. Once registered, that method is available on the router singleton just like any built-in method. It's a super clean extension point, and I expect package authors to start taking advantage of this pretty quickly.
This shipped as adonisjs/http-server v9.0.2.
React and Vue ESLint Presets
The @adonisjs/eslint-config package picked up dedicated react and vue presets this week. If you're building an AdonisJS app with Inertia on the frontend, this is going to clean things up nicely.
Previously, if you wanted proper ESLint coverage across your Vue or React files, you had to wire that up yourself alongside the AdonisJS config. Now it's a single option:
// eslint.config.js import { configApp } from '@adonisjs/eslint-config' import { vue } from '@adonisjs/eslint-config/vue' export default configApp(...vue, { name: 'inertia-vue ts overrides', files: ['inertia/**/*.ts'], rules: { 'vue/component-api-style': 'off', }, })Copied!
The frontend key tells the config to pull in the appropriate rules for whichever framework you're using. The Inertia block also now automatically covers .vue and .jsx files, so you're not leaving those out of your linting setup by accident.
By the way, the official AdonisJS starter kits have already been updated to use these new presets, so if you scaffold a new project this week you'll get this out of the box.
Bug Fixes
Request Authority Using the Wrong Host Method
In adonisjs/http-server, the request's authority getter wasn't calling the internal host method — it was resolving the host through a different path. Depending on your setup, this could return inconsistent values. The fix is straightforward: authority now delegates to host internally, so you get consistent results either way. This landed in v9.0.1.
PM2 Environment Detection Was Checking the Wrong Variable
In adonisjs/application, the code that detects whether your app is running under PM2 was checking the wrong environment variable. If you're running AdonisJS with PM2, some PM2-specific behavior may not have been triggering correctly as a result. This is fixed in v9.0.1 of the application package.
Starter Kit Cleanup
A few improvements landed in the official starter kits this week that are worth a quick mention.
pnpm v11 install prompts. If you're using pnpm v11 to scaffold a new AdonisJS project, you were getting prompted to manually approve build scripts during install. The starter kits now include pnpm.onlyBuiltDependencies configuration in the generated templates, so that prompt goes away.
Leftover appKey removed from config/app.ts. A stale appKey field was hanging around in the app config template — a leftover that's no longer used in AdonisJS v7. It's been cleaned up. Small thing, but one less "what is this doing here?" moment when you read through a freshly scaffolded project.
Documentation Updates
A couple of doc improvements also landed this week.
The Inertia shared props documentation now includes Vue.js examples alongside the existing React ones. If you're a Vue user following the Inertia docs, you no longer have to mentally translate from React — the Vue version is right there.
There was also a fix to the deepMerge documentation in the Inertia section, where the usage examples were incorrect, and some expanded parameter documentation for several Lucid ORM methods over on the Lucid docs site.
So, all-in-all, a maintenance-heavy week with two features that'll genuinely improve day-to-day ergonomics — especially if you're building Inertia apps or writing packages that need to extend the router. Good steady progress from the team.