npm: source-only hot reloads still reinstall packages because the rendered package.json has `devDependencies: {}` while the on-disk one has no key (residual of #7235)
Maintainers usually reply within 1 day
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 72/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- node.js, python
- Domain
- build-system
Research direction
Start in reflex/utils/frontend_skeleton.py at sync_root_package_json_to_web and _compile_package_json, reproducing with REFLEX_USE_NPM=1 and a label-only edit to watch the install count. Then check reflex/utils/js_runtimes.py for the install-cache invalidation that compares the rendered vs on-disk package.json. Done means absent and empty devDependencies compare equal so no extra npm install is triggered, verified against the npm_minimal.py reproduction in prerelease_testing/2026-10-07/browser_cache_bundle/reload_cache/.
Written by the indexing model from the issue text.
Description
Severity: LOW, pre-existing (0.9.12, 0.10.0a1, 0.10.0a2). Residual of #7235.
With REFLEX_USE_NPM=1, a label-only edit raises the install count 1→2 although both lockfile hashes are unchanged; the only manifest difference is devDependencies: {} in the rendered package.json versus no key in the one on disk. Adding that empty object by hand stops the extra installs on both alphas (stable's byte comparison still reinstalls). Bun is unaffected. Likely spot: the package.json sync/compare in reflex/utils/frontend_skeleton.py (sync_root_package_json_to_web / _compile_package_json) and the install-cache invalidation in reflex/utils/js_runtimes.py — normalise absent vs empty devDependencies before comparing.
Evidence: browser_cache_bundle/reload_cache/NOTES.md (npm_minimal.py, minimal_results/); finding N-018 in FINDINGS.md.
- Dominant language
- Python
- Stars
- 28.9k
- Forks
- 1.8k
- Avg merge
- 3d 1h
- Merged PRs (30d)
- 187
Getting set up
Starts the project's dev container in your browser, under your own GitHub account.
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from reflex-dev/reflex
-
`get_field_type` and `get_attribute_access_type` read `__fields__` and emit `PydanticDeprecatedSince20` on each field accessPossibly taken @LaoChouPro claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
reflex-dev/reflex#7561 · 1 comment ·
Maintainers usually reply within 1 day
-
`reflex run --json` ignores SIGINT sent to its pid; under supervisord stopsignal=INT the app is orphaned and blocks the restartPossibly taken @harsh21234i claimed this 4 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
reflex-dev/reflex#7509 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
reflex-dev/reflex#7260 · 2 comments ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
reflex-dev/reflex#7148 · 1 comment ·
Maintainers usually reply within 1 day
-
ClientStateVar: a component that mounts while the value is non-default never re-renders on the push back to the defaultMay be free again A pull request for this issue was closed without being merged. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
reflex-dev/reflex#6823 · 1 comment ·
Maintainers usually reply within 1 day
All issues in reflex-dev/reflex
Similar issues
-
documentation good first issue help wanted
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
drevendev/HungryCrab#273 ·
Maintainers usually reply within 1 day
-
good first issue help wanted
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
drevendev/BeautifulRepo#19 ·
Maintainers usually reply within 2 days
-
Moonshot: Kimi K3 always sends `reasoning_effort="max"`, though the API now accepts `low` and `high`Openaccepted
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
UKGovernmentBEIS/inspect_ai#5939 ·
Maintainers usually reply within 1 day
-
bug linux
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Maintainers usually reply within 1 day
-
area:data data-quality
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
reacher-z/Awesome-CUA#1468 ·
Maintainers usually reply within 1 day