Napcar

LanguageModel API

A compatibility layer inspired by the Chrome Prompt API, mapped onto Napcar's local models.

Napcar provides a LanguageModel-style compatibility surface for code written against the Chrome Prompt API. Import it from the SDK — it is opt-in and never patches globalThis.LanguageModel.

import { createLanguageModel } from "@napcar/sdk/language-model";

const LanguageModel = createLanguageModel();

const status = await LanguageModel.availability();
// "unavailable" | "downloadable" | "downloading" | "available"

const session = await LanguageModel.create({ systemPrompt: "You are concise." });

const text = await session.prompt("Explain local LLMs in one paragraph.");

const stream = session.promptStreaming("Write a haiku about browsers.");
for await (const chunk of streamToAsyncIterable(stream)) appendToUI(chunk);

session.destroy();

Mapping

Prompt APINapcar
LanguageModel.availability()navigator.napcar.ai.availability({ task: "chat" })
LanguageModel.create()navigator.napcar.ai.requestSession({ task: "chat" })
session.prompt()session.generate({ input }).then(r => r.text)
session.promptStreaming()session.generateStreaming({ input })
responseConstraintresponseFormat: { type: "json_schema", schema }

Caveats

This is a compatibility layer, not a full implementation of the Chrome Prompt API. It implements availability, create, prompt, promptStreaming, append, clone, destroy, and measureInputUsage. Behaviors that depend on Chrome-internal model downloads or exact token accounting are approximated. Expose it only in secure contexts.

This surface maps onto Napcar's local models. Outside Napcar, see Cloud fallback for routing the same prompts to a cloud provider.

On this page