Fonctionnalités · Base de données

Une vraie base de données, déjà branchée.

Postgres géré, sans compte de base de données à ouvrir. Avec un forfait payant, les bases de données gérées de votre forfait sont mutualisées entre vos applications : demandez-en une au moment de déployer ; une seule action la crée, la connecte et ne lance le build qu’ensuite, de sorte que les migrations exécutées par votre build atteignent la base dès le tout premier build. Le forfait Free en inclut une pour votre application : dès son premier déploiement lorsque le forfait Free exécute le code serveur de l’application, sinon une fois celle-ci en ligne ; elle est conservée tant que l’application est en ligne.

Lire la documentationConfiguration de l’agent

Ce que votre agent appelle

  • deploy
  • databaseCreate
  • databaseStatus
  • databaseReconcile
claude · ~/franks-kitchenexemple

Take my restaurant app live, with a database.

tofu · setFramework nextjs

confirmed

tofu · deploy database: true

managed database ready · Postgres

DATABASE_URL + 5 more · write-only

build ready

HTTP 200 · publicly reachable

Live at https://franks-kitchen-3f9a1c07b2e4.trytofu.app

Une seule action

Créer, connecter, puis lancer le build. Dans cet ordre, en une seule étape.

Choisissez une base de données à l’étape de déploiement : une case à cocher dans le tableau de bord, database: true depuis votre agent, deploy --database depuis un terminal. Chaque base de données entre dans le décompte de celles que votre forfait inclut, ce n’est donc jamais un choix par défaut : seul votre accord, pour cette application, en crée une.

  1. Créer la base de données

    Une base Postgres dédiée, dans la région de votre choix : Americas, EMEA ou APAC.
  2. Attendre qu’elle soit opérationnelle

    Pendant 2 minutes au maximum. Si elle n’est pas connectée d’ici là, aucun build n’est soumis, et la réponse indique son état.
  3. Écrire les réglages de connexion

    Dans le projet d’hébergement de votre application : la connexion sous forme de valeurs en écriture seule, et le certificat public de la base à côté. Lors d’un premier déploiement, Tofu crée ce projet à cette étape.
  4. Lancer le build, avec la base en place

    Seulement maintenant. Lorsque votre build exécute vos migrations, elles s’appliquent à la nouvelle base dès le tout premier build, avant la mise en ligne de l’application.

Une base de données créée plus tôt depuis la page Base de données est connectée de la même façon par votre prochain déploiement, avant que celui-ci ne lance le build.

Ce que votre application reçoit

Tout branché, jamais affiché.

Tofu écrit les réglages de connexion directement dans l’environnement sensible et en écriture seule de votre hébergeur, et le certificat public de la base à côté, comme valeur ordinaire. Tofu lui-même ne conserve que les noms, et aucune clé service-role n’est utilisée.

VariableQui la reçoit
DATABASE_URLToutes les applications — la chaîne de connexion, via le pooler de transactions du fournisseur.
SUPABASE_URLToutes les applications — l’adresse publique du projet de base de données.
SUPABASE_ANON_KEYToutes les applications — la clé publique du projet.
SUPABASE_CA_CERTToutes les applications — le certificat racine public du serveur de base de données, pour que votre code vérifie qu’il parle bien à votre base. Pas un secret.
‹prefix›SUPABASE_URL‹prefix›SUPABASE_ANON_KEY‹prefix›SUPABASE_PUBLISHABLE_KEYApplications Next.js (NEXT_PUBLIC_), Vite (VITE_) et Astro (PUBLIC_) — de nouveau l’adresse publique et la clé, sous le nom que lit leur bundle navigateur.

Tout autre preset — y compris une application serveur Python, Go ou JavaScript — ne reçoit que les noms côté serveur, car Tofu ne devine pas de préfixe navigateur.

Confirmez le framework de votre application avant que la base ne se connecte : les noms pour le navigateur sont choisis d’après lui à ce moment-là et ne sont pas ajoutés ensuite.

Avec le forfait Free, si votre application est sur l’hébergement statique mutualisé de Tofu, ses pages accèdent à la base directement depuis le navigateur : elle ne reçoit que l’adresse publique et la clé sous VITE_, sans DATABASE_URL ni certificat. Sinon, elle les reçoit comme avec un forfait payant.

Votre schéma

Vos migrations, exécutées par votre build.

La base de données démarre vide à dessein : le schéma appartient au dépôt qui le définit. Placez votre migration dans la commande de build et chaque déploiement emporte son schéma avec lui — aucun identifiant n’est recopié nulle part, et le schéma ne peut pas prendre de retard sur le code livré avec lui.

À partir du 30/10/2026, Supabase n’accorde plus de nouvelle table dans le schéma public aux rôles qu’utilisent les pages de l’application : la migration qui crée une table doit donc lui donner ces droits — select à anon uniquement pour ce que peuvent lire les visiteurs non connectés, select, insert, update, delete à authenticated, et les mêmes à service_role si du code serveur l’utilise. Une vue a besoin de son propre grant select, créé avec security_invoker = true pour que les lignes sous-jacentes restent protégées par leurs règles d’accès.

Quand une migration exécutée par votre build échoue, le build échoue et la version précédente continue d’être servie. Les instructions déjà appliquées le restent.

Là où la page Base de données de votre application l’indique, Tofu applique lui-même les fichiers de votre dossier supabase/migrations, avant chaque mise à jour. Si l’un d’eux échoue, Tofu arrête cette mise à jour avant de la construire, et toute version déjà en ligne continue de tourner.

La structure voyage ; les données, non. Les migrations exécutées par votre build atteignent cette base de données. Les lignes qui n’existent que sur votre machine, non — sauf si une migration les insère.

Avec le forfait Free, si votre application est sur l’hébergement statique mutualisé de Tofu, son build n’exécute aucune migration : ses tables sont créées en dehors du build, comme la page Base de données le montre pour votre application. Sinon, son build peut les exécuter, comme avec un forfait payant.

package.jsonprisma
{
  "scripts": {
    "build": "prisma migrate deploy && next build"
  }
}
Drizzle : drizzle-kit migrate. Supabase CLI : supabase db push --db-url "$DATABASE_URL". SQL pur : l’exécuteur que votre dépôt possède déjà.

Voir vos données

Un éditeur de tables, pas une console SQL.

La page Base de données liste les tables de votre schéma public et parcourt leurs lignes page par page — sans donner de console à personne.

  • Lecture

    Toutes les tables de votre base de données, 25 lignes par page

    Les schémas propres à votre application, et ceux que le service de base de données tient pour elle — y compris ses comptes de connexion, en lecture seule, mots de passe et jetons masqués jusqu’à ce que vous appuyiez sur « Afficher » — avec le type de chaque colonne, la clé primaire et l’état de la sécurité au niveau des lignes. Un nombre de lignes est une estimation du planificateur, et la page le dit.

  • Écriture

    Désactivé jusqu’à ce que vous l’activiez

    L’écriture est un interrupteur, application par application. Chaque insertion, modification ou suppression ne touche alors qu’une ligne, confirmée à part — et une ligne qui a changé entre-temps est signalée, pas écrasée.

  • Jamais

    Aucune modification de schéma, aucun SQL, aucun export

    L’éditeur ne peut ni créer, ni modifier, ni supprimer quoi que ce soit, et les lignes n’en sortent qu’une page à la fois, à l’écran.

  • Rien qu’à vous

    Dans votre tableau de bord, pas dans votre agent

    Aucun agent ne peut lire ni écrire de lignes. L’éditeur se connecte avec le rôle d’administration propre à la base de données : la sécurité au niveau des lignes ne le limite pas — et le panneau le dit.

Ce qui vous appartient

Vos données, et votre porte de sortie.

Transférée vers votre propre organisation Supabase

Sur demande, la base de données est transférée vers une organisation Supabase qui vous appartient — un transfert organisé avec vous et examiné, dans la même région, pas un bouton.

La chaîne de connexion, quand vous en avez besoin

Pour un outil local ou une correction de données ponctuelle, « Afficher la clé de base de données » la reconstruit pour vous, le propriétaire, et en garde la trace. Aucun agent ne peut la recevoir.

Supprimée quand vous le décidez

Supprimer une base de données est une action du propriétaire : vous saisissez le nom de l’application, et la base de données, son schéma et ses données sont supprimés ; la suppression ne conserve aucune copie.

Pas encore développé

  • Des noms côté navigateur pour Next.js, Vite et Astro uniquement. Les autres presets reçoivent les noms côté serveur, et aucune application Python ou Go n’a encore été exécutée de bout en bout avec une base de données gérée.

  • Aucune rotation du mot de passe. Rien dans le tableau de bord ne change le mot de passe de la base de données ; une fuite suspectée se règle avec le support.

Comment cette base de données se comporte

  • Tofu ne conçoit aucune table lui-même et n’a pas de console SQL. Les tables de votre application viennent de ses propres migrations : là où la page Base de données de votre application l’indique, Tofu applique les fichiers de supabase/migrations avant chaque mise à jour ; sinon, une étape de migration dans votre build, ou votre propre machine avec la clé de la base de données, les applique. L’absence de console SQL est une décision : le code source téléversé est une entrée non fiable, et un seul identifiant d’opérateur couvre toutes les bases de données gérées.

  • Les données locales restent locales. Les lignes qui n’existent que sur votre machine n’atteignent jamais cette base de données, sauf si une migration les insère.

  • Aucune table ni règle propres à Tofu. La base de données démarre vide ; vos migrations créent les tables et les règles de sécurité au niveau des lignes sur lesquelles votre application s’appuie.

  • Le nombre de bases de données dépend de votre forfait. Ce nombre vaut pour toutes vos applications réunies. La page des tarifs indique quels forfaits incluent des bases de données, et combien.

Collez un prompt. En ligne en 10 minutes.

Votre application, sa base de données, votre domaine et votre connexion — avec l’agent que vous utilisez déjà, en 10 minutes environ.

Commencer gratuitement