To everyone affected by the stainless acquisition:
We’ve been very happy with @speakeasydev for our sdks for years
To this day they are still producing the highest quality sdks.
This is investment advice
At @speakeasydev we generate SDKs, MCP servers, and Terraform providers from the same OpenAPI input.
One contract → many outputs.
Wrote about what changes when you treat OpenAPI as infrastructure: https://t.co/ktq3Ouxkyp
Most teams treat OpenAPI as documentation.
Generate a spec, point Swagger UI at it, done.
But that's leaving 90% of the value on the table.
#OpenAPI#APIs#DeveloperExperience#DevTools
1. Auto-writes OFF
2. Review decisions, not just code
3. Tight feedback loop early, relaxed later
Slowing down early prevents the "almost works but needs extensive cleanup" fatigue.
Full post: https://t.co/0bkDohFIGM
"Vibe coding" has taken over, but it's not how I get consistent results.
If you're tired of cleaning up AI messes, try "AI-Directed Development".
It optimizes for speed to a shippable solution, not just the first solution.
Here is my workflow 🧵👇
#coding#AI#development
Built and shipped a portfolio site in 3 hours.
AI for the design decisions I'd normally agonise over.
Human oversight for the code quality I actually care about.
Wrote about the process and the distinction between "vibe coding" and "AI-directed development" 👇
Unpopular opinion: Parsing OpenAPI in Go has been harder than it needs to be. You usually have to choose between a friendly API that loses data or a raw map that breaks type safety.
We fixed that with speakeasy-api/openapi.
https://t.co/cscJWBNgog
#golang#openapi
I'm thrilled to share a new feature we're shipping in all @speakeasydev TypeScript SDKs: Standalone functions.
Modern web apps tend to bundle large amounts of application code to deliver rich user experiences. This included third-party frameworks, libraries and SDKs. Today's SDKs are very large and their designs and overuse of deep abstractions work against some of the optimisations we see in popular bundlers, such as tree-shaking. Namely, the class-based approach where you instantiate an SDK class and call methods that are attached on various namespaces. This SDK interface is most common but has the adverse effect of instantly bloating a web app with lots of unused code.
Standalone functions are our answer to this problem. We now emit an alternate API in each SDK that is designed specifically for tree-shaking or excluding unused functionality. These functions live alongside the current class-based API that you might already be familiar with. One does not replace the other and they each have their strengths.
The goal is to give developers the right tools for the problems they're solving. If you're interested in reading more about this, check out my post where I dive deeper into the design and impact of using standalone functions.
https://t.co/rphtz4Uj8Z
We're excited to support @MistralAI in their efforts to make their world-class generative AI accessible to developers from every language ecosystem! 🎉
Check out their awesome new Python and TypeScript SDKs powered by Speakeasy 👇
Category creation is part product building part education. @ndimares and @reefbarman realised this early on as we scaled up usage.
Today they've launched an AI-assisted OpenAPI reference site that's best resource ive seen on the space. Really easy to go from 0->1 on building a great API. Everything is example led. Check it out here:
https://t.co/jRNLyNYvmE
https://t.co/fYJQjQlxc9
And thanks to our friends at @inkeep for powering the experience :)
In this post, @reefbarman discusses the evolution of game development and the important role #APIs play in expanding #gaming experiences. Thanks to @HathoraDev for contributing to this post and our #Unity plugin generation design. Come see us at #GDC24! 🎮https://t.co/s3VjnYjIoT
Thank you so much everyone for attending the January 2024 meetup for Golang Insiders!
Huge thanks to @reefbarman and @teivah for the amazing talks and for @speakeasydev for supporting.
I forgot to take a screenshot at the end (whoops) but here's a video of the meetup.
Plans are already in place for the February meetup; it's a short month so need to get moving. Look forward to seeing you all there.
If you have any feedback or any specific talks you'd like to see, let me know and I'll make them happen.
If you enjoy these meet-ups and the community, tell your friends!
There's been a bunch of discourse about @typescript enums being worse than "as const" object literals. I tend to agree with these views but think we need to solve the ergonomics around exporting these values and their types from libs.
Do you think there's a downside to exporting a type that has the same as the "as const" object literal? It's attempting to emulate the good parts of TypeScript enums in how they can be used as values and types.
What about hinting to users that the exported type does in fact represent an "enum"? If you hover over the `ColorChannel` type in the `doSomething` function then it shows up as a string union with no affordance that there's a corresponding object that users can optionally use to access enum members. This is useful because sometimes the string literals are not convenient to write out or create line noise e.g. "application/x-www-form-urlencoded" vs `Mime.URLEncoded`.
I think if we can solve these then we have a true replacement to TypeScript enums.
cc @mattpocockuk@ssalbdivad: I'd love to get your takes on this problem! 🙏
Playground: https://t.co/CwhNSftvhr