perf(build): minify bundle and compiled binary - #251

Merged
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size
Apr 30, 2026
Merged

perf(build): minify bundle and compiled binary#251
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size

Conversation

@rafa-thayto

Copy link
Copy Markdown
Contributor

Summary

  • Adds --minify to all bun build invocations: the cli.js bundle, the local --compile binary, and the cross-platform release build in scripts/build.ts.
  • Reduces the shipped clerk binary by ~1 MB on every target (63.38 MB → 62.39 MB on darwin-arm64 measured locally).
  • Reduces the bundled cli.js artifact by ~41% (2.37 MB → 1.40 MB).
  • No behavior change. --define-injected values (CLI_VERSION, CLI_ENV_PROFILES) are unaffected because Bun substitutes defines before minification.

Why minify only

Reduction beyond --minify requires changing the deploy model (the embedded Bun runtime is ~60 MB of the binary and is fixed). I evaluated and rejected:

  • --target=bun (the default) — grew the bundle: 1.40 MB → 1.63 MB.
  • --sourcemap=none on --compilegrew the binary by 1.85 MB (Bun quirk; default behavior is smaller).
  • --bytecode — fails on cli.ts's top-level await import() for the completion fast path; bytecode also typically increases output size.
  • Switching @inquirer/prompts to per-package imports — tree-shaking already eliminates unused prompts (verified: 360 KB used vs 420 KB if import * as).

Test plan

  • bun run build produces cli.js of 1,400,498 B (down from 2,372,203 B)
  • bun run build:compile produces dist/clerk of 62,388,832 B (down from 63,379,552 B)
  • bun run scripts/build.ts --target darwin-arm64 --version 0.0.0-test succeeds and the binary reports the injected version
  • bun run typecheck passes
  • bun run lint passes
  • bun run format:check passes
  • bun run test — all 82 unit + integration tests pass
  • Manual smoke on the minified compiled binary: --version, --help, apps --help, init --help, completion bash all behave correctly
  • CI runs bun changeset status --since=origin/main (verified locally with staged changeset: exits 0, "clerk: patch")
  • CI runs bun run test:e2e against the source (not the compiled binary), so minify is not exercised but also not broken

@changeset-bot

changeset-botBot commented Apr 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 6ac3b1b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
clerkPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitaiBot commented Apr 30, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3a912fe6-9166-4523-8a97-7aca3f7f53a6

📥 Commits

Reviewing files that changed from the base of the PR and between 44524c0 and 6ac3b1b.

📒 Files selected for processing (3)
  • .changeset/bundle-size.md
  • packages/cli-core/package.json
  • scripts/build.ts

📝 Walkthrough

Walkthrough

This change enables build minification across the CLI build pipeline. A changeset metadata file documents the patch release for the clerk package. The build and build:compile scripts in packages/cli-core/package.json add the --minify flag to Bun build invocations. The main build script in scripts/build.ts adds --minify to the Bun compile command for selected targets. These modifications reduce the output bundle sizes without altering functionality.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title 'perf(build): minify bundle and compiled binary' directly and accurately summarizes the main change—adding minification to build processes for bundle and binary reduction.
Description check✅ PassedThe description is comprehensive and directly related to the changeset, covering the modifications made, their impact, evaluation of alternatives, and detailed test results.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

Adds `--minify` to `bun build` and `bun build --compile` invocations in
`packages/cli-core/package.json` and the cross-platform release builder
in `scripts/build.ts`.
Reduces the shipped `clerk` binary by ~1 MB across all platforms
(63.38 MB → 62.39 MB on darwin-arm64 locally) and the bundled `cli.js`
artifact by ~41% (2.37 MB → 1.40 MB). No behavior change: tests,
typecheck, lint, format and end-to-end binary smoke (`--version`,
`--help`, `apps`, `init --help`, `completion bash`) all pass.
Bun applies `--define` substitutions before minification, so
`CLI_VERSION` and `CLI_ENV_PROFILES` injection continue to work; the
release smoke test (compiled binary `--version`) still matches the
injected version.
@rafa-thayto
rafa-thaytoforce-pushed the rafa-thayto/bundle-size branch from eeda3f0 to 6ac3b1bCompareApril 30, 2026 15:09
@rafa-thayto
rafa-thayto merged commit 215daae into mainApr 30, 2026
10 checks passed
@rafa-thayto
rafa-thayto deleted the rafa-thayto/bundle-size branch April 30, 2026 18:10
@github-actionsgithub-actionsBot mentioned this pull request Apr 30, 2026
Sign up for freeto 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

@rafa-thayto@wyattjoh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

perf(build): minify bundle and compiled binary - #251

Merged
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size
Apr 30, 2026
Merged

perf(build): minify bundle and compiled binary#251
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size

Conversation

@rafa-thayto

Copy link
Copy Markdown
Contributor

Summary

  • Adds --minify to all bun build invocations: the cli.js bundle, the local --compile binary, and the cross-platform release build in scripts/build.ts.
  • Reduces the shipped clerk binary by ~1 MB on every target (63.38 MB → 62.39 MB on darwin-arm64 measured locally).
  • Reduces the bundled cli.js artifact by ~41% (2.37 MB → 1.40 MB).
  • No behavior change. --define-injected values (CLI_VERSION, CLI_ENV_PROFILES) are unaffected because Bun substitutes defines before minification.

Why minify only

Reduction beyond --minify requires changing the deploy model (the embedded Bun runtime is ~60 MB of the binary and is fixed). I evaluated and rejected:

  • --target=bun (the default) — grew the bundle: 1.40 MB → 1.63 MB.
  • --sourcemap=none on --compilegrew the binary by 1.85 MB (Bun quirk; default behavior is smaller).
  • --bytecode — fails on cli.ts's top-level await import() for the completion fast path; bytecode also typically increases output size.
  • Switching @inquirer/prompts to per-package imports — tree-shaking already eliminates unused prompts (verified: 360 KB used vs 420 KB if import * as).

Test plan

  • bun run build produces cli.js of 1,400,498 B (down from 2,372,203 B)
  • bun run build:compile produces dist/clerk of 62,388,832 B (down from 63,379,552 B)
  • bun run scripts/build.ts --target darwin-arm64 --version 0.0.0-test succeeds and the binary reports the injected version
  • bun run typecheck passes
  • bun run lint passes
  • bun run format:check passes
  • bun run test — all 82 unit + integration tests pass
  • Manual smoke on the minified compiled binary: --version, --help, apps --help, init --help, completion bash all behave correctly
  • CI runs bun changeset status --since=origin/main (verified locally with staged changeset: exits 0, "clerk: patch")
  • CI runs bun run test:e2e against the source (not the compiled binary), so minify is not exercised but also not broken

@changeset-bot

changeset-botBot commented Apr 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 6ac3b1b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
clerkPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitaiBot commented Apr 30, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3a912fe6-9166-4523-8a97-7aca3f7f53a6

📥 Commits

Reviewing files that changed from the base of the PR and between 44524c0 and 6ac3b1b.

📒 Files selected for processing (3)
  • .changeset/bundle-size.md
  • packages/cli-core/package.json
  • scripts/build.ts

📝 Walkthrough

Walkthrough

This change enables build minification across the CLI build pipeline. A changeset metadata file documents the patch release for the clerk package. The build and build:compile scripts in packages/cli-core/package.json add the --minify flag to Bun build invocations. The main build script in scripts/build.ts adds --minify to the Bun compile command for selected targets. These modifications reduce the output bundle sizes without altering functionality.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title 'perf(build): minify bundle and compiled binary' directly and accurately summarizes the main change—adding minification to build processes for bundle and binary reduction.
Description check✅ PassedThe description is comprehensive and directly related to the changeset, covering the modifications made, their impact, evaluation of alternatives, and detailed test results.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

Adds `--minify` to `bun build` and `bun build --compile` invocations in
`packages/cli-core/package.json` and the cross-platform release builder
in `scripts/build.ts`.
Reduces the shipped `clerk` binary by ~1 MB across all platforms
(63.38 MB → 62.39 MB on darwin-arm64 locally) and the bundled `cli.js`
artifact by ~41% (2.37 MB → 1.40 MB). No behavior change: tests,
typecheck, lint, format and end-to-end binary smoke (`--version`,
`--help`, `apps`, `init --help`, `completion bash`) all pass.
Bun applies `--define` substitutions before minification, so
`CLI_VERSION` and `CLI_ENV_PROFILES` injection continue to work; the
release smoke test (compiled binary `--version`) still matches the
injected version.
@rafa-thayto
rafa-thaytoforce-pushed the rafa-thayto/bundle-size branch from eeda3f0 to 6ac3b1bCompareApril 30, 2026 15:09
@rafa-thayto
rafa-thayto merged commit 215daae into mainApr 30, 2026
10 checks passed
@rafa-thayto
rafa-thayto deleted the rafa-thayto/bundle-size branch April 30, 2026 18:10
@github-actionsgithub-actionsBot mentioned this pull request Apr 30, 2026
Sign up for freeto 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

@rafa-thayto@wyattjoh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

perf(build): minify bundle and compiled binary - #251

Merged
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size
Apr 30, 2026
Merged

perf(build): minify bundle and compiled binary#251
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size

Conversation

@rafa-thayto

Copy link
Copy Markdown
Contributor

Summary

  • Adds --minify to all bun build invocations: the cli.js bundle, the local --compile binary, and the cross-platform release build in scripts/build.ts.
  • Reduces the shipped clerk binary by ~1 MB on every target (63.38 MB → 62.39 MB on darwin-arm64 measured locally).
  • Reduces the bundled cli.js artifact by ~41% (2.37 MB → 1.40 MB).
  • No behavior change. --define-injected values (CLI_VERSION, CLI_ENV_PROFILES) are unaffected because Bun substitutes defines before minification.

Why minify only

Reduction beyond --minify requires changing the deploy model (the embedded Bun runtime is ~60 MB of the binary and is fixed). I evaluated and rejected:

  • --target=bun (the default) — grew the bundle: 1.40 MB → 1.63 MB.
  • --sourcemap=none on --compilegrew the binary by 1.85 MB (Bun quirk; default behavior is smaller).
  • --bytecode — fails on cli.ts's top-level await import() for the completion fast path; bytecode also typically increases output size.
  • Switching @inquirer/prompts to per-package imports — tree-shaking already eliminates unused prompts (verified: 360 KB used vs 420 KB if import * as).

Test plan

  • bun run build produces cli.js of 1,400,498 B (down from 2,372,203 B)
  • bun run build:compile produces dist/clerk of 62,388,832 B (down from 63,379,552 B)
  • bun run scripts/build.ts --target darwin-arm64 --version 0.0.0-test succeeds and the binary reports the injected version
  • bun run typecheck passes
  • bun run lint passes
  • bun run format:check passes
  • bun run test — all 82 unit + integration tests pass
  • Manual smoke on the minified compiled binary: --version, --help, apps --help, init --help, completion bash all behave correctly
  • CI runs bun changeset status --since=origin/main (verified locally with staged changeset: exits 0, "clerk: patch")
  • CI runs bun run test:e2e against the source (not the compiled binary), so minify is not exercised but also not broken

@changeset-bot

changeset-botBot commented Apr 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 6ac3b1b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
clerkPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitaiBot commented Apr 30, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3a912fe6-9166-4523-8a97-7aca3f7f53a6

📥 Commits

Reviewing files that changed from the base of the PR and between 44524c0 and 6ac3b1b.

📒 Files selected for processing (3)
  • .changeset/bundle-size.md
  • packages/cli-core/package.json
  • scripts/build.ts

📝 Walkthrough

Walkthrough

This change enables build minification across the CLI build pipeline. A changeset metadata file documents the patch release for the clerk package. The build and build:compile scripts in packages/cli-core/package.json add the --minify flag to Bun build invocations. The main build script in scripts/build.ts adds --minify to the Bun compile command for selected targets. These modifications reduce the output bundle sizes without altering functionality.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title 'perf(build): minify bundle and compiled binary' directly and accurately summarizes the main change—adding minification to build processes for bundle and binary reduction.
Description check✅ PassedThe description is comprehensive and directly related to the changeset, covering the modifications made, their impact, evaluation of alternatives, and detailed test results.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

Adds `--minify` to `bun build` and `bun build --compile` invocations in
`packages/cli-core/package.json` and the cross-platform release builder
in `scripts/build.ts`.
Reduces the shipped `clerk` binary by ~1 MB across all platforms
(63.38 MB → 62.39 MB on darwin-arm64 locally) and the bundled `cli.js`
artifact by ~41% (2.37 MB → 1.40 MB). No behavior change: tests,
typecheck, lint, format and end-to-end binary smoke (`--version`,
`--help`, `apps`, `init --help`, `completion bash`) all pass.
Bun applies `--define` substitutions before minification, so
`CLI_VERSION` and `CLI_ENV_PROFILES` injection continue to work; the
release smoke test (compiled binary `--version`) still matches the
injected version.
@rafa-thayto
rafa-thaytoforce-pushed the rafa-thayto/bundle-size branch from eeda3f0 to 6ac3b1bCompareApril 30, 2026 15:09
@rafa-thayto
rafa-thayto merged commit 215daae into mainApr 30, 2026
10 checks passed
@rafa-thayto
rafa-thayto deleted the rafa-thayto/bundle-size branch April 30, 2026 18:10
@github-actionsgithub-actionsBot mentioned this pull request Apr 30, 2026
Sign up for freeto 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

@rafa-thayto@wyattjoh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

perf(build): minify bundle and compiled binary - #251

Merged
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size
Apr 30, 2026
Merged

perf(build): minify bundle and compiled binary#251
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size

Conversation

@rafa-thayto

Copy link
Copy Markdown
Contributor

Summary

  • Adds --minify to all bun build invocations: the cli.js bundle, the local --compile binary, and the cross-platform release build in scripts/build.ts.
  • Reduces the shipped clerk binary by ~1 MB on every target (63.38 MB → 62.39 MB on darwin-arm64 measured locally).
  • Reduces the bundled cli.js artifact by ~41% (2.37 MB → 1.40 MB).
  • No behavior change. --define-injected values (CLI_VERSION, CLI_ENV_PROFILES) are unaffected because Bun substitutes defines before minification.

Why minify only

Reduction beyond --minify requires changing the deploy model (the embedded Bun runtime is ~60 MB of the binary and is fixed). I evaluated and rejected:

  • --target=bun (the default) — grew the bundle: 1.40 MB → 1.63 MB.
  • --sourcemap=none on --compilegrew the binary by 1.85 MB (Bun quirk; default behavior is smaller).
  • --bytecode — fails on cli.ts's top-level await import() for the completion fast path; bytecode also typically increases output size.
  • Switching @inquirer/prompts to per-package imports — tree-shaking already eliminates unused prompts (verified: 360 KB used vs 420 KB if import * as).

Test plan

  • bun run build produces cli.js of 1,400,498 B (down from 2,372,203 B)
  • bun run build:compile produces dist/clerk of 62,388,832 B (down from 63,379,552 B)
  • bun run scripts/build.ts --target darwin-arm64 --version 0.0.0-test succeeds and the binary reports the injected version
  • bun run typecheck passes
  • bun run lint passes
  • bun run format:check passes
  • bun run test — all 82 unit + integration tests pass
  • Manual smoke on the minified compiled binary: --version, --help, apps --help, init --help, completion bash all behave correctly
  • CI runs bun changeset status --since=origin/main (verified locally with staged changeset: exits 0, "clerk: patch")
  • CI runs bun run test:e2e against the source (not the compiled binary), so minify is not exercised but also not broken

@changeset-bot

changeset-botBot commented Apr 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 6ac3b1b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
clerkPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitaiBot commented Apr 30, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3a912fe6-9166-4523-8a97-7aca3f7f53a6

📥 Commits

Reviewing files that changed from the base of the PR and between 44524c0 and 6ac3b1b.

📒 Files selected for processing (3)
  • .changeset/bundle-size.md
  • packages/cli-core/package.json
  • scripts/build.ts

📝 Walkthrough

Walkthrough

This change enables build minification across the CLI build pipeline. A changeset metadata file documents the patch release for the clerk package. The build and build:compile scripts in packages/cli-core/package.json add the --minify flag to Bun build invocations. The main build script in scripts/build.ts adds --minify to the Bun compile command for selected targets. These modifications reduce the output bundle sizes without altering functionality.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title 'perf(build): minify bundle and compiled binary' directly and accurately summarizes the main change—adding minification to build processes for bundle and binary reduction.
Description check✅ PassedThe description is comprehensive and directly related to the changeset, covering the modifications made, their impact, evaluation of alternatives, and detailed test results.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

Adds `--minify` to `bun build` and `bun build --compile` invocations in
`packages/cli-core/package.json` and the cross-platform release builder
in `scripts/build.ts`.
Reduces the shipped `clerk` binary by ~1 MB across all platforms
(63.38 MB → 62.39 MB on darwin-arm64 locally) and the bundled `cli.js`
artifact by ~41% (2.37 MB → 1.40 MB). No behavior change: tests,
typecheck, lint, format and end-to-end binary smoke (`--version`,
`--help`, `apps`, `init --help`, `completion bash`) all pass.
Bun applies `--define` substitutions before minification, so
`CLI_VERSION` and `CLI_ENV_PROFILES` injection continue to work; the
release smoke test (compiled binary `--version`) still matches the
injected version.
@rafa-thayto
rafa-thaytoforce-pushed the rafa-thayto/bundle-size branch from eeda3f0 to 6ac3b1bCompareApril 30, 2026 15:09
@rafa-thayto
rafa-thayto merged commit 215daae into mainApr 30, 2026
10 checks passed
@rafa-thayto
rafa-thayto deleted the rafa-thayto/bundle-size branch April 30, 2026 18:10
@github-actionsgithub-actionsBot mentioned this pull request Apr 30, 2026
Sign up for freeto 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

@rafa-thayto@wyattjoh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

perf(build): minify bundle and compiled binary - #251

Merged
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size
Apr 30, 2026
Merged

perf(build): minify bundle and compiled binary#251
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size

Conversation

@rafa-thayto

Copy link
Copy Markdown
Contributor

Summary

  • Adds --minify to all bun build invocations: the cli.js bundle, the local --compile binary, and the cross-platform release build in scripts/build.ts.
  • Reduces the shipped clerk binary by ~1 MB on every target (63.38 MB → 62.39 MB on darwin-arm64 measured locally).
  • Reduces the bundled cli.js artifact by ~41% (2.37 MB → 1.40 MB).
  • No behavior change. --define-injected values (CLI_VERSION, CLI_ENV_PROFILES) are unaffected because Bun substitutes defines before minification.

Why minify only

Reduction beyond --minify requires changing the deploy model (the embedded Bun runtime is ~60 MB of the binary and is fixed). I evaluated and rejected:

  • --target=bun (the default) — grew the bundle: 1.40 MB → 1.63 MB.
  • --sourcemap=none on --compilegrew the binary by 1.85 MB (Bun quirk; default behavior is smaller).
  • --bytecode — fails on cli.ts's top-level await import() for the completion fast path; bytecode also typically increases output size.
  • Switching @inquirer/prompts to per-package imports — tree-shaking already eliminates unused prompts (verified: 360 KB used vs 420 KB if import * as).

Test plan

  • bun run build produces cli.js of 1,400,498 B (down from 2,372,203 B)
  • bun run build:compile produces dist/clerk of 62,388,832 B (down from 63,379,552 B)
  • bun run scripts/build.ts --target darwin-arm64 --version 0.0.0-test succeeds and the binary reports the injected version
  • bun run typecheck passes
  • bun run lint passes
  • bun run format:check passes
  • bun run test — all 82 unit + integration tests pass
  • Manual smoke on the minified compiled binary: --version, --help, apps --help, init --help, completion bash all behave correctly
  • CI runs bun changeset status --since=origin/main (verified locally with staged changeset: exits 0, "clerk: patch")
  • CI runs bun run test:e2e against the source (not the compiled binary), so minify is not exercised but also not broken

@changeset-bot

changeset-botBot commented Apr 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 6ac3b1b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
clerkPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitaiBot commented Apr 30, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3a912fe6-9166-4523-8a97-7aca3f7f53a6

📥 Commits

Reviewing files that changed from the base of the PR and between 44524c0 and 6ac3b1b.

📒 Files selected for processing (3)
  • .changeset/bundle-size.md
  • packages/cli-core/package.json
  • scripts/build.ts

📝 Walkthrough

Walkthrough

This change enables build minification across the CLI build pipeline. A changeset metadata file documents the patch release for the clerk package. The build and build:compile scripts in packages/cli-core/package.json add the --minify flag to Bun build invocations. The main build script in scripts/build.ts adds --minify to the Bun compile command for selected targets. These modifications reduce the output bundle sizes without altering functionality.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title 'perf(build): minify bundle and compiled binary' directly and accurately summarizes the main change—adding minification to build processes for bundle and binary reduction.
Description check✅ PassedThe description is comprehensive and directly related to the changeset, covering the modifications made, their impact, evaluation of alternatives, and detailed test results.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

Adds `--minify` to `bun build` and `bun build --compile` invocations in
`packages/cli-core/package.json` and the cross-platform release builder
in `scripts/build.ts`.
Reduces the shipped `clerk` binary by ~1 MB across all platforms
(63.38 MB → 62.39 MB on darwin-arm64 locally) and the bundled `cli.js`
artifact by ~41% (2.37 MB → 1.40 MB). No behavior change: tests,
typecheck, lint, format and end-to-end binary smoke (`--version`,
`--help`, `apps`, `init --help`, `completion bash`) all pass.
Bun applies `--define` substitutions before minification, so
`CLI_VERSION` and `CLI_ENV_PROFILES` injection continue to work; the
release smoke test (compiled binary `--version`) still matches the
injected version.
@rafa-thayto
rafa-thaytoforce-pushed the rafa-thayto/bundle-size branch from eeda3f0 to 6ac3b1bCompareApril 30, 2026 15:09
@rafa-thayto
rafa-thayto merged commit 215daae into mainApr 30, 2026
10 checks passed
@rafa-thayto
rafa-thayto deleted the rafa-thayto/bundle-size branch April 30, 2026 18:10
@github-actionsgithub-actionsBot mentioned this pull request Apr 30, 2026
Sign up for freeto 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

@rafa-thayto@wyattjoh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

perf(build): minify bundle and compiled binary - #251

Merged
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size
Apr 30, 2026
Merged

perf(build): minify bundle and compiled binary#251
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size

Conversation

@rafa-thayto

Copy link
Copy Markdown
Contributor

Summary

  • Adds --minify to all bun build invocations: the cli.js bundle, the local --compile binary, and the cross-platform release build in scripts/build.ts.
  • Reduces the shipped clerk binary by ~1 MB on every target (63.38 MB → 62.39 MB on darwin-arm64 measured locally).
  • Reduces the bundled cli.js artifact by ~41% (2.37 MB → 1.40 MB).
  • No behavior change. --define-injected values (CLI_VERSION, CLI_ENV_PROFILES) are unaffected because Bun substitutes defines before minification.

Why minify only

Reduction beyond --minify requires changing the deploy model (the embedded Bun runtime is ~60 MB of the binary and is fixed). I evaluated and rejected:

  • --target=bun (the default) — grew the bundle: 1.40 MB → 1.63 MB.
  • --sourcemap=none on --compilegrew the binary by 1.85 MB (Bun quirk; default behavior is smaller).
  • --bytecode — fails on cli.ts's top-level await import() for the completion fast path; bytecode also typically increases output size.
  • Switching @inquirer/prompts to per-package imports — tree-shaking already eliminates unused prompts (verified: 360 KB used vs 420 KB if import * as).

Test plan

  • bun run build produces cli.js of 1,400,498 B (down from 2,372,203 B)
  • bun run build:compile produces dist/clerk of 62,388,832 B (down from 63,379,552 B)
  • bun run scripts/build.ts --target darwin-arm64 --version 0.0.0-test succeeds and the binary reports the injected version
  • bun run typecheck passes
  • bun run lint passes
  • bun run format:check passes
  • bun run test — all 82 unit + integration tests pass
  • Manual smoke on the minified compiled binary: --version, --help, apps --help, init --help, completion bash all behave correctly
  • CI runs bun changeset status --since=origin/main (verified locally with staged changeset: exits 0, "clerk: patch")
  • CI runs bun run test:e2e against the source (not the compiled binary), so minify is not exercised but also not broken

@changeset-bot

changeset-botBot commented Apr 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 6ac3b1b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
clerkPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitaiBot commented Apr 30, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3a912fe6-9166-4523-8a97-7aca3f7f53a6

📥 Commits

Reviewing files that changed from the base of the PR and between 44524c0 and 6ac3b1b.

📒 Files selected for processing (3)
  • .changeset/bundle-size.md
  • packages/cli-core/package.json
  • scripts/build.ts

📝 Walkthrough

Walkthrough

This change enables build minification across the CLI build pipeline. A changeset metadata file documents the patch release for the clerk package. The build and build:compile scripts in packages/cli-core/package.json add the --minify flag to Bun build invocations. The main build script in scripts/build.ts adds --minify to the Bun compile command for selected targets. These modifications reduce the output bundle sizes without altering functionality.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title 'perf(build): minify bundle and compiled binary' directly and accurately summarizes the main change—adding minification to build processes for bundle and binary reduction.
Description check✅ PassedThe description is comprehensive and directly related to the changeset, covering the modifications made, their impact, evaluation of alternatives, and detailed test results.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

Adds `--minify` to `bun build` and `bun build --compile` invocations in
`packages/cli-core/package.json` and the cross-platform release builder
in `scripts/build.ts`.
Reduces the shipped `clerk` binary by ~1 MB across all platforms
(63.38 MB → 62.39 MB on darwin-arm64 locally) and the bundled `cli.js`
artifact by ~41% (2.37 MB → 1.40 MB). No behavior change: tests,
typecheck, lint, format and end-to-end binary smoke (`--version`,
`--help`, `apps`, `init --help`, `completion bash`) all pass.
Bun applies `--define` substitutions before minification, so
`CLI_VERSION` and `CLI_ENV_PROFILES` injection continue to work; the
release smoke test (compiled binary `--version`) still matches the
injected version.
@rafa-thayto
rafa-thaytoforce-pushed the rafa-thayto/bundle-size branch from eeda3f0 to 6ac3b1bCompareApril 30, 2026 15:09
@rafa-thayto
rafa-thayto merged commit 215daae into mainApr 30, 2026
10 checks passed
@rafa-thayto
rafa-thayto deleted the rafa-thayto/bundle-size branch April 30, 2026 18:10
@github-actionsgithub-actionsBot mentioned this pull request Apr 30, 2026
Sign up for freeto 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

@rafa-thayto@wyattjoh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

perf(build): minify bundle and compiled binary - #251

Merged
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size
Apr 30, 2026
Merged

perf(build): minify bundle and compiled binary#251
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size

Conversation

@rafa-thayto

Copy link
Copy Markdown
Contributor

Summary

  • Adds --minify to all bun build invocations: the cli.js bundle, the local --compile binary, and the cross-platform release build in scripts/build.ts.
  • Reduces the shipped clerk binary by ~1 MB on every target (63.38 MB → 62.39 MB on darwin-arm64 measured locally).
  • Reduces the bundled cli.js artifact by ~41% (2.37 MB → 1.40 MB).
  • No behavior change. --define-injected values (CLI_VERSION, CLI_ENV_PROFILES) are unaffected because Bun substitutes defines before minification.

Why minify only

Reduction beyond --minify requires changing the deploy model (the embedded Bun runtime is ~60 MB of the binary and is fixed). I evaluated and rejected:

  • --target=bun (the default) — grew the bundle: 1.40 MB → 1.63 MB.
  • --sourcemap=none on --compilegrew the binary by 1.85 MB (Bun quirk; default behavior is smaller).
  • --bytecode — fails on cli.ts's top-level await import() for the completion fast path; bytecode also typically increases output size.
  • Switching @inquirer/prompts to per-package imports — tree-shaking already eliminates unused prompts (verified: 360 KB used vs 420 KB if import * as).

Test plan

  • bun run build produces cli.js of 1,400,498 B (down from 2,372,203 B)
  • bun run build:compile produces dist/clerk of 62,388,832 B (down from 63,379,552 B)
  • bun run scripts/build.ts --target darwin-arm64 --version 0.0.0-test succeeds and the binary reports the injected version
  • bun run typecheck passes
  • bun run lint passes
  • bun run format:check passes
  • bun run test — all 82 unit + integration tests pass
  • Manual smoke on the minified compiled binary: --version, --help, apps --help, init --help, completion bash all behave correctly
  • CI runs bun changeset status --since=origin/main (verified locally with staged changeset: exits 0, "clerk: patch")
  • CI runs bun run test:e2e against the source (not the compiled binary), so minify is not exercised but also not broken

@changeset-bot

changeset-botBot commented Apr 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 6ac3b1b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
clerkPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitaiBot commented Apr 30, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3a912fe6-9166-4523-8a97-7aca3f7f53a6

📥 Commits

Reviewing files that changed from the base of the PR and between 44524c0 and 6ac3b1b.

📒 Files selected for processing (3)
  • .changeset/bundle-size.md
  • packages/cli-core/package.json
  • scripts/build.ts

📝 Walkthrough

Walkthrough

This change enables build minification across the CLI build pipeline. A changeset metadata file documents the patch release for the clerk package. The build and build:compile scripts in packages/cli-core/package.json add the --minify flag to Bun build invocations. The main build script in scripts/build.ts adds --minify to the Bun compile command for selected targets. These modifications reduce the output bundle sizes without altering functionality.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title 'perf(build): minify bundle and compiled binary' directly and accurately summarizes the main change—adding minification to build processes for bundle and binary reduction.
Description check✅ PassedThe description is comprehensive and directly related to the changeset, covering the modifications made, their impact, evaluation of alternatives, and detailed test results.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

Adds `--minify` to `bun build` and `bun build --compile` invocations in
`packages/cli-core/package.json` and the cross-platform release builder
in `scripts/build.ts`.
Reduces the shipped `clerk` binary by ~1 MB across all platforms
(63.38 MB → 62.39 MB on darwin-arm64 locally) and the bundled `cli.js`
artifact by ~41% (2.37 MB → 1.40 MB). No behavior change: tests,
typecheck, lint, format and end-to-end binary smoke (`--version`,
`--help`, `apps`, `init --help`, `completion bash`) all pass.
Bun applies `--define` substitutions before minification, so
`CLI_VERSION` and `CLI_ENV_PROFILES` injection continue to work; the
release smoke test (compiled binary `--version`) still matches the
injected version.
@rafa-thayto
rafa-thaytoforce-pushed the rafa-thayto/bundle-size branch from eeda3f0 to 6ac3b1bCompareApril 30, 2026 15:09
@rafa-thayto
rafa-thayto merged commit 215daae into mainApr 30, 2026
10 checks passed
@rafa-thayto
rafa-thayto deleted the rafa-thayto/bundle-size branch April 30, 2026 18:10
@github-actionsgithub-actionsBot mentioned this pull request Apr 30, 2026
Sign up for freeto 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

@rafa-thayto@wyattjoh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

perf(build): minify bundle and compiled binary - #251

Merged
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size
Apr 30, 2026
Merged

perf(build): minify bundle and compiled binary#251
rafa-thayto merged 1 commit into
mainfrom
rafa-thayto/bundle-size

Conversation

@rafa-thayto

Copy link
Copy Markdown
Contributor

Summary

  • Adds --minify to all bun build invocations: the cli.js bundle, the local --compile binary, and the cross-platform release build in scripts/build.ts.
  • Reduces the shipped clerk binary by ~1 MB on every target (63.38 MB → 62.39 MB on darwin-arm64 measured locally).
  • Reduces the bundled cli.js artifact by ~41% (2.37 MB → 1.40 MB).
  • No behavior change. --define-injected values (CLI_VERSION, CLI_ENV_PROFILES) are unaffected because Bun substitutes defines before minification.

Why minify only

Reduction beyond --minify requires changing the deploy model (the embedded Bun runtime is ~60 MB of the binary and is fixed). I evaluated and rejected:

  • --target=bun (the default) — grew the bundle: 1.40 MB → 1.63 MB.
  • --sourcemap=none on --compilegrew the binary by 1.85 MB (Bun quirk; default behavior is smaller).
  • --bytecode — fails on cli.ts's top-level await import() for the completion fast path; bytecode also typically increases output size.
  • Switching @inquirer/prompts to per-package imports — tree-shaking already eliminates unused prompts (verified: 360 KB used vs 420 KB if import * as).

Test plan

  • bun run build produces cli.js of 1,400,498 B (down from 2,372,203 B)
  • bun run build:compile produces dist/clerk of 62,388,832 B (down from 63,379,552 B)
  • bun run scripts/build.ts --target darwin-arm64 --version 0.0.0-test succeeds and the binary reports the injected version
  • bun run typecheck passes
  • bun run lint passes
  • bun run format:check passes
  • bun run test — all 82 unit + integration tests pass
  • Manual smoke on the minified compiled binary: --version, --help, apps --help, init --help, completion bash all behave correctly
  • CI runs bun changeset status --since=origin/main (verified locally with staged changeset: exits 0, "clerk: patch")
  • CI runs bun run test:e2e against the source (not the compiled binary), so minify is not exercised but also not broken

@changeset-bot

changeset-botBot commented Apr 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 6ac3b1b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
clerkPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitaiBot commented Apr 30, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3a912fe6-9166-4523-8a97-7aca3f7f53a6

📥 Commits

Reviewing files that changed from the base of the PR and between 44524c0 and 6ac3b1b.

📒 Files selected for processing (3)
  • .changeset/bundle-size.md
  • packages/cli-core/package.json
  • scripts/build.ts

📝 Walkthrough

Walkthrough

This change enables build minification across the CLI build pipeline. A changeset metadata file documents the patch release for the clerk package. The build and build:compile scripts in packages/cli-core/package.json add the --minify flag to Bun build invocations. The main build script in scripts/build.ts adds --minify to the Bun compile command for selected targets. These modifications reduce the output bundle sizes without altering functionality.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title 'perf(build): minify bundle and compiled binary' directly and accurately summarizes the main change—adding minification to build processes for bundle and binary reduction.
Description check✅ PassedThe description is comprehensive and directly related to the changeset, covering the modifications made, their impact, evaluation of alternatives, and detailed test results.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

Adds `--minify` to `bun build` and `bun build --compile` invocations in
`packages/cli-core/package.json` and the cross-platform release builder
in `scripts/build.ts`.
Reduces the shipped `clerk` binary by ~1 MB across all platforms
(63.38 MB → 62.39 MB on darwin-arm64 locally) and the bundled `cli.js`
artifact by ~41% (2.37 MB → 1.40 MB). No behavior change: tests,
typecheck, lint, format and end-to-end binary smoke (`--version`,
`--help`, `apps`, `init --help`, `completion bash`) all pass.
Bun applies `--define` substitutions before minification, so
`CLI_VERSION` and `CLI_ENV_PROFILES` injection continue to work; the
release smoke test (compiled binary `--version`) still matches the
injected version.
@rafa-thayto
rafa-thaytoforce-pushed the rafa-thayto/bundle-size branch from eeda3f0 to 6ac3b1bCompareApril 30, 2026 15:09
@rafa-thayto
rafa-thayto merged commit 215daae into mainApr 30, 2026
10 checks passed
@rafa-thayto
rafa-thayto deleted the rafa-thayto/bundle-size branch April 30, 2026 18:10
@github-actionsgithub-actionsBot mentioned this pull request Apr 30, 2026
Sign up for freeto 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

@rafa-thayto@wyattjoh