Skip to content

[v3 DX] Migrate generated integrations, playground and registry to the canonical stack DX #223

Description

@olliethedev

Parent

Target generated shape

All maintained generated consumers use only the canonical public path:

const clientStack = createClientStack({
  api: { baseURL, basePath: "/api/data", headers },
  site: { baseURL, basePath: "/pages" },
  queryClient,
  plugins: { /* camelCase IDs */ },
})
<StackProvider
  stack={browserClientStack}
  router={frameworkRouter}
  auth={clientAuth}
  initialIdentity={initialIdentity}
  overrides={pluginSpecificOverrides}
/>

Server loaders/helpers create request-specific client stacks with headers; browser modules create browser stacks without headers. No server-created object or request header is serialized.

What to build

Migrate CLI/codegen templates, Next.js/React Router/TanStack generated projects, playground/example apps, E2E fixtures, registry source inputs and committed registry JSON to the completed #202 interfaces. Regenerate artifacts rather than hand-editing generated JSON.

Preserve intentional asymmetry: OpenAPI is backend-only, Route Docs is client-only, and UI Builder is client-only over CMS. Generated full-stack fixtures must validate backend/client ID agreement only where both halves exist.

Acceptance criteria

  • Next.js, React Router and TanStack generated projects use createBackendStack, createClientStack, one shared client runtime and inferred provider overrides.
  • No generated project repeats API/site/query configuration between client plugin factories and StackProvider.
  • Server framework helpers create a request-specific client stack with request headers; browser helpers create a separate browser-safe stack.
  • Framework page/layout helpers continue resolving and hydrating tri-state initialIdentity without provider-specific auth coupling.
  • Generated providers pass stack, router, optional app-owned BTST auth, initialIdentity and genuine plugin overrides; no manual override type map/generic or empty override block remains.
  • All generated programmatic IDs use camelCase while package import paths and URL slugs remain kebab-case where appropriate.
  • Backend factories use one options object with nested hooks and generated hook examples use the canonical lifecycle grammar.
  • Server examples use forRequest(request).operations, trusted and raw according to their trust contract.
  • Playground and internal examples compile and exercise the same canonical wiring rather than a private shortcut.
  • Registry generation is reproducible; regenerated committed artifacts contain canonical IDs/provider/runtime usage and no stale source snapshots.
  • Registry install/build tests pass for representative data, one-sided and composed plugins.
  • Fresh setup plus production build succeeds for all three generated frameworks; framework codegen E2E suites pass with the canonical route factories and hydration paths.
  • Client-bundle scans prove request headers, server auth, storage adapters and server-only modules do not enter browser output.
  • The minimal generated extension fixture proves a third-party backend/client plugin uses canonical definitions and inferred overrides without internal types.
  • This ticket does not require validation in better-stack-web or Bio Mogging; the user owns those post-publication RC3 validations.

Required verification

  • Build before tests on Node 22.
  • Run stack registry generation and registry install/build tests.
  • Run setup and production builds for Next.js, React Router and TanStack generated projects.
  • Run each framework-specific codegen E2E suite.
  • Run package typecheck and relevant client-bundle/auth-boundary assertions.

Blocked by

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentFully specified and ready for an agent to implement

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions