Skip to content

fix: preserve unresolved protocol imports in vite analysis - #464

Merged
tmm merged 1 commit into
mainfrom
fix/vite-server-protocol-imports
Oct 17, 2026
Merged

tmm merged 1 commit into
mainfrom
fix/vite-server-protocol-imports

Conversation

@tmm

@tmm tmm commented Oct 17, 2026

Copy link
Copy Markdown
Member

Zyzz rejected server-only protocol imports before TanStack Start could remove them from client code. Unresolved protocols now stay runtime-only, while resolvable aliases remain analyzable and missing ordinary files and packages still fail.

For example, import { env } from "cloudflare:workers" used only inside createIsomorphicFn().server(...) no longer needs a dynamic-import workaround. Includes a patch changeset written in past tense.

Validation: the regression failed before the fix. All 60 Vite integration tests passed with V8 coverage (94.58% Vite plugin line coverage), plus scoped type checks, formatting/lint, and diff checks. The full type check exceeded orb memory limits. An initial concurrent suite run had three timeouts, and the unchanged suite passed sequentially.

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Coverage report too large to inline, see the workflow summary.

@pkg-pr-new

pkg-pr-new Bot commented Oct 17, 2026

Copy link
Copy Markdown

Open in StackBlitz

npm i https://pkg.pr.new/zyzz@464

commit: 5352257

@github-actions

Copy link
Copy Markdown
Contributor

Examples

Example URL Status
api-react Open ✅ Deployed
cli-react Open ✅ Deployed
vite-react Open ✅ Deployed
vite-solid Open ✅ Deployed
vite-svelte Open ✅ Deployed

@github-actions

Copy link
Copy Markdown
Contributor

Site preview

Open preview

Commit: 53522579e04161fba1e1a4b4dda833c3e9183210

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Report

🟢 Zyzz passes the framework gate in all 11 workloads.

Every workload compiles from fresh compiler state, including Lightning CSS minification and esbuild client bundling. Lower is better, bold marks the best result in each row, and the ratio beside each competitor compares its result with Zyzz.

Compile Time

Mean milliseconds per compilation.

Workload Zyzz Panda CSS StyleX Tailwind Tamagui vanilla-extract Zyzz vs. Best Competitor
3 Components 1.16 40.46 (34.79×) 3.00 (2.58×) 2.47 (2.12×) 4.96 (4.26×) 5.86 (5.04×) 🟢 2.12× faster than Tailwind
1,000 Components: Repeated Styles 3.82 69.98 (18.33×) 234.73 (61.49×) 6.81 (1.78×) 314.67 (82.43×) 58.66 (15.37×) 🟢 1.78× faster than Tailwind
1,000 Components: Unique Padding 6.78 73.17 (10.79×) 230.17 (33.95×) 13.07 (1.93×) 339.06 (50.01×) 57.20 (8.44×) 🟢 1.93× faster than Tailwind
100 Components: Partial Sharing 1.90 40.33 (21.22×) 23.33 (12.28×) 4.92 (2.59×) 23.48 (12.36×) 10.63 (5.59×) 🟢 2.59× faster than Tailwind
100 Components: Reused Palette 1.54 42.48 (27.67×) 22.10 (14.39×) 3.26 (2.13×) 22.46 (14.63×) 10.57 (6.89×) 🟢 2.13× faster than Tailwind
100 Components: Independent Values 2.15 41.21 (19.17×) 25.10 (11.68×) 5.64 (2.63×) 28.75 (13.38×) 11.96 (5.56×) 🟢 2.63× faster than Tailwind
100 Components: Sparse Properties 1.72 38.80 (22.58×) 16.58 (9.64×) 3.82 (2.22×) 16.13 (9.39×) 9.20 (5.35×) 🟢 2.22× faster than Tailwind
60 Components: Mixed Shapes 1.45 38.52 (26.55×) 16.49 (11.36×) 2.47 (1.70×) 17.96 (12.38×) 9.14 (6.30×) 🟢 1.70× faster than Tailwind
300 Components: Application Scale 3.75 44.87 (11.97×) 53.42 (14.25×) 4.90 (1.31×) 56.86 (15.17×) 19.30 (5.15×) 🟢 1.31× faster than Tailwind
Themes: 10 Components 1.41 40.43 (28.76×) 21.55 (15.33×) 2.55 (1.81×) 16.13 (11.47×) 6.60 (4.69×) 🟢 1.81× faster than Tailwind
Themes: 100 Components 2.15 40.48 (18.84×) 121.60 (56.58×) 3.16 (1.47×) 30.00 (13.96×) 9.58 (4.46×) 🟢 1.47× faster than Tailwind

CSS Size

Gzip bytes of the minified stylesheet.

Workload Zyzz Panda CSS StyleX Tailwind Tamagui vanilla-extract Zyzz vs. Best Competitor
3 Components 111 266 (2.40×) 181 (1.63×) 219 (1.97×) 169 (1.52×) 121 (1.09×) 🟢 10 B smaller than vanilla-extract
1,000 Components: Repeated Styles 111 266 (2.40×) 181 (1.63×) 219 (1.97×) 169 (1.52×) 2,094 (18.86×) 🟢 58 B smaller than Tamagui
1,000 Components: Unique Padding 4,615 4,647 (1.01×) 7,806 (1.69×) 5,026 (1.09×) 6,381 (1.38×) 5,640 (1.22×) 🟢 32 B smaller than Panda CSS
100 Components: Partial Sharing 1,161 1,491 (1.28×) 2,119 (1.83×) 1,555 (1.34×) 1,985 (1.71×) 1,218 (1.05×) 🟢 57 B smaller than vanilla-extract
100 Components: Reused Palette 244 439 (1.80×) 451 (1.85×) 410 (1.68×) 418 (1.71×) 647 (2.65×) 🟢 166 B smaller than Tailwind
100 Components: Independent Values 2,245 3,079 (1.37×) 4,375 (1.95×) 3,315 (1.48×) 4,698 (2.09×) 2,281 (1.02×) 🟢 36 B smaller than vanilla-extract
100 Components: Sparse Properties 850 964 (1.13×) 1,278 (1.50×) 984 (1.16×) 1,208 (1.42×) 964 (1.13×) 🟢 114 B smaller than Panda CSS
60 Components: Mixed Shapes 284 455 (1.60×) 407 (1.43×) 406 (1.43×) 425 (1.50×) 449 (1.58×) 🟢 122 B smaller than Tailwind
300 Components: Application Scale 915 1,077 (1.18×) 1,321 (1.44×) 1,065 (1.16×) 1,493 (1.63×) 3,098 (3.39×) 🟢 150 B smaller than Tailwind
Themes: 10 Components 201 372 (1.85×) 319 (1.59×) 298 (1.48×) 323 (1.61×) 203 (1.01×) 🟢 2 B smaller than vanilla-extract
Themes: 100 Components 574 739 (1.29×) 1,064 (1.85×) 686 (1.20×) 886 (1.54×) 640 (1.11×) 🟢 66 B smaller than vanilla-extract

JS Size

Gzip bytes of the bundled client JavaScript, including required runtime helpers.

Workload Zyzz Panda CSS StyleX Tailwind Tamagui vanilla-extract Zyzz vs. Best Competitor
3 Components 322 374 (1.16×) 375 (1.16×) 404 (1.25×) 750 (2.33×) 335 (1.04×) 🟢 13 B smaller than vanilla-extract
1,000 Components: Repeated Styles 368 733 (1.99×) 663 (1.80×) 1,057 (2.87×) 1,266 (3.44×) 2,449 (6.65×) 🟢 295 B smaller than StyleX
1,000 Components: Unique Padding 2,721 3,339 (1.23×) 6,204 (2.28×) 3,508 (1.29×) 6,043 (2.22×) 2,449 (0.90×) 🔴 272 B larger than vanilla-extract
100 Components: Partial Sharing 568 1,243 (2.19×) 1,772 (3.12×) 1,316 (2.32×) 2,108 (3.71×) 558 (0.98×) 🔴 10 B larger than vanilla-extract
100 Components: Reused Palette 389 548 (1.41×) 628 (1.61×) 629 (1.62×) 1,075 (2.76×) 558 (1.43×) 🟢 159 B smaller than Panda CSS
100 Components: Independent Values 568 2,422 (4.26×) 2,861 (5.04×) 2,621 (4.61×) 3,355 (5.91×) 559 (0.98×) 🔴 9 B larger than vanilla-extract
100 Components: Sparse Properties 580 1,000 (1.72×) 1,118 (1.93×) 1,067 (1.84×) 1,682 (2.90×) 559 (0.96×) 🔴 21 B larger than vanilla-extract
60 Components: Mixed Shapes 371 532 (1.43×) 542 (1.46×) 611 (1.65×) 1,003 (2.70×) 468 (1.26×) 🟢 97 B smaller than vanilla-extract
300 Components: Application Scale 2,170 2,456 (1.13×) 2,651 (1.22×) 2,801 (1.29×) 3,492 (1.61×) 988 (0.46×) 🔴 1,182 B larger than vanilla-extract
Themes: 10 Components 390 418 (1.07×) 461 (1.18×) 413 (1.06×) 820 (2.10×) 389 (1.00×) 🔴 1 B larger than vanilla-extract
Themes: 100 Components 604 667 (1.10×) 1,007 (1.67×) 661 (1.09×) 1,344 (2.23×) 596 (0.99×) 🔴 8 B larger than vanilla-extract

Notes

  • Gate: Zyzz must beat every competitor on mean compile time and on total gzip size (CSS plus JS). The application workload gates size only.
  • Zyzz lanes: Literal workloads start from validated definitions. The application workload transforms one authored module, including parsing. Theme workloads include token resolution.
  • More results: The workflow run has error margins, sample counts, raw and Brotli sizes, baseline comparisons, and render timings.

@tmm
tmm merged commit d289c1e into main Oct 17, 2026
60 checks passed
@tmm
tmm deleted the fix/vite-server-protocol-imports branch October 17, 2026 22:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants