Skip to content
PluginStats

fascicle weekly downloads statistics

By robmclarty · npm · AI SDKs

Compose agents like plain values. A TypeScript toolkit that wires LLM calls, tools, and functions into typed steps over eight providers. No framework, no ambient state.

View on npm Fresh · Oct 18, 2026

fascicle has 458 recorded weekly downloads on npm, ranking #1561 of 2,322 tracked listings.

Weekly downloads
458
Official API · Oct 18, 2026
7-day growth
—
Insufficient history
30-day growth
—
Insufficient history
90-day growth
—
Insufficient history
Rank
#1561
Among tracked npm listings

About fascicle

Fascicle

A substrate for agents — three mushrooms (model_call, step, tool) fruit from a shared mycelium network; every mushroom is a Step<i, o>, every thread is a composition

Compose agents out of LLM calls, tool calls, and plain functions. Everything is a Step<i, o>. Wire steps together with 23 primitives (sequence, parallel, chain, branch, retry, loop, ensemble_step, checkpoint, …) and run them as plain values. One generate surface fronts eight provider adapters: Anthropic, OpenAI, Google, OpenRouter, AWS Bedrock, Ollama, LM Studio, and a claude_cli subprocess that drives the Claude Code CLI.

No framework lifecycle. No ambient state. No decorators. Adapters are passed in per run.

Install

pnpm add fascicle

Fascicle is ESM-only and requires Node >= 24. ai, zod, and every provider SDK are optional peers — install only the ones you use. pnpm add fascicle alone builds and runs a flow against transport: 'native' or claude_cli, with no AI SDK package and no schema library installed at all; schemas accept any Standard Schema — zod, ArkType, Valibot, whichever you already use. See docs/providers.md.

No API key on hand? Several runnable examples need zero keys: examples/hello/main.ts, examples/suspend-resume/main.ts, and examples/viewer-demo/main.ts use no engine at all, and examples/newsroom/main.ts runs the full vocabulary against the bundled stub engine from fascicle/testing.

A 60-second tour

<!-- snippet: check -->
import { run, sequence, step } from 'fascicle';

const flow = sequence([
  step('add', (n: number) => n + 1),
  step('double', (n: number) => n * 2),
]);

await run(flow, 1); // 4

Add a model call:

<!-- snippet: check -->
import { create_engine, model_step, run, sequence, step } from 'fascicle';

const engine = create_engine({
  providers: {
    anthropic: { api_key: process.env.ANTHROPIC_API_KEY!, transport: 'native' },
  },
});

const flow = sequence([
  step('brief', (topic: string) => `Write a 2-sentence brief on: ${topic}`),
  model_step({ engine, model: 'claude-sonnet-4-6', system: 'No preamble.' }),
]);

try {
  console.log(await run(flow, 'Rust ownership'));
} finally {
  await engine.dispose();
}

transport: 'native' keeps the zero-peer promise above: raw HTTP against the Messages API, nothing to install beyond fascicle. Drop it to use the default ai_sdk transport, which needs pnpm add ai @ai-sdk/anthropic.

model_step returns the model's answer (a string, or the schema-validated value when schema is set), keeping flows at the step, step, model_step, step cadence. Underneath sits model_call, the only sanctioned bridge between composition and the engine: same config, but it returns the full GenerateResult envelope (usage, cost, tool calls, finish reason), with an optional project to map a slice of it at the source. Both thread ctx.abort, ctx.trajectory, and streaming chunks for you.

What's in the box

Composition primitives. Every composer takes Step<i, o> and returns Step<i, o>. Anything that fits a step fits any composition of steps. The everyday surface is small; most flows are built entirely from these nine:

PrimitiveShape
steplift a plain function into Step<i, o>
sequencerun A then B then C, threading the value
parallelrun a named map of steps concurrently
branchroute on a predicate of the input
maprun a step per array element, optional concurrency cap
pipepost-process an inner step's output with a plain function
retryre-run on failure with exponential backoff
model_stepthe model's answer as a step (model_call projected to its content)
chainnamed steps over a typed record: .step binds, .stage concludes a phase, .output projects

The remaining primitives are specialized composers with the same contract, so they drop into any flow when the task calls for them: control flow (loop, fallback, timeout, compose), multi-model orchestration (adversarial, ensemble_step, consensus), and durability (checkpoint, suspend, gate). Behind those sits an advanced tier — the pick-best variants ensemble and tournament, the raw named-state primitives scope / stash / use underlying chain, and the self-improvement pair improve / learn — covered in docs/advanced-composition.md, each entry paired with the primary primitive to try first. One-liners for all of them live in docs/composition.md, full shapes in docs/api-reference.md, and docs/leaf-arm-spine.md is the decision guide for which layer each belongs to.

Plus run, run.stream, and describe. And inside any step body, ctx.call(step, input) runs another Step with spans, abort, and error paths intact: the direct-style counterpart to composing, for control flow too dynamic to declare.

AI engine. create_engine(config) returns one generate surface across eight providers. Two axes: model is an opaque id sent to the provider verbatim (claude-opus-4-8, gpt-4o, us.anthropic.claude-sonnet-4-20250514-v1:0), and provider names the transport (anthropic, bedrock, openrouter, claude_cli, …) — swap provider to move a call between transports. Reasoning effort ('none' through 'max') is translated per provider. Cost estimation uses a pricing table with per-engine overrides.…

Description from the npm listing.

  • agents
  • agentic
  • multi-agent
  • ai
  • llm
  • workflow
  • pipeline
  • orchestration
  • tool-calling
  • harness
  • streaming
  • observability
  • typescript
  • composable
  • ai-sdk
  • vercel-ai-sdk
  • anthropic
  • openai
  • gemini
  • bedrock

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

fascicle weekly downloads on npm, last 90 days: 458 weekly downloads as of Oct 18, 2026.fascicleWeekly downloads on npm · Last 90 days458downloads / week400420440460480500520Jul 20Aug 4Aug 19Sep 3Sep 18Oct 3Oct 18downloads / weekOct 18, 2026 – Oct 18, 2026 · 1 observations · Updated Oct 18, 2026pluginstats.com
fascicle weekly downloads on npm, last 90 days: 458 weekly downloads as of Oct 18, 2026.

7/30/90-day growth

fascicle weekly downloads growth on npm: 7-day growth unavailable, 30-day growth unavailable, 90-day growth unavailable.fascicleWeekly downloads growth on npm458downloads / week now7-day growthinsufficient historyInsufficient history30-day growthinsufficient historyInsufficient history90-day growthinsufficient historyInsufficient historyGrowth vs. nearest observation to each baseline date · Updated Oct 18, 2026pluginstats.com
fascicle weekly downloads growth on npm: 7-day growth unavailable, 30-day growth unavailable, 90-day growth unavailable.

Ranking history

fascicle npm ranking history: currently #1561 (by weekly downloads).fasciclenpm ranking · by weekly downloads · Last 90 days#1561current rank#1559#1560#1561#1562#1563Jul 22Aug 6Aug 21Sep 5Sep 20Oct 5Oct 20rankOct 20, 2026 – Oct 20, 2026 · 1 observations · Updated Oct 18, 2026pluginstats.com
fascicle npm ranking history: currently #1561 (by weekly downloads).

Listing placement

All npm2,320 listings · 116 pages · 1,162 shown · page 79, #4 (overall #1,564)
All npm: every listing in weekly downloads order

Listing placement

AI SDKs259 listings · 13 pages · page 9, #17 (overall #177)
AI SDKs: every listing in weekly downloads order

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 (1)
Recent weekly downloads observations for fascicle
Date (UTC)Weekly downloadsChange vs. previous
458—

Similar npm AI SDKs plugins

All 20 fascicle alternatives

Data 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/fascicle. First seen Oct 20, 2026; last successful collection Oct 20, 2026. See the methodology.