← Open Source
moeru-ai

xsai

πŸ€–πŸ’¬ extra-small AI SDK.

AI EngineeringAccess modelsTypeScript
Open on GitHub
Momentum
+0stars in 24 hours0.0%
660
Stars
61
Forks
+2
This week
28
Contributors
Created 2024-11-21 Β· Updated 2026-10-08 Β· #14270 today
Top developers
README

Moeru AI logo

xsAI

AI SDK, extra small.

One shape for every model. Web standards, nothing else.

npm version npm downloads install size license

Documentation | Getting started | Choose packages

Quick start

pnpm add xsai
import { generateText, responses } from 'xsai'

const model = responses({
  apiKey: process.env.OPENAI_API_KEY,
  baseURL: 'https://api.openai.com/v1/',
  model: 'gpt-6-luna',
})

const { text } = await generateText(model, { input: 'Say hello.' })
console.log(text)

Streaming uses the same model. Each event is a typed TextEvent in a standard ReadableStream:

import { streamText } from 'xsai'

const { result, stream } = streamText(model, { input: 'Describe a quiet forest.' })

for await (const event of stream) {
  if (event.type === 'text.delta')
    process.stdout.write(event.delta)
}

await result

Why xsAI

  • Small parts. Each package does one job. Every package is an ES module with no side effects, so your bundler removes the code that you do not use.
  • A model belongs to a protocol, not to a provider. One adapter covers every service that speaks the same protocol. Change the service, keep your code.
  • Web standards. fetch, ReadableStream, AbortSignal, and FormData. The source imports no Node.js module. Replace fetch to add a proxy, a test double, or your own retries.
  • Typed from end to end. Options, results, events, and tool inputs have TypeScript types. Schemas follow Standard Schema, so you can keep the validation library that you already use.

One adapter per protocol

xsAI does not ship a package for each provider. It ships an adapter for each protocol, and many services and gateways speak at least one of them.

Protocol Package Factory
OpenAI Responses @xsai/text-responses responses()
Chat Completions @xsai/text-chat chat()
Anthropic Messages @xsai/text-messages messages()

Every factory returns a LanguageModel, so generateText, streamText, and tool calls work the same with all three. If your service speaks another protocol, you can write a custom model.

Packages

Install xsai for everything, or only the packages that you use.

Package Provides
@xsai/text generateText, streamText, loop, collect, and tool
@xsai/audio Speech generation and transcription
@xsai/decide Typed answers to yes-or-no, choice, and score questions
@xsai/embed Text embeddings
@xsai/image Image generation
@xsai/model Model lists from a service
@xsai/shared HTTP options, sendRequest, and error types
xsschema Schema conversion and validation, as a separate package
xsai One package that re-exports everything above except xsschema

Runs anywhere

xsAI runs on any runtime with fetch and web streams: Node.js, Deno, Bun, Cloudflare Workers, and browsers.

Community projects

xsAI is used in community and in-house projects, including:

Contributing

See CONTRIBUTING.md. To edit or build the docs, see documentation maintenance.

License

MIT

Sponsors

sponsors