Summary
The extra claims to select a compatible Reflex version but declares only reflex>=0.9.6. Every future Reflex release therefore remains resolver-compatible without an upper bound, while package/release smokes install the same open-ended constraint and do not establish a min/max compatibility window.
Evidence
- Package metadata has only the lower bound:
|
[project.optional-dependencies] |
|
# The adapter source ships in every xy wheel so the framework integration and |
|
# render client can never drift. The extra only selects the supported Reflex |
|
# floor; importing plain `xy` remains framework-free. |
|
reflex = [ |
|
"reflex>=0.9.6", |
|
] |
- Public docs say the extra selects a compatible version and then tell users to pin it themselves:
|
- The bundled Reflex integration supports state-backed application charts and |
|
remains experimental. Install the extra to select a compatible Reflex |
|
version. With uv: |
|
|
|
~~~bash |
|
uv add "xy[reflex]" |
|
~~~ |
|
|
|
Or with pip: |
|
|
|
~~~bash |
|
python -m pip install "xy[reflex]" |
|
~~~ |
|
|
|
The `xy` wheel already carries the `reflex_xy` integration; the extra adds |
|
only the supported Reflex dependency floor. Pin resolved versions for |
|
production deployments. Continue with the |
|
[Reflex integration guide](/docs/xy/integrations/reflex/) for its current |
|
limitations and setup. |
- CI/release smoke the unbounded
reflex>=0.9.6, not exact lower/upper versions:
|
python scripts/verify_sdist.py "$sdist" |
|
|
|
- name: Build and load native core from sdist |
|
shell: bash |
|
env: |
|
XY_REQUIRE_CARGO: "1" |
|
run: | |
|
uv venv smoke-native |
|
uv pip install --no-cache -p smoke-native dist/*.tar.gz numpy anywidget "reflex>=0.9.6" |
|
./smoke-native/bin/python - <<'PY' |
|
import importlib.metadata as metadata |
|
|
|
import reflex_xy |
|
import xy |
|
import xy.kernels as kernels |
|
|
|
version = metadata.version("xy") |
|
assert xy.__version__ == version |
|
assert reflex_xy.__version__ == version |
|
assert kernels.BACKEND == "native", kernels.BACKEND |
|
print("sdist built and loaded the native Rust core") |
|
PY |
|
|
|
- name: Verify coreless sdist imports reflex_xy |
|
shell: bash |
|
env: |
|
XY_SKIP_CARGO: "1" |
|
run: | |
|
uv venv smoke-no-rust |
and
|
- name: Verify the wheel installs and loads the native core |
|
# Only host-arch wheels can be imported on the runner; cross-compiled |
|
# arches (aarch64/armv7/win-arm64/win32) are content-verified instead. |
|
if: matrix.native |
|
shell: bash |
|
run: | |
|
uv venv smoke |
|
uv pip install -p smoke dist/*.whl numpy anywidget "reflex>=0.9.6" |
|
./smoke/bin/python -c "import importlib.metadata as m, reflex_xy, xy.kernels as k; assert k.BACKEND=='native', k.BACKEND; assert reflex_xy.__version__ == m.version('xy'); print('native', k.__file__)" \ |
|
|| ./smoke/Scripts/python.exe -c "import importlib.metadata as m, reflex_xy, xy.kernels as k; assert k.BACKEND=='native', k.BACKEND; assert reflex_xy.__version__ == m.version('xy'); print('native')" |
- The docs app follows Reflex
main, which is useful forward signal but is not a released compatibility contract:
|
dependencies = [ |
|
"numpy", |
|
"pillow", |
|
"reflex @ git+https://github.com/reflex-dev/reflex@main", |
|
"reflex-components-internal @ git+https://github.com/reflex-dev/reflex@main#subdirectory=packages/reflex-components-internal", |
|
"reflex-docgen @ git+https://github.com/reflex-dev/reflex@main#subdirectory=packages/reflex-docgen", |
|
"reflex-site-shared @ git+https://github.com/reflex-dev/reflex@main#subdirectory=packages/reflex-site-shared", |
|
"xy[reflex]", |
|
] |
Acceptance criteria
Summary
The extra claims to select a compatible Reflex version but declares only
reflex>=0.9.6. Every future Reflex release therefore remains resolver-compatible without an upper bound, while package/release smokes install the same open-ended constraint and do not establish a min/max compatibility window.Evidence
xy/pyproject.toml
Lines 17 to 23 in 99eda6d
xy/docs/overview/installation.md
Lines 99 to 117 in 99eda6d
reflex>=0.9.6, not exact lower/upper versions:xy/.github/workflows/ci.yml
Lines 642 to 670 in 99eda6d
xy/.github/workflows/release.yml
Lines 120 to 129 in 99eda6d
main, which is useful forward signal but is not a released compatibility contract:xy/docs/app/pyproject.toml
Lines 6 to 14 in 99eda6d
Acceptance criteria
mainif desired.