Appwrite (appwrite v1.0.0)

View Source

Elixir SDK for the Appwrite backend-as-a-service platform.

Configuration

Add to your config/config.exs (or a per-environment config file):

config :appwrite,
  project_id: System.get_env("APPWRITE_PROJECT_ID"),
  secret:     System.get_env("APPWRITE_SECRET"),
  root_uri:   System.get_env("APPWRITE_ENDPOINT", "https://cloud.appwrite.io/v1")

For runtime configuration (recommended in production), use config/runtime.exs:

import Config

config :appwrite,
  project_id: System.fetch_env!("APPWRITE_PROJECT_ID"),
  secret:     System.fetch_env!("APPWRITE_SECRET"),
  root_uri:   System.get_env("APPWRITE_ENDPOINT", "https://cloud.appwrite.io/v1")

Services

ModuleDescription
Appwrite.Services.AccountsUser authentication and account management
Appwrite.Services.AvatarsAvatars, flags, favicons, QR codes, screenshots
Appwrite.Services.DatabaseDocument database with transactions
Appwrite.Services.FunctionsCloud function executions
Appwrite.Services.GraphQLGraphQL queries and mutations
Appwrite.Services.HealthServer health checks
Appwrite.Services.LocaleLocale, country, currency, and language data
Appwrite.Services.MessagingPush/SMS/email topic messaging
Appwrite.Services.SitesHosted web application deployments
Appwrite.Services.StorageFile storage and retrieval
Appwrite.Services.TablesDBStructured SQL-like table/row storage
Appwrite.Services.TeamsTeam and membership management
Appwrite.Services.TokensFile access token management

Utilities

ModuleDescription
Appwrite.Utils.QueryBuild query strings for filtering and pagination
Appwrite.Utils.PermissionGenerate permission strings
Appwrite.Utils.RoleGenerate role strings
Appwrite.Utils.IdGenerate unique resource IDs

Quick start

alias Appwrite.Services.Accounts
alias Appwrite.Utils.Id
alias Appwrite.Utils.Permission
alias Appwrite.Utils.Query
alias Appwrite.Utils.Role

# Create a user
{:ok, user} = Accounts.create(Id.unique(), "user@example.com", "password123")

# Email + password login
{:ok, session} = Accounts.create_email_password_session("user@example.com", "password123")

# List documents with a query
alias Appwrite.Services.Database
{:ok, docs} = Database.list_documents("db_id", "col_id", [
  Query.equal("status", "active"),
  Query.limit(20),
  Query.order_desc("created_at")
])

Error handling

All service functions return {:ok, map()} on success or {:error, reason} on failure. Network and API errors are returned as Appwrite.Exceptions.AppwriteException structs inside the {:error, ...} tuple.

case Accounts.get() do
  {:ok, user}  -> IO.inspect(user["name"])
  {:error, %AppwriteException{code: 401}} -> IO.puts("Not logged in")
  {:error, reason} -> IO.inspect(reason)
end