React_Shared is the main dependency for Horizon React Projects.
@horizon/config- Runtime configuration management for Horizon React apps@horizon/vite-plugin- Shared Vite plugin for development tooling@horizon/config-exporter- CLI tool to export Azure App Configuration to a config file
Each package is versioned independently using Changesets. The workflow for making and publishing a change is:
Edit the relevant package(s) under packages/. Run pnpm dev from the root to watch and rebuild all packages during development.
Once your changes are ready, run:
pnpm changesetThis opens an interactive prompt where you:
- Select which packages were changed
- Choose the bump type for each —
patch(bug fix),minor(new feature), ormajor(breaking change) - Write a short description of what changed
This creates a file in .changeset/ that should be committed alongside your code changes.
If your change doesn't affect any published package (e.g. a docs update or tooling change), you can skip this step.
Commit your code changes and the generated .changeset/ file together and open a PR targeting main. Tests run automatically on the PR.
After merging, apply the pending changesets to bump package versions and update changelogs:
pnpm version-packagesThen publish to Azure Artifacts:
pnpm publish-packagespublish-packages builds all packages before publishing. Commit the version bumps afterwards.
Note: you must be authenticated to the Azure Artifacts feed to publish. See your
.npmrcfor the registry URL.
This repo uses Vitest with a workspace config so all packages are tested from the root.
# Watch mode — all packages (development)
pnpm test
# Single run — all packages (CI)
pnpm vitest run
# Watch mode — single package
cd packages/vite-plugin
pnpm testTest files go in test/ inside the package directory (e.g. packages/vite-plugin/test/my-feature.test.ts).
- Add the package path to
pnpm-workspace.yamlunderpackages: - Add the package path to
vitest.workspace.ts - Create a
vitest.config.tsin the package — useenvironment: 'node'for non-browser packages,environment: 'jsdom'for React component packages