Tom Lienard
90d · built 2026-09-30
Performance
What Tom Lienard shipped in the selected window, measured in ETV, and how it compares with the 90 days before it.
Effective capacity
+26.1engineers
delivers like 27.1 (27.1x pre-AI)
Output (ETV)
3.8ETV
+58.6% vs 2.4 prior
Features share
52.5%
−3.6 pp vs prior window
Fixes share
6.3%
+3.4 pp vs prior window
Work mix
52.5% Features0.8% Maintenance37.2% Tests3.2% Docs6.3% Fixes
10 commits over 90 days, ending 2026-09-30.
Daily performance
Daily ETV, stacked by Features, Maintenance, Tests, Docs and Fixes.
Repository spread
Where this developer's commits land. Concentrated work (top1 > 80%) vs polymath spread (top1 < 30%).
Most impactful commits
Top 10 by ETV in the last 90 days.
- 1.9ETVfeat(sdk,cli): add support for `Drive` (#285) Add support for [Drives](https://vercel.com/docs/sandbox/concepts/drives), persistent storage that can store TBs of data and be mounted on sandboxes at a specific path. Drives support point-in-time, read-only snapshots. Get started by creating a drive, then mount it on a sandbox: ```ts import { Sandbox, Drive } from '@vercel/sandbox'; const drive = await Drive.getOrCreate({ name: 'workspace-cache' }); // Mount as read-write once const sandbox = await Sandbox.create({ name: 'my-sandbox', mounts: { '/data': drive }, }); ``` Create a snapshot to mount the same drive on multiple sandboxes at a time: ```ts import { Sandbox, Drive } from '@vercel/sandbox'; const drive = await Drive.getOrCreate({ name: 'shared' }); // Mount many snapshots of the same drive const firstReader = await Sandbox.create({ name: 'reader-1', mounts: { '/data': drive.snapshot() }, }); const secondReader = await Sandbox.create({ name: 'reader-2', mounts: { '/data': drive.snapshot() }, }); ``` Read the documentation to learn more: https://vercel.com/docs/sandbox/concepts/drives --------- Co-authored-by: Elisabeth Rulke <221610566+erulkey@users.noreply.github.com> Co-authored-by: Andy <76787794+AndyW22@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: LukePS <LukeSheard@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Marc Codina <marc.codina@vercel.com>github.com-vercel-sandbox · 6afca1fe · 2026-09-11
- 1.1ETVfeat(sdk,cli): add support for secure compute (#329) Add support for attaching sandboxes to Secure Compute networks: - In the CLI, use `sandbox create --network-id ID` with your Secure Compute network id - In the SDK, use `Sandbox.create({ networkId: 'ID' })` with your Secure Compute network idgithub.com-vercel-sandbox · 752436bc · 2026-09-23
- 0.2ETVfeat(sdk): respect `retry-after` for up to 20s (#270) Follow-up to https://github.com/vercel/sandbox/pull/254: removing the `retry-after` logic made us always go through the 2 retries (with backoff) if a client keeps hitting a rate limit This PR adds back the `retry-after` logic and bails if it's more than 20s, while taking into account any `AbortSignal` passed in. It does keep the fewer retries (only 2)github.com-vercel-sandbox · 2bd5c12d · 2026-07-30
- 0.1ETVfix(sdk): allow passing Drives in `mounts` when forking (#348) Closes https://github.com/vercel/sandbox/issues/345 In `Sandbox.fork`, we were not forwarding the `mounts` field to the API, even though we did accept it in the types Also clarifying the `fork` JSdoc that mounts are not inherited automatically and have to be specified manually: this is because drives support one writer, so forking a writer sandbox would prevent spinning up the forked sandboxgithub.com-vercel-sandbox · d5b845bb · 2026-09-23
- 0.1ETVfeat(sdk): reduce default API call retries (#254) The current retries are quite expensive: 5 retries with 10ms-12s delay Reduce to 2 retries with 400-800ms delay, and remove the unused `retry-after` logic: since we bucket in per-minute, the `maxRetryAfter` of 20s always opted out of waiting 1mingithub.com-vercel-sandbox · 79a9c8ae · 2026-07-18
- 0.1ETVfeat(sdk): add `durationMs` to commands (#243) The API is now returning a `durationMs` field on commands. Similar to the exit code, it's only populated when the command finished executing This PR adds a new `durationMs` field to the commands classesgithub.com-vercel-sandbox · 68d7fd6b · 2026-07-07
- 0.1ETVfix(sdk): limit JWKS cache size on `defineSandboxProxy` (#309) This PR adds an LRU cache instead of a simple `Map` for the JWKS cache of `defineSandboxProxy` to prevent unbounded memory growth. The max size of 100 issuers is arbitrary but a good balance to prevent high memory usage/high number of open sockets while still avoiding to create new issuers all the timegithub.com-vercel-sandbox · 2023195e · 2026-08-20
- 0.1ETVfeat(sdk): clarify usage of `transform` and `forwardURL` (#251) Within network policies, `transform` and `forwardURL` are exclusive and should not be used together The API currently accepts this combinaison and doesn't reject it: `forwardURL` takes precedence and `transform` doesn't apply. We cannot currently update the API without a breaking change/new version because some customers might already accidentaly depend on it This PR updates the JS doc and validation of the SDK only, so that customers upgrading it have a chance to remove any usage of both `transform` and `forwardURL` within the same network policygithub.com-vercel-sandbox · 9cb06e6a · 2026-07-15
- 0.1ETVfeat(cli): un-deprecate `sandbox sh` (#241) We had some feedback that `sandbox sh` was useful as a quick way to run a sandbox and SSH into it directly, without having to type `sandbox create --connect` This PR un-deprecates `sandbox sh`, and supports all the options of `sandbox create`github.com-vercel-sandbox · 9f9d413d · 2026-07-06