tech

Release fest: Effect, XState, Next, Drizzle

Some huge releases are lurking on the horizon on the end of 2025. Effect v4, XState v6, Next 16, Drizzle v1. My stack is going to evolve, this is how.


Sandro Maglione

Sandro Maglione

Software

My tech stack is about to explode 🤯

Effect, XState, Next, Drizzle. Everything is boiling under the surface, slowing building up to major releases.

Major 👀

Let's get a sneak peek 👇


Effect v4

The first sneak peek of v4 came during the Effect Days this year:

Preview of the features coming in Effect v4, from the Effect Days 2025

I am following the progress, PR after PR, on my Github feed.

The features and improvements in the video are just the tip of the iceberg ⛰️

A few other things that are landing in v4.

Optics

Directly from the "draft docs" of the upcoming effect:

Optics are a way to access and modify parts of data structures.

It solves the problem of changing values in nested objects/arrays:

const employee: Employee = {
  name: "john",
  company: {
    name: "awesome inc",
    address: {
      city: "london",
      street: {
        num: 23,
        name: "high street"
      }
    }
  }
}

// Build an optic that drills down to the street name
const _name = Optic.id<Employee>()
  .key("company") // access "company"
  .key("address") // access "address"
  .key("street") // access "street"
  .key("name") // access "name"

// Create a function that changes the street `name`
const capitalizeName = _name.modify(String.capitalize)

const newEmployee = capitalizeName(employee) // ✨

// Instead of 👇
const newEmployee = {
  ...employee,
  company: {
    ...employee.company,
    address: {
      ...employee.company.address,
      street: {
        ...employee.company.address.street,
        name: String.capitalize(employee.company.address.street.name)
      }
    }
  }
}

Needless to say, this is a huge deal. And it works out-of-the-box with Schema ⚡️

Differ

A new Differ module allows extracting patches from multiple schema values.

Check out the PR here, it's based on JSON Patch (RFC 6902).

It gives you a reliable way to converge schemas to the same value 🪄

IndexedDb

This is not from v4, but (hopefully) even sooner 🔜

Check out the IndexedDb PR (made by me 👋)

This module abstracts away the confusion of the IndexedDb API into a TypeScript-friendly Drizzle-like API:

Effect.gen(function*() {
  const api = yield* Db.getQueryBuilder

  const addedKey = yield* api.from("person").insert({
    firstName: "John",
    lastName: "Doe",
    age: 30
  })

  const data = yield* api.from("person").select()
}).pipe(provideDb(Db))

The above is all IndexedDb, but it looks "like SQL", with Schema defining the structure of your tables.

And it's all type safe, as type safe as it gets ✨

XState v6

A bunch of work is happening also on XState (PR for XState v6).

There is a discussion open on Github with some proposed ideas 👀

A few things I am looking forward for:

  • State-specific context ("typestates")
  • Typed errors in actors
  • Unified enqueue API

Of course, I plan to directly contribute to some of the above. This is going to be huge 🫡

Next 16

Next.js Conf is coming this October, and Next 16 with it.

Every major release of Next brings some interesting features (and challenges, as I jump in to migrate my codebase(s)).

Drizzle v1

Another milestone coming soon-ish is Drizzle v1.

This is a major rewrite, which (usually) means a huge jump in everything 🙌

Bonus: TypeScript Go

Do not forget about TypeScript Go.

This will come later on (TypeScript v7?), but it's no doubt going to change everything. Be excited! 🎉


Meanwhile, AI is seriously getting serious for writing code (alongside you, of course).

You can instruct agents to speed up development on all fronts, especially if you know what the AI is doing. Don't miss out on this 👀

See you next 👋

Start here.

Every week I dive headfirst into a topic, uncovering every hidden nook and shadow, to deliver you the most interesting insights

Not convinced? Well, let me tell you more about it