Skip to content

Stability Policy

What you can depend on, what might change, and how we communicate breaking changes.

Versioning

Juice follows semantic versioning (semver):

  • Patch (0.x.Y): bug fixes, documentation updates, internal refactors with no API changes
  • Minor (0.X.0): new features, new options, new exports — backwards compatible
  • Major (X.0.0): breaking changes to public API or behavior

While Juice is pre-1.0, minor versions may include breaking changes. Each one is documented in the changelog with migration instructions. After 1.0, breaking changes only happen in major versions.

Stable API Surface

The following exports are considered stable. They will not change without a major version bump (or minor version bump with migration guide while pre-1.0):

ExportModuleStatus
createRouter@cmj/juice/runtimeStable
redirect@cmj/juice/runtimeStable
cache@cmj/juice/runtimeStable
setContext / getContext@cmj/juice/runtimeStable
createContextKey@cmj/juice/runtimeStable
Link@cmj/juice/clientStable
useRouter@cmj/juice/clientStable
initNavigation@cmj/juice/clientStable
RouterOptions@cmj/juice/runtimeStable (new options may be added)

Experimental or Internal

Anything prefixed with _ (underscore) in the source code is internal and may change without notice. Do not import these in your application:

  • _renderPipeline, _matchRoute, _compileRoutes
  • _runWithContext, _getALSStore
  • _serverActionPipeline, _extractActionId
  • installWebpackShim, installProductionShim

The Vite plugin configuration (juice() in vite.config.ts) is stable in its documented options. Undocumented plugin internals may change.

Deprecation Policy

When a stable API needs to change:

  1. Deprecation notice in a minor release: the old API still works but logs a warning at build time or startup. The changelog and docs explain the migration.
  2. Migration window of at least one minor release cycle. Both old and new APIs work during this window.
  3. Removal in the next major release (or next minor while pre-1.0).

Breaking Change Communication

  • CHANGELOG.md — every release documents changes with migration examples
  • GitHub Releases — tagged releases with the same changelog content
  • Console warnings — deprecated APIs log warnings at build time

Runtime Compatibility

Juice targets WinterCG-compatible runtimes. Minimum supported versions are documented on the Runtime Compatibility page. When a minimum version bumps, it is treated as a breaking change and documented accordingly.

React Version

Juice requires React 19. React is a peer dependency — you control the exact version. Juice will not bump to a new React major version without a Juice major version bump.