Bolt no conecta con Supabase: causas y cómo arreglarlo
Por qué tu app de Bolt.new no llega a Supabase: falta la URL o la clave, clave equivocada, RLS, proyecto pausado o URLs de login viejas, y cómo arreglarlo.
Read in English →
Si tu app de Bolt.new no logra hablar con Supabase, casi siempre es por una de cinco cosas: la URL o la clave del proyecto no llegan al lugar donde se compila la app, la clave es del tipo equivocado o de otro proyecto, Row Level Security bloquea la consulta, el proyecto de Supabase está pausado, o las URLs de inicio de sesión siguen apuntando a la vista previa. La consola del navegador y la pestaña Network te dicen cuál es en menos de un minuto.
La guía arranca con una pregunta que mucha gente se salta (¿tu app de verdad usa Supabase?), luego relaciona cada mensaje de error con su causa y termina con cómo confirmar que quedó bien.
¿Mi proyecto usa Supabase o Bolt Database?
Desde que existe Bolt Cloud, los proyectos nuevos usan Bolt Database por defecto, en todos los planes. Supabase es una alternativa para los planes Pro y Teams: conectas tu cuenta de Bolt a una organización de Supabase en Applications dentro de la configuración, y después vinculas un proyecto desde la pestaña Advanced de la base de datos.
Importa porque el arreglo cambia. La propia ayuda de Bolt dice que si la consola muestra errores con una URL de Supabase, puede que el proyecto espere una conexión que nunca se configuró. Antes de tocar nada, ten en cuenta dos avisos de la guía de Supabase en Bolt:
- Conectar un proyecto de Supabase a un proyecto que ya tiene Bolt Database reemplaza esa conexión y puedes perder datos. Reclamar (claim) la base de Bolt en Supabase la conserva.
- Restaurar una versión anterior desde el historial de Bolt no toca la base de datos. El código vuelve; las tablas no.
¿Qué significa cada error?
Abre la app publicada, presiona F12 (o Cmd+Option+J en Mac), repite el problema y mira las pestañas Console y Network.
| Lo que ves | Causa más probable |
|---|---|
supabaseUrl is required. | La variable de la URL estaba vacía al compilar |
Invalid API key | Clave mal copiada, de otro proyecto o desactivada |
Failed to fetch o un error de red | URL equivocada, proyecto pausado o petición bloqueada |
Respuestas 200 con un arreglo vacío [] | RLS activo y ninguna política deja leer a ese usuario |
new row violates row-level security policy for table "..." | RLS activo y ninguna política permite insertar |
| El login funciona en la vista previa y falla en el sitio | Site URL y URLs de redirección siguen con la dirección vieja |
Una función de servidor responde 401 cuando la llama Stripe u otro servicio | Verificación JWT activa en una función que recibe webhooks |
¿Cómo lo arreglo?
1. Confirma que la URL y la clave llegan a la app
Un proyecto típico de Bolt con Vite crea el cliente así. Los nombres de tus variables pueden ser otros; busca createClient en el código:
import { createClient } from '@supabase/supabase-js';
export const supabase = createClient(
import.meta.env.VITE_SUPABASE_URL,
import.meta.env.VITE_SUPABASE_ANON_KEY
);
Las variables VITE_ se copian dentro del JavaScript al compilar. Si publicas fuera del hosting de Bolt, por ejemplo en un sitio de Netlify que compila desde GitHub, esas variables tienen que existir en la configuración de ese servicio, y hay que recompilar después de agregarlas.
2. Compara la URL con el proyecto que crees que usas
En el panel de Supabase, abre el proyecto y copia la URL desde el diálogo Connect o la configuración de la API. Tiene la forma https://<project-ref>.supabase.co. Es muy común conectar por error un segundo proyecto vacío: todo "funciona", pero los datos no están.
3. Usa el tipo de clave correcto
La guía de claves de Supabase distingue dos familias:
- Publishable key (
sb_publishable_...) o la antigua anon: se puede usar en el navegador, porque RLS limita lo que alcanza. - Secret key (
sb_secret_...) o la antigua service_role: se salta RLS y solo va en un servidor o en una función de servidor.
Supabase planea dar de baja las claves anon y service_role antiguas a fines de 2026. Si alguien desactivó las claves antiguas en el panel, una app que todavía usa la anon vieja empieza a fallar con Invalid API key; cámbiala por la publishable. Si alguna vez encuentras una clave secreta en el código del frontend, dala por filtrada y rótala. Lo explicamos en ¿la clave anon de Supabase es segura?.
4. Lee los resultados vacíos como un tema de RLS
Una lista vacía sin error no es una conexión rota: es RLS haciendo su trabajo sin una política que deje leer a ese usuario. Revisa que cada tabla tenga RLS activo y una política para la operación que falla, por ejemplo:
create policy "Users read their own projects"
on public.projects for select
to authenticated
using ((select auth.uid()) = owner_id);
No lo resuelvas apagando RLS: eso deja la tabla abierta a cualquiera que tenga tu clave pública. En Row Level Security de Supabase en Lovable y Bolt repasamos las políticas más comunes.
5. Despierta un proyecto pausado
Supabase pausa los proyectos inactivos del plan gratuito. El panel muestra el proyecto como pausado y ofrece restaurarlo; hasta entonces, las peticiones fallan. Bolt Database tiene su propia versión: en proyectos sin publicar, una base con poco uso durante seis días o más puede pausarse y se restaura la próxima vez que abres el proyecto. Más detalles en proyecto de Supabase pausado en el plan gratis.
6. Actualiza las URLs de autenticación
En Supabase, entra a Authentication > URL Configuration. Pon tu dominio real como Site URL y agrega a las URLs de redirección todas las direcciones desde donde la gente inicia sesión, incluida la de bolt.host si la sigues usando. Los correos de acceso y el login con Google redirigen ahí.
7. Revisa aparte las funciones de servidor
Si el navegador lee datos pero una función de servidor falla, mira sus logs. La ayuda de Bolt menciona tres causas habituales: un encabezado CORS que no permite tu dominio, la verificación JWT bloqueando un webhook (apágala para esa función y valida la firma del webhook) y un secreto que falta, que Bolt reporta como Missing secrets. Sobre lo primero, mira qué es un error de CORS.
¿Cómo confirmo que la conexión funciona?
- En la pestaña Network, busca una petición a
https://<project-ref>.supabase.co/rest/v1/.... Debe responder200con filas cuando entras con un usuario que tiene datos. - Cierra sesión y repite. Las tablas privadas ya no deberían devolver nada.
- Crea un registro desde la app y confirma que aparece en el editor de tablas de Supabase (o en Tables de Bolt).
- Corre el chequeo de Security de la base en Bolt, o el Security Advisor de Supabase, y resuelve lo que salga como error.
Respuestas rápidas
¿Necesito el plan Pro para usar Supabase con Bolt? Según la documentación de Bolt, conectar o reclamar una base de Supabase requiere Pro o Teams. Bolt Database está en todos los planes.
¿Por qué funciona en la vista previa y no en mi hosting? La vista previa tiene las variables; el build del otro servicio no. Agrégalas ahí y recompila.
¿Puedo pegar la clave service_role para que funcione? No. Se salta todas las políticas de RLS, y lo que está en el navegador lo puede leer cualquiera.
Los datos están en Supabase pero la app no muestra nada. ¿Está rota? Casi nunca. Es una política de RLS que no permite la lectura a ese usuario.
¿Quieres que alguien revise toda la configuración?
Los errores de conexión suelen venir de la mano de problemas de permisos. La revisión gratuita mira lo que expone tu app publicada, y nuestra revisión de seguridad de Supabase recorre tabla por tabla políticas y claves. Para otros problemas de Bolt, mira arreglar apps de Bolt o escríbenos.


