Supabase Network Connectivity Problems in India: Causes, Diagnosis, and Fix
If your Supabase-powered app suddenly stopped working for users in India, you are not alone. Thousands of developers are seeing timeout errors, failed API calls, and broken WebSocket connections. The Supabase status page may reference "network connectivity problems" in the India region, but the root cause is not on Supabase's end. Here is what is really happening and how to fix it.
The symptoms: what you are seeing
Developers across India are reporting the same cluster of errors. If any of the following look familiar, you are dealing with the same underlying issue:
ERR_CONNECTION_TIMED_OUT in Chrome or Brave when your app tries to reach the Supabase API
TypeError: Failed to fetch or fetch failed in your JavaScript console
WebSocket connections for Supabase Realtime dropping immediately or failing to establish
Supabase Auth calls (signUp, signInWithPassword) hanging indefinitely with no response
ECONNREFUSED or ETIMEDOUT in Node.js server-side code running on Indian hosting providers
Key observation: The Supabase dashboard at supabase.com loads fine. Only your API calls to *.supabase.co are failing. This is the critical clue.
Root cause: ISP-level DNS blocking, not a Supabase outage
This is not a Supabase infrastructure problem. Supabase servers are online, healthy, and accessible from every country outside India. The real cause is that Indian ISPs are DNS-poisoning all *.supabase.co domains under a government blocking order issued through Section 69A of the Information Technology Act, 2000.
When your application (or your user's browser) tries to resolve a domain like yourproject.supabase.co, the ISP's DNS resolver intercepts the query and returns a sinkhole IP address instead of the real Supabase server. Your app connects to this sinkhole, which silently drops all packets, and your request hangs until it times out.
This is why the Supabase dashboard works but the API does not. The dashboard lives on supabase.com (not blocked), while all project APIs live on supabase.co (blocked).
ISPs confirmed to be blocking Supabase:
- Jio (Reliance Jio) - approximately 500 million subscribers
- Airtel (Bharti Airtel) - broadband and mobile
- ACT Fibernet - metro broadband provider
- BSNL - also blocking Firebase domains
Common misdiagnoses vs the real problem
Before you spend hours debugging your code, rule out these common wrong assumptions:
| What you might think | What is actually happening |
|---|---|
| "My Supabase API key is wrong" | A bad API key returns a 401 status, not a timeout. You are not even reaching Supabase. |
| "It is a CORS error" | CORS errors require the browser to receive a response first. Timeouts mean no response was received at all. |
| "Supabase is down" | Check status.supabase.com. Supabase is online globally. The issue is India-specific ISP blocking. |
| "My code has a bug" | If your code worked yesterday and nothing changed, the ISP likely just rolled out the block in your region. |
| "My firewall is blocking it" | Try from a VPN or ask someone outside India to test. If it works for them, the block is at the ISP level. |
How to diagnose: confirm it is DNS poisoning
Run these commands from your terminal to confirm that your ISP is poisoning DNS responses for Supabase domains.
Step 1: Compare DNS results
Use nslookup to query your ISP's DNS and then Cloudflare's DNS. If they return different IPs, your ISP is intercepting the query.
# Query your ISP's default 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
# Query Cloudflare DNS (returns the 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
Step 2: Use dig for more detail
The dig command gives you more verbose output, including the authoritative nameserver and TTL values.
# Compare ISP DNS vs Google DNS:
$ dig yourproject.supabase.co
;; ANSWER SECTION:
yourproject.supabase.co. 300 IN A 49.44.79.236
$ dig @8.8.8.8 yourproject.supabase.co
;; ANSWER SECTION:
yourproject.supabase.co. 300 IN A 104.18.x.x
Step 3: Test with curl
Attempt a direct HTTP request to your Supabase project. If it times out, then force the real IP using --resolve to bypass DNS.
# This will timeout 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
# Bypass ISP DNS by resolving to the real IP:
$ 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 the first curl times out but the second one succeeds, the block is confirmed. Your ISP is returning a fake DNS response for *.supabase.co, and no amount of code changes will fix it.
Why the Supabase dashboard works but the API does not
This is the single most confusing part for developers hitting this issue. You can log into supabase.com, view your project, run queries in the SQL editor, and everything seems fine. But your application cannot reach the API at all.
The reason is straightforward: Supabase uses two separate domains for different purposes.
| Domain | Purpose | Status in India |
|---|---|---|
supabase.com | Dashboard, docs, marketing site | Not blocked |
*.supabase.co | Project APIs, Auth, Storage, Realtime | Blocked by ISPs |
The blocking order targets *.supabase.co specifically. The .com domain is unaffected. So you can manage your project but your users cannot use it.
Fixes that do not work for production apps
Every forum thread and Stack Overflow answer suggests these workarounds. They might help you during development, but none of them solve the problem for your end users.
This fixes DNS resolution on your machine only. Your end users are still using their ISP's default DNS. You cannot ask every user of your app to change their system DNS settings. Additionally, some ISPs use deep packet inspection (DPI) that blocks Supabase traffic regardless of DNS configuration.
VPNs add 50 to 200ms of latency per request, cost money, and require every single user to install and maintain one. This is not a viable solution for a production application serving hundreds or thousands of Indian users.
Running ipconfig /flushdns or equivalent clears your local cache, but your ISP will just return the same poisoned response on the next query. The problem is upstream, not in your local cache.
Firebase is already blocked on BSNL. Other backend services could be targeted next. Migrating your entire backend is a massive effort that does not address the root cause: ISP-level blocking can affect any foreign service at any time.
Section 69A blocking orders are issued by the government and enforced by ISPs. These blocks have historically persisted for months or years. Waiting is not a strategy for a production application.
The real fix: reverse proxy through Cloudflare
The only production-viable solution is to route your Supabase API traffic through a domain that is not blocked. A reverse proxy sitting on Cloudflare's edge network accepts requests from your users on an unblocked domain and forwards them to Supabase server-side, completely bypassing ISP DNS restrictions.
JioBase is a managed reverse proxy built specifically for Indian developers facing this problem. It runs on Cloudflare Workers across 300+ edge locations, adding only 1 to 5ms of latency. Here is how to set it up:
Create a JioBase account
Sign up at jiobase.com/register. The free tier includes 50,000 proxied requests per month.
Create a proxy app
Paste your Supabase project URL and choose a slug. You get a proxy URL like myapp.jiobase.com.
Swap your SUPABASE_URL
Replace the Supabase project URL in your environment variables with the JioBase proxy URL. No code changes needed beyond the URL swap.
Step-by-step migration: swap one environment variable
The migration requires changing exactly one value in your environment configuration. Here are examples for the most common frameworks.
Next.js
Before (broken on Indian ISPs):
NEXT_PUBLIC_SUPABASE_URL=https://abcdefgh.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOi...
After (works everywhere):
NEXT_PUBLIC_SUPABASE_URL=https://myapp.jiobase.com
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOi... # same key
React (Vite)
Before:
VITE_SUPABASE_URL=https://abcdefgh.supabase.co
VITE_SUPABASE_ANON_KEY=eyJhbGciOi...
After:
VITE_SUPABASE_URL=https://myapp.jiobase.com
VITE_SUPABASE_ANON_KEY=eyJhbGciOi... # same key
Flutter
Before:
await Supabase.initialize(
url: 'https://abcdefgh.supabase.co',
anonKey: 'eyJhbGciOi...',
);
After:
await Supabase.initialize(
url: 'https://myapp.jiobase.com', // proxy URL
anonKey: 'eyJhbGciOi...', // same key
);
No other code changes required. The Supabase client library sends standard HTTP and WebSocket requests to whatever URL you configure. Auth, database queries, Storage, Realtime subscriptions, and Edge Functions all work identically through the proxy. Your anon key and service role key remain the same.
How the reverse proxy resolves connectivity
Here is the request flow after you switch to the proxy URL:
PROXIED FLOW (works on all Indian ISPs):
User's Browser ISP DNS Cloudflare Edge Supabase
| | | |
|--- DNS query -------->| | |
| myapp.jiobase.com | | |
| | | |
|<-- Real CF IP -------| | |
| (not blocked) | | |
| | | |
|--- HTTPS request ----------------------->| |
| | |
| Worker rewrites URL |
| myapp.jiobase.com -> |
| abcdefgh.supabase.co |
| | |
| |--- forward ---->|
| | |
| |<-- response ---|
| | |
|<-- proxied response ------------------| |
| |The key insight: Cloudflare's servers resolve *.supabase.co from their own infrastructure, which is not subject to Indian ISP DNS blocks. The request reaches Supabase normally on the server side.
Self-hosted alternative: deploy your own Cloudflare Worker
If you prefer to manage the proxy yourself, you can deploy a basic Cloudflare Worker that forwards requests to Supabase. We provide a free Worker Generator Tool that creates a ready-to-deploy script.
The self-hosted approach works well for simple use cases but does not include WebSocket proxying (needed for Supabase Realtime), analytics, rate limiting, or automatic health checks that the managed JioBase service provides.
For a detailed walkthrough of setting up a self-hosted proxy, see our Cloudflare Workers proxy tutorial.
Frequently Asked Questions
Is this a Supabase outage or an India-specific problem?
*.supabase.co domain under a government directive. You can verify this by checking status.supabase.com or asking someone outside India to test your project URL.Why does my Supabase dashboard work but my app does not?
supabase.com, which is not blocked. Your project's API endpoints live on yourproject.supabase.co, which is blocked. The two domains are separate, and only the .co domain is targeted by the blocking order.Will changing my DNS to 1.1.1.1 fix this for my users?
Does the proxy work with Supabase Realtime (WebSockets)?
Is my data safe going through a proxy?
How much latency does the proxy add?
Fix your Supabase connectivity in under 60 seconds
Stop debugging network errors that are not your fault. Route through an unblocked domain and get your app working for every user in India.
npx create-jiobase — deploy your own proxy on Cloudflare Workers for free
Suggested reading
More guides on Supabase, DNS blocks, and building resilient apps in India.
Supabase Blocked in India: What Happened and How to Fix It
Indian ISPs are DNS-blocking *.supabase.co. Here is everything you need to know and how to fix it.
How to Test if Your Backend is Blocked by Indian ISPs
Step-by-step diagnostic guide to check if Supabase, Firebase, or any backend is being DNS-blocked.
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.