2026 Roadmap #2559
Replies: 2 comments 3 replies
-
|
Thanks for sharing this! I'll confess to be quite gutted to here openapi-fetch is being deprecated. I'm still fairly new to it and I haven't had the issues you reported. Perhaps I'm just lucky. I had some questions if I may.
Yup. This is me exactly.
I can't comment for the examples you reference, but the C# ecosystem does have something in the form of NSwag but it's probably less well maintained than openapi-fetch I'd say. One of my motivations for using openapi-fetch with openapi-ts was because there isn't much in terms of SDK generation that I'm aware of that seems superior. I've written about NSwag usage here for reference: https://johnnyreilly.com/generate-typescript-and-csharp-clients-with-nswag
Would you be able to say a little more about this when you get a moment please? I'm curious as to what this might look like. I think I'm also curious as to why this wouldn't fit in openapi-fetch as is? Obviously you're under no obligation to build / maintain openapi-fetch but I'm wondering why everyone building their own would be preferable. I realise I'm writing from ignorance here - no doubt the reasons are excellent! It'd be awesome to understand them better.
This is brilliant news! |
Beta Was this translation helpful? Give feedback.
-
|
Incredibly well written and thoughtful post. I was wondering myself why the activity slowed down, but assumed life got busy between the new (fancy, may I add) job and family. Happy New Year! |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hello from myself and the other maintainers of openapi-typescript! We’ve had a quieter 2025 than expected, so I wanted to share what we’ve been planning for 2026 which involve a few changes we wanted to broadcast:
TL;DR:
With the high points out of the way, we wanted to talk about the thinking and background that led to these decisions.
2025 was the year of npm vulnerabilities
We saw many npm vulnerabilities this year, notably different versions of Shal-Hulud supply chain attacks. openapi-typescript is almost at 2M downloads/week! Which means it’s a target for scammers.
Though security wasn’t originally a top priority for this project, the fact that openapi-typescript still has its original creator as one of the maintainers (me), and is very light on dependencies (for many versions, zero), has contributed to this project having a clean security record (the only known vulns in the project have been in devDeps, such as the documentation website, etc.—nothing consumers would ever install). But in response to all that’s happened, security now is a priority, and we want to continue this project’s clean track record by minimizing surface area, continuing to be hyper-selective on dependency addition, and reducing maintainer strain. We want to do this by focusing on the core: static OpenAPI <> TS integration of openapi-typescript. And improving security by reducing runtime impact.
For a safer, better future of OpenAPI + TypeScript, these all suggest on focusing on openapi-typescript—and only openapi-typescript—for 2026.
2025 was our first full year of growing maintainers
Though we had our first non-Drew maintainer join in 2024, and folks join through the end of 2024, this was the first full calendar year we had 4-5 folks all sharing ownership of the project. We know this hasn’t magically resulted in 5x faster response times, 5x the versions, etc. etc. In complete transparency there were some growing pains! There was some bystander effect. All the maintainers joined are incredible engineers, and it was no fault of their own, rather me (Drew) doing a poor job at organizing and leading maintainers to the correct action and priorities.
As of now, @kerwanp has decided to step down in 2026 as maintainer due to life changes, and the remaining 4—myself, @htunnicliff, @gr2m, and @duncanbeevers, will kick off maintainer (re)commitments in 2026 and work to improve the current process.
So all that said, a huge “thank you” to contributors and participants in issues and PRs for being patient with some new processes, and the parts of project management that didn’t go as well as it could have 💙.
Halting maintenance on the fetch clients (openapi-fetch and friends)
Moving openapi-fetch into maintenance mode (and the other projects built on it) isn’t a decision we take lightly, especially since these projects have been well-received, and also receive a lot of downloads (openapi-fetch is also almost as downloaded as openapi-typescript)! We also don’t want to simply hand them off to an unknown, outside party for the security concerns just mentioned, and break the trust we’ve built over the years. By moving them into maintenance mode, everything will continue to “Just Work” without any risk to consumers, and will give folks time to migrate.
Background & motivation
In addition to the security concerns, there are several related realizations we’ve had over the course of the openapi-fetch project that all point to this being beyond our current ability to maintain:
Fetch clients should be a little more runtime-aware.
openapi-fetch promised to be a “zero-build, zero-runtime” library where plugging it up to OpenAPI TS definitions Just Works™. But we have had myriad issues around folks being confused why default params have to be retyped, why information has to be duplicated over-and-over again, etc., and it really boils down to a consumer misunderstanding around what “zero-runtime” really means. Further, in some instances it increased overall client weight through duplicated information! I (Drew) as an OSS developer, am strongly against the “you’re just holding it wrong” philosophy, recognizing that at a certain point, having many smart software developers being confused about something, means the design should be revisited and improved.
Anecdotally, most consumers if given the choice would take on a build step, and a few more kB over-the-wire if they didn’t have to duplicate information over and over again between their endpoints or maintain annoying openapi-fetch wrappers to house this information.
The takeaway is we believe “zero-build, zero-runtime” in the absolute sense to be a bit of a dead end. However, having a lightweight, performant API SDK is desirable. That is a different project from openapi-fetch (there are dozens of existing solutions today), and this new project is beyond the ability for us to take on at this time.
The ideal stack usecase of openapi-fetch is too disparate.
Let’s take a step back at the global developer communities around APIs. For folks running a TS frontend + TS backend, tRPC is a good choice. Many folks reaching for openapi-fetch, then, often are searching for solutions for TS frontend + non-TS backend (usually). This is such a wide, disjointed cluster of disparate developer communities that spans Go, Ruby on Rails, Python, Elixir/Phoenix, and more. Each individual community has its own rich ecosystem of SDK generation, that openapi-fetch may be barring folks from tapping into. We believe folks can get more benefit out of leaning deeper into their individual communities, than having one-size-fits-all here.
The future of TypeScript may look different.
TypeScript support has an exciting future ahead, between a proposal for ESM to support types and Node.js now running types natively. The exciting thing about software development is that things get easier over time.
In a world where TypeScript execution is now first class, we’d revisit how openapi-fetch works, to the point it would be a different end-project to what it looks like today. But because we don’t have the maintainer resources to focus on runtime, we’ll save that future exploration for tomorrow, and for today, simply declare “openapi-fetch, on its own, is not a complete solution for many folks” and lets the millions of other smart developers solving this problem to help carve the path forward.
Sure, all these points don’t form a complete, clear solution for everyone. They lead to more questions than answers. But we think they all point away from openapi-fetch for the moment, and that’s the realization here.
Migration guides
With all that said, here’s what it practically means for folks:
From openapi-fetch
Though a migration guide is future/TBD, expect to see upcoming guides that explain how to building and maintaining your own local openapi-fetch in your project, which will allow you to customize and maintain it (similar to shadcn, which is a popular UI kit library that is geared around local customization rather than a traditional npm dependency chain). Because openapi-fetch at the end of the day was only a few kB, most folks will have a better experience managing it themselves locally.
From openapi-react-query
This will, unfortunately, be more painful for most folks. But with TanStack Query developing at a rapid pace (and even getting deeper integration into new projects like TanStack Start), we think this will be a better long-term experience for most folks not being the bottleneck to the TanStack ecosystem, with new features often being gated behind our inability to keep pace with those projects.
From swr-openapi
For users of swr-openapi, no migration needed! 🎉 This project will continue to be maintained under @htunnicliff’s stewardship (the original owner/creator—no hands are being changed here, either). Hunter will continue to be a maintainer of openapi-typescript as well, but will take on sole ownership of swr-openapi again. The package name won’t change and versioning will continue, and over the next few months we’ll move the source code back to the the original repo.
opeanpi-typescript 8.0
With the bad news out of the way, we’ll end on good news! Though the roadmap is still TBD as of the time of this post, here are some of the things we’ve talked about, which may or many not make it into the final version (many courtesy of @duncanbeevers who has been leading this effort):
chain["everything"]["in"]["a"]["really"]["annoying"]["way"]. This is essentially taking the --root-types flag, making it first-class, and providing even more utility around this. In fact, in a certain manner of speaking, openapi-fetch’s success may have been due in part to openapi-typescript’s lack of generation options—in a world where more can be generated, users may be able to build bigger and better things than openapi-fetch!There are more ideas, of course, but this is just a small sampler of what could be. Especially as we start 2026 with renewed interest and support for the project.
Thank you!
And of course, a big “thank you” to all contributors, folks that opened or commented on issues, and downloaded and used the project over 2025 (and previous years). Thank you for your patience in some instances where we, the maintainers, haven’t always responded in a quick manner, or unblocked bugfixes and features from shipping. Even for the issues and PRs today we haven’t replied to, just know we hear and see you and are eternally grateful for all the work you continue to put into this project. And we’re writing this post, and focusing efforts, so that ultimately we can be more responsive, and ship versions faster in 2026.
Here’s to a new 2026 of even better tooling for OpenAPI + TypeScript! 💙
Beta Was this translation helpful? Give feedback.
All reactions