@threadplane/ag-ui

One adapter. Eight backends.

Build an Angular agent UI on any AG-UI-compatible runtime โ€” CrewAI, Mastra, Microsoft Agent Framework, AG2, Pydantic AI, AWS Strands, CopilotKit, or LangGraph fronted by AG-UI. Same Agent contract and chat surface; runtime-specific history and checkpoint behavior stays with the backend.

Get startedView source

Talking to LangGraph Platform directly? See Choosing an adapter.

MITAngular 20+AG-UI protocol

Already on LangGraph? See @threadplane/langgraph for native streaming, checkpoints, and the typed LangGraph SDK path.

Runtime choice

Pick a backend. Keep the UI.

The AG-UI protocol decouples your agent runtime from your front-end. @threadplane/ag-ui wraps any AG-UI AbstractAgent into the runtime-neutral Agent contract that @threadplane/chat consumes โ€” so the same Angular components ship against eight different runtimes.

  • Stream from Python, .NET, or TypeScript backends โ€” same chat primitives
  • Swap runtimes without rewriting the UI layer
  • Protocol-first: tool calls, state deltas, citations all standardized
  • Future runtimes that ship AG-UI work day-one
LangGraph
Python or TS via AG-UI.
Mastra
TypeScript-native.
CrewAI / AG2
Multi-agent crews.
Browse the AG-UI protocol โ†’
LangGraph
Python / TS
CrewAI
Python
Mastra
TypeScript
MS Agent Framework
.NET / Python
AG2
Python
Pydantic AI
Python
AWS Strands
Python
CopilotKit runtime
TypeScript

Same primitives

Drop-in for everything @threadplane/chat ships.

provideAgent registers an AG-UI client and exposes the same Agent contract that @threadplane/langgraph provides. Chat rendering, status, tool calls, generative UI, and citations use the same Angular primitives; durable checkpointed threads and history depend on the backend protocol, so use @threadplane/langgraph when you need the native LangGraph thread API.

  • provideAgent + injectAgent โ€” same names across adapters
  • Shared Agent contract: messages() / status() / reload()
  • Same A2UI surface, themes, and citations rendering
  • MockAgentTransport works the same way for tests
provideAgent
AG-UI wiring.
injectAgent()
No-args helper.
@threadplane/chat
Same components.
API reference โ†’
app.config.ts
import { provideAgent, injectAgent } from '@threadplane/ag-ui';
import { ChatComponent } from '@threadplane/chat';

// app.config.ts
export const appConfig: ApplicationConfig = {
  providers: [
    provideAgent({
      url: 'https://your.agent.endpoint',
    }),
  ],
};

// component
@Component({
  imports: [ChatComponent],
  template: `<chat [agent]="agent" />`,
})
export class App {
  protected readonly agent = injectAgent();
}

Stop stalling on agentic Angular.

Install the framework, read the docs, and have a streaming chat in your app this afternoon.

LangGraph demo โ†’AG-UI demo โ†’See each feature in action โ†’

Most packages are MIT ยท @threadplane/chat requires a production license ยท App telemetry off by default