Skip to content

[python] Lambda runtime install cold-start performance improvements#15080

Merged
gscho merged 38 commits intomainfrom
gscho/PY-99-pack-the-lambda
Feb 19, 2026
Merged

[python] Lambda runtime install cold-start performance improvements#15080
gscho merged 38 commits intomainfrom
gscho/PY-99-pack-the-lambda

Conversation

@gscho
Copy link
Copy Markdown
Contributor

@gscho gscho commented Feb 17, 2026

Warning

High Risk Change

Large refactor of Python Lambda dependency bundling logic introduces new knapsack packing algorithm and changes runtime installation from uv pip install to uv sync --inexact --frozen, affecting cold-start behavior for oversized bundles.

  • New PythonDependencyExternalizer class with knapsack algorithm for optimal Lambda packing
  • Runtime install switches from uv pip install -r requirements.txt to uv sync --inexact --frozen
  • Removes generateRuntimeRequirements function, replaces with JSON config-based approach

Risk assessment for commit 870da37.

Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Feb 17, 2026

🦋 Changeset detected

Latest commit: 870da37

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

This PR includes changesets to release 18 packages
Name Type
@vercel/python-analysis Minor
@vercel/python-runtime Minor
@vercel/python Minor
@vercel/build-utils Patch
vercel Patch
@vercel/backends Patch
@vercel/client Patch
@vercel/elysia Patch
@vercel/express Patch
@vercel/fastify Patch
@vercel/gatsby-plugin-vercel-builder Patch
@vercel/h3 Patch
@vercel/hono Patch
@vercel/koa Patch
@vercel/nestjs Patch
@vercel/node Patch
@vercel/static-build Patch
@vercel/cervel Patch

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 17, 2026

📦 CLI Tarball Ready

The Vercel CLI tarball for this PR is now available!

Quick Test

You can test this PR's CLI directly by running:

npx https://vercel-p2r3g1nff.vercel.sh/tarballs/vercel.tgz --help

Use in vercel.json

To use this CLI version in your project builds, add to your vercel.json:

{
  "build": {
    "env": {
      "VERCEL_CLI_VERSION": "vercel@https://vercel-p2r3g1nff.vercel.sh/tarballs/vercel.tgz"
    }
  }
}

Python Runtime Wheel

A Python runtime wheel was also built for this PR.
To use in your Python project builds, also set this environment variable:

VERCEL_RUNTIME_PYTHON="vercel-runtime @ https://vercel-p2r3g1nff.vercel.sh/tarballs/vercel_runtime-0.5.0.dev1771530683+870da37-py3-none-any.whl"

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 17, 2026

🧪 Unit Test Strategy

Comparing: 847ea59870da37 (view diff)

Strategy: Code changed outside of a package - running all unit tests

⚠️ All unit tests will run because global code changes could impact all packages.

Affected packages - 40 (100%)
  1. @vercel-internals/get-package-json
  2. @vercel/backends
  3. @vercel/build-utils
  4. @vercel/cervel
  5. @vercel/cli-auth
  6. @vercel/client
  7. @vercel/config
  8. @vercel/detect-agent
  9. @vercel/edge
  10. @vercel/elysia
  11. @vercel/error-utils
  12. @vercel/express
  13. @vercel/fastify
  14. @vercel/firewall
  15. @vercel/frameworks
  16. @vercel/fs-detectors
  17. @vercel/functions
  18. @vercel/gatsby-plugin-vercel-builder
  19. @vercel/go
  20. @vercel/h3
  21. @vercel/hono
  22. @vercel/hydrogen
  23. @vercel/koa
  24. @vercel/nestjs
  25. @vercel/next
  26. @vercel/node
  27. @vercel/oidc
  28. @vercel/oidc-aws-credentials-provider
  29. @vercel/python
  30. @vercel/python-analysis
  31. @vercel/redwood
  32. @vercel/related-projects
  33. @vercel/remix-builder
  34. @vercel/routing-utils
  35. @vercel/ruby
  36. @vercel/rust
  37. @vercel/static-build
  38. @vercel/static-config
  39. examples
  40. vercel

Results

  • Unit tests: All affected packages will run unit tests
  • E2E tests: Running in parallel via E2E Tests workflow
  • Type checks: All affected packages will run type checks

This comment is automatically generated based on the affected testing strategy

Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
@gscho gscho marked this pull request as ready for review February 19, 2026 17:08
@gscho gscho requested review from a team as code owners February 19, 2026 17:08
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
gscho and others added 3 commits February 19, 2026 14:33
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Co-authored-by: Elvis Pranskevichus <elvis@vercel.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
Signed-off-by: gscho <greg.c.schofield@gmail.com>
@gscho gscho merged commit fc56fb9 into main Feb 19, 2026
395 of 400 checks passed
@gscho gscho deleted the gscho/PY-99-pack-the-lambda branch February 19, 2026 21:49
tknickman pushed a commit that referenced this pull request Feb 19, 2026
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## vercel@50.22.0

### Minor Changes

- feat(cli): add `vercel integration guide` command
([#15108](#15108))

Adds a new `vercel integration guide` subcommand that displays getting
started guides,
code snippets, and resource links for marketplace integrations directly
in the terminal.

Supports single-product and multi-product integrations with interactive
product and
framework selection. Includes `--framework` flag for non-interactive
framework
selection (useful for CI/agents). Output is raw markdown written to
stdout for easy
    piping to files or other tools.

### Patch Changes

- fix(cli): fix missing planId in non-subscription plan web fallback
([#15152](#15152))

-   [services]([#15093](#15093))
- consolidate `workspace` and `entrypoint` from `experimentalServices`
`vercel.json` schema
- make `framework` config in service optional -- infer framework from
service workspace when not explicitly provided

- Updated dependencies
\[[`09b3540742ac86b768de9775929fef1ef36db412`](09b3540),
[`fc56fb91b4dafabe0f68f86efeabbaf98b2642bc`](fc56fb9)]:
    -   @vercel/build-utils@13.4.3
    -   @vercel/python@6.15.0
    -   @vercel/backends@0.0.36
    -   @vercel/elysia@0.1.39
    -   @vercel/express@0.1.48
    -   @vercel/fastify@0.1.42
    -   @vercel/go@3.4.1
    -   @vercel/h3@0.1.48
    -   @vercel/hono@0.2.42
    -   @vercel/hydrogen@1.3.5
    -   @vercel/koa@0.1.22
    -   @vercel/nestjs@0.2.43
    -   @vercel/next@4.15.31
    -   @vercel/node@5.6.6
    -   @vercel/redwood@2.4.9
    -   @vercel/remix-builder@5.5.10
    -   @vercel/ruby@2.3.1
    -   @vercel/rust@1.0.5
    -   @vercel/static-build@2.8.40

## @vercel/python@6.15.0

### Minor Changes

- Optimize cold starts for lambdas >250MB
([#15080](#15080))

1. Remove `uv pip install` and replace it with `uv sync --inexact
--frozen`
2. Pack the lambda zip with dependencies up to 245MB then only install
the remaining ones at runtime

### Patch Changes

- Updated dependencies
\[[`fc56fb91b4dafabe0f68f86efeabbaf98b2642bc`](fc56fb9)]:
    -   @vercel/python-analysis@0.6.0

## @vercel/python-analysis@0.6.0

### Minor Changes

- Optimize cold starts for lambdas >250MB
([#15080](#15080))

1. Remove `uv pip install` and replace it with `uv sync --inexact
--frozen`
2. Pack the lambda zip with dependencies up to 245MB then only install
the remaining ones at runtime

## @vercel/backends@0.0.36

### Patch Changes

- Updated dependencies
\[[`09b3540742ac86b768de9775929fef1ef36db412`](09b3540)]:
    -   @vercel/build-utils@13.4.3

## @vercel/build-utils@13.4.3

### Patch Changes

-   [services]([#15093](#15093))
- consolidate `workspace` and `entrypoint` from `experimentalServices`
`vercel.json` schema
- make `framework` config in service optional -- infer framework from
service workspace when not explicitly provided
- Updated dependencies
\[[`fc56fb91b4dafabe0f68f86efeabbaf98b2642bc`](fc56fb9)]:
    -   @vercel/python-analysis@0.6.0

## @vercel/cervel@0.0.23

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/backends@0.0.36

## @vercel/client@17.2.45

### Patch Changes

- Updated dependencies
\[[`09b3540742ac86b768de9775929fef1ef36db412`](09b3540)]:
    -   @vercel/build-utils@13.4.3

## @vercel/elysia@0.1.39

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.6

## @vercel/express@0.1.48

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.6
    -   @vercel/cervel@0.0.23

## @vercel/fastify@0.1.42

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.6

## @vercel/fs-detectors@5.8.9

### Patch Changes

-   [services]([#15093](#15093))
- consolidate `workspace` and `entrypoint` from `experimentalServices`
`vercel.json` schema
- make `framework` config in service optional -- infer framework from
service workspace when not explicitly provided

## @vercel/gatsby-plugin-vercel-builder@2.0.138

### Patch Changes

- Updated dependencies
\[[`09b3540742ac86b768de9775929fef1ef36db412`](09b3540)]:
    -   @vercel/build-utils@13.4.3

## @vercel/h3@0.1.48

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.6

## @vercel/hono@0.2.42

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.6

## @vercel/koa@0.1.22

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.6

## @vercel/nestjs@0.2.43

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.6

## @vercel/node@5.6.6

### Patch Changes

- Updated dependencies
\[[`09b3540742ac86b768de9775929fef1ef36db412`](09b3540)]:
    -   @vercel/build-utils@13.4.3

## @vercel/static-build@2.8.40

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/gatsby-plugin-vercel-builder@2.0.138

## @vercel/python-runtime@0.5.0

### Minor Changes

- Optimize cold starts for lambdas >250MB
([#15080](#15080))

1. Remove `uv pip install` and replace it with `uv sync --inexact
--frozen`
2. Pack the lambda zip with dependencies up to 245MB then only install
the remaining ones at runtime


<!-- VADE_RISK_START -->
> [!NOTE]
> Low Risk Change
>
> This PR is an automated Changesets release that only updates version
numbers in package.json files and CHANGELOG.md files across multiple
packages, with no logic changes.
> 
> - Version bumps across ~25 packages (patch and minor versions)
> - CHANGELOG.md updates documenting previous changes
> - Deleted changeset markdown files consumed by release process
>
> <sup>Risk assessment for [commit
f054c83](https://github.com/vercel/vercel/commit/f054c83041bfd8d833afeb59bac76918875f980e).</sup>
<!-- VADE_RISK_END -->

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants