-
Notifications
You must be signed in to change notification settings - Fork 391
feat: Add @prettier/plugin-oxc for faster formatting #6088
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
🎨 Storybook Build Status✅ Build completed successfully! ⏰ Completed at: 10/22/2025, 07:39:32 PM UTC 🔗 Links🎉 Your Storybook is ready for review! |
🎭 Playwright Test Results⏰ Completed at: 10/22/2025, 07:52:51 PM UTC 📈 Summary
📊 Test Reports by Browser
🎉 Click on the links above to view detailed test results for each browser configuration. |
I love oxc |
There seems to be some merge conflicts |
Bundle Size ReportSummary
Category Glance Per-category breakdownApp Entry Points — 3.31 MB (baseline 3.31 MB) • ⚪ 0 B_Main entry bundles and manifests_ | File | Before | After | Δ Raw | Δ Gzip | Δ Brotli | | ------------------------ | ------- | ------- | ------------------ | ------------------ | ------------------ | | assets/index-BjKbKjGc.js | 616 kB | 616 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/index-D6JAqEJ9.js | 2.69 MB | 2.69 MB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B |Graph Workspace — 708 kB (baseline 708 kB) • ⚪ 0 B_Graph editor runtime, canvas, workflow orchestration_ | File | Before | After | Δ Raw | Δ Gzip | Δ Brotli | | ---------------------------- | ------ | ------ | ------------------ | ------------------ | ------------------ | | assets/GraphView-LK8H-my1.js | 708 kB | 708 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B |Views & Navigation — 8.15 kB (baseline 8.15 kB) • ⚪ 0 B_Top-level views, pages, and routed surfaces_ | File | Before | After | Δ Raw | Δ Gzip | Δ Brotli | | --------------------------------- | ------- | ------- | ------------------ | ------------------ | ------------------ | | assets/UserSelectView-DlVd1z9H.js | 8.15 kB | 8.15 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B |Panels & Settings — 294 kB (baseline 294 kB) • ⚪ 0 B_Configuration panels, inspectors, and settings screens_ | File | Before | After | Δ Raw | Δ Gzip | Δ Brotli | | ------------------------------------ | ------- | ------- | ------------------ | ------------------ | ------------------ | | assets/AboutPanel-uxsV8oJf.js | 10.3 kB | 10.3 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/CreditsPanel-CgYx_RVi.js | 22.1 kB | 22.1 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/ExtensionPanel-CVUTVwzU.js | 12.1 kB | 12.1 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/KeybindingPanel-BH_W9N1A.js | 15.2 kB | 15.2 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/ServerConfigPanel-2hOi9KGa.js | 8.2 kB | 8.2 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/settings-B-df0dZe.js | 20.7 kB | 20.7 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/settings-CI6OKvJn.js | 22.9 kB | 22.9 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/settings-CXGVj_nD.js | 24.5 kB | 24.5 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/settings-DfQ6dSJj.js | 31.6 kB | 31.6 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/settings-DJ2QgDzm.js | 25.2 kB | 25.2 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/settings-DRNLPMG6.js | 23.7 kB | 23.7 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/settings-DVVycxDc.js | 19.9 kB | 19.9 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/settings-G6Dybj1b.js | 24.1 kB | 24.1 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/settings-M6_GZccG.js | 26 kB | 26 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/UserPanel-nosn7aCL.js | 7.91 kB | 7.91 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B |UI Components — 12.3 kB (baseline 12.3 kB) • ⚪ 0 B_Reusable component library chunks_ | File | Before | After | Δ Raw | Δ Gzip | Δ Brotli | | ----------------------------------------------------------------- | ------- | ------- | ------------------ | ------------------ | ------------------ | | assets/ComfyQueueButton-YIyRDnOj.js | 11.1 kB | 11.1 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/UserAvatar.vue_vue_type_script_setup_true_lang-C9bSkTC5.js | 1.12 kB | 1.12 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B |Data & Services — 10 kB (baseline 10 kB) • ⚪ 0 B_Stores, services, APIs, and repositories_ | File | Before | After | Δ Raw | Δ Gzip | Δ Brotli | | ------------------------------------ | ------- | ------- | ------------------ | ------------------ | ------------------ | | assets/keybindingService-54hk85Fv.js | 7.21 kB | 7.21 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/serverConfigStore-B1bw4Pe0.js | 2.79 kB | 2.79 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B |Utilities & Hooks — 1.07 kB (baseline 1.07 kB) • ⚪ 0 B_Helpers, composables, and utility bundles_ | File | Before | After | Δ Raw | Δ Gzip | Δ Brotli | | --------------------------- | ------- | ------- | ------------------ | ------------------ | ------------------ | | assets/mathUtil-CTARWQ-l.js | 1.07 kB | 1.07 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B |Vendor & Third-Party — 5.36 MB (baseline 5.36 MB) • ⚪ 0 B_External libraries and shared vendor chunks_ | File | Before | After | Δ Raw | Δ Gzip | Δ Brotli | | --------------------------------------- | ------- | ------- | ------------------ | ------------------ | ------------------ | | assets/vendor-other-kaNE-JGc.js | 3.22 MB | 3.22 MB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/vendor-primevue-PESgPnbc.js | 517 B | 517 B | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/vendor-tiptap-DKA7Hxfn.js | 232 kB | 232 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/vendor-visualization-BEfdbjRw.js | 1.82 MB | 1.82 MB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/vendor-vue-QImF2beP.js | 92.4 kB | 92.4 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B |Other — 2.79 MB (baseline 2.79 MB) • ⚪ 0 B_Bundles that do not match a named category_ | File | Before | After | Δ Raw | Δ Gzip | Δ Brotli | | --------------------------- | ------- | ------- | ------------------ | ------------------ | ------------------ | | assets/commands-B2KZRBmX.js | 15.1 kB | 15.1 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/commands-Bw-ckyga.js | 13.9 kB | 13.9 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/commands-C_NmM85I.js | 13.8 kB | 13.8 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/commands-CuozCW4W.js | 14 kB | 14 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/commands-DGfVUJCR.js | 16.2 kB | 16.2 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/commands-dOJNDogK.js | 14.5 kB | 14.5 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/commands-DwiE551e.js | 14.7 kB | 14.7 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/commands-Fw7mvqSy.js | 13.1 kB | 13.1 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/commands-FXnO1W4Q.js | 13.2 kB | 13.2 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/main-6UgCUkrV.js | 108 kB | 108 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/main-BfHN1fzx.js | 125 kB | 125 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/main-BhulUfFD.js | 77.5 kB | 77.5 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/main-BPHe683n.js | 92.4 kB | 92.4 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/main-C75C4LWt.js | 90.9 kB | 90.9 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/main-CEhf19j2.js | 99.4 kB | 99.4 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/main-CipazGd8.js | 79.3 kB | 79.3 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/main-CKz_lTAz.js | 94.3 kB | 94.3 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/main-Dzm38Va4.js | 90.3 kB | 90.3 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/nodeDefs-BePSqkA4.js | 195 kB | 195 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/nodeDefs-BfT7dJcF.js | 204 kB | 204 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/nodeDefs-BiAtoiXc.js | 194 kB | 194 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/nodeDefs-CDfbduPY.js | 219 kB | 219 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/nodeDefs-CDurg_KW.js | 197 kB | 197 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/nodeDefs-CE-vG3RG.js | 182 kB | 182 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/nodeDefs-DAwVV156.js | 200 kB | 200 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/nodeDefs-DexhCMEi.js | 233 kB | 233 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | | assets/nodeDefs-kTrYLFPK.js | 184 kB | 184 kB | ⚪ 0 B | ⚪ 0 B | ⚪ 0 B | |
---- THIS is claude iteration message --- The implementation is already very simple and minimal - the core change is just adding The benchmark script is a nice addition for validating the performance improvement, but it's optional and could be omitted if you want the absolute minimal implementation. The only potential simplification would be to remove the benchmark script entirely, which would reduce the PR to just 3 essential lines of changes:
The eslint.config.ts changes in the PR appear to be unrelated to the oxc plugin (they're disabling import resolution checking for apps/scripts), so those could potentially be separated into a different PR if needed. Overall, this is already about as simple as it can get for adding a Prettier plugin! 👍 |
I do love 3 line changes... |
A few more pieces to revert (lint config, whitespace only change). |
8529c5e
to
26951a1
Compare
I think putting the plugins at the root sped it up even more. |
Can we get a speed benchmark before and after? |
🔧 Auto-fixes AppliedThis PR has been automatically updated to fix linting and formatting issues.
Changes made:
|
let me do it |
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
🔧 Auto-fixes AppliedThis PR has been automatically updated to fix linting and formatting issues.
Changes made:
|
1 similar comment
🔧 Auto-fixes AppliedThis PR has been automatically updated to fix linting and formatting issues.
Changes made:
|
✅ CI/CD Benchmark Complete - Prettier Step AnalysisI've completed the CI/CD benchmarking for Prettier Step Performance Improvement
Local Formatting Performance
Benchmark Methodology
Links to CI Runs
Impact AnalysisThe oxc plugin provides a 14.37% speed improvement in CI/CD prettier formatting, which translates to 12 seconds saved per run. This is a meaningful improvement for developer productivity and CI/CD efficiency. 📊 |
473dc51
to
dc957da
Compare
🔧 Auto-fixes AppliedThis PR has been automatically updated to fix linting and formatting issues.
Changes made:
|
thanks to @DrJKL this PR looks way better now! |
Integrates @prettier/plugin-oxc to improve Prettier performance by ~20%. Changes: - Added @prettier/plugin-oxc as dev dependency - Updated .prettierrc to use oxc plugin - Added benchmark script to measure performance improvements - Updated eslint config to ignore benchmark script Benchmark results (3 runs): - Without oxc: 32.76s median - With oxc: 26.13s median - Improvement: 20.26% faster (6.64s saved) The oxc plugin provides a faster parser written in Rust, significantly speeding up formatting operations across the codebase. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> feat: Upgrade prettier from 3.3.2 to 3.6.2 Updates prettier to the latest stable version (3.6.2) for improved formatting capabilities and bug fixes. Changes: - Upgraded prettier in pnpm-workspace.yaml from ^3.3.2 to ^3.6.2 - Ran prettier format to apply latest formatting rules - Updated pnpm-lock.yaml with new prettier version 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> fix: Fix ESLint import resolution for monorepo apps/ directory - Disable import-x/no-unresolved rule for apps/**/*.{ts,tsx,vue,mts} files to work around path alias resolution issues in monorepo subdirectories - TypeScript projectService still validates imports, so type safety is maintained - Update lint-staged to use relative paths for better compatibility - Fix Tailwind class ordering and prettier formatting in TaskCard.vue This resolves the CI lint-and-format workflow failure where ESLint's import-x plugin couldn't resolve @ path aliases for files in apps/desktop-ui when running from the repository root. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> cleanup: Put the plugins at the top level, remove the knip ignores
eda8246
to
096b999
Compare
Note for reviewers: the code changes in src/* is because I've upgraded prettier to latest.
the @prettier/plugin-oxc it self only improve performance and doesnt affect format rules
Summary
Integrates
@prettier/plugin-oxc
to improve Prettier performance by ~20%.The oxc plugin provides a faster parser written in Rust, significantly speeding up formatting operations across the codebase.
Changes
@prettier/plugin-oxc
as dev dependency.prettierrc
to use oxc plugin alongside existing sort-imports pluginscripts/benchmark-prettier.js
to measure performance improvementsknip.config.ts
to ignore the oxc plugineslint.config.ts
to ignore the benchmark scriptBenchmark Results
Ran 3 benchmarks comparing formatting performance on the entire codebase:
Without oxc:
With oxc:
Improvement: 20.26% faster (6.64s saved)
Testing
The benchmark script can be run with:
This will:
🤖 Generated with Claude Code
┆Issue is synchronized with this Notion page by Unito