> ## Documentation Index
> Fetch the complete documentation index at: https://stars-components.js.org/llms.txt
> Use this file to discover all available pages before exploring further.

# @wolfstar/http-framework

> Changelog for @wolfstar/http-framework: releases, new features, and fixes.

Changes to [`@wolfstar/http-framework`](https://stars-components.js.org/documentation/packages/http-framework). For the weekly summary across all packages, see the [changelog overview](https://stars-components.js.org/documentation/changelog/index.md).

## `6.5.1` (2026-10-18)

### Updates

* **Dependencies** — Updated `@wolfstar/cli` to `2.11.0`, `@wolfstar/schema` to `0.12.0`.

## `6.5.0` (2026-10-17)

### New features

* **`getRootData` re-export** — `@wolfstar/http-framework` now re-exports `getRootData` from `@sapphire/pieces`. Module locales added with `ctx.addLocales` use it to find the default languages directory. ([#339](https://github.com/wolfstar-project/stars-components/pull/339))

### Updates

* **Dependencies** — Updated `@wolfstar/schema` to `0.11.0`, `@wolfstar/cli` to `2.10.0`.

## `6.4.0` (2026-10-12)

### New features

* **Startup command registration** — Opt in through `ClientOptions.commands` to register commands when the client starts. Synchronize global or guild commands, get conflicts reported, and keep unknown deployed commands by default. Use `when` to pick the single process that registers. A registration failure logs a warning without stopping the HTTP server. ([#325](https://github.com/wolfstar-project/stars-components/pull/325))
* **`ApplicationCommandRegistry.sync()`** — Incrementally synchronizes registered commands with Discord.

## `6.3.2` (2026-10-11)

### Bug fixes

* **No crash after an answered interaction** — A command, autocomplete, or interaction handler that threw right after answering no longer crashes the process with `ERR_STREAM_WRITE_AFTER_END`. The framework now skips the error reply when the response has already ended. The error is still emitted. ([#322](https://github.com/wolfstar-project/stars-components/pull/322))

## `6.3.1` (2026-10-09)

### Updates

* **Dependencies** — Updated `@wolfstar/schema` to `0.10.0`, `@wolfstar/cli` to `2.7.0`.

## `6.3.0` (2026-10-08)

### New features

* **Preconditions** — You can now run checks before a command, its autocomplete, or an interaction handler, following `@sapphire/framework`. Add a `Precondition` piece to the new `preconditions` store and implement `chatInputRun`, `contextMenuRun`, `autocompleteRun`, and/or `interactionHandlerRun`, returning `ok()` or `error()` (a `PreconditionError` for the piece). A piece with a `position` is global and runs in ascending order of it. There are no built-in preconditions. ([#300](https://github.com/wolfstar-project/stars-components/pull/300))
* **`preconditions` option** — List the preconditions to run in `Command.Options` or `InteractionHandler.Options`: by name, by name with a `context`, or as a `PreconditionFunction`. The list is an `AND`, a nested array is an `OR`, and nesting alternates from there, for example `['Connect', ['Moderator', ['DJ', 'SongAuthor']]]`. Pass `{ entries, mode: PreconditionRunMode.Parallel }` to start every entry at once.
* **Precondition events** — The first denial skips the method and emits `chatInputCommandDenied`, `contextMenuCommandDenied`, `autocompleteDenied`, or `interactionHandlerDenied`. New events `preChatInputCommandRun`, `preContextMenuCommandRun`, `chatInputCommandAccepted`, `contextMenuCommandAccepted`, `autocompleteAccepted`, and `interactionHandlerAccepted` let you observe the flow. A piece with no method for a chat input or context menu command denies it; for an autocomplete or an interaction handler it is skipped.
* **New exports** — `AllFlowsPrecondition`, `PreconditionStore`, `runPreconditions`, `PreconditionRunMode`, `PreconditionRunCondition`, the array types, and the related types are exported. `Identifiers` gains `PreconditionMissingChatInputHandler` and `PreconditionMissingContextMenuHandler`.
* **`isUserError`** — A new helper checks whether an error is a `UserError`, and also recognizes a `UserError` from another copy of the package by its shape. ([#298](https://github.com/wolfstar-project/stars-components/pull/298))

### Updates

* **`UserError` routed to `*Denied` events** — A `UserError` thrown by a command, an autocomplete handler, or an interaction handler now goes to `chatInputCommandDenied` / `contextMenuCommandDenied` (`Events.ChatInputCommandDenied`, `Events.ContextMenuCommandDenied`), `autocompleteDenied`, or `interactionHandlerDenied` with `(error: UserError, context)`, instead of `commandError`, `autocompleteError`, or `interactionHandlerError`. Other errors still reach the `*Error` events; the `error` event and the HTTP response are unchanged. ([#298](https://github.com/wolfstar-project/stars-components/pull/298))
* **Run events emitted after preconditions** — `commandRun`, `autocompleteRun`, and `interactionHandlerRun` now fire only after the preconditions pass, so a denied interaction does not emit them. Without preconditions nothing changes.
* **Dependencies** — Updated `@wolfstar/cli` to `2.6.1`.

### Migration

* **Move `UserError` replies to `*Denied` listeners** — If a listener on `commandError`, `autocompleteError`, or `interactionHandlerError` replies to the user with a `UserError` (including the `PreconditionError` from [`@wolfstar/decorators`](https://stars-components.js.org/documentation/changelog/stars-components/decorators)), move that logic to `chatInputCommandDenied`, `contextMenuCommandDenied`, `autocompleteDenied`, or `interactionHandlerDenied`. Those errors no longer reach the `*Error` events.

## `6.2.2` (2026-10-07)

### Updates

* **Dependencies** — Updated `@wolfstar/cli` to `2.6.0`, `@wolfstar/schema` to `0.9.0`.

## `6.2.1` (2026-10-06)

### Updates

* **Dependencies** — Updated `@wolfstar/cli` to `2.5.0`, `@wolfstar/schema` to `0.8.0`.

## `6.2.0` (2026-10-06)

### New features

* **Typed command options with `stars codegen`** — Set `codegen.commands` in `stars.config` (`true`, or `{ output }`, default `src/@types/commands.d.ts`) and `stars codegen` reads the commands from the built bot and writes a `CommandOptionsRegistry` entry per command path (`'ping'`, `'math add'`, `'subscriptions twitch add'`). Use `Command.OptionsOf<'math add'>` instead of a hand-written `interface Options`: `required` options are non-optional, `choices` become a literal union, and `channel_types` narrow the channel. `stars codegen --check` fails with `CODEGEN_OUTDATED` when the file is stale, and `--json` reports the result. ([#275](https://github.com/wolfstar-project/stars-components/pull/275))

### Updates

* **Dependencies** — Updated `@wolfstar/cli` to `2.4.0`, `@wolfstar/schema` to `0.7.0`.

## `6.1.1` (2026-10-04)

### New features

* **`stars commands diff` and `stars commands deploy`** — `stars commands diff` compares the commands your built bot defines with those deployed on Discord (`--check` for CI); `stars commands deploy` overwrites them after a confirmation (`--yes` for scripts). Both need `@wolfstar/http-framework` 6.1 or later and a built project. ([#257](https://github.com/wolfstar-project/stars-components/pull/257))
* **`stars doctor`** — Checks the runtime, the framework, credentials, the dev port, the tunnel, and generated files, with a fix for each problem (`--online` also queries Discord, `--json` for scripts).
* **`stars completions <bash|zsh|fish>`** — Prints a shell completion script for the registered commands.

### Updates

* **`stars info`** — Lists the installed modules and the new `dev` options. The README now documents the `dev` options of `stars.config`.
* **Dependencies** — Updated `@wolfstar/cli` to `2.3.0`, `@wolfstar/schema` to `0.6.0`.

## `6.1.0` (2026-10-02)

### New features

* **Object-based plugins** — Define Vite-style plugins with `definePlugin` and the `StarsPlugin` type (`name`, `enforce: 'pre' | 'post'`, `apply`, and the five lifecycle hooks as `(client, options) => …`). Add per-client plugins with the new `plugins` option in `ClientOptions`. A failing hook throws `PluginHookError`, which names the plugin. ([#246](https://github.com/wolfstar-project/stars-components/pull/246))

### Updates

* **Plugin ordering** — `PluginManager` runs hooks as `pre`, plain, then `post`, in registration order within each group. `Client.use` accepts plugin objects and nested arrays.
* **Legacy plugins deprecated** — The `Plugin` class, symbol hooks, and `registerXHook` keep working through an adapter but emit a one-time `DeprecationWarning` (`HTTP_FRAMEWORK_LEGACY_PLUGIN`) per plugin.
* **Dependencies** — Updated `@wolfstar/schema` to `0.5.0`, `@wolfstar/cli` to `2.2.0`.

## `6.0.1`

### New features

* **`env` option in `stars.config`** — Added an `env` option that mirrors `@wolfstar/env-utilities`' setup options and is registered automatically as the first import of the built entry, before plugin registrations and the bot's own modules. Added Nuxt-style lifecycle `hooks` (`config:resolved`, `env:options`, `prepare:*`, `builder:created`, `tsdown:options`, `build:*`, `dev:*`) run with `hookable`.
* **`future.compatibilityVersion: 5` by default** — Version 5 is now the default: it is version 4 plus the automatic `env` registration, which turns on when the project depends on `@wolfstar/env-utilities` (and stays off with Nitro). Version 4 is still supported. Version 3 is end-of-life: it still works, now reports a `COMPATIBILITY_VERSION_EOL` warning, and will be removed in the next major. Projects generated by `@wolfstar/create-http-framework` with the `tsdown` or `vite` build no longer call `setup()` from `@wolfstar/env-utilities` by hand; `tsc` and JavaScript projects keep it and set `env: false`. ([#243](https://github.com/wolfstar-project/stars-components/pull/243))

### Updates

* **Dependencies** — Updated `@wolfstar/schema` to `0.4.0`, `@wolfstar/cli` to `2.1.0`.

## `6.0.0` (2026-09-24)

### New features

* **`Client.fetch()`** — `client.fetch(request)` is the Web `Request`/`Response` counterpart of `listen()`. It runs the same signature verification and routing without binding a port, for Workers, `Bun.serve`, `Deno.serve`, and similar runtimes.
* **`stars` binary ships with `http-framework`** — Installing `@wolfstar/http-framework` now gives you the `stars` command, with no separate `@wolfstar/cli` install.

### Updates

* **Config schema moved to `@wolfstar/schema`** — The `stars.config.*` schema and loader now live in [`@wolfstar/schema`](https://stars-components.js.org/documentation/changelog/stars-components/schema). Imports from `@wolfstar/http-framework/config` keep working unchanged.
* **Plugin support** — [`@wolfstar/plugin-api`](https://stars-components.js.org/documentation/changelog/plugins/plugin-api), [`@wolfstar/plugin-i18next`](https://stars-components.js.org/documentation/changelog/plugins/plugin-i18next), [`@wolfstar/plugin-logger`](https://stars-components.js.org/documentation/changelog/plugins/plugin-logger), and [`@wolfstar/plugin-subcommands-advanced`](https://stars-components.js.org/documentation/changelog/plugins/plugin-subcommands-advanced) now target `5.x`.

### Migration

* **Utility decorators moved to `@wolfstar/decorators`** — `ApplyOptions`, `RequiresGuildContext`, `RequiresDMContext`, `RequiresUserPermissions`, `RequiresClientPermissions`, `Enumerable`, `EnumerableMethod`, `createClassDecorator`, `createMethodDecorator`, `createProxy`, `createFunctionPrecondition`, and the `PieceConstructor`/`ContextFallback` types are no longer exported by the framework. Install `@wolfstar/decorators` and import them from there instead; their behaviour is unchanged. The `Register*` decorators and `RestrictGuildIds` stay in the framework. `@wolfstar/decorators` declares `@wolfstar/http-framework` as a peer dependency. `@wolfstar/schema` now includes `@wolfstar/decorators` in its default `imports.presets`, so projects using the `stars` CLI's auto imports keep getting the decorators without an explicit import once the package is installed. ([#238](https://github.com/wolfstar-project/stars-components/pull/238))

## `5.1.3`

### Updates

* **Dependencies** — Updated `@wolfstar/cli` to `2.0.3`, `@wolfstar/schema` to `0.2.1`.

## `5.1.2`

### Bug fixes

* **Require `@wolfstar/cli` release with plugin registration fix** — Upgrading the framework alone now also stops `stars build`/`stars dev` from crashing with `ERR_PACKAGE_PATH_NOT_EXPORTED` on `@wolfstar/plugin-cache`, `@wolfstar/plugin-gateway`, or `@wolfstar/plugin-sharder`. ([#231](https://github.com/wolfstar-project/stars-components/pull/231))

### Updates

* **Dependencies** — Updated `@wolfstar/cli` to `2.0.2`.

## `5.1.1`

### Bug fixes

* **Fix auto-imports clash with `setup()`** — Stopped auto-importing `@wolfstar/env-utilities`' `setup`, which clashed with the `setup()` scaffolded projects export from `src/lib/setup/all.ts` and printed a duplicated import warning on every build. ([#222](https://github.com/wolfstar-project/stars-components/pull/222))

## `5.1.0`

### New features

* **Align configuration entry points with Nuxt** — Added framework schema and package metadata exports, a lightweight schema/config helper, and split schema input types from config resolution while preserving existing exports. ([#209](https://github.com/wolfstar-project/stars-components/pull/209))
* **Split `stars.config.*` schema into `@wolfstar/schema`** — The `stars.config.*` schema and loader (`defineConfig`, `loadStarsConfig`, `configDiagnostics`, and friends) now live in a new package, `@wolfstar/schema`. `@wolfstar/http-framework/config` re-exports `@wolfstar/schema`'s public surface unchanged, so existing `import { defineConfig } from '@wolfstar/http-framework/config'` code keeps working with no changes needed. `@wolfstar/http-framework` now depends on `@wolfstar/cli` and ships a `stars` bin (`bin/stars.mjs`, re-exporting `@wolfstar/cli/cli`), so installing `@wolfstar/http-framework` is now enough to get the `stars` command. ([#209](https://github.com/wolfstar-project/stars-components/pull/209))

### Updates

* **Dependencies** — Updated `@wolfstar/cli` to `2.0.0`, `@wolfstar/schema` to `0.2.0`.

### Migration

* **`@wolfstar/cli` no longer depends on `@wolfstar/http-framework`** — Matching how `@nuxt/cli` has no dependency on `nuxt`, `@wolfstar/cli` now depends on `@wolfstar/schema` instead. Projects that installed `@wolfstar/cli` without also depending on `@wolfstar/http-framework` directly now need to add `@wolfstar/http-framework` themselves. Every project scaffolded by `@wolfstar/create-http-framework`, or that already depends on `@wolfstar/http-framework`, is unaffected. `@wolfstar/cli`'s own public exports (`loadStarsConfig`, `configDiagnostics`, `ConfigDiagnosticCode`, `ResolvedStarsConfig`, re-exported from `@wolfstar/schema`) are unchanged. ([#209](https://github.com/wolfstar-project/stars-components/pull/209))

## `5.0.0` (2026-09-24)

### New features

* **`Client.fetch()`** — `client.fetch(request)` is the Web `Request`/`Response` counterpart of `listen()`. It runs the same signature verification and routing without binding a port, for Workers, `Bun.serve`, `Deno.serve`, and similar runtimes.
* **`stars` binary ships with `http-framework`** — Installing `@wolfstar/http-framework` now gives you the `stars` command, with no separate `@wolfstar/cli` install.
* **`experimental.enableNitro` implemented** — `stars dev`/`stars build` now build the bot through Nitro v3's own Vite plugin (`nitro/vite`, requires Vite 8). `@wolfstar/http-framework`: `Client` now has a `fetch(request, options?)` method, the Web `Request`/`Response` counterpart of `listen()`, running the exact same signature verification, routing, and replies without binding a port, for anything that speaks Fetch instead of `node:http` (Nitro, a Worker, `Bun.serve`, `Deno.serve`, Vite's own dev middleware). The previously-unannounced `@wolfstar/http-framework/fetch` submodule (`createFetchHandler`/`FetchHandler`/`FetchHandlerOptions`) is removed in favour of this method on `Client` itself. `@wolfstar/cli`: `NitroBuilder` reuses the project's own `vite.config.*`/`stars.config#vite`, adds a generated server entry, and produces `.output/` laid out for the configured `experimental.nitro.preset` (`node-server` by default, deployable to anything Nitro targets). `stars dev` rebuilds and restarts on every change. `stars prepare`'s generated `.stars/tsconfig.json` now emits the same `~`/`@`/`~~`/`@@` aliases. ([#207](https://github.com/wolfstar-project/stars-components/pull/207))

### Updates

* **Config schema moved to `@wolfstar/schema`** — The `stars.config.*` schema and loader now live in [`@wolfstar/schema`](https://stars-components.js.org/documentation/changelog/stars-components/schema). Imports from `@wolfstar/http-framework/config` keep working unchanged.
* **Plugin support** — [`@wolfstar/plugin-api`](https://stars-components.js.org/documentation/changelog/plugins/plugin-api), [`@wolfstar/plugin-i18next`](https://stars-components.js.org/documentation/changelog/plugins/plugin-i18next), [`@wolfstar/plugin-logger`](https://stars-components.js.org/documentation/changelog/plugins/plugin-logger), and [`@wolfstar/plugin-subcommands-advanced`](https://stars-components.js.org/documentation/changelog/plugins/plugin-subcommands-advanced) now target `5.x`.
* **Replace `ConfigError` and `CliError` with `nostics` diagnostics** — `@wolfstar/http-framework/config` no longer exports `ConfigError`/`ConfigErrorOptions`. Every `stars.config.*` validation and load failure is now built from `configDiagnostics` (also exported) and thrown as a `nostics` `Diagnostic`. Catch it with `instanceof Diagnostic` (from `nostics`) instead of `instanceof ConfigError`. The option path is folded into the diagnostic's message; the configuration file is now in `.sources`. `@wolfstar/cli` no longer exports `CliError`/`CliErrorOptions`. Its errors are now built from `cliDiagnostics` and are `Diagnostic` instances too. `formatError` renders a `Diagnostic` with `nostics`' own ANSI formatter; `exitCodeOf` maps `stars.config.*` diagnostic codes to exit code `2` and `BUILD_FAILED` to `3`. `ExitCode`, `exitCodeOf`, and `formatError` keep their existing exports and behaviour for every other case. ([#205](https://github.com/wolfstar-project/stars-components/pull/205))

## `4.0.2`

### Updates

* **Dependencies** — Updated `unimport` to v7.

## `4.0.1`

### Updates

* **Dependencies** — Updated all non-major dependencies.

## `4.0.0` (2026-09-17)

### New features

* **Compatibility version 4 by default** — The Stars workflow is now convention-first: `stars dev` forces development mode, `src/locales` is copied and watched automatically, and environment files are discovered under both `src/` and the project root. The interactive dev UI now supports `t` to open or close a public quick tunnel without configuring `dev.tunnel`. ([#182](https://github.com/wolfstar-project/stars-components/pull/182))

### Updates

* **Structured logging** — Replaced direct `console` calls with `@wolfstar/logger` for structured, leveled logging (HMR events, command router warnings). ([#182](https://github.com/wolfstar-project/stars-components/pull/182))

## `3.6.0`

### New features

* **Aligned `stars dev` terminal UI with Nuxt** — The tsdown builder now leaves dependencies external with `deps.neverBundle`, removing the deprecated option and keeping shared dependencies external for dynamically loaded pieces. Its entry list, target, and output-size table are suppressed; warnings and errors remain available in the log browser and log file. The bottom-aligned panel displays an animated Stars wordmark, aligned URLs, build-phase progress and elapsed time, readiness timing, and diagnostic counts. `dev.banner` accepts custom text/lines or `false` to hide the wordmark. Log, help, and session-info views use the alternate screen and restore the panel when closed. Logs support search, source/level filters, selection, copying, and jumping to the last error with context. Stack frames are dimmed and no longer counted as separate errors; Node warnings are classified as warnings rather than errors. Rebuild state and duration now reset on Rolldown's per-build hook, including recovery from a failed build. Reduced motion preserves the elapsed clock, and redirected input, dumb terminals, and small panes get a safe plain fallback. ([#168](https://github.com/wolfstar-project/stars-components/pull/168))

### Updates

* **Dependencies** — Updated `chokidar` to v5.

## `3.5.0`

### New features

* **Configure `tsdown` build from `stars.config`** — The `tsdown` block is now the project's build configuration, typed with the options a bot actually reaches for (`entry`, `format`, `unbundle`, `plugins`, `alias`, `define`, `deps`, `hooks`, ...). What `stars.config` already says fills in the rest, so most projects need nothing in it at all. `build.tsconfig` is now resolved for `tsdown` builds too. `build.configFile` reports which file the build tool is configured from. Two new validation errors: `TSDOWN_OPTIONS_REQUIRE_TSDOWN` and `VITE_OPTIONS_REQUIRE_VITE`. A project that only declares `tsdown: {}` now resolves `build.tool: 'auto'` to `tsdown`. ([#164](https://github.com/wolfstar-project/stars-components/pull/164))
* **Add `future.compatibilityVersion`** — `future` carries the defaults of the next major. `future: { compatibilityVersion: 4 }` changes three things: auto imports are on with the `tsdown` build tool (wired into the build itself); `tsdown` is configured from `stars.config` alone (a `tsdown.config.*` raises `TSDOWN_CONFIG_FILE_UNSUPPORTED`); `build.tool: 'auto'` resolves to `tsdown` for any TypeScript entry without looking for a `tsdown.config.*` or `tsdown` dependency first. `3` is the default and keeps today's behaviour. An unknown version raises `INVALID_COMPATIBILITY_VERSION`. ([#164](https://github.com/wolfstar-project/stars-components/pull/164))

## `3.4.0`

### New features

* **Built-in logger** — `container.logger` is now always available and defaults to a minimal `Logger` that writes to the console, filtered by `LogLevel`. The new `ILogger` interface is the extension point: a plugin can set `options.logger.instance` from a `preGenericsInitialization` hook to replace the built-in implementation, and `new Client({ logger: { level: LogLevel.Debug } })` tunes the default one. The framework internals now log through `container.logger` instead of `console`. ([#159](https://github.com/wolfstar-project/stars-components/pull/159))
* **`stars dev` loop pieces** — Added `dev.typecheck` (runs a type checker next to the bot, supporting `tsc`, `golar`, and `tsz`), `dev.tunnel` (exposes the bot's interactions endpoint publicly via `cloudflared` or a custom URL, with optional `updateEndpoint`), `dev.logFile` (mirrors dev session logs to disk), `stars commands` (lists and cleans deployed application commands), and `stars info` improvements. The interactive `stars dev` UI is now an Ink (React) application. `stars commands clean` without `--name`/`--yes` now runs an interactive wizard. `@wolfstar/cli` requires Node 22 or newer. ([#158](https://github.com/wolfstar-project/stars-components/pull/158))
* **Typed project configuration and the `stars` CLI** — The typed `stars.config.*` schema and loader are owned by `@wolfstar/http-framework` (`@wolfstar/http-framework/config`: `defineConfig`, `loadStarsConfig`, `ConfigError`). `@wolfstar/cli` ships the `stars` binary: `stars dev` builds and restarts the bot, `stars build` runs the build once, `stars info` prints resolved configuration, and `stars codegen` runs i18next type generation. `stars --help` and `stars --version` never load the configuration machinery. ([#158](https://github.com/wolfstar-project/stars-components/pull/158))
* **`experimental` block in `stars.config.*`** — Added `experimental.enableVite` (build through own `vite`), `experimental.enableExternalVite` (watch external build output), and `experimental.enableNitro` (declared but not implemented yet). `stars info` reports which flags are on. ([#158](https://github.com/wolfstar-project/stars-components/pull/158))

## `3.3.0`

### New features

* **`Events` enum** — Every event emitted by `Client` is now available as a member of the `Events` enum, mirroring discord.js' `Events`, so `client.on(Events.CommandError, ...)` can be used instead of the `'commandError'` string literal. Existing string literals keep working. The library now emits through the enum, and the new `ClientEventName` type aliases `keyof ClientEvents`. ([#157](https://github.com/wolfstar-project/stars-components/pull/157))
* **Hot Module Reloading** — `Client` now accepts an `hmr` option that starts a `HotModuleReloader` at the end of `Client#load()`. It watches every path registered in every store and loads, reloads, and unloads pieces in place as their files are created, changed, and deleted, without restarting the process. It accepts all of chokidar's options plus `enabled` (default `true`) and `silent` (default `false`), is exposed as `client.hmr`, and reports operations through new client events (`hmrStart`, `hmrStop`, `hmrPiecesLoaded`, `hmrPieceReloaded`, `hmrPieceUnloaded`, `hmrError`). Unloading a command now also deletes its entry from the `ApplicationCommandRegistry`, so reloading a command no longer leaves the previous entry behind. ([#155](https://github.com/wolfstar-project/stars-components/pull/155))

## `3.2.1`

### Updates

* **Dev tooling** — Replaced `tsc` with `golar` as the typechecker and bumped TypeScript to 7.0.2. This is a dev-tooling-only change with no effect on published output. ([#151](https://github.com/wolfstar-project/stars-components/pull/151))

## `3.2.0`

### New features

* **Utility decorators** — Added `ApplyOptions`, `RequiresGuildContext`, `RequiresDMContext`, `RequiresUserPermissions`, `RequiresClientPermissions`, `Enumerable`, `EnumerableMethod`, `createClassDecorator`, `createMethodDecorator`, `createProxy`, and `createFunctionPrecondition`, modelled after `@sapphire/decorators` and adapted to HTTP-only Discord interactions. The existing `Register*` decorators and `RestrictGuildIds` are now built on the same primitives. ([#131](https://github.com/wolfstar-project/stars-components/pull/131))
* **Sapphire-style error types** — Added `UserError`, `ArgumentError`, `PreconditionError`, and an `Identifiers` enum, modelled after `@sapphire/framework`'s error hierarchy but adapted to the HTTP framework. `ChatInputRouterError` now extends `UserError` and is exported from the package root together with the new errors. ([#132](https://github.com/wolfstar-project/stars-components/pull/132))

## `3.1.4`

### Updates

* **Dependencies** — Updated all non-major dependencies. ([#126](https://github.com/wolfstar-project/stars-components/pull/126))

## `3.1.3`

### Updates

* **Dependencies** — Updated all non-major dependencies. ([#102](https://github.com/wolfstar-project/stars-components/pull/102))

## `3.1.2`

### Updates

* **Restore npm provenance attestation** — Restored npm provenance attestation on publish for all packages. ([#107](https://github.com/wolfstar-project/stars-components/pull/107))

## `3.1.1`

### Updates

* **Upgrade tsdown** — Upgraded tsdown to 0.22.14 and migrated `deps.skipNodeModulesBundle` to `deps.neverBundle`. ([#93](https://github.com/wolfstar-project/stars-components/pull/93))

## `3.1.0`

### New features

* **Imperative command registration** — Added an optional `Command#registerApplicationCommands(registry)` instance method, mirroring `@sapphire/framework`'s `ApplicationCommandRegistry` API, so chat input, subcommand, subcommand group, and context menu commands can be registered imperatively instead of via TypeScript decorators. This also makes the framework usable from plain JavaScript. ([#85](https://github.com/wolfstar-project/stars-components/pull/85))

## `3.0.0`

### New features

* **Plugin system** — Added a Sapphire-style plugin system. Plugins extend the `Plugin` base class and define static lifecycle hooks (`preGenericsInitialization`, `preInitialization`, `postInitialization`, `preLoad`, `postListen`) which are registered through `Client.use(plugin)` and run across the `Client` constructor, `load()`, and `listen()`. A `pluginLoaded` event is emitted as each hook runs. ([#65](https://github.com/wolfstar-project/stars-components/pull/65))

## `2.3.1`

### Updates

* **Provenance attestation** — Added provenance attestation to `publishConfig` for all packages. ([#59](https://github.com/wolfstar-project/stars-components/pull/59))

## `2.3.0`

### New features

* **Testing library** — Introduced a dedicated library for testing `http-framework` bots. Added the `@wolfstar/http-framework-test-utils` package for writing tests against the framework. ([#43](https://github.com/wolfstar-project/stars-components/pull/43))


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.