Context
Glenn is integrating @stacksjs/components into training. Per Chris's 2026-05-06 11:09 PM Discord exchange:
Glenn: "i am now trying to integreate @stacksjs/components to it"
Chris: "ive wondered, those likely should be stx components, right?"
Glenn: "they should be"
So the agreed direction is: every component in @stacksjs/components should be an .stx file, usable from any stx app (paweldregan, training, trailbuddy, pet-store, etc.).
Problem we hit while triaging
@stacksjs/components doesn't have a clear, single, canonical location. The stacksjs/stacks monorepo has storage/framework/libs/components/{stx,web} but those packages are scaffolds named @stacksjs/hello-world-vue and @stacksjs/hello-world-elements, not @stacksjs/components. There's no stacksjs/components repo on GitHub either.
Step 0 is figuring out where the canonical components surface lives.
Acceptance
- Locate the canonical home for
@stacksjs/components. Either:
- A workspace inside this monorepo (likely
storage/framework/libs/components/* after renaming the scaffolds), or
- A separate repo (then file the migration there and close this with a pointer).
- Audit every component currently shipped (or intended to ship) under
@stacksjs/components. For each, record: what framework it's authored in (Vue / web component / stx / something else), and what surfaces consume it.
- Migrate any non-stx component to stx. Per the standing rule (replace, don't just remove): no removal-only commits.
- Validate by importing a few migrated components from
paweldregan, training, and trailbuddy and confirming they render + behave correctly.
- Document the canonical import path so all our stx apps can grab them consistently.
Why this matters
- Glenn is blocked / friction while integrating into
training because the package boundary is unclear.
- Pet-store will need the same components soon — getting this clean before another consumer lands prevents migration churn later.
- "Stacks should be self-hosted on its own primitives" — having UI components authored in our own templating language is part of that story.
Out of scope (file separately if needed)
- Actually building new components.
- Theming surface for components.
- Component-library docs site.
Related
Context
Glenn is integrating
@stacksjs/componentsintotraining. Per Chris's 2026-05-06 11:09 PM Discord exchange:So the agreed direction is: every component in
@stacksjs/componentsshould be an.stxfile, usable from any stx app (paweldregan,training,trailbuddy,pet-store, etc.).Problem we hit while triaging
@stacksjs/componentsdoesn't have a clear, single, canonical location. Thestacksjs/stacksmonorepo hasstorage/framework/libs/components/{stx,web}but those packages are scaffolds named@stacksjs/hello-world-vueand@stacksjs/hello-world-elements, not@stacksjs/components. There's nostacksjs/componentsrepo on GitHub either.Step 0 is figuring out where the canonical components surface lives.
Acceptance
@stacksjs/components. Either:storage/framework/libs/components/*after renaming the scaffolds), or@stacksjs/components. For each, record: what framework it's authored in (Vue / web component / stx / something else), and what surfaces consume it.paweldregan,training, andtrailbuddyand confirming they render + behave correctly.Why this matters
trainingbecause the package boundary is unclear.Out of scope (file separately if needed)
Related