<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Documentation on Go Micro</title><link>https://go-micro.dev/docs/index.html</link><description>Recent content in Documentation on Go Micro</description><generator>Hugo</generator><language>en</language><atom:link href="https://go-micro.dev/docs/index.xml" rel="self" type="application/rss+xml"/><item><title>AI Integration</title><link>https://go-micro.dev/docs/ai-integration.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/ai-integration.html</guid><description>&lt;h1 id="ai-integration"&gt;AI Integration&lt;a class="td-heading-self-link" href="#ai-integration" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Go Micro is an agent harness and service framework for Go. Every service you build can become an AI-callable tool, every agent runs as a service with model/memory/guardrails around it, and flows orchestrate the deterministic parts. This page explains how the services → agents → workflows lifecycle fits together.&lt;/p&gt;
&lt;img src="https://go-micro.dev/images/generated/mcp-agent.jpg" alt="AI integration architecture" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" /&gt;
&lt;h2 id="the-stack"&gt;The Stack&lt;a class="td-heading-self-link" href="#the-stack" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Services → write Go handlers, register with the framework
 ↓
Registry → automatic discovery for services, agents, and flows
 ↓
Gateways → micro api (HTTP→RPC), micro mcp (tools), micro a2a (agents)
 ↓
ai.Tools → discovers services + executes RPCs programmatically
 ↓
ai.Model → calls LLMs (Anthropic, OpenAI, Gemini, Atlas Cloud, ...)
 ↓
Agents → service-backed model loop with memory, guardrails, plan/delegate
 ↓
Flows → durable deterministic steps that can dispatch to agents
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Every layer is optional. You can use Go Micro as a service framework without AI. You can use the &lt;code&gt;ai&lt;/code&gt; package without MCP. But when you stack them, you get one runtime where services become tools, agents are reachable services, and workflows coordinate the predictable parts.&lt;/p&gt;</description></item><item><title>Analysis: Removing Reflection from go-micro</title><link>https://go-micro.dev/docs/reflection-removal-analysis.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/reflection-removal-analysis.html</guid><description>&lt;p&gt;&lt;strong&gt;Date&lt;/strong&gt;: 2026-02-03&lt;br&gt;
&lt;strong&gt;Author&lt;/strong&gt;: GitHub Copilot&lt;br&gt;
&lt;strong&gt;Status&lt;/strong&gt;: RECOMMENDATION - DO NOT PROCEED&lt;/p&gt;
&lt;h2 id="executive-summary"&gt;Executive Summary&lt;a class="td-heading-self-link" href="#executive-summary" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;After comprehensive analysis of the go-micro codebase and comparison with livekit/psrpc (referenced as an example of a reflection-free approach), &lt;strong&gt;we recommend AGAINST removing reflection from go-micro&lt;/strong&gt;. The architectural differences make this change infeasible without a complete redesign that would:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Break backward compatibility&lt;/strong&gt; - Fundamentally change the API&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lose key advantages&lt;/strong&gt; - Eliminate go-micro&amp;rsquo;s &amp;ldquo;any struct as handler&amp;rdquo; flexibility&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Increase complexity&lt;/strong&gt; - Require extensive code generation and boilerplate&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provide minimal benefit&lt;/strong&gt; - Performance gains would be negligible for most use cases (~10-20% in specific hot paths)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="current-reflection-usage"&gt;Current Reflection Usage&lt;a class="td-heading-self-link" href="#current-reflection-usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="locations"&gt;Locations&lt;a class="td-heading-self-link" href="#locations" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Reflection is used extensively in:&lt;/p&gt;</description></item><item><title>Architecture Decision Records</title><link>https://go-micro.dev/docs/architecture.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/architecture.html</guid><description>&lt;p&gt;Documentation of architectural decisions made in Go Micro, following the ADR pattern.&lt;/p&gt;
&lt;h2 id="what-are-adrs"&gt;What are ADRs?&lt;a class="td-heading-self-link" href="#what-are-adrs" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Architecture Decision Records (ADRs) capture important architectural decisions along with their context and consequences. They help understand why certain design choices were made.&lt;/p&gt;
&lt;h2 id="index"&gt;Index&lt;a class="td-heading-self-link" href="#index" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="available"&gt;Available&lt;a class="td-heading-self-link" href="#available" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;ADR-001: Plugin Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;ADR-004: mDNS as Default Registry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;ADR-009: Progressive Configuration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="planned"&gt;Planned&lt;a class="td-heading-self-link" href="#planned" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Core Design&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ADR-002: Interface-First Design&lt;/li&gt;
&lt;li&gt;ADR-003: Default Implementations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Service Discovery&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Broker</title><link>https://go-micro.dev/docs/broker.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/broker.html</guid><description>&lt;img src="https://go-micro.dev/images/generated/broker.jpg" alt="Broker" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" /&gt;
&lt;p&gt;The broker provides pub/sub messaging for Go Micro services.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;a class="td-heading-self-link" href="#features" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Publish messages to topics&lt;/li&gt;
&lt;li&gt;Subscribe to topics&lt;/li&gt;
&lt;li&gt;Multiple broker implementations&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="implementations"&gt;Implementations&lt;a class="td-heading-self-link" href="#implementations" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Supported brokers include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP (default)&lt;/li&gt;
&lt;li&gt;NATS (&lt;code&gt;go-micro.dev/v6/broker/nats&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;RabbitMQ (&lt;code&gt;go-micro.dev/v6/broker/rabbitmq&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Memory (&lt;code&gt;go-micro.dev/v6/broker/memory&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plugins are scoped under &lt;code&gt;go-micro.dev/v6/broker/&amp;lt;plugin&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Configure the broker in code or via environment variables.&lt;/p&gt;
&lt;h2 id="example-usage"&gt;Example Usage&lt;a class="td-heading-self-link" href="#example-usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s how to use the broker in your Go Micro service:&lt;/p&gt;</description></item><item><title>Client/Server</title><link>https://go-micro.dev/docs/client-server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/client-server.html</guid><description>&lt;p&gt;Go Micro uses a client/server model for RPC communication between services.&lt;/p&gt;
&lt;h2 id="client"&gt;Client&lt;a class="td-heading-self-link" href="#client" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The client is used to make requests to other services.&lt;/p&gt;
&lt;h2 id="server"&gt;Server&lt;a class="td-heading-self-link" href="#server" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The server handles incoming requests.&lt;/p&gt;
&lt;p&gt;Both client and server are pluggable and support middleware wrappers for additional functionality.&lt;/p&gt;
&lt;h2 id="example-usage"&gt;Example Usage&lt;a class="td-heading-self-link" href="#example-usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s how to define a simple handler and register it with a Go Micro server:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Greeter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Greeter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello, world!&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;greeter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RegisterHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Greeter&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Commercial Support</title><link>https://go-micro.dev/docs/support.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/support.html</guid><description>&lt;p&gt;Go Micro is free and open source. There are two ways to get help: the community, and commercial support.&lt;/p&gt;
&lt;h2 id="community-support-free"&gt;Community support (free)&lt;a class="td-heading-self-link" href="#community-support-free" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt; — &lt;a href="https://go-micro.dev/docs/index.html"&gt;/docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Examples&lt;/strong&gt; — &lt;a href="https://github.com/micro/go-micro/tree/master/examples"&gt;github.com/micro/go-micro/tree/master/examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bugs &amp;amp; features&lt;/strong&gt; — &lt;a href="https://github.com/micro/go-micro/issues"&gt;github.com/micro/go-micro/issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Questions&lt;/strong&gt; — open a &lt;a href="https://github.com/micro/go-micro/issues/new?template=question.md"&gt;Question&lt;/a&gt; issue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Community support is best-effort, from maintainers and contributors, with no response-time guarantees.&lt;/p&gt;
&lt;h2 id="commercial-support"&gt;Commercial support&lt;a class="td-heading-self-link" href="#commercial-support" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re running Go Micro in production — or building agents and services on it and want a hand — paid support and consulting are available directly from the maintainer. This is what keeps the project maintained.&lt;/p&gt;</description></item><item><title>Configuration</title><link>https://go-micro.dev/docs/config.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/config.html</guid><description>&lt;img src="https://go-micro.dev/images/generated/config.jpg" alt="Configuration" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" /&gt;
&lt;p&gt;Go Micro follows a progressive configuration model so you can start with zero setup and layer in complexity only when needed.&lt;/p&gt;
&lt;h2 id="levels-of-configuration"&gt;Levels of Configuration&lt;a class="td-heading-self-link" href="#levels-of-configuration" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Zero Config (Defaults)
&lt;ul&gt;
&lt;li&gt;mDNS registry, HTTP transport, in-memory broker/store&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Environment Variables
&lt;ul&gt;
&lt;li&gt;Override core components without code changes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Code Options
&lt;ul&gt;
&lt;li&gt;Fine-grained control via functional options&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;External Sources (Future / Plugins)
&lt;ul&gt;
&lt;li&gt;Configuration loaded from files, vaults, or remote services&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="core-environment-variables"&gt;Core Environment Variables&lt;a class="td-heading-self-link" href="#core-environment-variables" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Component&lt;/th&gt;
					&lt;th&gt;Variable&lt;/th&gt;
					&lt;th&gt;Example&lt;/th&gt;
					&lt;th&gt;Purpose&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Registry&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_REGISTRY&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_REGISTRY=consul&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select registry implementation&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Registry Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_REGISTRY_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_REGISTRY_ADDRESS=127.0.0.1:8500&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Point to registry service&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Broker&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_BROKER&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_BROKER=nats&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select broker implementation&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Broker Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_BROKER_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_BROKER_ADDRESS=nats://localhost:4222&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Broker endpoint&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Transport&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_TRANSPORT&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_TRANSPORT=nats&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select transport implementation&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Transport Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_TRANSPORT_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_TRANSPORT_ADDRESS=nats://localhost:4222&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Transport endpoint&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Store&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE=postgres&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select store implementation&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Store Database&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_DATABASE&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_DATABASE=app&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Logical database name&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Store Table&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_TABLE&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_TABLE=records&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Default table/collection&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Store Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_ADDRESS=postgres://user:pass@localhost:5432/app?sslmode=disable&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Connection string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Server Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_SERVER_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_SERVER_ADDRESS=:8080&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Bind address for RPC server&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="example-switching-components-via-env-vars"&gt;Example: Switching Components via Env Vars&lt;a class="td-heading-self-link" href="#example-switching-components-via-env-vars" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Use NATS for broker and transport, Consul for registry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;MICRO_BROKER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nats
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;MICRO_TRANSPORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nats
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;MICRO_REGISTRY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;consul
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;MICRO_REGISTRY_ADDRESS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;127.0.0.1:8500
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Run your service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go run main.go
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;No code changes required. The framework internally wires the selected implementations.&lt;/p&gt;</description></item><item><title>Contributing</title><link>https://go-micro.dev/docs/contributing.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/contributing.html</guid><description>&lt;p&gt;This is a rendered copy of the repository &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; for convenient access via the documentation site.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro welcomes contributions of all kinds: code, documentation, examples, and plugins.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;a class="td-heading-self-link" href="#quick-start" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/micro/go-micro.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; go-micro
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go mod download
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go &lt;span class="nb"&gt;test&lt;/span&gt; ./...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="process"&gt;Process&lt;a class="td-heading-self-link" href="#process" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Fork and create a feature branch&lt;/li&gt;
&lt;li&gt;Make focused changes with tests&lt;/li&gt;
&lt;li&gt;Run linting and full test suite&lt;/li&gt;
&lt;li&gt;Open a PR describing motivation and approach&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="commit-format"&gt;Commit Format&lt;a class="td-heading-self-link" href="#commit-format" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Use conventional commits:&lt;/p&gt;</description></item><item><title>Deployment</title><link>https://go-micro.dev/docs/deployment.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/deployment.html</guid><description>&lt;h1 id="deploying-go-micro-services"&gt;Deploying Go Micro Services&lt;a class="td-heading-self-link" href="#deploying-go-micro-services" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;img src="https://go-micro.dev/images/generated/deployment.jpg" alt="Go Micro deployment" style="width: 100%; border-radius: 8px; margin-bottom: 1.5rem;" /&gt;
&lt;p&gt;This guide covers deploying go-micro services to a Linux server using systemd.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;go-micro provides a clear workflow from development to production:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Stage&lt;/th&gt;
					&lt;th&gt;Command&lt;/th&gt;
					&lt;th&gt;Purpose&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Develop&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro run&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Local dev with hot reload and API gateway&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Build&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro build&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Compile production binaries for any target OS&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Deploy&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro deploy&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Push binaries to a remote Linux server via SSH + systemd&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro server&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Optional production web UI with JWT auth and user management&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Each command has a distinct role — they don&amp;rsquo;t overlap:&lt;/p&gt;</description></item><item><title>Getting Started</title><link>https://go-micro.dev/docs/getting-started.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/getting-started.html</guid><description>&lt;img src="https://go-micro.dev/images/generated/getting-started.jpg" alt="Getting started with Go Micro" style="width: 100%; border-radius: 8px; margin-bottom: 1.5rem;" /&gt;
&lt;p&gt;Go Micro has three core abstractions:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Abstraction&lt;/th&gt;
					&lt;th&gt;What&lt;/th&gt;
					&lt;th&gt;Constructor&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Service&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Capability — endpoints, data, business logic&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro.NewService(&amp;quot;task&amp;quot;)&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Agent&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Intelligence — manages services with an LLM&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro.NewAgent(&amp;quot;task-mgr&amp;quot;)&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Flow&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Orchestration — event-driven LLM triggers&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro.NewFlow(&amp;quot;onboard&amp;quot;)&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="td-heading-self-link" href="#prerequisites" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Go 1.24+&lt;/strong&gt; for development. The &lt;code&gt;curl&lt;/code&gt; install below gives you the &lt;code&gt;micro&lt;/code&gt; binary without Go, but &lt;code&gt;micro run&lt;/code&gt; compiles your services, so you&amp;rsquo;ll want Go installed to build them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No LLM provider key is required&lt;/strong&gt; for the first run below. Add an Anthropic, OpenAI, Gemini, or other provider key only when you reach the provider-backed generation and chat steps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="install"&gt;Install&lt;a class="td-heading-self-link" href="#install" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Binary (no Go required)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://go-micro.dev/install.sh &lt;span class="p"&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Or with Go&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go install go-micro.dev/v6/cmd/micro@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If install or shell setup fails, start with &lt;a href="https://go-micro.dev/docs/guides/install-troubleshooting.html"&gt;Install troubleshooting&lt;/a&gt; to verify the binary installer or &lt;code&gt;go install&lt;/code&gt;, &lt;code&gt;PATH&lt;/code&gt;, &lt;code&gt;micro --version&lt;/code&gt;, and the no-secret smoke path.&lt;/p&gt;</description></item><item><title>Go Micro Roadmap</title><link>https://go-micro.dev/docs/roadmap-2026.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/roadmap-2026.html</guid><description>&lt;h1 id="roadmap"&gt;Roadmap&lt;a class="td-heading-self-link" href="#roadmap" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;This 2026 &amp;ldquo;AI-Native Era&amp;rdquo; roadmap has been superseded. Go Micro now has a
single, current roadmap.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;→ &lt;a href="https://go-micro.dev/docs/roadmap.html"&gt;Read the roadmap&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Hosting</title><link>https://go-micro.dev/docs/hosting.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/hosting.html</guid><description>&lt;h1 id="hosting-go-micro-services"&gt;Hosting Go Micro Services&lt;a class="td-heading-self-link" href="#hosting-go-micro-services" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This document outlines what hosting looks like for go-micro services, the options available today, and what an ideal hosting platform would provide.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro services are compiled Go binaries that communicate via RPC and event-driven messaging. Hosting them requires infrastructure that supports service discovery, inter-service communication, persistent storage, and configuration management. Because go-micro uses a pluggable architecture, the hosting environment can range from a single VPS to a fully orchestrated cluster.&lt;/p&gt;</description></item><item><title>Micro Server (Optional)</title><link>https://go-micro.dev/docs/server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/server.html</guid><description>&lt;p&gt;The Micro server is an optional web dashboard and authenticated API gateway for production environments. It provides a secure entrypoint for discovering and interacting with services that are already running (e.g., managed by systemd via &lt;code&gt;micro deploy&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;micro server&lt;/code&gt; does not build, run, or watch services.&lt;/strong&gt; It only discovers services via the registry and provides a UI/API to interact with them.&lt;/p&gt;
&lt;h2 id="micro-server-vs-micro-run"&gt;micro server vs micro run&lt;a class="td-heading-self-link" href="#micro-server-vs-micro-run" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;&lt;code&gt;micro run&lt;/code&gt;&lt;/th&gt;
					&lt;th&gt;&lt;code&gt;micro server&lt;/code&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Purpose&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Local development&lt;/td&gt;
					&lt;td&gt;Production dashboard&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Builds services&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Runs services&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (as child processes)&lt;/td&gt;
					&lt;td&gt;No (discovers already-running services)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Hot reload&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Authentication&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (default &lt;code&gt;admin&lt;/code&gt;/&lt;code&gt;micro&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;Yes (default &lt;code&gt;admin&lt;/code&gt;/&lt;code&gt;micro&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Scopes&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (&lt;code&gt;/auth/scopes&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;Yes (&lt;code&gt;/auth/scopes&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Full gateway UI with auth, scopes, agent&lt;/td&gt;
					&lt;td&gt;Full dashboard with API explorer, logs, user/token management&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;When to use&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Day-to-day development&lt;/td&gt;
					&lt;td&gt;Deployed environments, shared servers&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For local development, use &lt;a href="https://go-micro.dev/docs/guides/micro-run.html"&gt;&lt;code&gt;micro run&lt;/code&gt;&lt;/a&gt; instead.&lt;/p&gt;</description></item><item><title>Model Context Protocol (MCP)</title><link>https://go-micro.dev/docs/mcp.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/mcp.html</guid><description>&lt;p&gt;Go Micro provides built-in support for the &lt;a href="https://modelcontextprotocol.io/"&gt;Model Context Protocol (MCP)&lt;/a&gt;, enabling AI agents like Claude to discover and interact with your microservices as tools.&lt;/p&gt;
&lt;img src="https://go-micro.dev/images/generated/mcp-agent.jpg" alt="AI agent calling microservices via MCP" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" /&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;MCP gateway automatically exposes your microservices as AI-accessible tools through:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Automatic service discovery&lt;/strong&gt; via the registry&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic tool generation&lt;/strong&gt; from service endpoints&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stdio transport&lt;/strong&gt; for local AI tools (Claude Code, etc.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP/SSE transport&lt;/strong&gt; for web-based agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic documentation extraction&lt;/strong&gt; from Go comments&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;a class="td-heading-self-link" href="#quick-start" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="1-add-documentation-to-your-service"&gt;1. Add Documentation to Your Service&lt;a class="td-heading-self-link" href="#1-add-documentation-to-your-service" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Simply write Go doc comments on your handler methods:&lt;/p&gt;</description></item><item><title>Observability</title><link>https://go-micro.dev/docs/observability.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/observability.html</guid><description>&lt;img src="https://go-micro.dev/images/generated/observability.jpg" alt="Observability" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" /&gt;
&lt;p&gt;Observability in Go Micro spans logs, metrics, and traces. The goal is rapid insight into service behavior with minimal configuration.&lt;/p&gt;
&lt;h2 id="core-principles"&gt;Core Principles&lt;a class="td-heading-self-link" href="#core-principles" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Structured Logs – Machine-parsable, leveled output&lt;/li&gt;
&lt;li&gt;Metrics – Quantitative trends (counters, gauges, histograms)&lt;/li&gt;
&lt;li&gt;Traces – Request flows across service boundaries&lt;/li&gt;
&lt;li&gt;Correlation – IDs flowing through all three signals&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="logging"&gt;Logging&lt;a class="td-heading-self-link" href="#logging" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The default logger can be replaced. Use env vars to adjust level:&lt;/p&gt;</description></item><item><title>Performance Considerations</title><link>https://go-micro.dev/docs/performance.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/performance.html</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;go-micro is designed for &lt;strong&gt;developer productivity and ease of use&lt;/strong&gt; while maintaining good performance for most use cases. This document explains the performance characteristics and trade-offs.&lt;/p&gt;
&lt;h2 id="reflection-usage"&gt;Reflection Usage&lt;a class="td-heading-self-link" href="#reflection-usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;go-micro uses Go&amp;rsquo;s reflection package to enable its core feature: &lt;strong&gt;registering any Go struct as a service handler&lt;/strong&gt; without code generation or boilerplate.&lt;/p&gt;
&lt;h3 id="why-reflection"&gt;Why Reflection?&lt;a class="td-heading-self-link" href="#why-reflection" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Simple handler registration - no proto files, no code generation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GreeterService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;GreeterService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SayHello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello &amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;GreeterService&lt;/span&gt;&lt;span class="p"&gt;{}))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This simplicity is &lt;strong&gt;only possible with reflection&lt;/strong&gt;. Alternative approaches (like gRPC or psrpc) require:&lt;/p&gt;</description></item><item><title>Plugins</title><link>https://go-micro.dev/docs/plugins.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/plugins.html</guid><description>&lt;p&gt;Plugins are scoped under each interface directory within this repository. To use a plugin, import it directly from the corresponding interface subpackage and pass it to your service via options.&lt;/p&gt;
&lt;p&gt;Common interfaces and locations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registry: &lt;code&gt;go-micro.dev/v6/registry/*&lt;/code&gt; (e.g. &lt;code&gt;consul&lt;/code&gt;, &lt;code&gt;etcd&lt;/code&gt;, &lt;code&gt;nats&lt;/code&gt;, &lt;code&gt;mdns&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Broker: &lt;code&gt;go-micro.dev/v6/broker/*&lt;/code&gt; (e.g. &lt;code&gt;nats&lt;/code&gt;, &lt;code&gt;rabbitmq&lt;/code&gt;, &lt;code&gt;http&lt;/code&gt;, &lt;code&gt;memory&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Transport: &lt;code&gt;go-micro.dev/v6/transport/*&lt;/code&gt; (e.g. &lt;code&gt;nats&lt;/code&gt;, default &lt;code&gt;http&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Server: &lt;code&gt;go-micro.dev/v6/server/*&lt;/code&gt; (e.g. &lt;code&gt;grpc&lt;/code&gt; for native gRPC compatibility)&lt;/li&gt;
&lt;li&gt;Client: &lt;code&gt;go-micro.dev/v6/client/*&lt;/code&gt; (e.g. &lt;code&gt;grpc&lt;/code&gt; for native gRPC compatibility)&lt;/li&gt;
&lt;li&gt;Store: &lt;code&gt;go-micro.dev/v6/store/*&lt;/code&gt; (e.g. &lt;code&gt;postgres&lt;/code&gt;, &lt;code&gt;mysql&lt;/code&gt;, &lt;code&gt;nats-js-kv&lt;/code&gt;, &lt;code&gt;memory&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Auth, Cache, etc. follow the same pattern under their respective directories.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="registry-examples"&gt;Registry Examples&lt;a class="td-heading-self-link" href="#registry-examples" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Consul:&lt;/p&gt;</description></item><item><title>Quick Start</title><link>https://go-micro.dev/docs/quickstart.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/quickstart.html</guid><description>&lt;p&gt;Get up and running with go-micro in under 5 minutes.&lt;/p&gt;
&lt;h2 id="install"&gt;Install&lt;a class="td-heading-self-link" href="#install" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The recommended way is the precompiled binary — no Go toolchain required:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://go-micro.dev/install.sh &lt;span class="p"&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Or, if you have Go and prefer to build from source:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go install go-micro.dev/v6/cmd/micro@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the installer finishes but your shell cannot find &lt;code&gt;micro&lt;/code&gt;, open &lt;a href="https://go-micro.dev/docs/guides/install-troubleshooting.html"&gt;Install troubleshooting&lt;/a&gt; before creating your first service.&lt;/p&gt;
&lt;h2 id="create-your-first-service"&gt;Create Your First Service&lt;a class="td-heading-self-link" href="#create-your-first-service" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create a new service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro new helloworld
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; helloworld
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Review the generated code&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls -la
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Run locally with hot reload&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro run
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Test it&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X POST http://localhost:8080/api/helloworld/Helloworld.Call &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;name&amp;#34;: &amp;#34;World&amp;#34;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="next-steps"&gt;Next Steps&lt;a class="td-heading-self-link" href="#next-steps" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You now have the service half of the services → agents → workflows lifecycle running locally. Keep the on-ramp going in this order:&lt;/p&gt;</description></item><item><title>Registry</title><link>https://go-micro.dev/docs/registry.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/registry.html</guid><description>&lt;img src="https://go-micro.dev/images/generated/registry.jpg" alt="Registry" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" /&gt;
&lt;p&gt;The registry is responsible for service discovery in Go Micro. It allows services to register themselves and discover other services.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;a class="td-heading-self-link" href="#features" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Service registration and deregistration&lt;/li&gt;
&lt;li&gt;Service lookup&lt;/li&gt;
&lt;li&gt;Watch for changes&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="implementations"&gt;Implementations&lt;a class="td-heading-self-link" href="#implementations" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro supports multiple registry backends, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MDNS (default)&lt;/li&gt;
&lt;li&gt;Consul&lt;/li&gt;
&lt;li&gt;Etcd&lt;/li&gt;
&lt;li&gt;NATS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can configure the registry when initializing your service.&lt;/p&gt;
&lt;h2 id="plugins-location"&gt;Plugins Location&lt;a class="td-heading-self-link" href="#plugins-location" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Registry plugins live in this repository under &lt;code&gt;go-micro.dev/v6/registry/&amp;lt;plugin&amp;gt;&lt;/code&gt; (e.g., &lt;code&gt;consul&lt;/code&gt;, &lt;code&gt;etcd&lt;/code&gt;, &lt;code&gt;nats&lt;/code&gt;). Import the desired package and pass it via &lt;code&gt;micro.Registry(...)&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Roadmap</title><link>https://go-micro.dev/docs/roadmap.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/roadmap.html</guid><description>&lt;p&gt;Go Micro is a framework for building &lt;strong&gt;agents and services&lt;/strong&gt; in Go. An agent is a distributed system — it discovers services, calls them, holds state, and recovers from failure — so building an agent is building a service. The roadmap has two jobs: make &lt;strong&gt;agentic development&lt;/strong&gt; excellent, and make the &lt;strong&gt;developer experience&lt;/strong&gt; around it excellent. Nothing else.&lt;/p&gt;
&lt;h2 id="where-we-are-v6"&gt;Where we are (v6)&lt;a class="td-heading-self-link" href="#where-we-are-v6" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The foundation is in place:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Services&lt;/strong&gt; — register, discover, RPC, events; every endpoint is automatically an MCP tool.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agents&lt;/strong&gt; — a model with memory and tools that manages services, with &lt;code&gt;plan&lt;/code&gt;, &lt;code&gt;delegate&lt;/code&gt;, guardrails (&lt;code&gt;MaxSteps&lt;/code&gt;, &lt;code&gt;LoopLimit&lt;/code&gt;, &lt;code&gt;ApproveTool&lt;/code&gt;), tool-execution middleware (&lt;code&gt;WrapTool&lt;/code&gt;), run metadata, checkpoint/resume, and OpenTelemetry run spans built in.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flows&lt;/strong&gt; — durable, event-driven workflows: ordered steps that checkpoint and resume after a crash.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interop&lt;/strong&gt; — the MCP gateway (services as tools) and the A2A gateway (agents as agents, both directions, including A2A streaming, push notifications, and multi-turn continuation), both generated from the registry; x402 for paid tools.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secure by default&lt;/strong&gt; — TLS verification on, state scoped per component.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="principles"&gt;Principles&lt;a class="td-heading-self-link" href="#principles" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These constrain everything below:&lt;/p&gt;</description></item><item><title>Store</title><link>https://go-micro.dev/docs/store.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/store.html</guid><description>&lt;p&gt;The store provides a pluggable interface for data storage in Go Micro.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;a class="td-heading-self-link" href="#features" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Key-value storage&lt;/li&gt;
&lt;li&gt;Multiple backend support&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="implementations"&gt;Implementations&lt;a class="td-heading-self-link" href="#implementations" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Supported stores include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memory (default)&lt;/li&gt;
&lt;li&gt;File (&lt;code&gt;go-micro.dev/v6/store/file&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;MySQL (&lt;code&gt;go-micro.dev/v6/store/mysql&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Postgres (&lt;code&gt;go-micro.dev/v6/store/postgres&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;NATS JetStream KV (&lt;code&gt;go-micro.dev/v6/store/nats-js-kv&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plugins are scoped under &lt;code&gt;go-micro.dev/v6/store/&amp;lt;plugin&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Configure the store in code or via environment variables.&lt;/p&gt;
&lt;h2 id="example-usage"&gt;Example Usage&lt;a class="td-heading-self-link" href="#example-usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s how to use the store in your Go Micro service:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/store&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;store-example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Write a record&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Record&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="nb"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;bar&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)});&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Read a record&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;recs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Read value: %s&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;recs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configure-a-specific-store-in-code"&gt;Configure a specific store in code&lt;a class="td-heading-self-link" href="#configure-a-specific-store-in-code" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Postgres:&lt;/p&gt;</description></item><item><title>Summary: Reflection Removal Evaluation</title><link>https://go-micro.dev/docs/reflection-evaluation-summary.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/reflection-evaluation-summary.html</guid><description>&lt;p&gt;&lt;strong&gt;Issue&lt;/strong&gt;: [FEATURE] Remove reflect&lt;br&gt;
&lt;strong&gt;Date&lt;/strong&gt;: 2026-02-03&lt;br&gt;
&lt;strong&gt;Status&lt;/strong&gt;: EVALUATION COMPLETE - RECOMMENDATION AGAINST REMOVAL&lt;/p&gt;
&lt;h2 id="executive-summary"&gt;Executive Summary&lt;a class="td-heading-self-link" href="#executive-summary" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;After comprehensive analysis of go-micro&amp;rsquo;s reflection usage and comparison with livekit/psrpc (the referenced example), &lt;strong&gt;we recommend AGAINST removing reflection from go-micro&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="key-findings"&gt;Key Findings&lt;a class="td-heading-self-link" href="#key-findings" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="1-reflection-is-fundamental-to-go-micros-architecture"&gt;1. Reflection is Fundamental to go-micro&amp;rsquo;s Architecture&lt;a class="td-heading-self-link" href="#1-reflection-is-fundamental-to-go-micros-architecture" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Reflection enables go-micro&amp;rsquo;s core value proposition:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Simple, idiomatic Go - no proto files, no code generation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;MyService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;MyService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SayHello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello &amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;MyService&lt;/span&gt;&lt;span class="p"&gt;{}))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This &lt;strong&gt;requires&lt;/strong&gt; reflection. There is no way to achieve this simplicity with generics or code generation.&lt;/p&gt;</description></item><item><title>TLS Security Migration Guide</title><link>https://go-micro.dev/docs/security_migration.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/security_migration.html</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro v6 verifies TLS certificates by default. This guide is for teams
upgrading from v5, where TLS verification was disabled by default for backward
compatibility.&lt;/p&gt;
&lt;h2 id="current-status-v6"&gt;Current Status (v6)&lt;a class="td-heading-self-link" href="#current-status-v6" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Default Behavior&lt;/strong&gt;: TLS certificate verification is &lt;strong&gt;enabled&lt;/strong&gt; by default
(&lt;code&gt;InsecureSkipVerify: false&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What changed from v5&lt;/strong&gt;: v5 allowed &lt;code&gt;MICRO_TLS_SECURE=true&lt;/code&gt; to opt into
certificate verification. In v6, secure verification is the default and
&lt;code&gt;MICRO_TLS_SECURE&lt;/code&gt; is no longer used.&lt;/p&gt;</description></item><item><title>TLS Security Update - Important Information</title><link>https://go-micro.dev/docs/tls_security_update.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/tls_security_update.html</guid><description>&lt;h2 id="what-changed"&gt;What Changed&lt;a class="td-heading-self-link" href="#what-changed" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro v6 verifies TLS certificates by default. This completes the v5 security
migration where verification was opt-in.&lt;/p&gt;
&lt;h2 id="current-behavior-v6x"&gt;Current Behavior (v6.x)&lt;a class="td-heading-self-link" href="#current-behavior-v6x" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: TLS certificate verification is &lt;strong&gt;enabled&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MICRO_TLS_SECURE&lt;/code&gt; was a v5 opt-in flag and is no longer used.&lt;/li&gt;
&lt;li&gt;For local development with untrusted self-signed certificates, opt out
explicitly with &lt;code&gt;MICRO_TLS_INSECURE=true&lt;/code&gt; or an explicit insecure TLS config.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="production-recommendation"&gt;Production Recommendation&lt;a class="td-heading-self-link" href="#production-recommendation" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For production deployments:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Use CA-signed certificates or distribute your private CA to every host.&lt;/li&gt;
&lt;li&gt;Remove old &lt;code&gt;MICRO_TLS_SECURE&lt;/code&gt; settings from v5-era manifests.&lt;/li&gt;
&lt;li&gt;Do not set &lt;code&gt;MICRO_TLS_INSECURE=true&lt;/code&gt; in production.&lt;/li&gt;
&lt;li&gt;Consider service mesh mTLS (Istio, Linkerd) if certificate lifecycle should be
managed outside the application.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="migration-timeline"&gt;Migration Timeline&lt;a class="td-heading-self-link" href="#migration-timeline" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;v5.x&lt;/strong&gt;: Insecure by default, opt-in security via &lt;code&gt;MICRO_TLS_SECURE=true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;v6.x current&lt;/strong&gt;: Secure by default; use &lt;code&gt;MICRO_TLS_INSECURE=true&lt;/code&gt; only for an
explicit development opt-out.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="documentation"&gt;Documentation&lt;a class="td-heading-self-link" href="#documentation" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;See &lt;a href="https://go-micro.dev/docs/security_migration.html"&gt;SECURITY_MIGRATION.md&lt;/a&gt; for the detailed migration
guide.&lt;/p&gt;</description></item><item><title>Transport</title><link>https://go-micro.dev/docs/transport.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/transport.html</guid><description>&lt;img src="https://go-micro.dev/images/generated/transport.jpg" alt="Transport" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" /&gt;
&lt;p&gt;The transport layer is responsible for communication between services.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;a class="td-heading-self-link" href="#features" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pluggable transport implementations&lt;/li&gt;
&lt;li&gt;Secure and efficient communication&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="implementations"&gt;Implementations&lt;a class="td-heading-self-link" href="#implementations" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Supported transports include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP (default)&lt;/li&gt;
&lt;li&gt;NATS (&lt;code&gt;go-micro.dev/v6/transport/nats&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;gRPC (&lt;code&gt;go-micro.dev/v6/transport/grpc&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Memory (&lt;code&gt;go-micro.dev/v6/transport/memory&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="important-transport-vs-native-grpc"&gt;Important: Transport vs Native gRPC&lt;a class="td-heading-self-link" href="#important-transport-vs-native-grpc" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The gRPC &lt;strong&gt;transport&lt;/strong&gt; uses gRPC as an underlying communication protocol, similar to how NATS or RabbitMQ might be used. It does &lt;strong&gt;not&lt;/strong&gt; provide native gRPC compatibility with tools like &lt;code&gt;grpcurl&lt;/code&gt; or standard gRPC clients generated by &lt;code&gt;protoc&lt;/code&gt;.&lt;/p&gt;</description></item></channel></rss>