gists

VercelLogotype

    AI Cloud
    Core Platform
    Security
    Company
    Learn
    Open Source
    Use Cases
    Tools
    Users

The safest way to run code you didn’t write.

Modern apps increasingly need to execute code they didn’t author. From AI agents, customer scripts, or dynamic systems. remote-sandbox.vercel.run Sandbox is not running Agent Generate a Next.js app that allows to list and search Emojis Create Sandbox Upload files Execute Execute Get Sandbox URL

Reducing the risk of untrusted code, at scale. Cost-efficient, scalable execution with Fluid compute

Vercel Sandbox runs on Fluid compute, Vercel optimized execution model that scales CPU and memory dynamically across millions of executions.

With Active CPU pricing, you’re billed only when code is actively running, not during idle or wait time, resulting in up to 95% lower cost for workloads with bursty or I/O-bound patterns. “

Vercel Sandbox expands what our frontend infrastructure can handle. We plan to rely on it more for running untrusted code in AI workflows and for integrating tools that cannot run in a Node.js serverless function.”

Tudor Golubenco

CTO, Xata Xata “

Cua lets teams run computer-use agents from their apps with 100+ compatible VLMs — agents operate real desktops backed by Vercel Sandbox. Next.js playground on Vercel; agents execute in Vercel Sandbox via Cua with logs, replays, and evals — fully suited for reinforcement learning (RL) workflows.”

Francesco Bonacci

Founder, Cua AI Cua Get started

You can get started with Vercel Sandbox quickly and easily. Launch a secure, interactive sandbox environment in milliseconds.

$ npx sandbox create –connect

Quickly give Vercel Sandbox a try with your AI tool of choice. Bootstrap a simple Node.js CLI that creates a Vercel sandbox. Use this code:

import { Sandbox } from ‘@vercel/sandbox’;

const sandbox = await Sandbox.create();

const { exitCode } = await sandbox.runCommand({ cmd: ‘node’, args: [‘-e’, ‘process.exit(0)’], });

console.log(exitCode === 0 ? ‘ok’ : ‘failed’);

await sandbox.stop();

Include auth setup (vercel login && vercel link) with error handling. Frequently Asked Questions

Vercel Sandbox is an on-demand, isolated Linux microVM that runs arbitrary code safely through an SDK or CLI.

Sandbox gives you secure microVM isolation, built-in authentication and observability, and usage-based pricing without any infrastructure to maintain.

Yes. Sandbox is purpose-built to execute untrusted or AI-generated code in fully isolated, short-lived environments.

Each sandbox runs inside a Firecracker microVM on the same infrastructure that powers Vercel’s build system.

Node.js 22 and Python 3.13 are available by default, with more runtimes coming soon.

Yes. Each sandbox runs on Amazon Linux 2023, so you can install packages with dnf and use sudo as needed.

Sandboxes run for 5 minutes by default, up to 45 minutes on Hobby and 5 hours on Pro and Enterprise plans, with programmatic extensions available.

Each sandbox can use up to 8 vCPUs and 2 GB of RAM per vCPU.

Yes. You can open up to four ports and access them through a sandbox URL, such as sandbox.domain(port).

You can view active sandboxes in the Observability → Sandboxes view for your project, and stream real-time logs to your terminal.

Ready to deploy? Start building with a free account. Speak to an expert for your Pro or Enterprise needs.

Trial Vercel with higher execution, increased app bandwidth, Speed Insights, team features, and more. Products

AI
Enterprise
Fluid Compute
Next.js
Observability
Previews
Rendering
Security
Turbo
Domains
Sandbox
Workflow
v0

Resources

Community
Docs
Knowledge Base
Academy
Help
Integrations
Platforms
Pricing
Resources
Solution Partners
Startups
Templates

Company

About
Blog
Careers
Changelog
Contact Us
Customers
Events
Partners
Shipped
Privacy Policy

Social

GitHub
LinkedIn
Twitter
YouTube

Loading status… Select a display theme: system light dark

vercel sandboxの使い道を教えて

Vercel Sandbox は、Vercel が提供する「短時間で立ち上がる隔離された Linux microVM(Firecracker)」で、自分が書いていない(=信頼できない可能性がある)コードを安全に実行するための実行環境です。Next.js のサーバレス関数や Edge ではやりにくい「任意コード実行」を、より強い隔離で扱えます。

代表的な使い道

1) AIエージェント/LLMが生成したコードの実行

2) ユーザー提供のスクリプト実行(カスタムロジック)

3) セキュアなコード実行API(“Run code”機能)

4) 変換・ビルド・解析などの「重い/危険な」バッチ処理

5) 不審ファイルの動的解析(マルウェア“研究”寄り)

使うメリット(何が嬉しいか)

どんな時に「Sandboxを使うべき」?

逆に、Sandboxじゃなくていい場合

もし「具体的にどんなプロダクトで使いたいか(例:ユーザースクリプト、AIエージェント、オンラインIDEなど)」を教えてくれれば、Sandboxでの構成例(API設計、権限制御、ログ/保存、コスト見積もりの考え方)まで絞って提案できます。

いまいちイメージ湧かないんですけど。 今までのソリューションや手段とは何が違うの? 大量の実行を想定(AIワークロード向き)とあるけど、そんなシチュなんてあるの?

Vercel Sandbox を「何が新しいのか」「どんな大量実行があるのか」が腹落ちする形で整理します。ポイントは “任意コード実行”を、サーバレス関数より強い隔離(microVM)で、しかも大量に回せるように製品化したもの です。


1) まず何が違うの?(従来手段との比較)

A. Next.js / Serverless Functions(Node実行)との違い

Serverless/Edge は基本的に「自社が書いたコード」を安全に運用するためのもので、ユーザーやAIが生成した“怪しいコード”を走らせる用途は想定が弱いです。

結論:「自社コード」なら Serverless、 「他人/AIのコード」なら Sandbox が分かりやすい。


B. Docker(自前K8s/ECS)でのサンドボックスと何が違う?

「コンテナで隔離して実行」は昔からある王道です。違いは 運用と隔離の“前提”

結論:Dockerで作れるが、“任意コード実行基盤”を自前で作る面倒を製品として肩代わりしている。


C. Replit / Code Runner 系の外部サービスと何が違う?


2) 「大量の実行」ってどんなシチュエーション?

「毎秒数千のコード実行」みたいな極端な話だけじゃないです。AI時代だと “小さい実行が大量に発生する”が普通に起きます。

シチュ1:AIエージェントが“試行錯誤”で何十回も走らせる

例:あなたのアプリに「AIにCSV整理を頼む」機能があるとします。

  1. AIが変換スクリプトを書く
  2. 実行して失敗(型違い、文字コード、列名揺れ)
  3. 修正して再実行
  4. さらに追加要件で再実行…

ユーザー1人の1回の操作が、裏で 10〜50回の実行になることがあります。
これが 1000ユーザー / 日 になると、数万実行/日は現実的です。


シチュ2:Tool use(関数呼び出し)で“細かいタスクを分割”する

エージェントは「一発で完成」よりも、次のように分割します。

1つの依頼が 複数コマンド実行に分解されるので、実行回数が増えがちです。


シチュ3:ユーザースクリプト機能(SaaSの拡張)を提供している

例:

こういうのは、ユーザーが増えるほど イベント数=実行数で増えます。
さらに「ユーザーコードは信頼できない」ので Sandbox が刺さる。


シチュ4:オンラインIDE/教材/採点(ジャッジ)

1クラスで数百人が、課題提出のたびに何回も実行 → 短時間にバーストします。
サンドボックスは短命実行を捌くのに向いています。


3) 何が嬉しいのかを一言で言うと


4) 具体イメージ(超ミニ例)

あなたの Next.js アプリで「ユーザーが貼ったJSを実行して結果を返す」機能を作るとします。


もし「今イメージできない」の原因が、あなたの作っているものに“他人のコードを実行する要件がない”からなら、それが正常です。
逆に、次のどれかがあるなら刺さりやすいです:

1) AIにコードを書かせて実行したい(データ加工、repo操作、テスト実行)
2) ユーザーがスクリプト/式/プラグインを書ける機能を入れたい
3) OSツール(変換・解析)を安全に動かしたい

あなたが作っているプロダクト(または作りたい機能)を1〜2行で教えてください。「Sandbox が必要な場面か」「代替(ServerlessやQueue+Worker)の方がいいか」を、その前提で具体構成に落とします。

sandboxを使う時は冪等性を確保するべきですよね? 毎回一から vm をつくって、必要な環境をセットアップして、コードを実行して、をできるようにする。 基本的にその理解で合っていて、Vercel Sandbox を「短命・使い捨ての実行環境」として使うなら 冪等性(同じ入力→同じ結果、途中で落ちても再実行できる)を前提に設計するのがほぼ必須です。理由は「VMがいつでも捨てられる/作り直される」ことが価値であり、そこに依存すると運用が壊れるからです。

ただし、冪等性を“Sandboxの中で全部完結”させるというより、外側(あなたのアプリ側)でジョブを冪等に管理し、Sandboxは純粋な実行器にするのがコツです。

1) まず前提:Sandboxは「ステートレス実行器」とみなす

典型フローはおっしゃる通りで、

  1. Sandbox作成
  2. 環境セットアップ(依存導入・ファイル配置)
  3. コード実行
  4. 結果回収
  5. Sandbox破棄

このとき Sandbox内の状態は信用しない / 再利用を前提にしない のが基本です(キャッシュを置いて高速化、は“最適化”として後から)。

2) 冪等性が必要になる具体ポイント

(A) リトライが普通に起きる

→ 「同じジョブをもう一回投げる」が避けられないので、二重実行されても壊れない設計が必要。

(B) “副作用”があると壊れる

例:

→ Sandboxの中で副作用を起こすなら、必ず冪等化が必要。

3) 具体的な設計パターン(おすすめ)

パターン1:外側で「ジョブID」を発行し、結果を1回だけ確定する(王道)

これで、Sandboxが何回走っても最終結果がブレにくい。

パターン2:外部API呼び出しは“Sandboxの外”に寄せる

これができると冪等性が一気に簡単になります。

パターン3:どうしても外部API叩くならIdempotency Keyを使う

StripeのIdempotency-Keyのように、外部が冪等キー対応しているなら必ず使う。 対応してないAPIなら、あなた側で「このjobIdでは既に呼んだ」記録を持つ。

4) セットアップを毎回やるのは正しい?(はい。ただ最適化は可能)

毎回クリーンに作ってセットアップするのは“正”です。ただ、セットアップが重い場合は次を検討します。

Vercel Sandbox自体に「常に同じVMを温存して使い回す」発想を強く持つと、結局不安定になります。

5) 実装チェックリスト(最低限)

もし「何をSandbox内でやって、何を外に出すべきか」を具体に引きたいので、想定ユースケース(例:ユーザースクリプト実行、AIが生成したPythonでETL、リポジトリに対するテスト実行など)を教えてください。副作用ポイントごとに冪等化の設計を落とし込めます。

vercel sandbox を使うときの具体的なフローは? API で vm 起動命令と実行させたいコードを送る?

典型は「APIで“VMに入ってコマンド叩く”」というより、あなたのアプリ(Next.js / Backend)から Vercel Sandbox SDK/CLI を使って microVM を作り、VM内でコマンドを実行して、結果(stdout/stderr/成果物)を回収して捨てる、という流れです。
(=HTTPで“コード文字列”を投げて勝手に実行してくれる単体サービス、というより「隔離実行環境をAPIで操作する」イメージ)

以下、実運用でよくある具体フローを2パターンで。


パターンA:同期実行(短い処理向け・リクエスト内で完結)

  1. クライアント → あなたのAPIに実行依頼(コード/入力/依存情報など)
  2. あなたのAPIが Sandbox.create() でSandbox作成
  3. 必要ファイルをSandboxに配置(コード、package.json、入力データなど)
  4. sandbox.runCommand() で実行(node/python、任意コマンド)
  5. stdout/stderr/exit code を取得
  6. 必要なら成果物ファイルを取り出す
  7. sandbox.stop() で破棄
  8. APIレスポンスとして結果を返す

向いてるもの:


パターンB:非同期実行(現実はこっちが多い:長い/失敗する/リトライする)

  1. クライアント → あなたのAPIに依頼
  2. APIは jobId を発行して「受け付けた」だけ返す(202)
  3. Queue/Workflow/ジョブワーカーが jobId を拾う
  4. ワーカーがSandboxを作成
  5. Sandbox内でセットアップ → 実行
  6. 結果をDB/オブジェクトストレージへ保存(jobIdで紐付け、冪等に)
  7. Sandbox破棄
  8. クライアントは jobId でポーリング、またはWebhook/SSEで完了通知

向いてるもの:


「APIでVM起動命令とコードを送る?」への答え

概ね Yes ですが、よくある設計はこう整理すると安全で運用しやすいです。

つまり「クライアントがVercel Sandboxへ直接コードを投げる」より、必ずあなたのサーバ側が仲介して


最小の疑似コード(イメージ)

import { Sandbox } from "@vercel/sandbox";

export async function runUserCode({ files, cmd, args }) {
  const sb = await Sandbox.create();

  try {
    // 例: ファイル配置(APIは実際のSDKの形に合わせて)
    // await sb.writeFile("/work/index.js", files["index.js"]);

    const result = await sb.runCommand({ cmd, args });
    // result: exitCode, stdout, stderr ... のような情報を回収

    return result;
  } finally {
    await sb.stop();
  }
}

実際に設計するときに決めるべきこと(重要)


あなたの想定はどれに近いですか? 1) ユーザーが貼ったJS/Pythonを1回実行して結果を返す(同期)
2) AIが何度も試しながら実行する(非同期・複数回)
3) OSツール込みで変換(pandoc/ffmpeg等)

それで、具体的な「ファイルの渡し方」「結果の取り回し」「冪等化」をその前提でフロー図レベルまで落とします。

え? Sandbox.create() や runCommand() はローカルで microVM 立ち上げるってこと?違うよね?

違います。Sandbox.create()runCommand()ローカルPC上で microVM を起動するものではなく、Vercel のインフラ上(リモート)で sandbox(Firecracker microVM)を作って、その中でコマンドを実行するための SDK 呼び出しです。

何がどこで動くか(整理)

あなたのコード(Next.js API / Worker / ローカルCLI)

sandbox(microVM)

つまり SDK は “VMをローカルで動かすライブラリ” ではなく、リモート実行環境を操作するクライアントです。

じゃあ npx sandbox create --connect は?

これも同じで、CLIが リモートに sandbox を作って、それに ローカル端末から接続(ログ閲覧・操作)しているだけです。Docker Desktop みたいにローカルでVMが立つわけではありません。

イメージ(超短く)

補足:どこから呼ぶのが一般的?

もし「ローカルから呼ぶ場合、認証は何が必要?」「本番で Next.js の Route Handler から呼ぶのはアリ?」みたいな運用面の前提を教えてくれたら、その形での推奨構成を具体化します。