reflex-dev
reflex
Blog
Docs
Changelog
Blog
Docs
Changelog
Overview
Branches
Benchmarks
Runs
Performance History
Latest Results
perf(compiler): trim compile-daemon hot reload - disk_cache: stop re-evaluating stateful HIT pages during an incremental rebuild. The compiling process never serves (the daemon, the initial compile, and CLI compiles all exit; the serving backend re-evaluates the marked stateful pages itself), so re-running their render pipeline was pure waste. The stateful-pages marker stays complete -- hits recorded from the manifest, misses from the fresh compile. - compile_daemon: poll faster (0.25s -> 0.05s) but cheaply -- stat the known file set each tick and rglob only every 1s for added/removed files, cutting detection latency without burning idle CPU. - compile_daemon: log per-edit timing (reset / reimport / compile).
FarhanAliRaza:reflex-hmr
8 hours ago
feat(compiler): warm fork-per-compile hot-reload daemon Add a persistent compile daemon (REFLEX_COMPILE_CACHE) that imports the world once and forks a throwaway child per source change, instead of the reloader respawning a worker that cold-imports on every edit. The child re-imports first-party code fresh and runs the incremental rebuild, so correctness matches a respawn while the cold import is paid once. Supporting changes that make the daemon safe and complete: - write_file now writes atomically (temp + os.replace) so a reader (vite, a concurrent compile) never sees a half-written file, even when a forked child is killed mid-compile. - _run_dev launches the daemon and sets REFLEX_SKIP_COMPILE on the backend so it only evaluates pages to register state. - The daemon watches what the compiler reads (incl. sibling-dir markdown from the manifest); uvicorn reload_includes also covers *.md/*.mdx, so markdown edits finally trigger a reload. - Drop the per-rebuild console.info now that progress is shown inline.
FarhanAliRaza:reflex-hmr
11 hours ago
feat(compiler): add incremental compile cache (REFLEX_COMPILE_CACHE) Add an experimental, flag-gated incremental frontend compile cache that recompiles only the pages whose source actually changed and reuses the rest. Two layers, both off by default and enabled by REFLEX_COMPILE_CACHE: - In-process per-page cache (page_cache.py): a Salsa-style dependency graph records the exact set of source files each page reads, so editing one file invalidates only the pages that depend on it. Pages are keyed by a small genuinely-global epoch (Reflex version + rxconfig + lockfile) plus the content hashes of their dependency set. Speeds up repeat compiles within a single process. - On-disk manifest (disk_cache.py): persists each page's serializable contribution and dependency hashes to .web/reflex_compile_cache.json so a fresh process — notably a `reflex run` hot-reload worker, which respawns on every edit — recompiles only changed pages and reuses the rest. Falls back to a full compile on any unsafe condition. REFLEX_COMPILE_CACHE_VERIFY runs a full compile alongside the cached one and asserts byte-identical output, falling back on mismatch — the backstop for gaps a static dependency graph cannot see (runtime importlib imports, data read at module-import time). Supporting changes required for safe page reuse: deterministic compile-time ref-name generation, and own-before-mutate page metadata injection.
FarhanAliRaza:reflex-hmr
12 hours ago
perf(compiler): remove low-value component cache; make disk-cache manifest write cheap Two changes from profiling the caching stack on the docs app (417 pages): 1. Remove the static-subtree component cache (module, REFLEX_COMPONENT_CACHE flag, tests, compile_app integration). Instrumentation showed it is only ~1.1x on a real app and not worth the maintenance surface: construction is just 19% of compile time (render + memoization + codegen are the other 81%), and only 37% of constructions are fully-static (cacheable) with 23% actually hitting — and those hits are the cheap static leaves, not the expensive state/event components. The "72.7% duplicate subtrees" figure counts post-render structural duplicates, including dynamic ones the construction cache can never reuse. The add_meta own-before-mutate fix that this work surfaced is kept (it stands on its own). 2. Disk-cache manifest write: drop the per-page memo re-render. The manifest stored memo_files/memo_imports/used_state_hashes, none of which the fast path reads (it gates on the app-wide state-hash set and reads only app_wrap_keys + is_stateful per page; a hit page's memo files are already on disk, a miss page re-renders its own on recompile). Computing them re-rendered every page's memos a second time. On the docs app this cuts manifest write ~30s -> 1.8s and the edit-one-page rebuild 2.8s -> 1.6s (31x vs a 50s cold compile); first-build overhead drops from +30s to +1.8s. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7aTCgjL6EGFXDscKT9UyJ
claude/reflex-compiler-design-dv39h9
2 days ago
SEO: eliminate remaining multiple-H1 and redirect-link sources Multiple H1: demote demo rx.heading() to as_=h2 across 57 docs (164 calls), demote section-level markdown '# ' headings to '##' in 18 docs, and render the component 'API Reference' heading as h2 — each docs page now has a single H1. Redirect links: make all top-level internal links in the shared footer/navbar/sidebar trailing-slash (/docs/, /blog/, /pricing/, ...) so they no longer hit 301s. Alt text: add descriptive alt to ui.avatar.image logos/avatars in docs-landing, integration gallery, and shared gallery. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
seo-fixes
2 days ago
SEO: stop frontmatter leaking into docs meta descriptions; add image alt extract_doc_description now prefers a frontmatter description field and otherwise strips the whole --- block before scanning, so lines like 'title: Aligned Grids' or 'tags: DevTools' no longer become the meta description. Also add alt text to docs-landing and shared gallery/markdown images. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
seo-fixes
2 days ago
SEO: emit a single og:image (fix favicon + preview duplicate) Reflex's compiler always renders one og:image from add_page's image kwarg (defaulting to favicon.ico). Pass the real preview image to add_page and strip og:image from the create_meta_tags meta list, so each page has exactly one og:image (the preview) plus one twitter:image, instead of favicon + preview. Applies to the docs renderer (reflex_docs.py) and docs landing page. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
seo-fixes
2 days ago
SEO: address review — broaden numbered-list skip + bound title fallback extract_doc_description now skips ordered-list items 1.-9. (was 1.-3.) so later numbered items aren't pulled into descriptions; the bare-title fallback is now length-checked, dropping to the unsuffixed title when even that would exceed ~60 chars. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
seo-fixes
2 days ago
Latest Branches
CodSpeed Performance Gauge
0%
feat(compiler): add incremental compile cache (REFLEX_COMPILE_CACHE)
#6688
8 hours ago
5ba6614
FarhanAliRaza:reflex-hmr
CodSpeed Performance Gauge
0%
Experimental Rust compiler core + incremental compile cache (Phase 0)
#6687
2 days ago
bd20015
claude/reflex-compiler-design-dv39h9
CodSpeed Performance Gauge
0%
SEO audit fixes: docs meta/titles/H1/alt + shared redirect & structured-data
#6686
2 days ago
be90818
seo-fixes
© 2026 CodSpeed Technology
Home
Terms
Privacy
Docs