DEV Community

Alex Spinov
Alex Spinov

Posted on

Appwrite Has a Free Backend-as-a-Service — Auth, Database, Storage, and Functions in One Self-Hosted Platform

Why Appwrite?

Appwrite is an open-source Firebase alternative you can self-host. Auth, database, storage, functions, and realtime — all with a clean SDK.

docker run -it --rm \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \
  appwrite/appwrite:latest
Enter fullscreen mode Exit fullscreen mode

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@example.com', 'password', 'John Doe')

// Login
await account.createEmailPasswordSession('user@example.com', 'password')

// OAuth
await account.createOAuth2Session('google', 'https://yourapp.com/success')
Enter fullscreen mode Exit fullscreen mode

Database

import { Databases, ID } from 'appwrite'

const db = new Databases(client)

// Create document
await db.createDocument('mydb', 'posts', ID.unique(), {
  title: 'Hello World',
  content: 'My first post',
  published: true,
})

// Query
const posts = await db.listDocuments('mydb', 'posts', [
  Query.equal('published', true),
  Query.orderDesc('$createdAt'),
  Query.limit(10),
])
Enter fullscreen mode Exit fullscreen mode

Storage

import { Storage, ID } from 'appwrite'

const storage = new Storage(client)
await storage.createFile('uploads', ID.unique(), file)
const preview = storage.getFilePreview('uploads', fileId, 400, 300)
Enter fullscreen mode Exit fullscreen mode

Appwrite vs Firebase vs Supabase

Feature Appwrite Firebase Supabase
Self-hosted Yes No Yes
Database Document Document Postgres
Auth Built-in Built-in Built-in
Functions Yes Yes Edge
Open source Yes No Yes

Need to extract data from any website at scale? I build custom web scrapers — 77 production scrapers running on Apify Store. Email me at spinov001@gmail.com for a tailored solution.

Top comments (0)