Docs
One paradigm, ~170 packages in the monorepo. The sidebar groups them by ecosystem — dom, server, ssr, cli — each core package followed by adapters, providers, middleware and plugins that snap into it. Everything below is copied from the packages' own READMEs — nothing here is aspirational.
Introduction
youneed is a TypeScript-first toolkit for building web apps on
native platform primitives — Custom Elements, Shadow
DOM, the HTTP server, the Speculation Rules API — instead of a
virtual DOM and a heavy runtime. Every package shares one paradigm:
a factory returns a base class you extend, TC39 standard
decorators register members into per-class registries, and a fluent
builder wires it together. Component(tag),
Controller(path), Page(url) and
Test() all feel the same — learn the shape once on the
client, reuse it on the server, in pages, in tests.
The dependency graph stays shallow on purpose: dom has
zero dependencies, ssr builds on dom +
server, devtools builds on dom
+ ssr. Install one package, or compose the stack —
nothing drags the rest in.
Installation & quick start
Add the core client package and define a component.
$ pnpm add @youneed/dom
@Component.define()
class Counter extends Component("x-counter") {
@Component.prop() count = 0;
@Component.event() inc() { this.count++; }
render() {
return html`<button @click=${this.inc}>${this.count}</button>`;
}
}
@Component.define()), which no
browser runs natively yet and which Vite's default oxc/esbuild
target leaves untransformed. Running with tsx /
node --import tsx handles them out of the box. Bundling
with Vite needs @youneed/vite-plugin
added so they're lowered.
dom @youneed/dom
A component framework built directly on native Custom Elements and Shadow DOM, with no virtual DOM. It combines Lit-style tagged-template rendering and scoped styles, Angular-style decorators, tasks and signals, and platform-native lifecycle — producing real custom elements that drop into plain HTML, React, Vue, or SSR markup without extra glue.
import { Component, html, css } from "@youneed/dom";
@Component.define()
class Counter extends Component("x-counter") {
static styles = css`button { font: inherit }`;
@Component.prop() count = 0; // reactive: assigning re-renders
@Component.prop({ attribute: true }) label = "count"; // reflects <x-counter label="…">
@Component.event() inc() { this.count++; } // auto-bound for @click
render() {
return html`<button @click=${this.inc}>${this.label}: ${this.count}</button>`;
}
}
dom-router @youneed/dom-router
A small client-side SPA router that mounts a Custom Element into a
DOM outlet when the current URL matches a route. It supports three
URL strategies — hash, history, query — behind a single API, and
routes can target either a component class or a tag-name string. It
pairs naturally with @youneed/dom components but has no
hard dependency on it.
import { createRouter } from "@youneed/dom-router";
const router = createRouter({
outlet: document.getElementById("app")!,
mode: "history", // "hash" (default) · "history" · "query"
routes: [
{ path: "/", component: HomePage }, // a component CLASS…
{ path: "/users/:id", component: "user-page" }, // …or a tag string. params: { id }
{ path: "*", component: "not-found" }, // catch-all
],
});
router.navigate("/users/42"); // updates the URL + mounts <user-page>
router.current?.params; // { id: "42" }
devtools @youneed/devtools
A floating, React-DevTools-style inspector for
@youneed/dom applications. It provides a live,
searchable component tree, a detail view with props, time-travel
over state snapshots, a props diff, emitted events, live scheduler
swapping, and per-element style editing — extensible with
additional tabs (@youneed/ssr adds Page/Routes/Map
views).
import { installDevtools, mountDevtoolsPanel } from "@youneed/devtools";
installDevtools(); // capture per-component state/props/events/styles
mountDevtoolsPanel(); // floating, dockable, interactive panel (state persists)
dom-adapter-react @youneed/dom-adapter-react
Bridge @youneed/dom and React in both directions.
toReact renders a dom component inside a React tree — props
are type-checked against the component's own @prop fields
and on<Event> handlers receive its
CustomEvents. fromReact wraps an existing
React component as a custom element that drops into a dom tree — no
rewrite. Part of the adapter family
(dom-adapter-vue, -preact,
-svelte, -astro, -angular).
import { toReact, fromReact } from "@youneed/dom-adapter-react";
// dom → React: a real React component with typed props
const ReactUserCard = toReact(UserCard);
function Profile({ user }) {
return <ReactUserCard user={user} onSelect={(e) => console.log(e.detail)} />;
}
// React → dom: a custom-element class wrapping a React component
const ReactChart = fromReact(Chart);
html`<${ReactChart.tagName} .props=${{ data }}></${ReactChart.tagName}>`;
dom-provider-i18n @youneed/dom-provider-i18n
Use @youneed/i18n translations inside components — call
i18n("key") straight in an html template and
re-render on every locale change. The i18nProvider form
plugs into the component's providers slot and adds a
typed this.i18n (key autocomplete) with
automatic reactivity — no boilerplate, and it composes with other
providers in the same array.
import { Component, html } from "@youneed/dom";
import { createI18n } from "@youneed/i18n";
import { i18nProvider } from "@youneed/dom-provider-i18n";
const appI18n = createI18n({
resources: { en: { hello: "Hello {name}" }, de: { hello: "Hallo {name}" } },
locale: "en",
});
class Greeting extends Component("x-greeting", { providers: [i18nProvider(appI18n)] }) {
render() {
return html`<div>${this.i18n("hello", { name: "Ada" })}</div>`;
// ^ typed: autocompletes "hello" and checks params
}
}
// setLocale("de") → every subscribed component re-renders
dom-provider-timers @youneed/dom-provider-timers
Lifecycle-scoped timers: this.timers wraps
setTimeout / setInterval / rAF / idle /
delay + the Scheduler API
(postTask, yield) + debounce /
throttle — everything is cancelled automatically when the
component disconnects, and every handle (and the registry itself)
implements Symbol.dispose, so using scopes
it. The search box in this page's sidebar is debounced through it.
import { Component, html } from "@youneed/dom";
import { timersProvider } from "@youneed/dom-provider-timers";
class Clock extends Component("x-clock", { providers: [timersProvider()] }) {
time = this.signal(new Date());
onMount() {
this.timers.setInterval(() => this.time.set(new Date()), 1_000);
// no teardown code — cancelled on disconnect
}
render() {
return html`<time>${this.time.get().toLocaleTimeString()}</time>`;
}
}
// delay rejects AbortError on disconnect; postTask maps to scheduler.postTask.
// Everything cancellable is Disposable:
{
using tick = this.timers.setInterval(render, 100);
} // ← cancelled at end of scope, even on throw
server @youneed/server
A small, typed HTTP server built on node:http, offering
decorator-based controllers, schema validation with type inference,
guards, Express-style middleware, and content negotiation. It
follows the same paradigm as the rest of the toolkit — extend a base
class, mark methods with decorators, compose behavior with a fluent
builder.
import { Application, Controller, t, HttpError } from "@youneed/server";
const Cat = t.object({ name: t.string(), age: t.number() });
class Cats extends Controller("/cats", { guards: [requireApiKey] }) {
@Controller.get("/:name", { params: t.object({ name: t.string() }), response: { 200: Cat } })
async byName(ctx: Context) {
const cat = lookup(ctx.params.name);
if (!cat) throw new HttpError(404, { error: "Not found" }); // throw any status
return cat; // validated against 200: Cat
}
@Controller.guard(isAdmin) // per-method guard (stacks with class guards)
@Controller.post({ body: Cat, response: { 201: Cat } })
async create(ctx: Context) {
return this.Response.json(ctx.body, { status: 201 }); // ctx.body is typed + validated
}
}
Application(Cats)
.use(requestLogger(), cors()) // global middleware (onion model)
.openapi({ title: "Cats", version: "1.0.0" }) // → GET /openapi.json
.listen(3000, (ctx) => console.log(`:${ctx.port}`));
schema @youneed/schema
class-validator-style DTO validation built on standard
TC39 decorators rather than reflect-metadata or legacy
experimental decorators, so the same decorated class validates
identically in TypeScript and plain compiled JS. Fields are
annotated with constraint decorators like @IsEmail(),
@MinLength(), and @Min(), and
validate() checks a class or plain object against those
rules.
import { IsEmail, IsNotEmpty, MinLength, IsOptional, IsInt, Min, validate } from "@youneed/schema";
class CreateUserDTO {
@IsEmail() email!: string;
@IsNotEmpty() @MinLength(8) password!: string;
@IsOptional() @IsInt() @Min(18) age?: number;
}
const errors = validate(CreateUserDTO, await req.json());
// [] when valid, else:
// [{ property: "email", value: "nope", constraints: { isEmail: "email must be an email" } }]
orm-sql @youneed/orm-sql
A small TypeORM-style SQL ORM built on standard TC39 decorators, with
no reflect-metadata or legacy TypeScript decorator
flags required. Entities are plain classes and databases plug in as
adapters, with a zero-dependency SQLite adapter
(node:sqlite) included as the reference engine —
repositories give CRUD, relations, transactions, and schema
migrations via a Migrator.
import { Table, Orm, getRepository } from "@youneed/orm-sql";
class UsersTable extends Table("users") {
@Table.primaryGeneratedColumn() id!: number;
@Table.field("string")
@Table.index({ group: "user_action" })
userId!: string;
@Table.field("string", { unique: true }) email!: string;
@Table.column({ type: "boolean", default: true }) isActive!: boolean;
@Table.oneToMany(() => Photo, (p) => p.user) photos!: Photo[];
}
await Orm({
type: "sqlite",
database: ":memory:",
tables: [UsersTable, Photo],
synchronize: true,
});
const users = getRepository(UsersTable);
const ada = await users.insert({ userId: "u1", email: "ada@x.com" });
await users.findOne({ email: "ada@x.com" }); // → UsersTable instance
server-middleware-rate-limit @youneed/server-middleware-rate-limit
Rate-limit requests with a pluggable strategy — fixed window, sliding
log, token bucket, exponential backoff — emitting standard
X-RateLimit-* and Retry-After headers. The
KV-backed KvFixedWindow keeps one shared
limit across a whole fleet via a single atomic
incr per request. One of ~30
server-middleware-* packages that compose the same way
(cors, helmet, etag,
session, metrics, …).
import { Application } from "@youneed/server";
import { rateLimit, TokenBucket, KvFixedWindow } from "@youneed/server-middleware-rate-limit";
import { RedisKV } from "@youneed/kv-redis";
Application()
.use(rateLimit({ windowMs: 60_000, max: 100 })) // fixed window, global
.use("/api", rateLimit({ strategy: new TokenBucket({ capacity: 50, refillPerSec: 5 }) }))
// one shared limit across N instances — the counter lives in Redis
.use("/auth", rateLimit({ strategy: new KvFixedWindow(new RedisKV({ url: process.env.REDIS_URL }), { windowMs: 60_000, max: 20 }) }))
.listen(3000, () => {});
server-plugin-jobs @youneed/server-plugin-jobs
A zero-dependency job scheduler — cron expressions (5- or 6-field),
fixed intervals, one-off delays — shipped standalone
(createScheduler) and as a server plugin that starts on
listen and stops during graceful drain. A leader-lock over a shared KV
store makes a job fire exactly once per occurrence
across a fleet, and injectable clock/timers make tests run instantly.
import { Application } from "@youneed/server";
import { jobs } from "@youneed/server-plugin-jobs";
const cron = jobs({
jobs: [{ name: "cleanup", schedule: "0 */6 * * *", handler: purge }],
});
app.plugin(cron).listen(3000, () => {}); // start() on listen, stop() on drain
// still mutable after registration
cron.scheduler.add({ name: "heartbeat", schedule: { every: 30_000 }, handler: ping });
cron.scheduler.trigger("cleanup"); // run one now, bypassing the schedule
ssr @youneed/ssr
Server-side rendering for @youneed/dom components,
emitted as native Declarative Shadow DOM so markup hydrates without
JavaScript, plus a Page entity that acts as the
document-level counterpart to a Controller, with
first-class Speculation Rules support. It requires registering a
server DOM (happy-dom) before importing the package, since
components extend HTMLElement at import time.
import { Page, mountPages, enablePageDevtools } from "@youneed/ssr";
import { Application } from "@youneed/server";
class About extends Page("/about", { title: "About" }) {
render() { return AboutApp; } // a component class, instance, or HTML string
}
class Home extends Page("/", {
title: "Home",
clientScript: () => import("./client.ts"), // type-checked; resolved to a URL
speculation: { prerender: [{ source: "list", urls: [About.url], eagerness: "moderate" }] },
}) {
render() { return HomeApp; }
}
enablePageDevtools(); // embed page+routes payload (dev)
mountPages(Application(), Home, About).listen(3010, …);
ssr-plugin-meta @youneed/ssr-plugin-meta
SEO <meta> + OpenGraph + Twitter Card tags as SSR
page middleware. A page declares metadata via the meta
option; the module renders the tags, resolving og:url /
og:image to absolute URLs against the SSR
origin. meta can also be a function of the
request context for per-request tags.
import { ssr } from "@youneed/server-plugin-ssr";
import { meta } from "@youneed/ssr-plugin-meta";
class Post extends Page("/blog/:slug", {
title: "Hello world",
meta: {
description: "An introductory post.",
og: { type: "article", image: "/og/hello.png" },
twitter: { card: "summary_large_image" },
},
}) { /* … */ }
app.plugin(ssr({
origin: "https://example.com",
pages: [Post],
modules: [meta({ siteName: "Example", twitterSite: "@example" })],
}));
ssr-plugin-sitemap @youneed/ssr-plugin-sitemap
A sitemap.xml module for the SSR plugin. Static page
routes are enumerated automatically; dynamic routes
(/users/:id) are listed via entries — a value
or an async function, so the feed reflects fresh data on each request.
All <loc>s resolve absolute against
origin.
import { ssr } from "@youneed/server-plugin-ssr";
import { sitemap } from "@youneed/ssr-plugin-sitemap";
app.plugin(ssr({
origin: "https://example.com",
pages: [Home, About, Pricing],
modules: [
sitemap({
exclude: ["/admin", /^\/internal/],
entries: [{ url: "/blog/launch", lastmod: "2026-06-01", priority: 0.8 }],
defaults: { changefreq: "weekly", priority: 0.5 },
}),
],
}));
ssr-plugin-robots @youneed/ssr-plugin-robots
A robots.txt module: per-user-agent allow/disallow
policies, a Sitemap: line resolved against
origin, and the permissive "allow everything" file when no
policies are given.
import { ssr } from "@youneed/server-plugin-ssr";
import { robots } from "@youneed/ssr-plugin-robots";
app.plugin(ssr({
origin: "https://example.com",
modules: [
robots({
policies: [
{ userAgent: "*", disallow: ["/admin", "/api"], allow: "/api/public" },
{ userAgent: ["GPTBot", "CCBot"], disallow: "/" },
],
sitemap: true, // → Sitemap: https://example.com/sitemap.xml
}),
],
}));
cli @youneed/cli
A type-safe, Commander-style CLI framework built on the same
factory-class pattern as @youneed/dom's
Component and @youneed/server's
Controller. Options and commands are defined as classes
and composed into an Application, with
this.options and execute(...) typed
directly from flag/argument strings — plus a small reactive layer,
graceful shutdown, middleware, and plugins.
import { Application, Command, Option, defaultOptions } from "@youneed/cli";
// A reusable, named option (its key + value type flow into `this.options`).
class FirstOption extends Option("--first", {
short: "f",
description: "display just the first substring",
}) {}
class SplitCommand extends Command({
name: "split <string>", // grammar: a word + positional args
description: "Split a string into substrings and display as an array",
options: [FirstOption, { name: "-s, --separator <char>", default: "," }, ...defaultOptions()],
}) {
execute(value: string) {
// `value` is typed from `<string>`; `this.options` from the options tuple.
const limit = this.options.first ? 1 : undefined;
console.log(value.split(this.options.separator, limit));
}
}
Application({
name: "string-util",
description: "CLI to some JavaScript string utilities",
version: "0.0.8",
commands: [SplitCommand],
options: [...defaultOptions()],
});
cli-middleware-prompt @youneed/cli-middleware-prompt
Interactive prompts for CLI commands: the middleware adds
this.prompt with ask (free text),
confirm (y/n), choice (single-select),
list (multi-select), alert and
spinner. Prompts draw through the core
LiveRenderer in raw-key mode, and everything binds to one
terminal — inject a scripted double and they're testable.
import { Application, Command } from "@youneed/cli";
import { prompts } from "@youneed/cli-middleware-prompt";
class Setup extends Command("setup", { middleware: [prompts()] }) {
async execute() {
const name = await this.prompt.ask("Project name?", { default: "app" });
const env = await this.prompt.choice("Environment", ["dev", "staging", "prod"]);
const feats = await this.prompt.list("Features", ["ts", "lint", "tests"]);
if (await this.prompt.confirm(`Create ${name}?`, { default: true })) {
await this.prompt.spinner("scaffolding", () => scaffold(name, env, feats));
await this.prompt.alert("Done!");
}
}
}
Application({ name: "create", commands: [Setup] }).run(["setup"]);
cli-plugin-help @youneed/cli-plugin-help
Enhanced help: registers a help [command] command that
replaces the built-in output with a grouped command list and
per-command examples — the interactive, in-terminal
usage screen. For offline man(1) documentation, pair it
with cli-plugin-man.
import { Application } from "@youneed/cli";
import { help } from "@youneed/cli-plugin-help";
Application({
name: "ops",
version: "1.0.0",
description: "Operations toolkit",
commands: [/* … */],
plugins: [
help({ examples: { split: ["ops split a,b,c --first"] } }),
],
}).run();
// ops help → grouped command list with examples
// ops help split → usage, options and examples for one command
test @youneed/test
A class-and-decorator test framework built in the same paradigm as
@youneed/dom and @youneed/server: a
factory returns a base class you extend, TC39 decorators register
test members (cases, fixtures, hooks), and a fluent
TestApplication builder wires everything up and runs
it. Fixtures give scoped setup/teardown, TestContext
carries steps/annotations/abort signals, and reporters, plugins, and
parallelization (worker processes, CI sharding) are pluggable.
import { Test, Fixture, TestApplication, expect } from "@youneed/test";
class Calculator {
add(a: number, b: number) { return a + b; }
}
class CalcFixture extends Fixture<Calculator>({ name: "calc", scope: "test" }) {
setup() { return new Calculator(); }
}
class CalcTest extends Test({ name: "Calculator" }) {
@Test.use(CalcFixture) calc!: Calculator;
@Test.it("adds two numbers")
adds() {
expect(this.calc.add(2, 3)).toBe(5);
}
}
await TestApplication().addTests(CalcTest).run();
logger @youneed/logger
A zero-dependency, Winston-style structured logger with pluggable
transports and a composable format pipeline. The core touches no
Node-only APIs, so the same bundle runs in the browser, in SSR/SSG,
on the server, in workers, and at the edge — the only built-in
destination is a universal ConsoleTransport, while
environment-specific destinations ship as separate
@youneed/logger-transport-<name> packages. Child
loggers, secret redaction, and TC39 resource management for
disposal round it out.
import { createLogger, format, ConsoleTransport } from "@youneed/logger";
const log = createLogger({
level: "info",
format: format.combine(format.timestamp(), format.redact(["ssn"]), format.json()),
defaultMeta: { service: "api" },
transports: [new ConsoleTransport()], // works in the browser and on the server
});
log.info("listening", { port: 3000 });
// {"level":"info","message":"listening","timestamp":"…","service":"api","port":3000}
const reqLog = log.child({ requestId: "r-42" }); // bindings on every record
reqLog.error("db down", { password: "hunter2" }); // password → "[REDACTED]"
Naming & the full index
Around 170 packages live in the monorepo. Most are an extension of a
core package, named <core>-<kind>-<name>:
dom-provider-*
A this.*-style extension for Component — e.g. dom-provider-a11y, dom-provider-i18n, dom-provider-rbac.
dom-adapter-*
Interop with another view layer — dom-adapter-react, dom-adapter-vue, dom-adapter-svelte, dom-adapter-astro.
server-plugin-*
A ServerPlugin bolt-on for @youneed/server — server-plugin-graphql, server-plugin-oauth2, server-plugin-jobs.
server-middleware-*
Onion-model middleware for the core server — server-middleware-logger, server-middleware-idempotency.
cli-middleware-*
Middleware for @youneed/cli commands — cli-middleware-prompt, cli-middleware-progress, cli-middleware-color.
logger-transport-*
A destination for @youneed/logger — logger-transport-stdout, -file, -http.
orm-adapter-*
A dialect/driver for the ORMs — orm-adapter-mysql, orm-adapter-postgres, orm-adapter-mongo.
test-reporter-* / test-plugin-*
Output formats and plugins for @youneed/test — reporters render results, plugins add behavior (benchmark, snapshot, resilience).
Every package follows the same shape underneath the name: a factory, a base class, standard decorators. Install one, or compose the stack — nothing drags the rest in.
The full index
The same <yn-package-explorer> component as on the
landing page — descriptions come straight from each package's
package.json.
179 of 179 packages
| Package | Ecosystem | What it does |
|---|---|---|
| @youneed/ai-skill | core | Agent Skills that turn Claude into a youneed-framework expert: the `youneed` skill (components, server, organization, performance, server-optimizations/security/best-practices, middleware, realtime/pub-sub, plugins & infra, a11y, i18n, auth/login (OAuth2/OTP/JWT/webhooks), migration) plus focused skills for the CLI framework (cli), server-side rendering & static generation (ssr), devtools/ts-plugin (develop), logger/transports/config (logging), orm-sql/kv (orm), writing/running tests (testing), migrating an existing app onto the youneed stack — frontend/backend/data/tests + build switch + interop adapters (migration), authorization + secrets (security), feature flags (feature-flags), application server plugins graphql/grpc/mailer/storage/queue/otlp (server-plugins), the shad UI library + component providers (ui), typed API client / resilient fetch / runtime adapters (clients), and the shared @youneed/core primitives + build tooling (foundation). |
| @youneed/api-client | core | Typed API client runtime + OpenAPI → TypeScript client codegen (consumes the OpenAPI @youneed/server generates). Dependency-free, uses fetch (or @youneed/http-client). |
| @youneed/cli | cli | Type-safe, Commander-style CLI framework on the @youneed factory-class pattern. |
| @youneed/cli-middleware-cache | cli | Disk cache middleware: this.cache.get/set/wrap, TTL, JSON on disk. |
| @youneed/cli-middleware-childprocess | cli | Child-process middleware for @youneed/cli: this.childprocess.spawn / .exec wrap node:child_process in a task — reactive (pending/output/exit), killed on shutdown or teardown. |
| @youneed/cli-middleware-clipboard | cli | Clipboard middleware: this.clipboard.write/read via system clipboard. |
| @youneed/cli-middleware-color | cli | Terminal color & styling middleware for @youneed/cli: adds this.color with ANSI styles, honouring NO_COLOR / --no-color / TTY detection. |
| @youneed/cli-middleware-env | cli | Environment-variable middleware for @youneed/cli: adds a typed, validated this.env parsed from process.env via @youneed/schema, failing fast on bad config. |
| @youneed/cli-middleware-fs | cli | Filesystem middleware: this.fs read/write + temp dirs auto-removed on teardown. |
| @youneed/cli-middleware-hotkeys | cli | Hotkey middleware: this.keys.on(name, handler) over the raw terminal. |
| @youneed/cli-middleware-i18n | cli | i18n middleware for @youneed/cli: this.i18n (translate/locale) backed by @youneed/i18n. |
| @youneed/cli-middleware-logger | cli | Logger middleware for @youneed/cli: adds this.logger (a @youneed/logger instance) with level wired from --verbose/--quiet flags. |
| @youneed/cli-middleware-markdown | cli | Markdown middleware: this.markdown(md) renders Markdown to terminal. |
| @youneed/cli-middleware-music | cli | Music transport for @youneed/cli: adds this.player (track metadata + elapsed/duration/play/pause clock), with an optional system-player backend for real audio. |
| @youneed/cli-middleware-notification | cli | Desktop notification middleware for @youneed/cli: adds this.notify (send/info/success/warn/error) backed by node-notifier, with a graceful fallback when it isn't installed. |
| @youneed/cli-middleware-oscillator | cli | A synthetic spectrum source + cava-style bar renderer for @youneed/cli: adds this.oscillator and spectrumBars() for terminal audio visualisers. |
| @youneed/cli-middleware-pages | cli | Pager middleware: this.pages.show(text) pages long output. |
| @youneed/cli-middleware-progress | cli | Progress-bar middleware: this.progress.bar() with percent/ETA. |
| @youneed/cli-middleware-prompt | cli | Interactive prompts for @youneed/cli: adds this.prompt with ask/confirm/choice/list/alert — raw-key TUI primitives drawn via the core live renderer. |
| @youneed/cli-middleware-screen | cli | Alternate-screen middleware: full-screen TUI buffer; restores on teardown. |
| @youneed/cli-middleware-worker | cli | Worker-thread middleware for @youneed/cli: this.worker.run / .spawn wrap node:worker_threads in a task — offload CPU work, reactive, terminated on shutdown or teardown. |
| @youneed/cli-plugin-completion | cli | Shell-completion plugin for @youneed/cli: registers a `completion` command that emits bash/zsh/fish scripts generated from the command catalogue. |
| @youneed/cli-plugin-config | cli | Config-file plugin for @youneed/cli: loads a config file (rc / *.config.json / package.json field) and merges its values into option defaults app-wide. |
| @youneed/cli-plugin-devtools | cli | Devtools server for @youneed/cli: serves the unified <youneed-devtools> shell (same UI as the server devtools) — a shad command/option builder that lists commands, fills in an invocation from a form, and copies or runs it over the devtools protocol. |
| @youneed/cli-plugin-error | cli | Error-formatting plugin for @youneed/cli: pretty stderr output, hints, and optional stack traces via the onError lifecycle hook. |
| @youneed/cli-plugin-feature-flags | cli | Feature-flag plugin for @youneed/cli: a `flags` command to list/inspect/override flags plus middleware that adds this.flags (isEnabled/variant/value/evaluate) so any command can gate behavior on a flag. |
| @youneed/cli-plugin-help | cli | Enhanced help plugin: a richer help command with examples and grouped commands. |
| @youneed/cli-plugin-man | cli | Man-page plugin: a man command emitting roff documentation from the catalogue. |
| @youneed/cli-plugin-otel | cli | @youneed/cli plugin + middleware: real OpenTelemetry SDK — a span per command execution, cli.command metrics, OTLP/HTTP export flushed before exit. |
| @youneed/cli-plugin-update-notifier | cli | Update-notifier plugin: checks npm for a newer version, notifies after commands. |
| @youneed/core | core | Foundational primitives shared across @youneed packages: shared types, the class-metadata registry (TC39 addInitializer + WeakMap, esbuild/tsx-safe), and disposal helpers. |
| create-youneedpackage | core | Internal scaffolder for @youneed/* workspace packages. |
| @youneed/devtools | dom | Inspector panel (component tree, time-travel, schedulers) + Page devtools. |
| @youneed/devtools-protocol | core | Universal, CDP-style devtools protocol for every youneed surface (frontend, server, ssr, cli): JSON-RPC 2.0 envelopes, targets, domains, commands + events, pluggable transports, and a domain-keyed UI extension registry (one protocol, per-surface UI). |
| @youneed/dom | dom | Reactive components on native Custom Elements + Shadow DOM. |
| @youneed/dom-adapter-angular | dom | Use @youneed/dom components inside Angular and Angular components inside @youneed/dom — type-safe and refactor-friendly (pass the class, not a tag string). |
| @youneed/dom-adapter-astro | dom | Render @youneed/dom components to SSR HTML for Astro islands — Declarative Shadow DOM + client hydration, type-safe (pass the component, not a tag string). |
| @youneed/dom-adapter-preact | dom | Use @youneed/dom components inside Preact and Preact components inside @youneed/dom — type-safe and refactor-friendly (pass the component, not a tag string). |
| @youneed/dom-adapter-react | dom | Render @youneed/dom components inside React — type-safe and refactor-friendly (pass the class, not a tag string). |
| @youneed/dom-adapter-svelte | dom | Use @youneed/dom components inside Svelte (a use: action) and Svelte components inside @youneed/dom — type-safe and refactor-friendly (pass the component, not a tag string). |
| @youneed/dom-adapter-vue | dom | Use @youneed/dom components inside Vue and Vue components inside @youneed/dom — type-safe and refactor-friendly (pass the component, not a tag string). |
| @youneed/dom-provider-a11y | dom | Accessibility helpers for @youneed/dom components — a composable provider for screen-reader announcements, focus trapping, and reduced-motion. |
| @youneed/dom-provider-color-scheme | dom | Light/dark/auto color scheme for @youneed/dom — a composable provider that reflects CSS color-scheme globally or per component, toggled via this.setColorScheme. |
| @youneed/dom-provider-direction | dom | Per-component text direction (LTR/RTL) for @youneed/dom: a composable provider that reflects `dir` and toggles via this.setDirection. |
| @youneed/dom-provider-env | dom | Type-safe, fail-fast environment variables for @youneed/dom — coerce + validate import.meta.env (or any source) against a @youneed/schema spec, read it via this.env, inspect it in devtools. |
| @youneed/dom-provider-feature-flags | dom | Use @youneed/feature-flags inside @youneed/dom components — evaluate flags in html templates with reactive re-render on flag change, plus SSR hydration. |
| @youneed/dom-provider-i18n | dom | Use @youneed/i18n translations inside @youneed/dom components — i18n() in html templates with reactive re-render on locale change. |
| @youneed/dom-provider-logger | dom | A scoped @youneed/logger child on every @youneed/dom component — this.logger, stamped with the component tag, via a composable provider. |
| @youneed/dom-provider-otel | dom | @youneed/dom provider: real OpenTelemetry Web SDK — render spans per component, dom.render metrics, OTLP/HTTP export flushed on pagehide. |
| @youneed/dom-provider-rbac | dom | Use @youneed/rbac inside @youneed/dom components — gate UI in html templates with `this.can(action, resource, instance?)`, re-rendering when the current subject changes. |
| @youneed/dom-provider-timers | dom | Lifecycle-scoped timers for @youneed/dom — a composable provider contributing this.timers: setTimeout/setInterval/rAF/idle/delay + the Scheduler API (postTask, yield) + debounce/throttle, all auto-cancelled when the component disconnects. |
| @youneed/dom-provider-virtual | dom | Composable @youneed/dom provider for IntersectionObserver-driven list virtualization (this.virtual) — only visible chunks render. |
| @youneed/dom-provider-zustand | dom | Bind a Zustand store to @youneed/dom components — a composable provider for reactive this.store with optional selector-gated re-renders. |
| @youneed/dom-router | dom | Tiny client-side SPA router (hash / history / query). |
| @youneed/dom-scheduler | dom | Prioritized, batching render scheduler (DOM/Node-agnostic; rAF/idle with setTimeout fallback). |
| @youneed/dom-ui-shad | dom | shadcn-style component library on @youneed/dom (Custom Elements + Tailwind), with a copy-the-source CLI. |
| @youneed/feature-flags | core | Tiny framework-agnostic feature-flag engine: boolean/variant/value flags, attribute targeting + deterministic percentage rollout, synchronous evaluation, SSR snapshot hydration. |
| @youneed/feature-flags-datadog | core | Framework-agnostic @youneed/feature-flags adapter: batch flag EXPOSURES to the Datadog Logs intake (no Datadog SDK, plain fetch) via flags.onEvaluation. |
| @youneed/feature-flags-launchdarkly | core | LaunchDarkly provider adapter for @youneed/feature-flags (Node server SDK-backed remote evaluator). |
| @youneed/feature-flags-posthog | core | PostHog provider for @youneed/feature-flags — a framework-agnostic remote evaluator over PostHog's /decide HTTP API (no SDK, pure fetch). |
| @youneed/feature-flags-vercel | core | Vercel Edge Config source for @youneed/feature-flags: pulls flag definitions from an Edge Config store (plain fetch, no SDK), with polling for live updates. |
| @youneed/http-client | core | Zero-dep resilient fetch: timeout, retry + backoff (honors Retry-After), and a circuit breaker. |
| @youneed/i18n | core | Tiny, fully-typed translation core: dotted-path keys with autocomplete, interpolation, locale switching, subscriptions. |
| @youneed/kv | server | Back-compat alias for @youneed/server-plugin-store (the KV contract + MemoryKV). |
| @youneed/kv-redis | server | Back-compat alias for @youneed/server-plugin-pubsub-redis (RedisKV + RedisPubSub). |
| @youneed/logger | logger | Zero-dep structured logger: levels, JSON lines, child bindings, secret redaction. |
| @youneed/logger-plugin-datadog | logger | @youneed/logger plugin: stamp Datadog-standard default fields (ddsource/service/ddtags) on every record. |
| @youneed/logger-plugin-exception | logger | @youneed/logger plugin: log uncaughtException/unhandledRejection (Winston-style exception handlers). |
| @youneed/logger-plugin-i18n | logger | @youneed/logger plugin: translate log message keys through an @youneed/i18n translator at format time. |
| @youneed/logger-plugin-location | logger | @youneed/logger plugin: stamp each record with the call site (file:line:column) it was logged from. |
| @youneed/logger-plugin-otel | logger | @youneed/logger plugin: stamp trace_id / span_id / trace_flags of the active OpenTelemetry span on every log record. |
| @youneed/logger-transport-file | logger | @youneed/logger transport: append log lines to a file (sync or buffered stream). |
| @youneed/logger-transport-http | logger | @youneed/logger transport: batch-ship log records to an HTTP endpoint via fetch/sendBeacon (universal). |
| @youneed/logger-transport-stdout | logger | @youneed/logger transport: fast Node process.stdout/stderr writer for high-throughput servers. |
| @youneed/orm-adapter-mongo | orm | MongoDB adapter for @youneed/orm-nosql (official mongodb driver). |
| @youneed/orm-adapter-mysql | orm | MySQL adapter for @youneed/orm-sql (mysql2-backed). |
| @youneed/orm-adapter-postgres | orm | PostgreSQL adapter for @youneed/orm-sql (node-postgres/`pg`-backed). |
| @youneed/orm-nosql | orm | Tiny document/NoSQL ORM on standard TC39 decorators (Mongoose-style collections, Mongo-style query filters, pluggable document-store adapters; ships an in-memory store). |
| @youneed/orm-sql | orm | Tiny SQL ORM on standard TC39 decorators (TypeORM-style entities, pluggable DB adapters). |
| @youneed/otel | core | Shared OpenTelemetry setup for @youneed/* framework levels: real OTel SDK (node + web), OTLP/HTTP traces + metrics, W3C propagation helpers, instrumented fetch. |
| @youneed/rbac | core | Tiny framework-agnostic authorization engine: roles + permissions (action × resource), role inheritance, ownership/attribute conditions, deny-over-allow, synchronous can(). |
| @youneed/schema | core | class-validator-style DTO validation on standard TC39 decorators (no reflect-metadata, works in JS). |
| @youneed/secrets | core | Tiny framework-agnostic secrets manager: one SecretsProvider contract, caching, `secret://` reference resolution, env/memory/file built-ins; Vault & AWS adapters ship separately. |
| @youneed/secrets-aws | core | AWS Secrets Manager provider for @youneed/secrets (pure fetch + SigV4, no aws-sdk). |
| @youneed/secrets-vault | core | HashiCorp Vault (KV v2) SecretsProvider for @youneed/secrets — pure fetch, no SDK. |
| @youneed/server | server | Tiny typed HTTP server (controllers, middleware, cache). |
| @youneed/server-adapter | server | Run a @youneed/server app on any runtime: a Web `fetch` bridge (Bun / Deno / edge / Workers) over the app's Node request listener, plus node/bun/deno serve adapters. |
| @youneed/server-middleware-accept-language | server | @youneed/server middleware: negotiate the request locale from the Accept-Language header (HTTP content negotiation). |
| @youneed/server-middleware-api-key | server | @youneed/server middleware: shared-secret API key auth (header/query/scheme), SHA-256 matched, principal mapping. |
| @youneed/server-middleware-authorization | server | @youneed/server middleware: generic Authorization-header auth with a pluggable signing algorithm (bring your own sign/verify/generatePair) + self-contained signed tokens. |
| @youneed/server-middleware-basic-auth | server | @youneed/server middleware: HTTP Basic auth + API-key auth. |
| @youneed/server-middleware-bearer | server | @youneed/server middleware: Bearer-token authentication. |
| @youneed/server-middleware-body-limit | server | @youneed/server middleware: reject oversized request bodies. |
| @youneed/server-middleware-compression | server | @youneed/server middleware: gzip/brotli response compression. |
| @youneed/server-middleware-cors | server | @youneed/server middleware: CORS headers + preflight. |
| @youneed/server-middleware-csrf | server | @youneed/server middleware: stateless CSRF (double-submit cookie). |
| @youneed/server-middleware-etag | server | @youneed/server middleware: ETag + conditional GET (304). |
| @youneed/server-middleware-health | server | @youneed/server middleware: Kubernetes-style liveness/readiness probe endpoints. |
| @youneed/server-middleware-helmet | server | @youneed/server middleware: security response headers (helmet-style). |
| @youneed/server-middleware-http2-guard | server | @youneed/server middleware: HTTP/2 DoS protection (Rapid Reset, stream floods). |
| @youneed/server-middleware-https-redirect | server | @youneed/server middleware: force HTTPS + canonical host/trailing-slash redirects. |
| @youneed/server-middleware-idempotency | server | @youneed/server middleware: Idempotency-Key — safe retries of unsafe requests via a pluggable KV store. |
| @youneed/server-middleware-ip-filter | server | @youneed/server middleware: allow/deny requests by client IP (CIDR, IPv4/IPv6), proxy-aware. |
| @youneed/server-middleware-jwt | server | @youneed/server middleware: JWT (JWS) authentication — verifies signature (HS/RS/PS/ES) + claims, with JWKS support. Zero dependencies. |
| @youneed/server-middleware-keep-alive | server | @youneed/server middleware: advertise a Keep-Alive header + drop connections programmatically. |
| @youneed/server-middleware-load-shed | server | @youneed/server middleware: load-shedding (global concurrency limit) — fast-fail surplus requests with 503 under overload. |
| @youneed/server-middleware-logger | server | @youneed/server middleware: attach a request-scoped @youneed/logger child (bound to requestId/traceId) — log(ctx). |
| @youneed/server-middleware-metrics | server | @youneed/server middleware: dependency-free Prometheus metrics + /metrics exposition. |
| @youneed/server-middleware-rate-limit | server | @youneed/server middleware: rate limiting with pluggable strategies (fixed/sliding/token-bucket/exponential). |
| @youneed/server-middleware-request-id | server | @youneed/server middleware: per-request correlation id (trusted inbound X-Request-Id or generated), echoed + log-correlated. |
| @youneed/server-middleware-request-logger | server | @youneed/server middleware: per-request access logging. |
| @youneed/server-middleware-server-timing | server | @youneed/server middleware: emit a Server-Timing response header (DevTools timings). |
| @youneed/server-middleware-session | server | @youneed/server middleware: signed-cookie sessions with a pluggable store. |
| @youneed/server-middleware-static | server | @youneed/server middleware: serve static files from disk with HTTP Range, ETag, and conditional-request support. |
| @youneed/server-middleware-timeout | server | @youneed/server middleware: fail requests that exceed a deadline (503). |
| @youneed/server-middleware-trace | server | @youneed/server middleware: W3C traceparent distributed tracing (dependency-free, OpenTelemetry-compatible IDs). |
| @youneed/server-middleware-trust-proxy | server | @youneed/server middleware: resolve the real client IP/protocol/host from X-Forwarded-* headers behind a proxy/CDN. |
| @youneed/server-middleware-webhook-signature | server | @youneed/server middleware: verify inbound webhook HMAC signatures over the raw body. Pure verify function + generic builder + per-provider subpaths (stripe/github/shopify). |
| @youneed/server-plugin-cluster | server | @youneed/server plugin: multi-core supervisor — fork workers across CPUs, restart crashes, graceful drain on SIGTERM. |
| @youneed/server-plugin-devtools | server | @youneed/server plugin: dev-time topology, OWASP security audit, OpenAPI generation and microbenchmarks — mounts a devtools UI on a live app. |
| @youneed/server-plugin-docker | server | Wrap a @youneed/server or SSR app in Docker: generate a Dockerfile + .dockerignore + docker-compose.yml, with backing services (Mongo/MySQL/Postgres/Redis) inferred from the app's mounted plugins. Ships a devtools tab to view the artifacts. |
| @youneed/server-plugin-env | server | Type-safe, fail-fast environment variables for @youneed/server — coerce + validate process.env against a @youneed/schema spec, with a devtools-visible ServerPlugin. |
| @youneed/server-plugin-feature-flags | server | @youneed/server plugin + controller provider for @youneed/feature-flags: request-scoped `this.flags`, a client-bootstrap snapshot route, dev override toggles, and a devtools Feature Flags tab. |
| @youneed/server-plugin-graphql | server | @youneed/server plugin: a spec-compliant GraphQL HTTP endpoint over graphql-js (schema-first SDL or programmatic schema, GraphiQL, resolvers, per-request context), with a devtools tab (playground, SDL viewer, recent ops). |
| @youneed/server-plugin-grpc | server | @youneed/server plugin: run a gRPC (HTTP/2) server alongside your @youneed/server app on its lifecycle, with introspection + a unary call-tester over HTTP and a devtools tab. |
| @youneed/server-plugin-jobs | server | @youneed/server plugin: job scheduler (cron, intervals, delays) wired to the server lifecycle, with an optional KV leader-lock for fleets. |
| @youneed/server-plugin-jsonrpc | server | JSON-RPC 2.0 for @youneed/server: class + TC39-decorator endpoints (@JsonRPC.method) with schema-validated params, served over a POST request or a Chrome-CDP-style WebSocket, plus a @youneed/server-plugin-devtools panel to inspect methods and debug calls. |
| @youneed/server-plugin-kv | server | Mount a KV store (from @youneed/server-plugin-store) as a ServerPlugin for @youneed/server: tracks reads/writes/hit-rate + surfaces a live key browser in @youneed/server-plugin-devtools (Infra card, header tab, flow node). Re-exports the KV contract. |
| @youneed/server-plugin-mailer | server | @youneed/server plugin: transactional email with pluggable transports — built-in dependency-free SMTP plus AWS SES, SendGrid and Postmark (fetch-based, no SDKs), with a devtools tab. |
| @youneed/server-plugin-oauth2 | server | OAuth2/OIDC login (Authorization Code + PKCE) for @youneed/server: a ServerPlugin core + universal, named providers (github/google/facebook/yandex/vk) you can extend, plus Telegram Login Widget. |
| @youneed/server-plugin-otel | server | @youneed/server plugin + middleware: real OpenTelemetry SDK — SERVER spans per request with W3C propagation, http.server metrics, OTLP/HTTP export. |
| @youneed/server-plugin-otlp | server | @youneed/server plugin: export per-request traces over OTLP/HTTP (JSON) to an OpenTelemetry collector / Jaeger / Tempo — no OTel SDK — with a devtools tab. |
| @youneed/server-plugin-otp | server | One-time-password login (passwordless / 2FA) for @youneed/server: a ServerPlugin core + pluggable channels — email (built-in SMTP) and SMS. |
| @youneed/server-plugin-pubsub | server | Backend-agnostic publish/subscribe for @youneed/server: PubSub contract + MemoryPubSub + a ServerPlugin that surfaces channels in @youneed/server-plugin-devtools (flow graph, header tab, message sender). Re-exports the KV store. |
| @youneed/server-plugin-pubsub-deno | server | Deno KV adapter for @youneed/server-plugin-pubsub + -store: DenoKV and DenoPubSub (Deno KV queues). Runs on the Deno runtime / Deno Deploy. |
| @youneed/server-plugin-pubsub-kafka | server | Kafka adapter for @youneed/server-plugin-pubsub: KafkaPubSub over topics, via the official `kafkajs`. Pub/sub only (pair with a KV adapter for state). |
| @youneed/server-plugin-pubsub-nats | server | NATS adapter for @youneed/server-plugin-pubsub: NatsPubSub over subjects, via the official `nats` (nats.js). Pub/sub only (pair with a KV adapter for state). |
| @youneed/server-plugin-pubsub-postgres | server | Postgres adapter for @youneed/server-plugin-pubsub + -store: PostgresKV (table) and PostgresPubSub (LISTEN/NOTIFY), via the official `pg` driver. |
| @youneed/server-plugin-pubsub-rabbitmq | server | RabbitMQ adapter for @youneed/server-plugin-pubsub: RabbitMQPubSub over an AMQP exchange, via the official `amqplib`. Pub/sub only (pair with a KV adapter for state). |
| @youneed/server-plugin-pubsub-redis | server | Redis/Valkey adapter — RedisKV (@youneed/server-plugin-store) + RedisPubSub (@youneed/server-plugin-pubsub) over a hand-rolled minimal RESP2 client (zero external deps). |
| @youneed/server-plugin-pubsub-sqs | server | AWS SQS adapter for @youneed/server-plugin-pubsub: SqsPubSub over SQS queues (channel = queue), pure fetch + SigV4 (no aws-sdk). Long-poll consumer. |
| @youneed/server-plugin-queue | server | @youneed/server plugin: a durable background job queue (retries, backoff, dead-letter, delayed jobs, concurrent workers) persisted to a KV store, with a devtools tab. |
| @youneed/server-plugin-rbac | server | @youneed/server plugin + controller provider + guard for @youneed/rbac: request-scoped `this.can`, an `authorize(action, resource)` guard, a roles/check introspection API, and a devtools RBAC tab. |
| @youneed/server-plugin-secrets | server | @youneed/server plugin + controller provider for @youneed/secrets: request-safe `this.secrets`, SAFE introspection routes (names + masked presence probe — values NEVER exposed), and a devtools Secrets tab. |
| @youneed/server-plugin-ssr | server | @youneed/server plugin: add SSR pages and satellite SSR modules (robots/sitemap/rss/llms/structured-data) to a server from the outside. |
| @youneed/server-plugin-storage | server | @youneed/server plugin: pluggable object/blob storage (memory, filesystem, S3) behind one StorageAdapter contract, with a devtools object-browser tab. |
| @youneed/server-plugin-store | server | Distributed key-value contract (KV) + in-process MemoryKV. The backing store is chosen by adapter (redis/postgres/deno via @youneed/server-plugin-pubsub-*). |
| @youneed/server-upload | server | Streaming multipart/form-data file uploads for @youneed/server: web streams, progress, and size/extension/type/name/content guards. |
| @youneed/ssr | ssr | Server-side rendering + Page entity for @youneed components. |
| @youneed/ssr-plugin-canonical | ssr | SSR page middleware for @youneed: emit <link rel="canonical"> and hreflang alternates per page. |
| @youneed/ssr-plugin-csp | ssr | SSR Content-Security-Policy for @youneed: per-request nonce, header builder, and inline-script nonce injection for document responses. |
| @youneed/ssr-plugin-feature-flags | ssr | SSR module for @youneed/server-plugin-ssr: evaluate feature flags on the server and inject the snapshot (window.__FLAGS__) into every page for client hydration. |
| @youneed/ssr-plugin-llms | ssr | SSR module for @youneed/server-plugin-ssr: serve an llms.txt (and optional llms-full.txt) guide for LLM crawlers. |
| @youneed/ssr-plugin-meta | ssr | SSR page middleware for @youneed: emit SEO <meta> + OpenGraph + Twitter Card tags from per-page declarations. |
| @youneed/ssr-plugin-otel | ssr | @youneed/ssr module: real OpenTelemetry SDK — ssr.render spans per static page render, ssr.render metrics, via the shared @youneed/otel core. |
| @youneed/ssr-plugin-preload | ssr | SSR page middleware for @youneed: emit resource hints (<link rel=preload/modulepreload/preconnect/dns-prefetch/prefetch>) per page. |
| @youneed/ssr-plugin-robots | ssr | SSR module for @youneed/server-plugin-ssr: generate robots.txt with per-agent allow/disallow rules and sitemap links. |
| @youneed/ssr-plugin-rss | ssr | SSR module for @youneed/server-plugin-ssr: serve an RSS 2.0 or Atom feed from a list of items. |
| @youneed/ssr-plugin-sitemap | ssr | SSR module for @youneed/server-plugin-ssr: generate sitemap.xml from mounted page routes plus explicit entries. |
| @youneed/ssr-plugin-speculation | ssr | SSR page middleware for @youneed/ssr: inject the Speculation Rules API <script> (prefetch/prerender) from a page's declared rules. |
| @youneed/ssr-plugin-structured-data | ssr | SSR module for @youneed/server-plugin-ssr: inject JSON-LD structured data (schema.org) into page <head>, with typed builders. |
| @youneed/ssr-router | ssr | SSR router for @youneed: an ssr() module adding Error/404 pages (server), plus the @youneed/dom-router for client SPA navigation. |
| @youneed/test | test | you need test framework |
| @youneed/test-devtools | test | Live web-UI devtools reporter for @youneed/test — streams the run to a browser over SSE |
| @youneed/test-expect-extra | test | Extra expect matchers for @youneed/test |
| @youneed/test-plugin-benchmark | test | Benchmark extension for @youneed/test (decorator + plugin + reporter) |
| @youneed/test-plugin-feature-flags | test | Deterministic feature-flag helpers for @youneed/test: a fresh FeatureFlags fixture that resets overrides between tests, plus a scoped withFlags(...) override helper. |
| @youneed/test-plugin-i18n | test | Translation parity checks for @youneed/test: assert no missing/extra keys or drifted placeholders across locales. |
| @youneed/test-plugin-otel | test | @youneed/test plugin: real OpenTelemetry SDK — a span per test case with steps and failure status, test.* metrics, OTLP/HTTP export flushed at teardown. |
| @youneed/test-plugin-rbac | test | Deterministic RBAC helpers for @youneed/test: a fresh RBAC fixture that resets role tweaks between tests, ergonomic Subject builders, expectCan/expectCannot assertions, and a scoped withRole(...) helper. |
| @youneed/test-reporter-console | test | Colored console reporter for @youneed/test |
| @youneed/test-reporter-html | test | HTML report reporter for @youneed/test |
| @youneed/test-reporter-junit | test | JUnit XML reporter for @youneed/test |
| @youneed/test-reporter-progress | test | Live, interactive per-lane progress reporter for @youneed/test |
| @youneed/test-reporter-tap | test | TAP reporter for @youneed/test |
| @youneed/test-resilience | test | Timeout and retry plugins for @youneed/test |
| @youneed/test-snapshot | test | Snapshot testing for @youneed/test |
| @youneed/ts-plugin | core | TypeScript language-service plugin: completions inside html`` / css`` for @youneed/dom — custom-element tags, .props and @events. |
| @youneed/vite-plugin | core | Vite plugin for @youneed components. |