API stability & deprecation policy¶
jaxfolio follows Semantic Versioning. This page defines what "the API" means, what you can rely on across releases, and how we retire things when they must change.
Pre-1.0 status¶
jaxfolio is currently in the 0.y.z series (Development Status :: 4 - Beta).
Under SemVer, while the major version is 0 the API is still stabilizing:
breaking changes may occur in a minor (0.y) release. We nonetheless apply
the deprecation process below wherever practical, so upgrades stay smooth, and we
document every breaking change in the changelog.
Once we reach 1.0.0, the standard SemVer contract applies: breaking changes to
the public API only in a new major version.
What is public¶
The public API — the surface covered by these guarantees — is:
- Every name exported from the top-level package, i.e. the entries in
jaxfolio.__all__(import jaxfolio as jf; jf.maximum_sharpe, etc.). - The public names of the documented submodules that back the guides and the
API reference:
jaxfolio.optimizers,jaxfolio.options,jaxfolio.llm,jaxfolio.backtest,jaxfolio.data,jaxfolio.moments,jaxfolio.constraints,jaxfolio.viz,jaxfolio.toolkit,jaxfolio.types, andjaxfolio.registry.
Everything else is internal and may change or disappear without a deprecation cycle, including:
- Any name prefixed with an underscore (e.g.
_solve_cached, helpers injaxfolio.optimizers.base,jaxfolio._deprecation). - Undocumented modules, attributes, and function internals.
- Exact numerical values that are not part of a documented contract (e.g. the precise iterate path of the SPG solver), as opposed to documented properties (weights sum to one, min-variance optimality, etc.).
If you depend on something internal, please open an issue so we can consider promoting it to the public API.
Experimental features¶
Some public features are explicitly experimental and are exempt from the stability guarantees until promoted. They are marked in their docstrings and emit a warning at runtime:
- LLM strategies (
llm_black_litterman,llm_sentiment_portfolio,llm_agent_portfolio) — emit anExperimentalWarningon first use. Their API and behavior may change in any release. See DISCLAIMER.md.
Deprecation process¶
When a public name must change or be removed:
- Deprecate, don't delete. The old name keeps working and emits a
DeprecationWarning(viajaxfolio._deprecation.deprecated/warn_deprecated) that names the removal version and the replacement. - Grace period. The deprecated name remains for at least one minor release before removal.
- Document it. Every deprecation is recorded under a
Deprecationsheading inCHANGELOG.md, and the removal is noted when it happens.
Seeing deprecation warnings¶
DeprecationWarning is silenced by Python by default. To surface jaxfolio's
warnings in your own code:
jaxfolio's own test suite turns DeprecationWarnings from the jaxfolio package
into errors, so internal callers can never silently rely on a deprecated path.
Dependencies & platforms¶
Supported Python versions, the dependency-versioning policy, and platform support are documented in SUPPORT.md.