Decloak is an AI-powered web security intelligence platform that scans a site's HTTP/TLS posture, JavaScript, and third-party scripts to produce a report anyone can read. This guide is part of Decloak's library of practical, source-backed security guidance.
In this guide
- Key takeaways
- What free-tier limitations should I expect?
- Why are backups and PITR so expensive?
- How does Row-Level Security (RLS) become a pain point?
- What connection-pooling limits will I hit as traffic grows?
- Why does realtime latency increase under load?
- What are the limits of Supabase Edge Functions?
- How can pricing explode as my app scales?
- What enterprise auth/SSO gaps should I be aware of?
- Why does Supabase lack offline-first sync and a queue engine?
- How does limited multi-region/write scaling affect global apps?
- What operational friction points should I plan for?
- Is Supabase still a good fit for my project?
- How can I verify these drawbacks on my own deployment?
- What next steps should I take?
Key takeaways
- Free tier pauses projects and offers no backups or point-in-time recovery.
- Backups and PITR are paid, often costing $100-$400 / month.
- Row-Level Security is powerful but easy to mis-configure and can hurt performance.
- Connection-pool limits (≈60-500 per compute size) and realtime subscriptions quickly exhaust resources.
- Edge Functions have strict memory, CPU, and latency limits.
- Pricing can jump dramatically once traffic grows.
- Auth/SSO features are limited for enterprise needs.
- No built-in offline-first sync, queue, or multi-region write capability.
- Operational friction around storage backups, CLI stability, and support.
What free-tier limitations should I expect?
Supabase’s free tier automatically pauses projects after a few days of inactivity and provides no automatic backups or point-in-time recovery (PITR). In practice this means a development-only environment that can disappear overnight, and any production data must be manually exported before a pause.
How to mitigate:
- Treat the free tier as a sandbox; never store production data there.
- Schedule a daily
pg_dumpto an external S3 bucket using a cron job or GitHub Action. - Upgrade to a paid plan before launch to obtain uptime guarantees.
Why are backups and PITR so expensive?
Native daily backups only cover the Postgres database and exclude storage buckets. The optional PITR add-on costs roughly $100-$400 / month depending on retention length. Consequently you either pay a premium for data safety or build your own backup pipeline.
Concrete steps to protect data without the add-on:
- Use
pg_dumpandaws s3 cpin a scheduled CI workflow to create hourly snapshots. - Mirror storage bucket contents to an S3 bucket with lifecycle rules for versioning.
- Verify restores monthly by loading a snapshot into a test instance.
How does Row-Level Security (RLS) become a pain point?
RLS is a powerful security model but is easy to mis-configure. Adding policies after the fact can introduce per-row overhead, cause silent query failures, and degrade performance, especially with many tenant-level policies.
Best practices:
- Design RLS policies before writing application code.
- Keep policies simple; avoid complex
EXISTSsubqueries. - Benchmark queries with
EXPLAIN ANALYZEafter each policy change. - Version-control policy definitions using the Supabase CLI and apply them via CI pipelines.
What connection-pooling limits will I hit as traffic grows?
Supabase uses PgBouncer/Supavisor with hard limits of roughly 60-500 connections per compute size. Each realtime subscription holds a dedicated connection, so high-traffic apps quickly hit “connection exhausted” errors.
Mitigation techniques:
- Consolidate realtime listeners on the client side (e.g., share a single subscription for related data).
- Move heavy real-time workloads to a dedicated WebSocket server that proxies updates from Postgres.
- Upgrade to a larger compute tier before reaching the connection ceiling.
Why does realtime latency increase under load?
Realtime subscriptions maintain persistent connections; when many users connect, latency can exceed 200 ms and the service may drop connections once pool limits are reached. This makes real-time dashboards or collaborative editors feel sluggish.
Practical actions:
- Limit the number of simultaneous subscriptions per user.
- Batch updates server-side and push only diffs.
- Consider a separate real-time layer (e.g., Firebase Realtime or a self-hosted socket server) for very large audiences.
What are the limits of Supabase Edge Functions?
Edge Functions are capped at 256 MiB memory, 2-3 seconds of CPU time, and experience cold-start latency of 400 ms-1.2 s. There is no support for long-running jobs.
Work-around checklist:
- Keep functions stateless and lightweight (e.g., token validation, webhook forwarding).
- Offload heavy processing to a background queue such as Supabase's pg_cron or an external worker service.
- Pre-warm functions by sending a dummy request during deployment.
How can pricing explode as my app scales?
Supabase charges for compute, egress, storage, and add-ons (read replicas, PITR, extra connections). Teams often see a jump from $25 → $100+ / month once traffic grows, catching them off guard.
Cost-control tips:
- Enable usage alerts in the dashboard for egress and connection counts.
- Regularly audit unused read replicas and delete them.
- Archive cold data to cheaper object storage and prune tables.
- Model future traffic and use Supabase’s pricing calculator before upgrading.
What enterprise auth/SSO gaps should I be aware of?
Native SAML SSO is only available on the Team tier, and there is no built-in SCIM provisioning or robust audit logs. Many B2B SaaS teams supplement Supabase Auth with third-party providers like Clerk or WorkOS.
Implementation outline:
- Deploy a third-party identity provider that supports SAML/SCIM.
- Use Supabase’s
auth.signInAPI to exchange tokens from the external provider. - Log authentication events to a separate analytics store for audit purposes.
Why does Supabase lack offline-first sync and a queue engine?
Supabase does not provide a built-in offline-first synchronization mechanism or a native message-queue/workflow engine. Developers must bring their own solutions (e.g., pg_cron, external queues like RabbitMQ, or Firestore-style sync libraries).
Suggested stack:
- Use
pg_notify+ a small Node.js listener to enqueue jobs in Redis. - Store pending actions in a Postgres table and process them with
pg_cron. - For mobile apps, implement a client-side sync layer using libraries such as WatermelonDB.
How does limited multi-region/write scaling affect global apps?
Supabase offers a single primary Postgres instance; read replicas are async and cannot serve Auth, Storage, or Realtime. There is no sharding or multi-region write capability, so write-heavy or globally distributed workloads eventually outgrow the platform.
Scaling path:
- Keep write volume under ~10 k TPS on a single region.
- Use read replicas for heavy read traffic only.
- For true multi-region writes, consider a self-hosted Postgres cluster with logical replication or migrate to a provider that offers multi-region writes.
What operational friction points should I plan for?
- Storage buckets are excluded from native backups, requiring manual S3 sync.
- CLI and local-stack can break with frequent updates, causing migration failures.
- Support lacks live chat and can be slow, especially on lower tiers.
- Dashboard-only configuration for RLS, auth, and storage rules makes version-control difficult.
Operational checklist:
- Script bucket syncs with
aws s3 syncdaily. - Pin a specific Supabase CLI version in
package.jsonand run CI tests on each upgrade. - Use a ticketing system for support requests and set SLA expectations.
- Export dashboard configurations via the CLI and store them in Git.
Is Supabase still a good fit for my project?
Supabase excels for rapid MVP development and projects that can stay within a single Postgres instance, modest realtime usage, and modest auth requirements. If you anticipate high realtime concurrency, need multi-region writes, require extensive SSO features, or must keep costs predictable, you should evaluate alternatives or plan for additional tooling.
How can I verify these drawbacks on my own deployment?
Run a free Decloak scan on your Supabase-hosted URL. The scanner’s core layers will check HTTP/TLS posture, static HTML, network behaviour, JavaScript CVE patterns, third-party domains, and platform-specific misconfigurations such as publicly readable tables or exposed service_role keys. The report will surface many of the issues discussed here within ~15 seconds, giving you an evidence-backed starting point for remediation.
What next steps should I take?
- Run a Decloak free scan to get an immediate security posture snapshot.
- Implement backup pipelines for both Postgres and storage buckets.
- Design RLS policies early and version-control them.
- Monitor connection usage and plan scaling before hitting limits.
- Evaluate Edge Function suitability and offload heavy jobs.
- Audit auth/SSO gaps and integrate a third-party provider if needed.
- Set cost alerts and review pricing tier regularly.
- Document operational procedures (CLI version pinning, bucket syncs, support workflow).
By addressing these concrete areas you can keep Supabase’s productivity benefits while avoiding its most common pitfalls.
Related guides
How secure is Supabase? A practical guide for developers
Supabase offers enterprise - grade security features, but mis - configured Row - Level Security is the most common risk. Learn the built - in safeguards and how to avoid costly mistakes.
Can I trust Supabase for production apps?
Supabase offers industry - standard compliance, encryption, and PostgreSQL - based access controls, but you must correctly configure Row - Level Security and keep the service_role key secret to maintain trust.
Is data in Supabase encrypted?
Supabase uses AES‑256 full‑disk encryption for all stored data and TLS 1.2+ for all network traffic, with optional Vault and column‑level encryption for extra protection.