Appwrite is a free, open-source backend-as-a-service (BaaS) platform that provides all the APIs you need to build any application.
What Is Appwrite?
Appwrite is a self-hosted Firebase alternative. It gives you authentication, databases, storage, functions, and messaging — all in one platform.
Key features:
- Authentication (email, OAuth, phone, magic link)
- Databases (document-based with relationships)
- Storage (file uploads with previews and transformations)
- Serverless Functions (Node.js, Python, Dart, Ruby, etc.)
- Messaging (email, SMS, push notifications)
- Real-time subscriptions
- Teams and permissions
- SDKs for every platform
- Self-hostable or cloud
Quick Start
Cloud (free tier)
Sign up at cloud.appwrite.io. Create a project. Start building.
Self-Host
docker run -it --rm \
--volume /var/run/docker.sock:/var/run/docker.sock \
--volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \
--entrypoint="install" \
appwrite/appwrite:1.6
Answer a few questions, and your backend is ready at http://localhost.
Authentication
import { Client, Account } from "appwrite";
const client = new Client()
.setEndpoint("https://cloud.appwrite.io/v1")
.setProject("your-project-id");
const account = new Account(client);
// Sign up
await account.create("unique()", "user@email.com", "password123", "John Doe");
// Login
await account.createEmailPasswordSession("user@email.com", "password123");
// OAuth
await account.createOAuth2Session("google", successUrl, failUrl);
Database
import { Databases, ID, Query } from "appwrite";
const db = new Databases(client);
// Create document
await db.createDocument("mydb", "posts", ID.unique(), {
title: "My First Post",
content: "Hello World",
tags: ["intro", "appwrite"]
});
// Query documents
const posts = await db.listDocuments("mydb", "posts", [
Query.equal("tags", ["appwrite"]),
Query.orderDesc("$createdAt"),
Query.limit(10)
]);
Storage
import { Storage, ID } from "appwrite";
const storage = new Storage(client);
// Upload file
const file = await storage.createFile("uploads", ID.unique(), document.getElementById("file").files[0]);
// Get file preview (with transformations)
const preview = storage.getFilePreview("uploads", file.$id, 300, 300); // 300x300 thumbnail
Serverless Functions
// functions/hello/src/main.js
export default async ({ req, res, log }) => {
const name = req.body.name || "World";
log(`Processing request for ${name}`);
return res.json({
message: `Hello, ${name}!`,
timestamp: new Date().toISOString()
});
};
Deploy with: appwrite deploy function
Free Cloud Tier
| Feature | Free | Pro |
|---|---|---|
| Bandwidth | 10GB | 300GB |
| Storage | 2GB | 150GB |
| Functions | 750K exec | 3.5M exec |
| Databases | Unlimited | Unlimited |
| Users | 75K MAU | 200K MAU |
| Team members | 1 | Unlimited |
Appwrite vs Alternatives
| Feature | Firebase | Supabase | Appwrite |
|---|---|---|---|
| Self-host | No | Yes | Yes |
| Database | NoSQL only | PostgreSQL | Document DB |
| Auth | Yes | Yes | Yes |
| Storage | Yes | Yes | Yes |
| Functions | Yes | Yes (Edge) | Yes |
| Messaging | FCM only | No | Email+SMS+Push |
| Open source | No | Yes | Yes |
| Offline support | Yes | No | No |
Real-Time
client.subscribe("databases.mydb.collections.posts.documents", (response) => {
console.log("Document changed:", response.payload);
});
Who Uses Appwrite?
With 46K+ GitHub stars:
- Mobile app developers
- Web developers building full-stack apps
- Startups needing rapid backend development
- Companies wanting self-hosted BaaS
Get Started
- Sign up for cloud or self-host
- Create a project
- Install SDK for your platform
- Build your app with auth, database, storage
Full backend in 5 minutes. No server code needed.
Need external data for your app? Check out my web scraping tools on Apify — collect data from any website and feed it into Appwrite. Custom solutions: spinov001@gmail.com
Top comments (0)