Skip to content
  • Transfer Marketplace resources between teams

    Transfer darkTransfer dark

    You can now transfer Marketplace resources between teams directly from the Vercel dashboard without relying on the API. This simplifies resource management during team or project changes. Both owner and member roles on the source and destination teams can initiate transfers.

    The destination team must have the corresponding integration installed before receiving a resource. The feature currently supports transfer databases from Prisma, Neon and Supabase , with additional providers and product support coming soon.

    Start from your database settings in the dashboard, or learn more in the documentation.

    Tony Pan, Hedi Zandi

  • Axios package compromise and remediation steps

    The axios npm package was compromised in an active supply chain attack discovered on March 31, 2026. Vercel investigated this issue and implemented remediation actions to protect the platform. No Vercel systems were affected.

    The npm registry removed the compromised package versions, and the latest tag now points to the safe axios@1.14.0 release.

    • We’ve blocked outgoing access from our build infrastructure to the Command & Control hostname sfrclak.com.

    • The malicious version of the package has been blocked and unpublished from npm.

    • Vercel’s own infrastructure and applications have been unaffected. We recommend checking your supply chain for exposure.

    Link to headingAffected versions

    Projects using axios@1.14.1 or axios@0.30.4 in their build environments are affected by this vulnerability.

    Link to headingResolution

    If your deployments used the malicious package version listed above in your build environment, take the following actions:

    • Search your lockfiles and node_modules for plain-crypto-js to identify compromised installations

    • Redeploy your project to ensure your build uses a clean version of axios

    • Rotate API keys, database credentials, tokens, and any other sensitive values present in your build environment

    • Review your dependency tree for references to axios@1.14.1 or axios@0.30.4 and update them to axios@1.14.0

  • Vercel CDN now respects cache-control headers from external origins by default

    New Vercel projects will honor cache-control headers by default when proxying requests to external origins, starting April 6th.

    Previously, responses served through rewrites to external origins were uncached by default, and enabling caching required the x-vercel-enable-rewrite-caching header in vercel.json. Now, Vercel's CDN automatically respects your origin's caching headers.

    What's changing:

    • For new projects, Vercel will cache responses from external origins according to upstream Cache-Control, CDN-Cache-Control and Vercel-CDN-Cache-Control headers by default.

    • You can use Cache Tags (Vercel-Cache-Tag header) from your origins to purge cached content.

    • Existing projects can opt in to the new caching behavior from the project dashboard.

    • You can opt out of caching for specific request paths by setting the x-vercel-enable-rewrite-caching header to 0.

    Review your upstream cache headers before April 6th when creating a new project that proxies to external origins without caching, ensuring they reflect your intended caching strategy.

    Learn more about Rewrites to External Origins and configure routing in the CDN tab of your project settings.

  • Automatic persistence now in beta on Vercel Sandbox

    Vercel Sandboxes can now automatically save their filesystem state when stopped and restore it when resumed. This removes the need for manual snapshots, making it easier to run long-running, durable sandboxes that continue where you left off.

    Link to headingHow it works

    A sandbox is the durable identity, now identified by a name, its filesystem state, and configuration options. A session is the compute tied to that state, invoked as needed.

    Automatic persistence introduces orchestration that separates storage from compute, reducing the need for manual snapshotting, so:

    • when you stop a sandbox, the session shuts down but the filesystem is automatically snapshotted.

    • when you resume, a new session boots from that snapshot. This state storage is not charged, so you pay when your setting is active.

    import { Sandbox } from '@vercel/sandbox';
    // Create a named sandbox
    const sandbox = await Sandbox.create({ name: 'user-a-workspace' });
    await sandbox.runCommand('npm', ['install']);
    await sandbox.stop();
    // Later, resume where you left off
    const sandbox = await Sandbox.get({ name: 'user-a-workspace' });
    await sandbox.runCommand('npm', ['run', 'dev']);

    Persistence is enabled by default in the beta SDK, can be disabled between sessions with persistent: false. When disabled, the sandbox still exists after being stopped and can be resumed by its name, but each session starts with a clean filesystem.

    If a sandbox is stopped and you run a command, the SDK will transparently create a new session, so you don't need to check state or manually restart

    const sandbox = await Sandbox.create({ name: "long-lived-sandbox" });
    await sandbox.writeFiles([{
    path: "run.sh",
    content: Buffer.from('#!/bin/bash\necho "Hello!"'),
    mode: 0o755,
    }]);
    // Days later
    const resumedSandbox = await Sandbox.get({ name: "long-lived-sandbox" });
    console.log(resumedSandbox.status); // stopped automatically
    await resumedSandbox.runCommand("./run.sh"); // logs "Hello!"
    console.log(resumedSandbox.status); // running

    The beta SDK adds methods for managing sandboxes over their lifetime:

    const sandbox = await Sandbox.get({ name: 'user-alice' });
    // Scale up resources on a running sandbox
    await sandbox.update({ resources: { vcpus: 4 } });
    // Inspect session history and snapshots
    const { sessions } = await sandbox.listSessions();
    const { snapshots } = await sandbox.listSnapshots();
    // Search across sandboxes
    const { sandboxes } = await Sandbox.list({
    namePrefix: 'user-',
    sortBy: 'name',
    });
    // Permanently remove a sandbox and all its data
    await sandbox.delete();

    The beta CLI adds configuration management and session inspection:

    # Spin up a sandbox for a user
    sandbox create --name user-alice
    # User runs commands — if the sandbox timed out, it resumes automatically
    sandbox run --name user-alice -- npm test
    # Check what happened across sessions
    sandbox sessions list user-alice
    # Tune resources without recreating
    sandbox config vcpus user-alice 4
    sandbox config timeout user-alice 5h

    This feature is in beta and requires upgrading to the beta SDK and CLI packages.

    Install the beta packages to try persistent sandboxes today: pnpm install @vercel/sandbox@beta for the SDK, and pnpm install -g sandbox@beta for the CLI.

    Persistent sandboxes are available in beta on all plans.

    Learn more in the documentation.

  • Vercel Sandboxes now allow unique, customizable names

    Vercel Sandboxes created with the latest beta package will now have a unique, customizable name within your project, replacing the previous ID-based identification. Names make sandboxes easy to find and reference:

    import { Sandbox } from '@vercel/sandbox';
    // Create a named sandbox
    const sandbox = await Sandbox.create({ name: 'user-a-workspace' });
    await sandbox.runCommand('npm', ['install']);
    await sandbox.stop();
    // Later, resume where you left off
    const sandbox = await Sandbox.get({ name: 'user-a-workspace' });
    await sandbox.runCommand('npm', ['run', 'dev']);

    The beta CLI adds configuration management and session inspection:

    # Spin up a sandbox for a user
    sandbox create --name user-alice
    # User runs commands — if the sandbox timed out, it resumes automatically
    sandbox run --name user-alice -- npm test
    # Check what happened across sessions
    sandbox sessions list user-alice

    Named sandboxes are the mechanism for identifying automatic persistence, which allows your session to be more easily identified for at both time of creation resumption.

    Install the beta packages to try named sandboxes today: pnpm install @vercel/sandbox@beta for the SDK, and pnpm install -g sandbox@beta for the CLI.

    Learn more in the documentation.

  • Chat SDK now supports concurrent message handling

    Chat SDK now lets you control what happens when a new message arrives before a previous one finishes processing, with the new concurrency option for the Chat class.

    const bot = new Chat({
    concurrency: {
    strategy: "queue",
    maxQueueSize: 20,
    onQueueFull: "drop-oldest",
    queueEntryTtlMs: 60_000,
    },
    // ...
    });

    Multiple options are supported to customize your concurrency strategy.

    Four strategies are available:

    • drop (default): discards incoming messages

    • queue: processes the latest message after the handler finishes

    • debounce: waits for a pause in conversation, processes only the final message

    • concurrent: processes every message immediately, no locking

    Read the documentation to get started.

  • Chat SDK now supports scheduled Slack messages

    Chat SDK now supports scheduled messages on Slack, allowing you to deliver a message at a future time.

    Use thread.schedule() and pass your message and a postAt date, like:

    const scheduled = await thread.schedule("Reminder: standup in 5 minutes!", {
    postAt: new Date("2026-03-09T08:55:00Z"),
    });
    // Cancel before delivery
    await scheduled.cancel();

    Read the documentation to get started.