Sandbox SDK — @next (aperçu 1.0)
Environnements Linux isolés sur Cloudflare Containers, pilotés depuis Workers.
Privilégiez les docs d'aperçu et les types @next installés par rapport à la mémoire. Les APIs changent ; cette skill est une porte, un contrat et une carte de récupération—pas un manuel complet.
Nous recommandons les nouveaux projets sur cette ligne. Les apps encore sur le package par défaut utilisent sandbox-stable. Migrez seulement si demandé, via sandbox-migrate-to-next.
1. Porte — confirmer la ligne de package
Avant d'écrire du code, inspectez l'app :
| Vérification | Doit correspondre |
|---|---|
| Dépendance npm | @cloudflare/sandbox@next (ou un autre tag d'aperçu) |
| Image Container | Même ligne (ex. cloudflare/sandbox:next, next-python) |
| Si vous trouvez… | Action |
|---|---|
@cloudflare/sandbox par défaut (sans @next) |
Arrêtez. Chargez sandbox-stable. N'appliquez pas les APIs de cette skill. |
L'utilisateur veut migrer stable → @next |
Arrêtez. Chargez sandbox-migrate-to-next. |
| Bridge auto-déployé uniquement | Bridge n'est pas encore sur la ligne d'aperçu 1.0. Gardez bridge sur package + image stable. Bridge (stable) |
Ne mélangez jamais un package Worker @next avec une image container stable (ou l'inverse).
Installation des skills : Agent setup · cloudflare/skills
2. Contrat — non-négociables
sandbox.exec(argv)prend une liste argv et se résout quand le processus démarre. Elle retourne un handle, pas un résultat de commande terminée.- Récupérez les résultats avec les méthodes du handle :
output(),logs(),waitForExit(),waitForPort(),waitForLog(),kill(signal?). - Pas de shell implicite. La syntaxe shell a besoin d'un shell explicite, ex.
["/bin/bash", "-lc", script]. - Chaque lancement est indépendant. Un
cd/exportdans unexecn'est pas visible au suivant. Passezcwdetenvpar lancement, ou un script shell unique. - Les process handles n'ont pas de stdin. Utilisation interactive → terminaux (
createTerminal+connect). timeoutlocal /AbortSignalannulent l'attente seulement. Ils ne tuent pas le processus. Utilisezkillou letimeoutdistant d'exec.getProcess/listProcesses/getTerminal/listTerminalsne démarrent pas un container ; ils retournentnull/[]quand aucun n'est actif.- Les IDs de processus et terminal appartiennent au container courant, pas à jamais au sandbox ID. Pour du travail qui doit survivre au remplacement, stockez le job complet (argv, cwd, env, état app)—pas seulement un id.
- Config non-secrète seulement dans
setEnvVars/envde lancement. Les credentials en direct restent dans le Worker ; utilisez les outbound handlers quand le sandbox appelle des APIs externes. - Ne pas inventer les APIs stable supprimées (
gitCheckoutsur core, complétude string-exec, session execution,sandbox.terminal(request)). - Ne pas utiliser une boucle retry pour chaque erreur (voir docs Errors).
Forme minimale :
import { getSandbox, proxyToSandbox, Sandbox } from "@cloudflare/sandbox";
export { Sandbox };
const sandbox = getSandbox(env.Sandbox, "user-123");
const process = await sandbox.exec(["python3", "-c", "print(2 + 2)"]);
const result = await process.output({ encoding: "utf8" });
// result.stdout, result.exitCode
Pense-bête optionnel non-exhaustif (process/terminal/interpreter seulement) : references/api-quick-ref.md
Index des exemples (branche next) : references/examples.md
3. Récupérer — ouvrir la doc pour la tâche
Cherchez la page avant d'implémenter. Les types @next installés l'emportent sur les suppositions.
| Vous avez besoin de… | Ouvrir |
|---|---|
| Orientation / choisir aperçu | Aperçu 1.0 |
| Premier Worker, wrangler, Dockerfile | Démarrer |
exec, handles, readiness, durability |
Exécution de processus |
| Signatures de l'API Processes | API Processes |
| Sandbox ID vs container vs sleep/destroy | Lifecycle |
cwd / env / setEnvVars |
Environnement |
| PTY interactif / terminal navigateur | Terminaux · API Terminaux |
| Interpréteur de code Python/JS | Interpréteur · API Interpréteur |
| Modèle d'extensions | Extensions |
| Classes d'erreur et récupération | Erreurs · API Erreurs |
| Défaillances courantes | Dépannage |
| Hub API | Référence API |
Fichiers, mounts, backups, ports, tunnels, proxyToSandbox |
Docs principales pour surfaces partagées (ignorer session/transport/sandbox.terminal stable-only) : Fichiers · Stockage / mounts · Ports · Tunnels · Backups · Trafic sortant · Exposer des services · Production |
| Apps exemple | examples sur next |
| Toujours sur package stable | sandbox-stable · Docs Sandbox principales |
| Migrer une app stable existante | sandbox-migrate-to-next · Migrer |
4. Avant de déployer
- Lockfile et Dockerfile sur la même ligne
@next - Typecheck par rapport aux types
@nextinstallés - Pas de secrets en direct dans l'env du sandbox
- Les hostnames d'aperçu en production ont besoin de DNS wildcard sur un domaine personnalisé quand vous utilisez ces patterns d'URL