Funciones · Alojamiento y despliegues

En línea, y reversible.

Cada app recibe su propio proyecto de alojamiento y una dirección trytofu.app. Una versión nueva se revisa antes de compilar, se publica solo cuando responde a una solicitud real y queda en un historial desde el que puedes restaurarla: en el panel o pidiéndoselo a tu agente.

Lo que llama tu agente

  • deploy
  • status
  • listDeployments
  • getBuildLogs
  • getRuntimeLogs
  • rollback
Tres formas de traer tu app

Empieza desde tu agente. O desde GitHub.

Cada ruta pasa por la misma revisión y la misma publicación, y una actualización reemplaza el código fuente del mismo proyecto: sus ajustes, su dirección y su historial se conservan.

  1. Tu agente de programación

    Recomendado. Pega el mensaje de configuración en cualquier agente de programación. El agente verifica e instala el cliente de Tofu, tú apruebas un código en tu navegador y él sube, revisa y despliega desde la conversación, cuando se lo pides. Una actualización reemplaza el código fuente del mismo proyecto, y su configuración, dirección e historial se mantienen.

    Agente y línea de comandos

    ❯ setup prompt pasted · code approved

  2. Una rama de GitHub

    Importa una rama con un permiso de solo lectura, fijada a un commit. Activa las actualizaciones automáticas, en cualquier plan, y cada envío de cambios despliega el último commit de la rama pasando por la misma revisión.

    main · push → deploy

  3. La línea de comandos

    El cliente independiente ejecuta las mismas operaciones desde una terminal o un entorno aislado en la nube: Node.js 22 o posterior, una aprobación en tu navegador y ninguna clave pegada en ningún lado.

    $ node tofu-agent.mjs login

Antes de compilar

Se revisa antes de compilar. Un rechazo no envía nada.

Los archivos que se van a subir pasan primero por la revisión de seguridad, y la misma revisión se ejecuta otra vez sobre los bytes exactos justo antes de compilar. Un hallazgo que podría perjudicar a otras personas (una forma de malware conocida, phishing o una clave filtrada) lo detiene ahí: nada llega al proveedor y la versión que ya está en línea sigue respondiendo. Las decisiones que solo afectan tu propia app, como una tabla que cualquiera puede editar, vuelven como advertencias y tu app se publica tal cual la hiciste.

Qué lee la revisión y qué no

Publicación

Una compilación que dice “lista”todavía no es una app en línea.

Tofu cambia la dirección de tu app solo después de que la versión nueva haya respondido a una solicitud propia.

  1. Revisión

    Se revisa la instantánea; si hay un hallazgo bloqueante, todo se detiene aquí y no se envía nada.
  2. Compilación

    El proveedor la compila en el proyecto de alojamiento propio de la app mientras la versión en línea sigue respondiendo.
  3. Respuesta

    Tofu hace una solicitud a la dirección propia de la compilación nueva. Solo cuenta una respuesta; un muro de inicio de sesión se interpreta como protección, no como un fallo.
  4. Publicación

    Solo entonces cambia la dirección trytofu.app. Lo que haya fallado deja la versión anterior respondiendo.

Lo que tu agente recibe como respuesta

deploy espera un tiempo limitado a que haya una respuesta definitiva, y status continúa desde ahí. La respuesta es legible por máquina, así que un agente nunca tiene que abrir la dirección para adivinar.

publiclyReachable
Verdadero solo cuando se respondió a una solicitud anónima: la respuesta a “¿puede un visitante abrirla ahora?”
verification.access
public (atendida), protection (rechazada de forma anónima: un muro de acceso, no una compilación fallida) o unreachable (una dirección que responde 404 o no responde se vuelve a consultar primero durante un máximo de 16 segundos).
serving
Indica si este despliegue responde en la dirección de la app; una compilación lista que no está respondiendo no se publicó.
tofu · deployexample · excerpt
{
  "status": "ready",
  "managedUrl": "https://franks-kitchen-3f9a1c07b2e4.trytofu.app/",
  "serving": true,
  "publiclyReachable": true,
  "verification": {
    "access": "public",
    "httpStatus": 200
  }
}
Historial, registros y reversión

Cada intento, en el registro. Cualquier versión sana, de vuelta en un solo paso.

  • listDeployments

    Historial

    Cada intento con su estado, y cuál es el actual: la última versión que se publicó de verdad, no simplemente la más nueva.

  • getBuildLogs · getRuntimeLogs

    Registros

    Los registros de compilación y de ejecución que produjo la plataforma, con las líneas que parecen credenciales ocultadas en la medida de lo posible.

  • rollback

    Reversión

    Apunta la dirección a un despliegue anterior que esté listo, sin una compilación nueva. Tus datos no vuelven atrás y tu agente te pregunta primero.

Cuando falla una actualización

Una compilación fallida no cambia nada en línea. Tu agente recibe lo necesario para solucionarlo.

Una versión nueva se publica solo después de responder, así que una compilación que falla deja la versión en línea donde estaba. Tofu le entrega a tu agente de programación el fallo, sus registros y los siguientes pasos.

  1. La versión en línea se queda

    Una versión que no logra compilar o no responde nunca se publica. Tu app sigue respondiendo con la anterior.
  2. Un informe para tu agente

    El fallo, un resumen de sus registros sin los valores secretos y los siguientes pasos: lo mismo en todos los planes.
  3. Corrige y vuelve a desplegar

    Tu agente cambia tu código y despliega de nuevo, pasando por la misma revisión y la misma comprobación de estado.

Pídele a tu agente que corrija un despliegue fallido y leerá repairContext: el intento que falló, qué está en línea ahora y qué hacer después. Tofu nunca escribe en tu código ni en tu repositorio de GitHub por su cuenta.

Variables de entorno

Los nombres, en Tofu. Los valores, de solo escritura.

Los nombres y los ámbitos están en el panel; los valores van directo al proveedor de alojamiento. Un secreto se guarda allí como valor de solo escritura y nunca se lee de vuelta: ni por el panel, ni por Tofu, ni por tu agente.

Cuando pegas un archivo .env, cada valor se trata como un secreto, los nombres VERCEL_* están reservados y los valores que Tofu escribe para una base de datos administrada son gestionados y de solo lectura. Guardar un cambio no vuelve a desplegar: el siguiente despliegue lo aplica.

GitHub, en todos los planes

Haz push y se despliega. Con la misma revisión.

Importa una rama, confirma el framework y activa las actualizaciones automáticas. Cada push despliega el último commit de la rama a través de la misma revisión y el mismo proceso de publicación; si una actualización falla, tu versión anterior en buen estado sigue en línea.

Tofu lee el repositorio con un token de corta duración y de solo lectura, y nunca escribe en él. Una carga manual pausa las actualizaciones automáticas para no ser sobrescrita, y tu agente puede desactivarlas; para volver a activarlas, necesitas dar tu propia aprobación en GitHub desde el navegador.

Qué aloja Tofu

Apps web que responden a solicitudes. En las tecnologías que ya elegiste.

Cada uno de ellos responde a solicitudes y se reduce a cero entre una y otra. Todos los planes alojan tus páginas y el código que hay detrás de ellas.

Sitios y frameworks web
  • Next.js
  • Vite
  • Astro
  • SvelteKit
  • Nuxt
  • React Router
  • Gatsby
  • Static HTML

El proveedor compila tu app con el proceso de compilación del propio framework o, si es un sitio estático ya compilado, la publica tal cual.

Python
  • FastAPI
  • Flask
  • Django
  • Python

Se compila a partir del manifiesto propio de la app y se inicia como un proceso HTTP que responde en la dirección.

Go
  • Go

Se compila a partir del go.mod propio de la app y se inicia como un proceso HTTP que lee PORT.

Servidores JavaScript
  • Express
  • Hono
  • NestJS
  • Node.js server

Un único archivo de entrada que el proveedor encuentra por su nombre, iniciado como un proceso HTTP: el servidor responde en /.

Contenedores
  • Dockerfile (container)

La imagen que describe tu propio archivo de contenedor, compilada por el proveedor y ejecutada como servicio.

Próximamente.

  • Despliegues de vista previa. Las actualizaciones siguen una sola rama y una sola raíz de app por proyecto: sin vistas previas de pull requests, sin etiquetas y lo último de la rama en lugar de cada commit.

  • Registros de ejecución para apps en contenedores. Hasta ahora no se han podido leer, y la consulta indica que no están disponibles en lugar de mostrar un registro vacío.

Aún no implementado

  • Los sitios terminados más grandes necesitan un plan de pago. Free pone en línea un sitio que envías como páginas terminadas, de hasta 500 archivos y 50 MB.

Lo que Tofu no hace

  • Todo lo que tiene que estar siempre en ejecución. Un proceso en segundo plano, un consumidor de colas, un planificador siempre activo o un servicio que no sea HTTP no se pueden alojar con Tofu, y ningún plan cambia eso.

  • Tu propia programación cron. Las tareas cron del vercel.json de una app no se registran aquí; la programación le corresponde a lo que llame a la app.

  • Una garantía de disponibilidad en cualquier plan. Tofu trabaja para mantener tus apps disponibles, y puedes solicitar un compromiso de disponibilidad (un SLA): cuéntanos qué necesitas.

Pega un prompt. En línea en 10 minutos.

Tu app, su base de datos, tu dominio y tu inicio de sesión: desde el agente que ya usas, en unos 10 minutos.

Empezar gratis