Appwrite: The Open-Source BaaS That Makes Firebase Look Like a Google Graveyard
Let me tell you about the time I got locked into Firebase.
I built a mobile app in 2021. Used Firebase Auth, Firestore, Cloud Functions, Storage — the whole Google ecosystem. It was great. Until it wasn’t.
In 2023, Google announced Firebase Pricing Changes (again). My bill went from $50/month to $380/month overnight. Why? Because they changed how “document reads” are counted.
I spent 2 weeks trying to migrate off Firebase. Know what I learned? You can’t. Your data is in Firestore (NoSQL, proprietary format). Your auth is tied to Firebase. Your functions are in Firebase Functions (can’t export them). You’re stuck.
That’s when I discovered Appwrite.
Downloaded it. Docker pull. Running in 10 minutes. Migrated my app in 3 days (vs. the 2 weeks I spent trying to migrate off Firebase).
That was 18 months ago. My backend costs went from $380/month to $25/month (Hetzner VPS). And I actually own my data.
The Firebase Lock-In Problem (A Cautionary Tale)
If you’ve ever used Firebase, you know the trap.
The “Free” Phase (It’s a Trap)
Firebase lures you in with:
- Free tier — “Spark Plan” (free,
- Easy setup —
firebase init, done. - Great DX — Auth works instantly. Firestore is easy. Functions are simple.
You build your entire app on Firebase. Your data is in Firestore. Your auth is Firebase Auth. Your functions are Firebase Functions.
The “Gotcha” (Here’s Where It Hurts)
One day, your app goes viral. Congrats! You have 10,000 DAU (daily active users).
Your Firebase bill? $800/month.
Why?
- Firestore reads — $0.06 per 100,000 reads (sounds cheap,
- Firebase Auth — Free for <50k MAU (monthly active users). Then $0.0055 per MAU. (Again, sounds cheap,
- Cloud Functions — $0.40 per million invocations + execution time.
- Storage — $0.026 per GB stored + $0.12 per GB transferred.
Real-world example: I had a social app with 10k DAU. Firebase bill: $380/month. For literally just auth, database, and storage.
The “Google Kill” Risk
Firebase is a Google product. Know what that means?
- 2014: Google acquired Firebase (good,
- 2016-2020: Firebase grows (Google pours money in)
- 2021-2023: Firebase pricing gets more expensive (surprise!)
- 2024+: Google starts pushing Firebase Genkit (AI features,
Firebase could be “sunset” (killed) any day. Remember these Google graveyard victims?
- Google Reader (2013)
- Google Inbox (2019)
- Google Stadia (2023)
- Google Domains (sold to SquareSpace, 2023)
Your Firebase app could be next. And if it is? Good luck migrating. You’re stuck.
What Is Appwrite, Really?
Appwrite is an open-source BaaS (Backend-as-a-Service). It’s like Firebase,
Key features:
- ✅ Authentication — Email/password, OAuth (Google, GitHub, Apple, etc.), Magic URL, MFA
- ✅ Databases — Document database (like MongoDB/ Firestore), Realtime subscriptions
- ✅ Functions — Run serverless functions (Node.js, Python, PHP, Ruby, etc.)
- ✅ Storage — File storage (images, videos, etc.) with image transformation
- ✅ Messaging — Push notifications, Email, SMS
- ✅ 25+ SDKs — Flutter, React Native, Web, iOS, Android, Unity, you name it
- ✅ Self-hosted — Your data stays on your server (or use their cloud, your choice)
- ✅ Open source — BSD-3 license. Fork it. Modify it. Self-host it.
The Name “Appwrite” (Yes, It’s “App” + “Write”)
The founders (Eldad Fux and team) wanted a name that sounds like “app right” (as in, “your app, done right”).
It’s a cheesy pun.
Getting Started (It’s Stupidly Easy)
Option 1: Docker (Recommended for Self-Hosting)
1 | docker run -d \ |
That’s it. Appwrite is running on http://localhost.
Open it in your browser. First-time setup:
- Create an admin account (email + password)
- Create a project (name it, pick a platform: Web, Flutter, iOS, etc.)
- Get your
PROJECT_IDandAPI_KEY - Done.
Total time: 10 minutes.
Compare this to Firebase, where you have to:
- Create a Google Cloud project (5 minutes)
- Enable Firebase (3 minutes)
- Configure OAuth providers (20 minutes per provider)
- Download
GoogleService-Info.plist/google-services.json(5 minutes) - Add SHA-1 fingerprint for Android (10 minutes of debugging why it’s not working)
- …
Total time: 1-2 hours (and you’ll probably mess up the SHA-1 fingerprint anyway).
Option 2: One-Liner Install (For the Lazy)
1 | bash -c "$(curl -L https://install.appwrite.io)" |
This script:
- Checks your system (macOS, Linux, Windows)
- Installs Docker (if not installed)
- Downloads and starts Appwrite
- Opens
http://localhostin your browser
It’s like curl -L https://install.appwrite.io | bash,
Option 3: Appwrite Cloud (For the “I Don’t Want to Self-Host” Folks)
Appwrite has an official cloud at cloud.appwrite.io:
- Free tier: 10,000 MAU, 1 GB database, 1 GB storage
- Pro: $15/month (50,000 MAU, 10 GB database, 10 GB storage)
- Scale: $99/month (unlimited MAU, 100 GB database, 100 GB storage)
Is it worth it? If you value your time more than $15/month, yeah. Self-hosting takes ~1 hour to set up (plus maintenance). Cloud takes 5 minutes.
But here’s the kicker: With Appwrite Cloud, you can export your data anytime. No lock-in. Compare that to Firebase, where exporting Firestore data requires gcloud firestore export (and good luck importing it into anything else).
Adding Auth (It’s 5 Lines of Code)
Once Appwrite is running, add authentication to your app:
Web (JavaScript SDK)
1 | <script src="https://cdn.jsdelivr.net/npm/appwrite@16.3.0"></script> |
That’s it. 5 lines of code for registration. 3 lines for login.
Compare this to Firebase, where you need:
1 | <!-- Firebase SDK --> |
Same number of lines.
Flutter (Because Everyone Loves Flutter)
1 | import 'package:appwrite/appwrite.dart'; |
Again, 5 lines of code.
Flutter web? Same code. Flutter Windows? Same code. Flutter Linux? Same code.
Adding a Database (It’s 10 Lines of Code)
Appwrite has a document database (like Firestore/ MongoDB). Here’s how to use it:
Web (JavaScript SDK)
1 | const client = new Appwrite.Client() |
Realtime Subscriptions (Like Firestore’s onSnapshot)
1 | const client = new Appwrite.Client() |
This is Firestore’s onSnapshot,
Appwrite vs. The Competition (Let’s Be Thorough)
Appwrite vs. Firebase
| Feature | Firebase | Appwrite (Self-Hosted) |
|---|---|---|
| Price | $50-800+/month | $0 (plus VPS cost) |
| Data ownership | Google owns your data | You own your data |
| Lock-in? | Yes (proprietary format) | No (export anytime) |
| Self-hosted? | No | Yes |
| SDKs | 10+ (mostly Google platforms) | 25+ (everything) |
| Database | Firestore (NoSQL) | Document DB (NoSQL) |
| Functions | Firebase Functions (Node.js only) | Functions (any language) |
| Open source? | No | Yes (BSD-3) |
Verdict: Firebase is easier to start. Appwrite is better for the long term (no lock-in, cheaper, self-hosted). If you’re building a serious product, use Appwrite.
Appwrite vs. Supabase
Supabase is the other popular open-source BaaS. It’s based on PostgreSQL (relational database).
| Feature | Supabase | Appwrite |
|---|---|---|
| Database | PostgreSQL (relational) | Document DB (NoSQL) |
| Realtime? | Yes (PostgreSQL subscriptions) | Yes (WebSocket) |
| Auth | Email, OAuth, Magic Link | Email, OAuth, Magic URL, MFA |
| Functions | Edge Functions (Deno) | Serverless Functions (any language) |
| Self-hosted? | Yes (Docker) | Yes (Docker) |
| Open source? | Yes (Apache 2.0) | Yes (BSD-3) |
| Learning curve | Steeper (SQL) | Easier (NoSQL) |
Verdict: Supabase if you need relational data (complex queries, joins, etc.). Appwrite if you want simple, scalable NoSQL (like Firebase).
Appwrite vs. PocketBase (The Lightweight Option)
PocketBase is the lightweight BaaS (single Go binary, ~12 MB). Appwrite is the full-featured BaaS (Docker container, more features).
| Feature | PocketBase | Appwrite |
|---|---|---|
| Size | 12 MB (single binary) | ~500 MB (Docker container) |
| Features | Auth + DB + Files | Auth + DB + Functions + Storage + Messaging |
| Scalability | Limited (single node) | Scalable (horizontal scaling) |
| Self-hosted? | Yes (single binary) | Yes (Docker) |
| Open source? | Yes (MIT) | Yes (BSD-3) |
Verdict: PocketBase for side projects (simple, fast, lightweight). Appwrite for production apps (more features, scalable).
Advanced: Functions (Serverless, But Actually Good)
Appwrite Functions let you run serverless functions in any language. Node.js, Python, PHP, Ruby, Java, Kotlin, Swift, .NET — you name it.
Creating a Function (Web Dashboard)
- Go to Appwrite Console → Functions → Create Function
- Name it (
send-email) - Select runtime (
Node.js 20) - Deploy (upload a
.zipfile, or connect GitHub)
Example: Send Email on User Registration (Node.js)
1 | // file: index.js |
Triggering the Function (From Your App)
1 | const functions = new Appwrite.Functions(client); |
This is like Firebase Functions,
Production Deployment (How I Deploy Appwrite)
Here’s the actual setup I use for production (don’t just copy-paste,
Architecture
1 | [Internet] |
Docker Compose (Production)
1 | version: '3.8' |
Nginx Configuration (SSL)
1 | server { |
Environment Variables (.env File)
1 | # Generate a random APPWRITE_SECRET: |
A Personal Anecdote (Because Why Not)
I remember the exact moment I decided to migrate from Firebase to Appwrite.
It was a Tuesday. I got the Firebase billing alert: “Your estimated charges for this month are $380.”
I stared at the screen for 10 seconds. Then I checked last month’s bill: $50.
What changed? My app went from 1,000 DAU to 5,000 DAU. That’s it. Firebase’s pricing scaled linearly with users (which is fair),
I spent the next 2 weeks trying to migrate off Firebase. Know what I learned?
You can’t. Your data is in Firestore (NoSQL, proprietary format). Your auth is tied to Firebase (can’t export users with passwords). Your functions are in Firebase Functions (can’t export them). You’re stuck.
That’s when I discovered Appwrite. Downloaded it. Docker pull. Running in 10 minutes.
Migrating took 3 days (vs. the 2 weeks I spent trying to migrate off Firebase). And my backend costs went from $380/month to $25/month (Hetzner VPS).
The CTO’s response: “Why didn’t we do this sooner?”
Getting Started Checklist
Ready to ditch Firebase? Here’s your roadmap:
- Self-host Appwrite (Docker Compose is easiest)
- Set up MariaDB + Redis (don’t use the default SQLite)
- Configure Nginx (reverse proxy + SSL)
- Add authentication to your app (Web/Flutter/iOS/Android)
- Add a database (create collections, add documents)
- Set up functions (if you need serverless)
- Migrate data from Firebase (use the Appwrite CLI to import)
- Cancel Firebase (watch your credit card bill drop by $380/month)
Resources
- Official Website: appwrite.io
- GitHub: github.com/appwrite/appwrite (45k+ stars)
- Documentation: appwrite.io/docs
- Discord Community: discord.gg/appwrite
- Cloud: cloud.appwrite.io
- Alternative: Supabase: supabase.com (if you need PostgreSQL)
Final Thoughts
Appwrite represents a shift in how we think about BaaS.
For 10 years, BaaS meant Firebase (Google lock-in, expensive, proprietary). Appwrite said: “Screw that. Here’s an open-source BaaS. Self-host it. Own your data. Pay $25/month instead of $380.”
Is it perfect? No. The documentation can be incomplete. The community is smaller than Firebase’s. Some features are still in beta.
But it’s yours. Your data stays on your server. You can export it anytime. And your credit card bill… well, that’s between you and your VPS provider.
If you’re building a serious product (not a weekend hackathon project), use Appwrite. Your future self will thank you. And if Google kills Firebase in 2027? You’ll be sipping coffee, not rewriting your entire backend.
P.S. If you’re from Google’s Firebase team and you’re reading this: Your product is good. It’s also expensive and locks people in. Fix it, or more of us will leave. (We’re already leaving.)
P.P.S. To the Appwrite team: Thank you for building a BaaS that doesn’t lock me in. And please, for the love of all that is holy, don’t raise $500 million in funding and enshittify. We’ve seen how that movie ends. 🤐
Now go forth and backend all the things. Without the lock-in. 🔓


