What it does
Appwrite is an open-source, self-hosted Backend-as-a-Service that provides authentication, schematized databases, file storage with image transformations, real-time WebSocket subscriptions, and serverless cloud functions supporting multiple programming languages.
Why it’s interesting
Unlike Firebase or other proprietary BaaS platforms, Appwrite gives you complete control over your backend infrastructure. You can self-host on any Docker-capable server and avoid vendor lock-in while still getting the convenience of a managed backend.
Real-world use case
Deploy Appwrite on a single VPS to serve as the unified backend for a Next.js web app and Flutter mobile app, handling user authentication across platforms, media uploads with automatic thumbnails, and triggering background Python scripts on database events.
What I can learn
- 01
Containerized BaaS Microservices
Learn how Appwrite orchestrates an entire suite of backend microservices (HTTP API, WebSocket proxy, Redis queue workers, database migrations) within a unified Docker Compose network.
- 02
Multi-Language Serverless Execution
Study how ephemeral container runtimes safely execute user code in Python, Node.js, or Go with low cold-start latency.
- 03
Declarative Permission Scoping
Understand how permission rules are evaluated across collections, documents, and storage buckets at the API gateway layer.
One thing to explore
Workers and API Controllers
Inspect the Workers directory and API controllers to see how background task queues handle asynchronous jobs like webhooks and file processing.
Explore the source (opens in a new tab)10-Minute Challenge
Run Appwrite locally and create a test project
Before you start: Docker installed on your machine, 15 minutes
- Run the Appwrite installer: 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:latest
- Navigate to http://localhost in your browser and create an admin account
- Create a test project and explore the Auth and Databases tabs
- Try creating a database collection and configuring permissions