Current section
Files
Jump to
Current section
Files
lib/appwrite.ex
defmodule Appwrite do
@moduledoc """
Elixir SDK for the [Appwrite](https://appwrite.io) 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
| Module | Description |
|---|---|
| `Appwrite.Services.Accounts` | User authentication and account management |
| `Appwrite.Services.Avatars` | Avatars, flags, favicons, QR codes, screenshots |
| `Appwrite.Services.Database` | Document database with transactions |
| `Appwrite.Services.Functions` | Cloud function executions |
| `Appwrite.Services.GraphQL` | GraphQL queries and mutations |
| `Appwrite.Services.Health` | Server health checks |
| `Appwrite.Services.Locale` | Locale, country, currency, and language data |
| `Appwrite.Services.Messaging` | Push/SMS/email topic messaging |
| `Appwrite.Services.Sites` | Hosted web application deployments |
| `Appwrite.Services.Storage` | File storage and retrieval |
| `Appwrite.Services.TablesDB` | Structured SQL-like table/row storage |
| `Appwrite.Services.Teams` | Team and membership management |
| `Appwrite.Services.Tokens` | File access token management |
## Utilities
| Module | Description |
|---|---|
| `Appwrite.Utils.Query` | Build query strings for filtering and pagination |
| `Appwrite.Utils.Permission` | Generate permission strings |
| `Appwrite.Utils.Role` | Generate role strings |
| `Appwrite.Utils.Id` | Generate 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
"""
defmodule MissingProjectIdError do
@moduledoc """
Raised when `:project_id` is not set in the application config.
"""
defexception message: """
The `project_id` config key is required for all Appwrite API calls.
Add it to your config:
config :appwrite, project_id: System.get_env("APPWRITE_PROJECT_ID")
"""
end
defmodule MissingSecretError do
@moduledoc """
Raised when `:secret` (API key) is not set in the application config.
"""
defexception message: """
The `secret` config key is required for all Appwrite API calls.
Add it to your config:
config :appwrite, secret: System.get_env("APPWRITE_SECRET")
"""
end
defmodule MissingRootUriError do
@moduledoc """
Raised when `:root_uri` is not set in the application config.
"""
defexception message: """
The `root_uri` config key specifies which Appwrite instance to use.
Add it to your config:
config :appwrite,
root_uri: System.get_env("APPWRITE_ENDPOINT", "https://cloud.appwrite.io/v1")
"""
end
end