Troubleshooting · 5 min read

Supabase ERR_CONNECTION_TIMED_OUT in India: What It Means and How to Fix It

Getting timeout errors with Supabase in India? Your ISP is blocking the connection. Here is exactly why it happens and how to fix it.


What ERR_CONNECTION_TIMED_OUT means

ERR_CONNECTION_TIMED_OUT means your browser (or app) tried to establish a TCP connection to a server and received no response within the timeout window. The request was sent, but nobody answered.

This is different from a ERR_CONNECTION_REFUSED (the server actively rejected the connection) or a ERR_NAME_NOT_RESOLVED (DNS lookup failed entirely). With a timeout, DNS resolved to some IP address, but that IP either does not exist, is unreachable, or is deliberately dropping packets.

In the case of Supabase in India, the timeout happens because your ISP's DNS resolver returns a sinkhole IP address instead of Supabase's real server. Your browser connects to the sinkhole, which silently drops the connection.

Why this happens in India

Indian ISPs including Jio, Airtel, and ACT Fibernet are DNS-poisoning all *.supabase.co domains. When your app tries to resolve a Supabase domain, the ISP intercepts the DNS query and returns a fake IP address.

Here is what the normal flow looks like versus the blocked flow:

normal-vs-blocked.txt
NORMAL FLOW (outside India / unblocked ISP):

  Browser                ISP DNS              Supabase
    |                      |                     |
    |--- DNS query -------->|                     |
    |    abcd.supabase.co  |                     |
    |                      |                     |
    |<-- Real IP ----------|                     |
    |    104.18.x.x        |                     |
    |                      |                     |
    |--- HTTPS request --------------------------->|
    |                                             |
    |<-- 200 OK ----------------------------------|


BLOCKED FLOW (Jio / Airtel / ACT in India):

  Browser                ISP DNS              Sinkhole    Supabase
    |                      |                     |            |
    |--- DNS query -------->|                     |            |
    |    abcd.supabase.co  |                     |            |
    |                      |                     |            |
    |<-- Fake IP ----------|                     |            |
    |    49.44.x.x         |                     |            |
    |                      |                     |            |
    |--- HTTPS request -------->|                |            |
    |                           |  (drops)       |            |
    |                           |                |            |
    |... waiting ...            |                |            |
    |... waiting ...            |                |            |
    |                           |                |            |
    X  ERR_CONNECTION_TIMED_OUT |                |            |

The ISP never lets your request reach Supabase. It silently redirects you to a dead-end IP, and your connection hangs until the browser gives up.

How to confirm it is an ISP block

Run these commands from your terminal to diagnose the issue:

Step 1: Check what IP your DNS returns

terminal
# Using your ISP's DNS (likely poisoned):
$ nslookup yourproject.supabase.co
Server:   198.18.0.1
Address:  198.18.0.1#53

Name:     yourproject.supabase.co
Address:  49.44.79.236  # Sinkhole IP - NOT Supabase

# Using Cloudflare DNS (should return real IP):
$ nslookup yourproject.supabase.co 1.1.1.1
Server:   1.1.1.1
Address:  1.1.1.1#53

Name:     yourproject.supabase.co
Address:  104.18.x.x   # Real Supabase IP

If the two lookups return different IPs, your ISP is poisoning DNS for Supabase domains.

Step 2: Test connectivity with curl

terminal
# This will time out on blocked ISPs:
$ curl -v --max-time 10 https://yourproject.supabase.co/rest/v1/
* Connection timed out after 10001 milliseconds
curl: (28) Connection timed out

# Force curl to use the real IP via Cloudflare DNS:
$ curl -v --max-time 10 --resolve yourproject.supabase.co:443:104.18.x.x \
  https://yourproject.supabase.co/rest/v1/
HTTP/2 200 # Works when bypassing ISP DNS

If curl times out normally but works when you force the real IP, the block is confirmed. Your ISP is intercepting DNS queries for *.supabase.co.

Quick test: try a different network

The fastest way to confirm it is an ISP block: connect to a different network and try again.

1

Mobile hotspot: If you are on Jio broadband, try using an Airtel mobile hotspot (or vice versa). If one works and the other does not, it is an ISP-specific block.

2

VPN: Enable any VPN and try the request again. If it works with VPN enabled, the block is at the ISP level.

3

Ask a friend abroad: Have someone outside India try accessing your Supabase project URL. If it works for them, the block is India-specific.

The wrong fixes

These workarounds appear in every forum thread but none of them solve the problem for production apps:

Change DNS to 1.1.1.1 or 8.8.8.8

Only fixes your local machine. Does not help your end users. Some ISPs also use DPI to block connections regardless of DNS resolution.

Use a VPN

Adds 50-200ms latency, costs money, and requires every user to install one. Not viable for a production app serving hundreds or thousands of users.

Switch to a different BaaS provider

Firebase is already blocked on BSNL. Other providers could be next. Migrating your entire backend does not solve the underlying DNS blocking problem.

The right fix: reverse proxy

The solution is to route your Supabase traffic through a domain that is not blocked. A reverse proxy on Cloudflare's edge network receives your requests on an unblocked domain and forwards them to Supabase on the server side, where there is no ISP block.

JioBase is a managed reverse proxy built specifically for this. Set it up in three steps:

1

Create a JioBase account

Sign up at jiobase.com/register. Free tier includes 50,000 requests per month.

2

Create a proxy app

Enter your Supabase project URL and pick a slug. You get a proxy URL like myapp.jiobase.com.

3

Swap the URL in your code

Replace https://yourproject.supabase.co with https://myapp.jiobase.com. Deploy. Done.

Code example: before and after

Before (times out on Indian ISPs):

lib/supabase.ts
import { createClient } from '@supabase/supabase-js'

const supabase = createClient(
  'https://abcdefgh.supabase.co',
  process.env.SUPABASE_ANON_KEY
)

After (works everywhere):

lib/supabase.ts
import { createClient } from '@supabase/supabase-js'

const supabase = createClient(
  'https://myapp.jiobase.com',    // proxy URL
  process.env.SUPABASE_ANON_KEY   // same key
)

No other changes needed. The Supabase JS client sends standard HTTP requests to whatever URL you give it. Auth, Storage, Realtime, Edge Functions -- everything works the same through the proxy.

Technical details: how the proxy works

JioBase runs as a Cloudflare Worker deployed across 300+ edge locations worldwide. When a request arrives:

  1. 1 Your user's browser resolves myapp.jiobase.com using their ISP's DNS. Since jiobase.com is not blocked, this resolves to a Cloudflare IP normally.
  2. 2 The HTTPS request hits the nearest Cloudflare edge node. The Worker looks up which Supabase project is mapped to this slug.
  3. 3 The Worker rewrites the URL from myapp.jiobase.com/rest/v1/... to abcdefgh.supabase.co/rest/v1/... and forwards the request server-side.
  4. 4 Cloudflare's servers are not subject to Indian ISP DNS blocks. The request reaches Supabase normally.
  5. 5 The response flows back through Cloudflare to the user. Total added latency: 1-5ms.

For WebSocket connections (Supabase Realtime), the Worker performs a WebSocket upgrade and maintains a persistent bidirectional connection between the client and Supabase, proxying frames in both directions.

Frequently Asked Questions

Is this error only happening in India?

The ISP-level DNS block on *.supabase.co is specific to Indian ISPs (Jio, Airtel, ACT Fibernet, and potentially others). If you are getting ERR_CONNECTION_TIMED_OUT outside India, it may be a different issue -- check your Supabase project status and network configuration.

My app was working yesterday. Why did it suddenly break?

ISP blocks can be rolled out gradually. Different ISPs implement the block at different times, and some regions within the same ISP may be affected before others. If your app was working on a particular ISP and suddenly stopped, that ISP likely just implemented the block in your area.

Will the proxy add latency to my API calls?

Minimal. JioBase runs on Cloudflare's edge network with 300+ locations worldwide. The proxy adds roughly 1-5ms of overhead per request. This is negligible compared to the 50-200ms a VPN adds, and infinitely better than a complete timeout.

Can I self-host a proxy instead of using JioBase?

Yes. We provide a free Worker Generator Tool that creates a ready-to-deploy Cloudflare Worker for basic HTTP proxying. The self-hosted version does not include WebSocket support, analytics, or rate limiting.

Fix your Supabase app in under 60 seconds

Stop fighting timeout errors. Route through an unblocked domain and get back to building.

npx create-jiobase — deploy your own proxy on Cloudflare Workers for free

Sunith VS

Written and verified by

Sunith VS

Building tools that help Indian developers ship without ISP interference. Creator of JioBase.