@wolfstar/http-framework. For the weekly summary across all packages, see the changelog overview.
6.5.1 (2026-10-18)
Updates
- Dependencies — Updated
@wolfstar/clito2.11.0,@wolfstar/schemato0.12.0.
6.5.0 (2026-10-17)
New features
getRootDatare-export —@wolfstar/http-frameworknow re-exportsgetRootDatafrom@sapphire/pieces. Module locales added withctx.addLocalesuse it to find the default languages directory. (#339)
Updates
- Dependencies — Updated
@wolfstar/schemato0.11.0,@wolfstar/clito2.10.0.
6.4.0 (2026-10-12)
New features
- Startup command registration — Opt in through
ClientOptions.commandsto register commands when the client starts. Synchronize global or guild commands, get conflicts reported, and keep unknown deployed commands by default. Usewhento pick the single process that registers. A registration failure logs a warning without stopping the HTTP server. (#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)
6.3.1 (2026-10-09)
Updates
- Dependencies — Updated
@wolfstar/schemato0.10.0,@wolfstar/clito2.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 aPreconditionpiece to the newpreconditionsstore and implementchatInputRun,contextMenuRun,autocompleteRun, and/orinteractionHandlerRun, returningok()orerror()(aPreconditionErrorfor the piece). A piece with apositionis global and runs in ascending order of it. There are no built-in preconditions. (#300) preconditionsoption — List the preconditions to run inCommand.OptionsorInteractionHandler.Options: by name, by name with acontext, or as aPreconditionFunction. The list is anAND, a nested array is anOR, 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, orinteractionHandlerDenied. New eventspreChatInputCommandRun,preContextMenuCommandRun,chatInputCommandAccepted,contextMenuCommandAccepted,autocompleteAccepted, andinteractionHandlerAcceptedlet 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.IdentifiersgainsPreconditionMissingChatInputHandlerandPreconditionMissingContextMenuHandler. isUserError— A new helper checks whether an error is aUserError, and also recognizes aUserErrorfrom another copy of the package by its shape. (#298)
Updates
UserErrorrouted to*Deniedevents — AUserErrorthrown by a command, an autocomplete handler, or an interaction handler now goes tochatInputCommandDenied/contextMenuCommandDenied(Events.ChatInputCommandDenied,Events.ContextMenuCommandDenied),autocompleteDenied, orinteractionHandlerDeniedwith(error: UserError, context), instead ofcommandError,autocompleteError, orinteractionHandlerError. Other errors still reach the*Errorevents; theerrorevent and the HTTP response are unchanged. (#298)- Run events emitted after preconditions —
commandRun,autocompleteRun, andinteractionHandlerRunnow fire only after the preconditions pass, so a denied interaction does not emit them. Without preconditions nothing changes. - Dependencies — Updated
@wolfstar/clito2.6.1.
Migration
- Move
UserErrorreplies to*Deniedlisteners — If a listener oncommandError,autocompleteError, orinteractionHandlerErrorreplies to the user with aUserError(including thePreconditionErrorfrom@wolfstar/decorators), move that logic tochatInputCommandDenied,contextMenuCommandDenied,autocompleteDenied, orinteractionHandlerDenied. Those errors no longer reach the*Errorevents.
6.2.2 (2026-10-07)
Updates
- Dependencies — Updated
@wolfstar/clito2.6.0,@wolfstar/schemato0.9.0.
6.2.1 (2026-10-06)
Updates
- Dependencies — Updated
@wolfstar/clito2.5.0,@wolfstar/schemato0.8.0.
6.2.0 (2026-10-06)
New features
- Typed command options with
stars codegen— Setcodegen.commandsinstars.config(true, or{ output }, defaultsrc/@types/commands.d.ts) andstars codegenreads the commands from the built bot and writes aCommandOptionsRegistryentry per command path ('ping','math add','subscriptions twitch add'). UseCommand.OptionsOf<'math add'>instead of a hand-writteninterface Options:requiredoptions are non-optional,choicesbecome a literal union, andchannel_typesnarrow the channel.stars codegen --checkfails withCODEGEN_OUTDATEDwhen the file is stale, and--jsonreports the result. (#275)
Updates
- Dependencies — Updated
@wolfstar/clito2.4.0,@wolfstar/schemato0.7.0.
6.1.1 (2026-10-04)
New features
stars commands diffandstars commands deploy—stars commands diffcompares the commands your built bot defines with those deployed on Discord (--checkfor CI);stars commands deployoverwrites them after a confirmation (--yesfor scripts). Both need@wolfstar/http-framework6.1 or later and a built project. (#257)stars doctor— Checks the runtime, the framework, credentials, the dev port, the tunnel, and generated files, with a fix for each problem (--onlinealso queries Discord,--jsonfor scripts).stars completions <bash|zsh|fish>— Prints a shell completion script for the registered commands.
Updates
stars info— Lists the installed modules and the newdevoptions. The README now documents thedevoptions ofstars.config.- Dependencies — Updated
@wolfstar/clito2.3.0,@wolfstar/schemato0.6.0.
6.1.0 (2026-10-02)
New features
- Object-based plugins — Define Vite-style plugins with
definePluginand theStarsPlugintype (name,enforce: 'pre' | 'post',apply, and the five lifecycle hooks as(client, options) => …). Add per-client plugins with the newpluginsoption inClientOptions. A failing hook throwsPluginHookError, which names the plugin. (#246)
Updates
- Plugin ordering —
PluginManagerruns hooks aspre, plain, thenpost, in registration order within each group.Client.useaccepts plugin objects and nested arrays. - Legacy plugins deprecated — The
Pluginclass, symbol hooks, andregisterXHookkeep working through an adapter but emit a one-timeDeprecationWarning(HTTP_FRAMEWORK_LEGACY_PLUGIN) per plugin. - Dependencies — Updated
@wolfstar/schemato0.5.0,@wolfstar/clito2.2.0.
6.0.1
New features
envoption instars.config— Added anenvoption 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 lifecyclehooks(config:resolved,env:options,prepare:*,builder:created,tsdown:options,build:*,dev:*) run withhookable.future.compatibilityVersion: 5by default — Version 5 is now the default: it is version 4 plus the automaticenvregistration, 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 aCOMPATIBILITY_VERSION_EOLwarning, and will be removed in the next major. Projects generated by@wolfstar/create-http-frameworkwith thetsdownorvitebuild no longer callsetup()from@wolfstar/env-utilitiesby hand;tscand JavaScript projects keep it and setenv: false. (#243)
Updates
- Dependencies — Updated
@wolfstar/schemato0.4.0,@wolfstar/clito2.1.0.
6.0.0 (2026-09-24)
New features
Client.fetch()—client.fetch(request)is the WebRequest/Responsecounterpart oflisten(). It runs the same signature verification and routing without binding a port, for Workers,Bun.serve,Deno.serve, and similar runtimes.starsbinary ships withhttp-framework— Installing@wolfstar/http-frameworknow gives you thestarscommand, with no separate@wolfstar/cliinstall.
Updates
- Config schema moved to
@wolfstar/schema— Thestars.config.*schema and loader now live in@wolfstar/schema. Imports from@wolfstar/http-framework/configkeep working unchanged. - Plugin support —
@wolfstar/plugin-api,@wolfstar/plugin-i18next,@wolfstar/plugin-logger, and@wolfstar/plugin-subcommands-advancednow target5.x.
Migration
- Utility decorators moved to
@wolfstar/decorators—ApplyOptions,RequiresGuildContext,RequiresDMContext,RequiresUserPermissions,RequiresClientPermissions,Enumerable,EnumerableMethod,createClassDecorator,createMethodDecorator,createProxy,createFunctionPrecondition, and thePieceConstructor/ContextFallbacktypes are no longer exported by the framework. Install@wolfstar/decoratorsand import them from there instead; their behaviour is unchanged. TheRegister*decorators andRestrictGuildIdsstay in the framework.@wolfstar/decoratorsdeclares@wolfstar/http-frameworkas a peer dependency.@wolfstar/schemanow includes@wolfstar/decoratorsin its defaultimports.presets, so projects using thestarsCLI’s auto imports keep getting the decorators without an explicit import once the package is installed. (#238)
5.1.3
Updates
- Dependencies — Updated
@wolfstar/clito2.0.3,@wolfstar/schemato0.2.1.
5.1.2
Bug fixes
- Require
@wolfstar/clirelease with plugin registration fix — Upgrading the framework alone now also stopsstars build/stars devfrom crashing withERR_PACKAGE_PATH_NOT_EXPORTEDon@wolfstar/plugin-cache,@wolfstar/plugin-gateway, or@wolfstar/plugin-sharder. (#231)
Updates
- Dependencies — Updated
@wolfstar/clito2.0.2.
5.1.1
Bug fixes
- Fix auto-imports clash with
setup()— Stopped auto-importing@wolfstar/env-utilities’setup, which clashed with thesetup()scaffolded projects export fromsrc/lib/setup/all.tsand printed a duplicated import warning on every build. (#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)
- Split
stars.config.*schema into@wolfstar/schema— Thestars.config.*schema and loader (defineConfig,loadStarsConfig,configDiagnostics, and friends) now live in a new package,@wolfstar/schema.@wolfstar/http-framework/configre-exports@wolfstar/schema’s public surface unchanged, so existingimport { defineConfig } from '@wolfstar/http-framework/config'code keeps working with no changes needed.@wolfstar/http-frameworknow depends on@wolfstar/cliand ships astarsbin (bin/stars.mjs, re-exporting@wolfstar/cli/cli), so installing@wolfstar/http-frameworkis now enough to get thestarscommand. (#209)
Updates
- Dependencies — Updated
@wolfstar/clito2.0.0,@wolfstar/schemato0.2.0.
Migration
@wolfstar/clino longer depends on@wolfstar/http-framework— Matching how@nuxt/clihas no dependency onnuxt,@wolfstar/clinow depends on@wolfstar/schemainstead. Projects that installed@wolfstar/cliwithout also depending on@wolfstar/http-frameworkdirectly now need to add@wolfstar/http-frameworkthemselves. 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)
5.0.0 (2026-09-24)
New features
Client.fetch()—client.fetch(request)is the WebRequest/Responsecounterpart oflisten(). It runs the same signature verification and routing without binding a port, for Workers,Bun.serve,Deno.serve, and similar runtimes.starsbinary ships withhttp-framework— Installing@wolfstar/http-frameworknow gives you thestarscommand, with no separate@wolfstar/cliinstall.experimental.enableNitroimplemented —stars dev/stars buildnow build the bot through Nitro v3’s own Vite plugin (nitro/vite, requires Vite 8).@wolfstar/http-framework:Clientnow has afetch(request, options?)method, the WebRequest/Responsecounterpart oflisten(), running the exact same signature verification, routing, and replies without binding a port, for anything that speaks Fetch instead ofnode:http(Nitro, a Worker,Bun.serve,Deno.serve, Vite’s own dev middleware). The previously-unannounced@wolfstar/http-framework/fetchsubmodule (createFetchHandler/FetchHandler/FetchHandlerOptions) is removed in favour of this method onClientitself.@wolfstar/cli:NitroBuilderreuses the project’s ownvite.config.*/stars.config#vite, adds a generated server entry, and produces.output/laid out for the configuredexperimental.nitro.preset(node-serverby default, deployable to anything Nitro targets).stars devrebuilds and restarts on every change.stars prepare’s generated.stars/tsconfig.jsonnow emits the same~/@/~~/@@aliases. (#207)
Updates
- Config schema moved to
@wolfstar/schema— Thestars.config.*schema and loader now live in@wolfstar/schema. Imports from@wolfstar/http-framework/configkeep working unchanged. - Plugin support —
@wolfstar/plugin-api,@wolfstar/plugin-i18next,@wolfstar/plugin-logger, and@wolfstar/plugin-subcommands-advancednow target5.x. - Replace
ConfigErrorandCliErrorwithnosticsdiagnostics —@wolfstar/http-framework/configno longer exportsConfigError/ConfigErrorOptions. Everystars.config.*validation and load failure is now built fromconfigDiagnostics(also exported) and thrown as anosticsDiagnostic. Catch it withinstanceof Diagnostic(fromnostics) instead ofinstanceof ConfigError. The option path is folded into the diagnostic’s message; the configuration file is now in.sources.@wolfstar/clino longer exportsCliError/CliErrorOptions. Its errors are now built fromcliDiagnosticsand areDiagnosticinstances too.formatErrorrenders aDiagnosticwithnostics’ own ANSI formatter;exitCodeOfmapsstars.config.*diagnostic codes to exit code2andBUILD_FAILEDto3.ExitCode,exitCodeOf, andformatErrorkeep their existing exports and behaviour for every other case. (#205)
4.0.2
Updates
- Dependencies — Updated
unimportto 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 devforces development mode,src/localesis copied and watched automatically, and environment files are discovered under bothsrc/and the project root. The interactive dev UI now supportstto open or close a public quick tunnel without configuringdev.tunnel. (#182)
Updates
- Structured logging — Replaced direct
consolecalls with@wolfstar/loggerfor structured, leveled logging (HMR events, command router warnings). (#182)
3.6.0
New features
- Aligned
stars devterminal UI with Nuxt — The tsdown builder now leaves dependencies external withdeps.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.banneraccepts custom text/lines orfalseto 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)
Updates
- Dependencies — Updated
chokidarto v5.
3.5.0
New features
- Configure
tsdownbuild fromstars.config— Thetsdownblock is now the project’s build configuration, typed with the options a bot actually reaches for (entry,format,unbundle,plugins,alias,define,deps,hooks, …). Whatstars.configalready says fills in the rest, so most projects need nothing in it at all.build.tsconfigis now resolved fortsdownbuilds too.build.configFilereports which file the build tool is configured from. Two new validation errors:TSDOWN_OPTIONS_REQUIRE_TSDOWNandVITE_OPTIONS_REQUIRE_VITE. A project that only declarestsdown: {}now resolvesbuild.tool: 'auto'totsdown. (#164) - Add
future.compatibilityVersion—futurecarries the defaults of the next major.future: { compatibilityVersion: 4 }changes three things: auto imports are on with thetsdownbuild tool (wired into the build itself);tsdownis configured fromstars.configalone (atsdown.config.*raisesTSDOWN_CONFIG_FILE_UNSUPPORTED);build.tool: 'auto'resolves totsdownfor any TypeScript entry without looking for atsdown.config.*ortsdowndependency first.3is the default and keeps today’s behaviour. An unknown version raisesINVALID_COMPATIBILITY_VERSION. (#164)
3.4.0
New features
- Built-in logger —
container.loggeris now always available and defaults to a minimalLoggerthat writes to the console, filtered byLogLevel. The newILoggerinterface is the extension point: a plugin can setoptions.logger.instancefrom apreGenericsInitializationhook to replace the built-in implementation, andnew Client({ logger: { level: LogLevel.Debug } })tunes the default one. The framework internals now log throughcontainer.loggerinstead ofconsole. (#159) stars devloop pieces — Addeddev.typecheck(runs a type checker next to the bot, supportingtsc,golar, andtsz),dev.tunnel(exposes the bot’s interactions endpoint publicly viacloudflaredor a custom URL, with optionalupdateEndpoint),dev.logFile(mirrors dev session logs to disk),stars commands(lists and cleans deployed application commands), andstars infoimprovements. The interactivestars devUI is now an Ink (React) application.stars commands cleanwithout--name/--yesnow runs an interactive wizard.@wolfstar/clirequires Node 22 or newer. (#158)- Typed project configuration and the
starsCLI — The typedstars.config.*schema and loader are owned by@wolfstar/http-framework(@wolfstar/http-framework/config:defineConfig,loadStarsConfig,ConfigError).@wolfstar/cliships thestarsbinary:stars devbuilds and restarts the bot,stars buildruns the build once,stars infoprints resolved configuration, andstars codegenruns i18next type generation.stars --helpandstars --versionnever load the configuration machinery. (#158) experimentalblock instars.config.*— Addedexperimental.enableVite(build through ownvite),experimental.enableExternalVite(watch external build output), andexperimental.enableNitro(declared but not implemented yet).stars inforeports which flags are on. (#158)
3.3.0
New features
Eventsenum — Every event emitted byClientis now available as a member of theEventsenum, mirroring discord.js’Events, soclient.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 newClientEventNametype aliaseskeyof ClientEvents. (#157)- Hot Module Reloading —
Clientnow accepts anhmroption that starts aHotModuleReloaderat the end ofClient#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 plusenabled(defaulttrue) andsilent(defaultfalse), is exposed asclient.hmr, and reports operations through new client events (hmrStart,hmrStop,hmrPiecesLoaded,hmrPieceReloaded,hmrPieceUnloaded,hmrError). Unloading a command now also deletes its entry from theApplicationCommandRegistry, so reloading a command no longer leaves the previous entry behind. (#155)
3.2.1
Updates
- Dev tooling — Replaced
tscwithgolaras the typechecker and bumped TypeScript to 7.0.2. This is a dev-tooling-only change with no effect on published output. (#151)
3.2.0
New features
- Utility decorators — Added
ApplyOptions,RequiresGuildContext,RequiresDMContext,RequiresUserPermissions,RequiresClientPermissions,Enumerable,EnumerableMethod,createClassDecorator,createMethodDecorator,createProxy, andcreateFunctionPrecondition, modelled after@sapphire/decoratorsand adapted to HTTP-only Discord interactions. The existingRegister*decorators andRestrictGuildIdsare now built on the same primitives. (#131) - Sapphire-style error types — Added
UserError,ArgumentError,PreconditionError, and anIdentifiersenum, modelled after@sapphire/framework’s error hierarchy but adapted to the HTTP framework.ChatInputRouterErrornow extendsUserErrorand is exported from the package root together with the new errors. (#132)
3.1.4
Updates
- Dependencies — Updated all non-major dependencies. (#126)
3.1.3
Updates
- Dependencies — Updated all non-major dependencies. (#102)
3.1.2
Updates
- Restore npm provenance attestation — Restored npm provenance attestation on publish for all packages. (#107)
3.1.1
Updates
- Upgrade tsdown — Upgraded tsdown to 0.22.14 and migrated
deps.skipNodeModulesBundletodeps.neverBundle. (#93)
3.1.0
New features
- Imperative command registration — Added an optional
Command#registerApplicationCommands(registry)instance method, mirroring@sapphire/framework’sApplicationCommandRegistryAPI, 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)
3.0.0
New features
- Plugin system — Added a Sapphire-style plugin system. Plugins extend the
Pluginbase class and define static lifecycle hooks (preGenericsInitialization,preInitialization,postInitialization,preLoad,postListen) which are registered throughClient.use(plugin)and run across theClientconstructor,load(), andlisten(). ApluginLoadedevent is emitted as each hook runs. (#65)
2.3.1
Updates
- Provenance attestation — Added provenance attestation to
publishConfigfor all packages. (#59)
2.3.0
New features
- Testing library — Introduced a dedicated library for testing
http-frameworkbots. Added the@wolfstar/http-framework-test-utilspackage for writing tests against the framework. (#43)