How to Migrate from LangChainGo to Genkit Go A developer has published a migration guide for moving Go AI services from LangChainGo to Google's Genkit Go, citing three unfixed defects in the abandoned library: a hardcoded default model (gemini-2.0-flash) that Google has retired, a Google provider built on the end-of-life github.com/google/generative-ai-go SDK, and broken streaming on every current Gemini model. The guide notes that LangChainGo auto-enables streaming whenever a callbacks handler is attached, meaning agents and instrumentation cannot coexist on Gemini today, and provides a concept-by-concept translation table with before-and-after code for the migration. If you built a Go AI service in the last two years, there is a good chance it runs on LangChainGo https://github.com/tmc/langchaingo . It was the obvious choice: the name was familiar, the concepts came straight from Python, and it had the biggest provider catalog in the Go ecosystem. That choice has aged badly. LangChainGo's last release was v0.1.14 in October 2025, its last commit to main was January 2026, and it is still on 0.1.x after three and a half years. Meanwhile the ecosystem moved: models were retired, SDKs were replaced, and APIs changed shape. LangChainGo did not move with them, and parts of it are broken today as a result. Genkit Go https://genkit.dev/docs/go/get-started/ is where that workload belongs now. It is GA, it is on v1.13.1 , and it is actively maintained by Google. This guide is the complete migration path: every LangChainGo concept mapped to its Genkit equivalent, with before and after code for each one. Follow it top to bottom and you can move a real service in an afternoon. If you want the case for why rather than the how , read the companion article: LangChainGo vs Genkit Go: where Genkit shines https://xavidop.me/genkit/2026-09-11-langchaingo-vs-genkit-go/ . Three things in LangChainGo are broken today, and none of them will be fixed, because nobody is upstream to fix them. 1. The default model no longer exists. DefaultOptions in llms/googleai/option.go hardcodes gemini-2.0-flash , which Google retired. A fresh googleai.New ctx with no options fails on the first call: googleapi: Error 404: This model models/gemini-2.0-flash is no longer available. Please update your code to use models/gemini-3.6-flash for the latest features and improvements. 2. The Google provider runs on an end-of-life SDK. llms/googleai imports github.com/google/generative-ai-go , which Google replaced with google.golang.org/genai . Its README is explicit: End-of-Life Date: All support for this repository including bug fixes will permanently end on November 30, 2025 . 3. Streaming is broken on every current Gemini model. Because of that dead SDK, any streaming call through the Google provider fails: error in stream mode: invalid character ' ' looking for beginning of value This fails on gemini-2.5-flash , gemini-3-flash-preview , gemini-3.5-flash and gemini-3.6-flash . Non-streaming calls still work, and the OpenAI provider streams fine, so this is specific to Google on the legacy SDK. This one catches people out, so it is worth knowing before you debug it the hard way. LangChainGo turns on streaming automatically whenever you attach a callbacks handler. From chains/options.go : if opts.StreamingFunc == nil && opts.CallbackHandler = nil { opts.StreamingFunc = func ctx context.Context, chunk byte error { opts.CallbackHandler.HandleStreamingFunc ctx, chunk return nil } } agents/mrkl.go does the same thing. Since streaming is broken, attaching the only supported observability hook is also what breaks your agent. Same agent, same tool, one line different: WITHOUT callbacks handler: err=