Skip to main content
Supersedes 0056. Amends 0055. Next.js is rejected in 0011 and in the not-built-yet rule.

Context

0056 and 0055 set the web component stack. The owner’s answers B30, B31 and B16 (mem L582, 2026-10-20) and the rule on free packages (L579) restate it. The owner then decided that Next.js is rejected, with no revival trigger.

Decision

  1. Component contract (B30). The component contract is shared. The implementation is per runtime (0112, X9).
  2. Form adapters (B31). HeroUI field adapters move into @stackra/ui and the renderer packages. They do not live in the apps.
  3. Next.js is rejected (B16). Its catalog entry, its scaffold template and the app-next app kind are removed. The web stack is Vite with React Router 7. Server rendering uses React Router 7 framework mode.
  4. Revival. Never. Next.js changes status only by a new ADR (owner answer, 2026-10-20).
  5. Free packages (L579). Free packages never depend on Pro components.
  6. HeroUI Pro. It is used only in Stackra’s own apps (ADR 0197, wave 3).

Consequences

  • An app that wants Next.js needs a new ADR, and the owner has said that ADR is not expected.
  • Removing app-next changes the scaffold kinds and the members list; those edits are docs and code work that follows this ADR.

Enforcement

planned — the validator’s forbidden list gains next, and the scaffold no longer offers app-next. The next catalog entry is removed from pnpm-workspace.yaml in the code change that follows this ADR.

Alternatives

  • Keep Next.js beside Vite: rejected by B16.

Supersedes and sources

Supersedes: 0056. Amends: 0055. Sources: owner answers B30, B31 and B16 (stackra-decisions-2026-10-19.md L582, 2026-10-20), free-package rule (L579), and the owner’s Next.js decision with no revival trigger (2026-10-20).