Quick Start
Let's build a streaming chat UI with @threadplane/chat in 5 minutes.
Angular 20+ project with an agent provider configured. See Agent Installation if you need help.
The provider steps below assume a running LangGraph server at http://localhost:2024. If you don't have one, jump to Run with no backend โ mockAgent() drives the UI with canned messages so you can see <chat> render before wiring a real agent.
Evaluating? No license needed โ the chat runs without a token (with a one-time advisory console warning). Shipping commercially? See Installation for license activation.
@threadplane/langgraph provides the adapter used by the provider snippet below. The LangChain packages are required peers for that adapter, and marked is the markdown renderer used for assistant messages.
injectAgent() returns the singleton wired up in Step 2 โ no extra provider needed here. To host several <chat> surfaces that share a backend URL but target different graphs, re-provide provideAgent({...}) in a component's providers: [] array; Angular's hierarchical DI scopes that override to the subtree. See the Multiple agents note in Installation for the full pattern.
That's it โ no Tailwind setup, no PostCSS config, no global stylesheet import. The chat ships with its own design tokens and component-scoped styles.
#Run with no backend
No LangGraph server yet? Bind <chat> to mockAgent() from @threadplane/chat. It implements the same Agent contract with canned messages, so the UI renders exactly as it will against a real agent โ only the responses are static.
With mockAgent() you can drop both provideAgent() calls โ the agent is constructed directly in the component, no DI wiring or apiUrl required. Swap it for injectAgent() once your backend is up.
#What's Next
Embedded, popup, or sidebar.
Customize colors, fonts, and shapes.
Full primitive and composition reference.
Bake in your license at build time and swap the mock for a real adapter โ see Installation step 2 for build-time license injection and Agent deployment for the backend.