Skip to content
stacks

OpenRouter LLM provider

OpenRouter as the LLM provider for a TypeScript project: an optional API key, model discovery with a ten-minute cache, routing settings, bounded retries with safe upstream errors, a scriptable local stub server for tests, and an eval report format with a dry-run checker.

Category: vendor

In your existing repository

Ask your agent to check compatibility, follow this fragment’s brief, and verify the resulting project. What happens next

Applies to:
typescript-api, react-router, typescript-cli

Add to your project

Paste the prompt into the coding agent working on your project.

View prompt
Add the openrouter-ai fragment to this existing repository. 1. Run npx @steamfield/stacks show openrouter-ai --json and check that it fits the project. If it does not, explain why before changing files. 2. Run npx @steamfield/stacks add openrouter-ai and follow the brief it prints. 3. In this repository, run npx @steamfield/stacks verify. Fix failures without weakening or skipping verification steps. 4. Summarize what changed and the verification result. Quote published stats only when they are available, including their interval and sample size. The stacks docs, written for agents, are at https://stacks.steamfield.io/llms.txt.
Or use the terminal
npx @steamfield/stacks add openrouter-ai
Verify steps
StepPhaseLayerCommand

No additional verify steps declared. Run the project’s existing verification after applying the brief.

Use with a new stack

Starting fresh instead? These stacks support this fragment.

  • react-routeroptional
    npx @steamfield/stacks new react-router --with openrouter-ai
  • npx @steamfield/stacks new typescript-cli --with openrouter-ai
  • npx @steamfield/stacks new typescript-api --with openrouter-ai

Alternatives in vendor

  • PostHog analytics

    PostHog analytics in the web client, disabled when no key is set so tests, CI, and sandboxes need no account, with a typed event catalog and a pre-init buffer.

    Also applies to: react-router

Files

  • docs/eval-report.md
  • scripts/check-eval-dry-run.ts
  • scripts/lib/eval-report.ts

Usage

Among stacks projects in the 28 days through 30 Oct 2026: 1,845 projects; Green rate: not enough runs yet.

Weekly projects by stack

Projects whose final fragment set included this fragment, grouped by stack.

Weekly projects including this fragment, by stack: time span
Sep 1Oct 10100200300400500typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
Sep 1Oct 10100200300400500typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
Sep 1Oct 10100200300400500typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
Sep 1Oct 10100200300400500typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
Sep 1Oct 10100200300400500typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
Sep 1Oct 10100200300400500typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
Sep 1Oct 10100200300400500typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
Sep 1Oct 10100200300400500typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
  • typescript-api
Aug 1Sep 1Oct 10100200300400500typescript-api · 5 Jul 2026: 75typescript-api · 12 Jul 2026: 145typescript-api · 19 Jul 2026: 190typescript-api · 26 Jul 2026: 245typescript-api · 2 Aug 2026: 225typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
Aug 1Sep 1Oct 10100200300400500typescript-api · 5 Jul 2026: 75typescript-api · 12 Jul 2026: 145typescript-api · 19 Jul 2026: 190typescript-api · 26 Jul 2026: 245typescript-api · 2 Aug 2026: 225typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
Aug 1Sep 1Oct 10100200300400500typescript-api · 5 Jul 2026: 75typescript-api · 12 Jul 2026: 145typescript-api · 19 Jul 2026: 190typescript-api · 26 Jul 2026: 245typescript-api · 2 Aug 2026: 225typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
Aug 1Sep 1Oct 10100200300400500typescript-api · 5 Jul 2026: 75typescript-api · 12 Jul 2026: 145typescript-api · 19 Jul 2026: 190typescript-api · 26 Jul 2026: 245typescript-api · 2 Aug 2026: 225typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
Aug 1Sep 1Oct 10100200300400500typescript-api · 5 Jul 2026: 75typescript-api · 12 Jul 2026: 145typescript-api · 19 Jul 2026: 190typescript-api · 26 Jul 2026: 245typescript-api · 2 Aug 2026: 225typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
Aug 1Sep 1Oct 10100200300400500typescript-api · 5 Jul 2026: 75typescript-api · 12 Jul 2026: 145typescript-api · 19 Jul 2026: 190typescript-api · 26 Jul 2026: 245typescript-api · 2 Aug 2026: 225typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
Aug 1Sep 1Oct 10100200300400500typescript-api · 5 Jul 2026: 75typescript-api · 12 Jul 2026: 145typescript-api · 19 Jul 2026: 190typescript-api · 26 Jul 2026: 245typescript-api · 2 Aug 2026: 225typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
Aug 1Sep 1Oct 10100200300400500typescript-api · 5 Jul 2026: 75typescript-api · 12 Jul 2026: 145typescript-api · 19 Jul 2026: 190typescript-api · 26 Jul 2026: 245typescript-api · 2 Aug 2026: 225typescript-api · 9 Aug 2026: 265typescript-api · 16 Aug 2026: 305typescript-api · 23 Aug 2026: 340typescript-api · 30 Aug 2026: 365typescript-api · 6 Sept 2026: 330typescript-api · 13 Sept 2026: 375typescript-api · 20 Sept 2026: 430typescript-api · 27 Sept 2026: 405typescript-api · 4 Oct 2026: 440typescript-api · 11 Oct 2026: 505typescript-api · 18 Oct 2026: 515typescript-api · 25 Oct 2026: 520
  • typescript-api

Stacks projects per UTC week through 30 Oct 2026. Published stack counts only.

Data table
Week endingStackProjects
5 Jul 2026typescript-api75
12 Jul 2026typescript-api145
19 Jul 2026typescript-api190
26 Jul 2026typescript-api245
2 Aug 2026typescript-api225
9 Aug 2026typescript-api265
16 Aug 2026typescript-api305
23 Aug 2026typescript-api340
30 Aug 2026typescript-api365
6 Sept 2026typescript-api330
13 Sept 2026typescript-api375
20 Sept 2026typescript-api430
27 Sept 2026typescript-api405
4 Oct 2026typescript-api440
11 Oct 2026typescript-api505
18 Oct 2026typescript-api515
25 Oct 2026typescript-api520

By stack

How often this fragment stays in a default composition, or gets attached as an option.

typescript-api
Optional · attached18%

1,845 projects including the fragment

Stacks projects · 28 days through 30 Oct 2026. Counts rounded to 5.

Data table
StackProjectsRoleShare
typescript-api1,845Optional · attached18%

Green rate with and without it

This compares projects; it isn't an effect of the fragment.

Not enough runs in this breakdown yet.

Stacks projects · 28 days through 30 Oct 2026. Counts rounded to 5.

Often used with

Co-occurrence above the baseline, within a stack. Required fragment pairs are excluded.

Not enough runs in this breakdown yet.

Stacks projects · 28 days through 30 Oct 2026. Counts rounded to 5.

Computed 31 Oct 2026, through 30 Oct 2026. Numbers describe stacks projects, not the ecosystem.