Skip to content

perf(eve): speed up fresh npm init - #2280

Closed
cmpadden wants to merge 2 commits into
mainfrom
perf/faster-npm-init
Closed

cmpadden wants to merge 2 commits into
mainfrom
perf/faster-npm-init

Conversation

@cmpadden

@cmpadden cmpadden commented Aug 19, 2026

Copy link
Copy Markdown
Collaborator

Summary

Fresh npm-owned eve init projects spend most of dependency installation resolving optional peers that are never installed. This passes --legacy-peer-deps only for standalone projects whose complete initial manifest eve owns; existing projects and ancestor workspaces retain npm's normal peer resolution.

The trade-off is that npm will not validate or auto-install peer dependencies during that first standalone install. The scaffold explicitly declares eve's required ai peer, focused coverage limits the bypass to eve-owned manifests, and subsequent ordinary npm installs continue using normal peer behavior. Longer term, narrowing Nitro's optional-peer graph upstream would avoid needing this workaround.

A generated package-lock.json plus npm ci is a possible alternative: it could preserve peer validation at release time, make the initial graph deterministic, and preliminary cold-cache profiling completed in about 2s. It was not chosen here because the lock must remain synchronized with release-stamped scaffold versions and valid across every supported OS and architecture; during profiling, npm rejected one generated lock because it omitted a platform-specific Rolldown binding. Adopting that approach would require a dedicated cross-platform lockfile generation and validation pipeline, while still excluding existing projects, workspace members, and local package-spec overrides.

Validation

Packed the branch before and after the policy change and ran three alternating eve init benchmarks with an isolated empty npm cache per run.

Variant Run 1 Run 2 Run 3 Median
Before 41.7s 45.3s 41.8s 41.8s
After 5.2s 6.8s 5.3s 5.3s

The median improved by 87.3%, making dependency installation 7.9× faster. Manifest lookups fell from 262 to 100; both variants produced the same 98-entry lockfile graph and passed npm ls --all. Focused package-manager and structural unit coverage passed with 21 tests, init integration coverage passed with 59 tests, and the npm eve init scenario passed, along with the eve typecheck and invariant guard.

Checklist

  • I linked an issue with prior discussion confirming this change is wanted
  • I ran the relevant checks from CONTRIBUTING.md
  • I added tests and documentation where relevant
  • I added a changeset if this touches the published eve package
  • DCO sign-off passes for every commit (git commit --signoff)

Diff size

Docs — 1 file · +5 / -0

A patch changeset records the faster fresh npm scaffold behavior.

Implementation — 3 files · +4 / -0

Adds one package-manager install policy, maps it to npm's flag, and enables it only for standalone fresh scaffolds.

Tests — 3 files · +41 / -3

Covers npm argument translation and verifies the exact scenario command, while preserving normal peer resolution for existing projects and workspace members.

Signed-off-by: Colton Padden <colton.padden@vercel.com>
@vercel

vercel Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
eve-docs Ready Ready Preview Aug 19, 2026 3:34pm
eve-docs-4759 Ready Ready Preview, v0 Aug 19, 2026 3:34pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
eve-pkg Skipped Skipped Aug 19, 2026 3:34pm

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Bundle + Package Summary: apps/fixtures/weather-agent

Key takeaways

  • No notable deltas vs main (66a1bd8).

Delta vs main (66a1bd8)

Area Metric Baseline Current Delta
Package Packed tarball 8.23 MB 8.23 MB +30 B ⚠️
Package Unpacked publish size 30.91 MB 30.91 MB +283 B ⚠️
Package Installed footprint 74.94 MB 74.94 MB +283 B ⚠️
Package Published files 3335 3335 0
Package Installed files 7043 7043 0
Package Installed package instances 35 35 0
Package Distinct installed package names 34 34 0
Package Installed dependency edges 53 53 0
Package Installed optional peer edges 47 47 0
Runtime Unique function payloads 2 2 0
Runtime Total function bytes 17.98 MB 17.98 MB -40 B ✅
Runtime Public routes 16 16 0
Changed function payloads vs main (66a1bd8) (2)
Function Status Baseline Current Delta Route changes
functions/__server.func changed 8.99 MB 8.99 MB -20 B ✅ none
functions/.well-known/workflow/v1/flow.func changed 8.99 MB 8.99 MB -20 B ✅ none

eve init install

Metric Baseline Current Delta
Installed footprint 113.35 MB 113.35 MB +283 B ⚠️
Installed packages 121 121 0
dependencies 4 4 0
devDependencies 2 2 0
Dependency package bytes 45.41 MB 45.41 MB +283 B ⚠️
devDependency package bytes 5.04 MB 5.04 MB 0 B ➖
Build Metadata
  • Preset: vercel
  • Nitro: nitro@3.0.260610-beta
  • Output directory: apps/fixtures/weather-agent/.vercel/output
  • Build metadata timestamp: 2026-08-19T15:34:24.303Z
  • Route aliases: 16 public, 1 internal (17 total aliases)
  • Vercel routes in config: 19
  • Severity legend: 🔴 dominant/large, 🟠 notable, 🟡 watch, ⚪ small
Package Drill-Down

Package Details

  • Package: eve@0.39.1
  • Package directory: packages/eve
  • Tarball: 8.23 MB (eve-0.39.1.tgz)
  • Unpacked payload: 30.91 MB across 3335 published files
  • Installed footprint: 74.94 MB across 7043 installed files
  • Installed root package: 29.55 MB
  • Installed dependencies: 45.39 MB
  • Installed package instances: 35
  • Distinct installed package names: 34
  • Installed dependency edges: 53
  • Installed optional peer edges: 47
  • Runtime dependencies: 2
  • Peer dependencies: 5 (4 optional)

Installed footprint is measured from an isolated temporary npm install of the packed tarball.
Graph metrics read only package.json files in package directories directly beneath a node_modules boundary, including nested boundaries. Each directory is one package instance; distinct names come from those manifests. Dependency edges count each unique name in dependencies or optionalDependencies per instance; optional peer edges count peerDependencies marked optional.

Heavy installed dependencies

  • eve: 29.55 MB (39.4%)
  • @rolldown/binding-linux-x64-gnu: 19.91 MB (26.6%)
  • ai: 6.69 MB (8.9%)
  • zod: 5.07 MB (6.8%)
  • undici: 3.50 MB (4.7%)
Publish payload breakdown
Published file size
🔴 dist/src/compiled/shadcn-registry/index.js       [################........] 10.20 MB 33.0%
🟠 dist/src/compiled/@photon-ai/chat-adapter-ime... [####....................] 2.44 MB 7.9%
🟠 dist/src/compiled/experimental-ai-sdk-code-mo... [##......................] 1.51 MB 4.9%
🟡 dist/src/compiled/_chunks/node/undici-CUIybhQ... [#.......................] 508.8 kB 1.6%
🟡 dist/src/compiled/_chunks/workflow/undici-BBG... [#.......................] 508.8 kB 1.6%
🔴 Other published files                            [########################] 15.74 MB 50.9%
Installed footprint breakdown
Installed package size
🔴 eve                             [########################] 29.55 MB 39.4%
🔴 @rolldown/binding-linux-x64-gnu [################........] 19.91 MB 26.6%
🔴 ai                              [#####...................] 6.69 MB 8.9%
🔴 zod                             [####....................] 5.07 MB 6.8%
🟠 undici                          [###.....................] 3.50 MB 4.7%
🟠 nitro                           [##......................] 2.41 MB 3.2%
🔴 Other installed packages        [######..................] 7.81 MB 10.4%
Runtime dependencies (2)
Package Range Notes
nitro 3.0.260610-beta
undici 8.9.0
Peer dependencies (5)
Package Range Notes
@opentelemetry/api ^1.0.0 optional peer
ai catalog:
braintrust ^3.0.0 optional peer
just-bash ^3.0.0 optional peer
microsandbox ^0.5.0 optional peer
eve init install drill-down

eve init install details

  • Command: eve init my-agent
  • Package manager: npm
  • Installed footprint: 113.35 MB across 8919 installed files
  • Installed packages: 121 total (115 transitive-only)
  • dependencies: 4 direct packages totaling 45.41 MB
  • devDependencies: 2 direct packages totaling 5.04 MB
  • Other transitive package files: 62.90 MB

Installed footprint is measured from an isolated temporary eve init my-agent using the current packed eve tarball.

Heavy installed dependencies

  • eve: 29.55 MB (26.1%)
  • @typescript/typescript-linux-x64: 27.95 MB (24.7%)
  • @rolldown/binding-linux-x64-gnu: 19.91 MB (17.6%)
  • zod: 9.02 MB (8.0%)
  • ai: 6.69 MB (5.9%)
Installed footprint breakdown
Installed package size
🔴 eve                              [########################] 29.55 MB 26.1%
🔴 @typescript/typescript-linux-x64 [#######################.] 27.95 MB 24.7%
🔴 @rolldown/binding-linux-x64-gnu  [################........] 19.91 MB 17.6%
🔴 zod                              [#######.................] 9.02 MB 8.0%
🔴 ai                               [#####...................] 6.69 MB 5.9%
🟠 undici                           [###.....................] 3.50 MB 3.1%
🔴 Other installed packages         [##############..........] 16.72 MB 14.8%
dependencies (4)
Package Range Installed size Share
@vercel/connect 0.4.3 141.0 kB 0.1%
ai ^7.0.58 6.69 MB 5.9%
eve file:eve-0.39.1.tgz 29.55 MB 26.1%
zod 4.4.3 9.02 MB 8.0%
devDependencies (2)
Package Range Installed size Share
@types/node 24.x 2.54 MB 2.2%
typescript 7.0.2 2.50 MB 2.2%
Function Drill-Down

Payload Size Graph

Unique function payload size and share of total
🔴 functions/.well-known/workflow/v1/flow.func     [########################] 8.99 MB 50.0%
🔴 functions/__server.func                         [########################] 8.99 MB 50.0%

Top Function Payloads

🟠 functions/.well-known/workflow/v1/flow.func • 1 public route • 8.99 MB
Metric Value
Public routes /.well-known/workflow/v1/flow
Runtime nodejs24.x
Handler index.mjs
Payload 8.99 MB
Function files 8.99 MB across 50 files
Traced dependencies 0 B
Signal 🟠 Bundled file index.mjs is 1.98 MB (22.0%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                     [#################.......] 1.98 MB 22.0%
🟠 _chunks/runtime-artifacts.mjs [###############.........] 1.78 MB 19.7%
🟡 _libs/undici.mjs              [########................] 980.5 kB 10.9%
🟡 _chunks/sandbox.mjs           [#######.................] 781.9 kB 8.7%
🟡 _chunks/frames-DoexhtxJ.mjs   [######..................] 672.6 kB 7.5%
🟠 Other bundled files           [########################] 2.80 MB 31.1%

🧾 Vercel Config

{
  "handler": "index.mjs",
  "launcherType": "Nodejs",
  "shouldAddHelpers": false,
  "supportsResponseStreaming": true,
  "runtime": "nodejs24.x",
  "maxDuration": "max",
  "experimentalTriggers": [
    {
      "type": "queue/v2beta",
      "topic": "__eve776561746865722d6167656e74_wkf_workflow_*",
      "consumer": "default",
      "retryAfterSeconds": 5,
      "initialDelaySeconds": 0
    }
  ],
  "environment": {
    "WORKFLOW_PRECONDITION_GUARD": "1"
  }
}

🟠 functions/__server.func • 15 public routes, 1 internal alias • 8.99 MB
Metric Value
Public routes /
/eve/v1/callback/[token]
/eve/v1/connections/[name]/callback/[attemptId]/[token]
/eve/v1/connections/[name]/callback/[token]
/eve/v1/health
/eve/v1/info
/eve/v1/session
/eve/v1/session/[parentSessionId]/subagents/[callId]/[childSessionId]/stream
/eve/v1/session/[sessionId]
/eve/v1/session/[sessionId]/cancel
/eve/v1/session/[sessionId]/clear
/eve/v1/session/[sessionId]/compact
/eve/v1/session/[sessionId]/reset
/eve/v1/session/[sessionId]/stream
/eve/v1/task-input/[token]
Internal aliases /__server
Runtime nodejs24.x
Handler index.mjs
Payload 8.99 MB
Function files 8.99 MB across 50 files
Traced dependencies 0 B
Signal 🟠 Bundled file index.mjs is 1.98 MB (22.0%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                     [#################.......] 1.98 MB 22.0%
🟠 _chunks/runtime-artifacts.mjs [###############.........] 1.78 MB 19.7%
🟡 _libs/undici.mjs              [########................] 980.5 kB 10.9%
🟡 _chunks/sandbox.mjs           [#######.................] 781.9 kB 8.7%
🟡 _chunks/frames-DoexhtxJ.mjs   [######..................] 672.6 kB 7.5%
🟠 Other bundled files           [########################] 2.80 MB 31.1%

🧾 Vercel Config

{
  "handler": "index.mjs",
  "launcherType": "Nodejs",
  "shouldAddHelpers": false,
  "supportsResponseStreaming": true,
  "runtime": "nodejs24.x"
}

Build Timing: e2e/fixtures/agent-tools-sandbox

This is an informational timing measurement inside eve build, from preflight through publication. Output-size measurement and profile writing are excluded.

Build mode: deployable Vercel build with sandbox template prewarm included.

  • Build pipeline: 2.09 s -> 2.11 s (+23.7 ms) vs main (66a1bd8).
  • Timing is informational: shared GitHub runners are too variable for a hard timing budget.
Detailed phase timings vs `main (66a1bd8)`
Phase Baseline Current Delta
extension.check 1.1 ms 1.1 ms 0.0 ms
project.resolve 0.3 ms 0.3 ms 0.0 ms
workspace.create 0.7 ms 0.7 ms 0.0 ms
host.prepare 260.5 ms 219.0 ms -41.5 ms
vercel.service-prefix.resolve 2.0 ms 1.7 ms -0.3 ms
nitro.create 238.8 ms 235.3 ms -3.5 ms
sandbox.prewarm 190.3 ms 246.5 ms +56.2 ms
nitro.cache.prepare 0.2 ms 0.2 ms 0.0 ms
nitro.prepare 0.7 ms 0.8 ms +0.1 ms
nitro.public-assets 0.8 ms 0.7 ms -0.1 ms
nitro.prerender 0.4 ms 0.4 ms 0.0 ms
nitro.bundle 1.36 s 1.38 s +12.4 ms
nitro.cache.write 0.3 ms 0.3 ms 0.0 ms
vercel.workflow-function.materialize 22.7 ms 23.1 ms +0.4 ms
agent-summary.emit 0.5 ms 0.5 ms 0.0 ms
nitro.close 0.1 ms 0.1 ms 0.0 ms
output.publish 3.1 ms 3.1 ms 0.0 ms
workspace.remove 1.9 ms 1.8 ms -0.1 ms

Signed-off-by: Colton Padden <colton.padden@vercel.com>
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.

1 participant