@tanstack/ai-angular has 266 recorded weekly downloads on npm, a decrease of 59.1% over the past 30 days, ranking #1635 of 2,322 tracked listings.
About @tanstack/ai-angular
TanStack AI — Angular
Angular signal-based bindings for TanStack AI — streaming chat, tool-calling agents, and media generation built on Angular's native reactivity model.
<a href="https://tanstack.com/ai">Read the docs -></a>
Install
pnpm add @tanstack/ai-angular @tanstack/ai
npm install @tanstack/ai-angular @tanstack/ai
Minimal Usage
Important: All
inject*functions use Angular's dependency injection system and must be called within an Angular injection context — a component or directive class field initializer, the constructor, or insiderunInInjectionContext. Calling them outside an injection context will throw a runtime error.
The example below shows a standalone component that streams chat messages from a server endpoint via SSE:
import { Component } from '@angular/core'
import { CommonModule } from '@angular/common'
import { injectChat } from '@tanstack/ai-angular'
import { fetchServerSentEvents } from '@tanstack/ai-client'
@Component({
selector: 'app-chat',
standalone: true,
imports: [CommonModule],
template: `
<ul>
@for (message of chat.messages(); track message.id) {
<li>{{ message.role }}: {{ message.content }}</li>
}
</ul>
<input #input placeholder="Type a message..." />
<button (click)="chat.sendMessage(input.value); input.value = ''">
Send
</button>
@if (chat.isLoading()) {
<p>Thinking...</p>
}
`,
})
export class ChatComponent {
// injectChat is called in a field initializer — this is a valid injection context.
chat = injectChat({
connection: fetchServerSentEvents('/api/chat'),
})
}
All state is exposed as Angular Signals. Read them by calling them as functions:
| Signal | Type | Description |
|---|---|---|
chat.messages() | UIMessage[] | Current message list |
chat.isLoading() | boolean | Whether a response is streaming |
chat.error() | Error | undefined | Last error, if any |
chat.status() | ChatClientState | 'ready', 'streaming', 'error', ... |
chat.isSubscribed() | boolean | Whether a live (SSE push) session is active |
chat.connectionStatus() | ConnectionStatus | Transport connection status |
Available methods on the return value: sendMessage, append, reload, stop, clear, setMessages, addToolResult, addToolApprovalResponse.
Server endpoint
The client pairs with any endpoint that returns a TanStack AI SSE stream:
import { chat, toServerSentEventsResponse } from '@tanstack/ai'
import { openaiText } from '@tanstack/ai-openai'
export async function POST(request: Request) {
const body = await request.json()
const stream = chat({
adapter: openaiText('gpt-5.5'),
messages: body.messages,
})
return toServerSentEventsResponse(stream)
}
Available Functions
| Function | Description |
|---|---|
injectChat | Streaming chat with messages, tool calls, and structured outputs |
injectGeneration | Generic generation client (streaming or one-shot) |
injectGenerateImage | Image generation |
injectGenerateAudio | Audio generation |
injectGenerateVideo | Video generation |
injectGenerateSpeech | Text-to-speech |
injectSummarize | Summarization |
injectTranscription | Audio transcription |
All generation functions return signals (result, isLoading, error, status) and methods (generate, stop, reset).
Injection Context
Angular's DI system requires that inject() is called during component construction. Every inject* function in this package calls inject() internally. Valid call sites:
// Field initializer (recommended)
export class MyComponent {
chat = injectChat({ connection: fetchServerSentEvents('/api/chat') })
}…
Description from the npm listing.
- ai
- ai-sdk
- typescript
- tanstack
- angular
- signals
- chat
- streaming
- tool-calling
- structured-outputs
- media-generation
README badge
Show your rank in a README or on your website. The badge updates automatically.
Charts
Images: 30d · 1y · all time · 1600×900 dark
Adoption over time
7/30/90-day growth
Ranking history
Listing placement
Listing placement
Filled points are observed values; hollow points come from Internet Archive snapshots of the listing page. Dashed segments span periods with no observations — values between points are not interpolated.
Each band is one page of 20. Weekly downloads on a linear scale. Placement is projected from weekly downloads, so it can differ from the marketplace's own sort order. Hover a dot to see the listing.
Recent observations
Full history (122)Similar npm AI SDKs plugins
All 20 @tanstack/ai-angular alternativesData source
Weekly downloads (trailing 7 complete days) come from the official npm downloads API. Downloads include CI and mirrors and are not equivalent to installs or users. npm publishes no ratings.
Listing: https://www.npmjs.com/package/@tanstack/ai-angular. First seen Oct 16, 2026; last successful collection Oct 20, 2026. See the methodology.