Open-source backend platform with authentication, databases, storage, and serverless functions.
Claim your free access at GitHub Education Pack - look for Appwrite.
- Console: https://cloud.appwrite.io/console
- API Keys: Console → Project → Settings → API Keys
- Authentication: Email, OAuth, phone, magic URL, anonymous
- Databases: Document-based with relationships
- Storage: File uploads with compression and encryption
- Functions: Serverless in 13+ languages
- Messaging: Email, SMS, push notifications
- Realtime: WebSocket subscriptions
npm install appwriteimport { Client, Account, Databases } from 'appwrite';
const client = new Client()
.setEndpoint(process.env.APPWRITE_ENDPOINT)
.setProject(process.env.APPWRITE_PROJECT_ID);
const account = new Account(client);
const databases = new Databases(client);import { Client, Account } from 'appwrite';
const client = new Client()
.setEndpoint('https://cloud.appwrite.io/v1')
.setProject('your-project-id');
// Auth
const account = new Account(client);
await account.createEmailPasswordSession(email, password);pip install appwritefrom appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint(os.environ.get('APPWRITE_ENDPOINT'))
client.set_project(os.environ.get('APPWRITE_PROJECT_ID'))
client.set_key(os.environ.get('APPWRITE_API_KEY'))
databases = Databases(client)npm install -g appwrite-cli
# Login
appwrite login
# Initialize project
appwrite init project
# Deploy functions
appwrite deploy functionCopy from templates/appwrite/:
appwrite.json- CLI project config.env.example- Environment variables
APPWRITE_ENDPOINT=https://cloud.appwrite.io/v1
APPWRITE_PROJECT_ID=your_project_id
# Get from: https://cloud.appwrite.io → Project Settings
APPWRITE_API_KEY=your_api_key
# Get from: Console → Settings → API Keys// Create document
const document = await databases.createDocument(
'database-id',
'collection-id',
ID.unique(),
{ name: 'John', email: 'john@example.com' }
);
// Query documents
const documents = await databases.listDocuments(
'database-id',
'collection-id',
[Query.equal('name', 'John')]
);// functions/hello/src/main.js
export default async ({ req, res, log }) => {
log('Hello from function!');
return res.json({ message: 'Hello World' });
};- Use API keys server-side only: Never expose in client code
- Set up permissions: Configure collection and bucket permissions
- Use realtime sparingly: Subscribe only to needed channels
- Implement auth flows: Use OAuth for easier user onboarding
- Structure collections: Plan database schema before building