
Appwrite Cli
- 1.1k installs
- 25 repo stars
- Updated May 6, 2026
- appwrite/agent-skills
appwrite-cli is an agent skill for the Appwrite CLI that manages projects, deploys functions and storage, runs list queries, and generates type-safe SDKs for developers building on Appwrite from terminal or CI pipelines.
About
appwrite-cli is an agent skill from appwrite/agent-skills that guides developers through the Appwrite CLI for project management from the terminal or CI. Install via `npm install -g appwrite-cli`, Homebrew, curl install script, or Windows Scoop, then login, initialize projects, and manage multi-file configuration. The skill covers deploying functions, sites, tables, buckets, teams, webhooks, and topics, running flag-based list queries, operating in non-interactive CI/CD mode, and generating type-safe SDKs. Developers reach for appwrite-cli when standing up Appwrite backends, automating deploys, or scripting resource queries without clicking through the console.
- Full CLI coverage for projects, functions, sites, databases, buckets, teams, webhooks, and topics
- Supports flag-based list queries and complex filtering
- Non-interactive mode optimized for CI/CD pipelines
- Generates type-safe SDKs for multiple languages
- Multi-file project configuration with appwrite.config.json
Appwrite Cli by the numbers
- 1,069 all-time installs (skills.sh)
- +29 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #378 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Security screen: HIGH risk (skills.sh audit)
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/appwrite/agent-skills --skill appwrite-cliAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1.1k |
|---|---|
| repo stars | ★ 25 |
| Security audit | 2 / 3 scanners passed |
| Last updated | May 6, 2026 |
| Repository | appwrite/agent-skills ↗ |
How do you deploy Appwrite functions from CLI?
Manage Appwrite projects, deploy functions and storage, run queries, and generate SDKs directly from the terminal or CI.
Who is it for?
Developers building on Appwrite who want terminal-driven deploys, resource queries, and SDK generation with non-interactive CI/CD support.
Skip if: Developers on Firebase, Supabase, or raw AWS stacks who are not using Appwrite as their backend platform.
When should I use this skill?
The user asks to install, login, initialize, deploy, query, or generate SDKs for an Appwrite project from the command line or CI.
What you get
Deployed Appwrite functions, sites, storage buckets, database tables, webhooks, type-safe SDKs, and CI-ready project configurations.
- Deployed Appwrite resources
- Type-safe SDKs
- CI/CD project configuration
By the numbers
- Documents 4 install paths: npm, Homebrew, curl script, and Windows Scoop
- Covers deployment of functions, sites, tables, buckets, teams, webhooks, and topics
Files
Appwrite CLI
Installation
# npm
npm install -g appwrite-cli
# macOS (Homebrew native binary)
brew tap appwrite/appwrite
brew install appwrite/appwrite/appwrite
# macOS / Linux (script)
curl -sL https://appwrite.io/cli/install.sh | bash
# Windows (Scoop)
scoop install https://raw.githubusercontent.com/appwrite/sdk-for-cli/master/scoop/appwrite.config.jsonVerify installation:
appwrite -vLogin & Initialization
# Login to your account
appwrite login
# Login to a self-hosted instance
appwrite login --endpoint "https://your-instance.com/v1"
# Switch to a different saved account
appwrite login --switch
# Initialize a project (creates appwrite.config.json)
appwrite init project
# Verify by fetching project info
appwrite projects get --project-id "<PROJECT_ID>"appwrite whoami can show https://cloud.appwrite.io/v1 as the account login endpoint. That is expected for Appwrite Cloud login. Do not rewrite it to a regional endpoint. Only project configuration and project-scoped API calls use the region endpoint, such as https://<REGION>.cloud.appwrite.io/v1.
Configuration
# Switch endpoint/project for scripted use
appwrite client --endpoint "https://<REGION>.cloud.appwrite.io/v1"
appwrite client --project-id "<PROJECT_ID>"For the full list of CLI commands, see CLI Commands.
For headless / CI/CD usage, see Non-Interactive Mode.
appwrite.config.json
Resources can be configured inline in appwrite.config.json or split into separate JSON array files using includes.
{
"projectId": "<PROJECT_ID>",
"projectName": "Production",
"endpoint": "https://<REGION>.cloud.appwrite.io/v1",
"includes": {
"functions": "appwrite/functions.json",
"sites": "appwrite/sites.json",
"webhooks": "appwrite/webhooks.json"
},
"settings": {
"services": {
"account": true,
"databases": true,
"functions": true,
"sites": true,
"messaging": true
},
"protocols": {
"rest": true,
"graphql": true,
"websocket": true
},
"auth": {
"methods": {
"email-password": true,
"magic-url": true
},
"security": {
"sessionsLimit": 10,
"passwordDictionary": true
}
}
},
"tablesDB": [],
"tables": [],
"buckets": [],
"teams": [],
"topics": []
}Each includes value must be a relative .json path inside the project directory and must point to a JSON array. A resource cannot be defined both inline and in includes. When functions or sites are included, their path values are resolved relative to the include file directory.
Example appwrite/functions.json:
[
{
"$id": "<FUNCTION_ID>",
"name": "userAuth",
"enabled": true,
"logging": true,
"runtime": "node-22",
"buildSpecification": "s-1vcpu-512mb",
"runtimeSpecification": "s-1vcpu-512mb",
"deploymentRetention": 7,
"events": [],
"schedule": "",
"timeout": 15,
"entrypoint": "src/main.js",
"commands": "npm install",
"ignore": "node_modules\n.tmp",
"path": "../functions/userAuth"
}
]Pull and push project configuration
# Pull or push everything
appwrite pull all --all
appwrite push all --all
# Pull or push individual resource groups
appwrite pull settings
appwrite push settings
appwrite pull webhooks
appwrite push webhooks
appwrite pull functions
appwrite push functionsDeploying Functions
# Create a new function
appwrite init functions
# Pull existing functions from Console
appwrite pull functions
# Deploy functions
appwrite push functionsFunction configuration in appwrite.config.json
{
"functions": [
{
"$id": "<FUNCTION_ID>",
"name": "userAuth",
"enabled": true,
"logging": true,
"runtime": "node-22",
"buildSpecification": "s-1vcpu-512mb",
"runtimeSpecification": "s-1vcpu-512mb",
"deploymentRetention": 7,
"scopes": [],
"events": [],
"schedule": "",
"timeout": 15,
"entrypoint": "src/main.js",
"commands": "npm install",
"ignore": "node_modules\n.tmp",
"path": "functions/userAuth"
}
]
}Key function config fields:
| Field | Description |
|---|---|
enabled | Enables or disables the function. Disabled functions cannot be executed. |
logging | Stores execution logs for debugging and observability. |
runtime | Runtime used to execute the function, such as node-22. |
buildSpecification | Compute specification used while building the deployment. |
runtimeSpecification | Compute specification used while running executions. |
deploymentRetention | Number of days to retain old deployments before they are automatically deleted. |
scopes | API scopes granted to the function's generated execution key. |
events | Event patterns that trigger the function. |
schedule | Cron expression for scheduled execution. Empty string disables scheduling. |
timeout | Maximum execution duration in seconds. |
entrypoint | File inside path that starts the function. |
commands | Build/install command run before deployment. |
ignore | Extra newline-separated ignore rules used when packaging code. .gitignore is read automatically. |
path | Local function source directory. If configured through includes, this is resolved relative to the include file. |
Function commands
| Command | Description |
|---|---|
appwrite functions list | List all functions |
appwrite functions create | Create a new function |
appwrite functions get --function-id <ID> | Get a function by ID |
appwrite functions update --function-id <ID> | Update a function |
appwrite functions delete --function-id <ID> | Delete a function |
appwrite functions list-runtimes | List all active runtimes |
appwrite functions list-deployments --function-id <ID> | List deployments |
appwrite functions create-deployment --function-id <ID> | Upload a new deployment |
appwrite functions update-deployment --function-id <ID> --deployment-id <ID> | Set active deployment |
appwrite functions delete-deployment --function-id <ID> --deployment-id <ID> | Delete a deployment |
appwrite functions download-deployment --function-id <ID> --deployment-id <ID> | Download deployment |
appwrite functions create-execution --function-id <ID> | Trigger execution |
appwrite functions list-executions --function-id <ID> | List execution logs |
appwrite functions get-execution --function-id <ID> --execution-id <ID> | Get execution log |
appwrite functions list-variables --function-id <ID> | List variables |
appwrite functions create-variable --function-id <ID> --key <KEY> --value <VALUE> | Create variable |
appwrite functions update-variable --function-id <ID> --variable-id <ID> --key <KEY> --value <VALUE> | Update variable |
appwrite functions delete-variable --function-id <ID> --variable-id <ID> | Delete variable |
List functions with flag-based queries
Prefer the query flags for common filtering, sorting, and pagination. Use --queries only for raw Appwrite JSON query strings or advanced automation.
appwrite functions list \
--where 'name=api' \
--sort-desc '$createdAt' \
--limit 10 \
--offset 0 \
--json
appwrite functions list-deployments \
--function-id <FUNCTION_ID> \
--limit 5 \
--cursor-after <DEPLOYMENT_ID>Trigger a function with body
appwrite functions create-execution \
--function-id <FUNCTION_ID> \
--body '{"key": "value"}'Local development
appwrite run functionsDeployment activation
# Deploy and activate the deployment
appwrite push functions --function-id <FUNCTION_ID> --activate
# Deploy without switching live traffic
appwrite push functions --function-id <FUNCTION_ID> --activate=falseFunction variables
Do not define function variables in appwrite.config.json. Put them in a .env file inside the configured function path. Variables are saved after they are pushed, so use --with-variables only when you want to create, replace, or remove the remote variables from the local .env file.
# functions/userAuth/.env
PUBLIC_FLAG=enabled
SECRET_TOKEN=replace-me
# Sync function variables from .env
appwrite push functions --function-id <FUNCTION_ID> --with-variables
# Push code without changing saved variables
appwrite push functions --function-id <FUNCTION_ID>
# Run locally with variables fetched from function settings
appwrite run functions --with-variablesDeploying Sites
# Create a new site
appwrite init sites
# Pull existing sites from Console
appwrite pull sites
# Deploy sites
appwrite push sitesSite configuration in appwrite.config.json
{
"sites": [
{
"$id": "<SITE_ID>",
"name": "Documentation template",
"logging": true,
"framework": "astro",
"timeout": 30,
"installCommand": "npm install",
"buildCommand": "npm run build",
"outputDirectory": "./dist",
"buildSpecification": "s-1vcpu-512mb",
"runtimeSpecification": "s-1vcpu-512mb",
"buildRuntime": "node-22",
"adapter": "ssr",
"fallbackFile": "",
"startCommand": "npm run start",
"deploymentRetention": 7,
"path": "sites/documentation-template"
}
]
}Key site config fields:
| Field | Description |
|---|---|
logging | Stores site request and build logs. |
framework | Framework preset used for build and deployment defaults. |
timeout | Maximum request or function duration in seconds for server-rendered sites. |
installCommand | Command used to install dependencies. |
buildCommand | Command used to build the site. |
outputDirectory | Directory containing static build output. |
buildSpecification | Compute specification used while building the deployment. |
runtimeSpecification | Compute specification used while serving runtime workloads. |
buildRuntime | Runtime used to build the site, such as node-22. |
adapter | Deployment adapter, such as static or SSR behavior. |
fallbackFile | Fallback file for SPA routing or missing routes. |
startCommand | Command used to start server-rendered output. |
deploymentRetention | Number of days to retain old deployments before they are automatically deleted. |
path | Local site source directory. If configured through includes, this is resolved relative to the include file. |
Site commands
| Command | Description |
|---|---|
appwrite sites list | List all sites |
appwrite sites create | Create a new site |
appwrite sites get --site-id <ID> | Get a site by ID |
appwrite sites update --site-id <ID> | Update a site |
appwrite sites delete --site-id <ID> | Delete a site |
appwrite sites list-frameworks | List available frameworks |
appwrite sites list-specifications | List allowed specs |
appwrite sites list-templates | List available templates |
appwrite sites get-template --template-id <ID> | Get template details |
appwrite sites list-deployments --site-id <ID> | List deployments |
appwrite sites create-deployment --site-id <ID> | Create deployment |
appwrite sites get-deployment --site-id <ID> --deployment-id <ID> | Get deployment |
appwrite sites delete-deployment --site-id <ID> --deployment-id <ID> | Delete deployment |
appwrite sites update-site-deployment --site-id <ID> --deployment-id <ID> | Set active deployment |
appwrite sites update-deployment-status --site-id <ID> --deployment-id <ID> | Cancel ongoing build |
appwrite sites list-variables --site-id <ID> | List variables |
appwrite sites create-variable --site-id <ID> --key <KEY> --value <VALUE> | Create variable |
appwrite sites update-variable --site-id <ID> --variable-id <ID> --key <KEY> --value <VALUE> | Update variable |
appwrite sites delete-variable --site-id <ID> --variable-id <ID> | Delete variable |
appwrite sites list-logs --site-id <ID> | List request logs |
appwrite sites get-log --site-id <ID> --log-id <ID> | Get a log |
appwrite sites delete-log --site-id <ID> --log-id <ID> | Delete a log |
Site variables
Do not define site variables in appwrite.config.json. Put them in a .env file inside the configured site path. Variables are saved after they are pushed, so use --with-variables only when you want to create, replace, or remove the remote variables from the local .env file.
# sites/documentation-template/.env
PUBLIC_SITE_NAME=docs
appwrite push sites --site-id <SITE_ID> --with-variables
# Push code without changing saved variables
appwrite push sites --site-id <SITE_ID>Managing Tables (Databases)
# Create a new table
appwrite init tables
# Pull existing tables from Console
appwrite pull tables
# Deploy tables
appwrite push tablesTable configuration in appwrite.config.json
{
"tablesDB": [
{
"$id": "<DATABASE_ID>",
"name": "songs",
"enabled": true
}
],
"tables": [
{
"$id": "<TABLE_ID>",
"$permissions": ["create(\"any\")", "read(\"any\")"],
"databaseId": "<DATABASE_ID>",
"name": "music",
"enabled": true,
"rowSecurity": false,
"columns": [
{
"key": "title",
"type": "varchar",
"required": true,
"size": 255
}
],
"indexes": []
}
]
}Database commands (TablesDB)
| Command | Description |
|---|---|
appwrite tables-db list-tables --database-id <ID> | List tables |
appwrite tables-db create-table --database-id <ID> | Create table |
appwrite tables-db get-table --database-id <ID> --table-id <ID> | Get table |
appwrite tables-db update-table --database-id <ID> --table-id <ID> | Update table |
appwrite tables-db delete-table --database-id <ID> --table-id <ID> | Delete table |
appwrite tables-db list-columns --database-id <ID> --table-id <ID> | List columns |
appwrite tables-db get-column --database-id <ID> --table-id <ID> --key <KEY> | Get column |
appwrite tables-db delete-column --database-id <ID> --table-id <ID> --key <KEY> | Delete column |
appwrite tables-db list-column-indexes --database-id <ID> --table-id <ID> | List indexes |
appwrite tables-db create-column-index --database-id <ID> --table-id <ID> | Create index |
appwrite tables-db delete-column-index --database-id <ID> --table-id <ID> --key <KEY> | Delete index |
Column type commands
Note: The legacy string type is deprecated. Use explicit string column types instead.| Command | Description |
|---|---|
create-varchar-column | Varchar column — inline storage, fully indexable (max 16,383 chars, size ≤ 768 for full index) |
create-text-column | Text column — off-page storage, prefix index only (max 16,383 chars) |
create-mediumtext-column | Mediumtext column — off-page storage (max ~4M chars) |
create-longtext-column | Longtext column — off-page storage (max ~1B chars) |
create-boolean-column | Boolean column |
create-integer-column | Integer column (optional min/max) |
create-float-column | Float column (optional min/max) |
create-email-column | Email column |
create-url-column | URL column |
create-ip-column | IP address column |
create-datetime-column | Datetime column (ISO 8601) |
create-enum-column | Enum column (whitelist of accepted values) |
create-relationship-column | Relationship column |
All column commands use appwrite tables-db <command> --database-id <ID> --table-id <ID>.
Row operations
# Create a row
appwrite tables-db create-row \
--database-id "<DATABASE_ID>" --table-id "<TABLE_ID>" \
--row-id 'unique()' --data '{ "title": "Hello World" }' \
--permissions 'read("any")' 'write("team:abc")'
# List rows (JSON output)
appwrite tables-db list-rows \
--database-id "<DATABASE_ID>" --table-id "<TABLE_ID>" --json
# Get a row
appwrite tables-db get-row \
--database-id "<DATABASE_ID>" --table-id "<TABLE_ID>" --row-id "<ROW_ID>"List rows and documents with query flags
Use --where, --sort-asc, --sort-desc, --limit, --offset, --cursor-after, and --cursor-before on list commands. Row and document list/get commands also support repeated --select flags.
appwrite tables-db list-rows \
--database-id "<DATABASE_ID>" \
--table-id "<TABLE_ID>" \
--where 'status=active' \
--where 'score>=10' \
--sort-asc 'name' \
--select '$id' \
--select 'name' \
--limit 25 \
--json
appwrite databases list-documents \
--database-id "<DATABASE_ID>" \
--collection-id "<COLLECTION_ID>" \
--where 'email!=null' \
--cursor-before "<DOCUMENT_ID>"--where parses strings, numbers, booleans, null, and JSON arrays. Supported operators are =, !=, >, >=, <, and <=.
Managing Buckets (Storage)
# Create a new bucket
appwrite init buckets
# Pull existing buckets from Console
appwrite pull buckets
# Deploy buckets
appwrite push bucketsStorage commands
| Command | Description |
|---|---|
appwrite storage list-buckets | List all buckets |
appwrite storage create-bucket | Create a bucket |
appwrite storage get-bucket --bucket-id <ID> | Get a bucket |
appwrite storage update-bucket --bucket-id <ID> | Update a bucket |
appwrite storage delete-bucket --bucket-id <ID> | Delete a bucket |
appwrite storage list-files --bucket-id <ID> | List files |
appwrite storage create-file --bucket-id <ID> | Upload a file |
appwrite storage get-file --bucket-id <ID> --file-id <ID> | Get file metadata |
appwrite storage delete-file --bucket-id <ID> --file-id <ID> | Delete a file |
appwrite storage get-file-download --bucket-id <ID> --file-id <ID> | Download a file |
appwrite storage get-file-preview --bucket-id <ID> --file-id <ID> | Get image preview |
appwrite storage get-file-view --bucket-id <ID> --file-id <ID> | View file in browser |
Managing Teams
# Create a new team
appwrite init teams
# Pull existing teams from Console
appwrite pull teams
# Deploy teams
appwrite push teamsTeam commands
| Command | Description |
|---|---|
appwrite teams list | List all teams |
appwrite teams create | Create a team |
appwrite teams get --team-id <ID> | Get a team |
appwrite teams update-name --team-id <ID> | Update team name |
appwrite teams delete --team-id <ID> | Delete a team |
appwrite teams list-memberships --team-id <ID> | List members |
appwrite teams create-membership --team-id <ID> | Invite a member |
appwrite teams update-membership --team-id <ID> --membership-id <ID> | Update member roles |
appwrite teams delete-membership --team-id <ID> --membership-id <ID> | Remove a member |
appwrite teams get-prefs --team-id <ID> | Get team preferences |
appwrite teams update-prefs --team-id <ID> | Update team preferences |
Managing Webhooks
# Pull existing webhooks from Console
appwrite pull webhooks
# Deploy configured webhooks
appwrite push webhooksWebhook configuration in appwrite/webhooks.json
[
{
"$id": "<WEBHOOK_ID>",
"name": "Deploy events",
"url": "https://example.com/appwrite/webhook",
"events": ["functions.*.deployments.*.create"],
"enabled": true,
"tls": true
}
]Webhook commands
| Command | Description |
|---|---|
appwrite webhooks list | List webhooks |
appwrite webhooks create | Create a webhook |
appwrite webhooks get --webhook-id <ID> | Get a webhook |
appwrite webhooks update --webhook-id <ID> | Update a webhook |
appwrite webhooks delete --webhook-id <ID> | Delete a webhook |
Managing Topics (Messaging)
# Create a new topic
appwrite init topics
# Pull existing topics from Console
appwrite pull topics
# Deploy topics
appwrite push topicsMessaging commands
| Command | Description |
|---|---|
appwrite messaging list-messages | List all messages |
appwrite messaging create-email | Create email message |
appwrite messaging create-push | Create push notification |
appwrite messaging create-sms | Create SMS message |
appwrite messaging get-message --message-id <ID> | Get a message |
appwrite messaging delete --message-id <ID> | Delete a message |
appwrite messaging list-topics | List all topics |
appwrite messaging create-topic | Create a topic |
appwrite messaging get-topic --topic-id <ID> | Get a topic |
appwrite messaging update-topic --topic-id <ID> | Update a topic |
appwrite messaging delete-topic --topic-id <ID> | Delete a topic |
appwrite messaging list-subscribers --topic-id <ID> | List subscribers |
appwrite messaging create-subscriber --topic-id <ID> | Add subscriber |
appwrite messaging delete-subscriber --topic-id <ID> --subscriber-id <ID> | Remove subscriber |
User Management
# Create a user
appwrite users create --user-id "unique()" \
--email hello@appwrite.io
# List users
appwrite users list
# Get a user
appwrite users get --user-id "<USER_ID>"
# Delete a user
appwrite users delete --user-id "<USER_ID>"Project Management
Project-level commands use the singular project service for current-project operations that do not need --project-id.
# Project settings and policies
appwrite project update-service --service-id functions --enabled true
appwrite project update-protocol --protocol-id rest --enabled true
appwrite project list-policies
appwrite project get-policy --policy-id "<POLICY_ID>"
# OAuth2 providers
appwrite project list-o-auth-2-providers
appwrite project get-o-auth-2-provider --provider github
appwrite project update-o-auth-2-git-hub --enabled true
# Mock phones and short-lived API keys
appwrite project create-mock-phone --phone "+12025550123" --otp "123456"
appwrite project list-mock-phones
appwrite project create-ephemeral-keyGenerate Type-Safe SDK
# Auto-detect language and generate
appwrite generate
# Specify output directory
appwrite generate --output ./src/generated
# Specify language
appwrite generate --language typescript
# Override generated import settings
appwrite generate --appwrite-import-source node-appwrite --import-extension .jsGenerated files:
| File | Description |
|---|---|
types.ts | Type definitions from your database schema |
databases.ts | Typed database helpers for querying and mutating rows |
constants.ts | Configuration constants (endpoint, project ID) |
index.ts | Entry point that exports all helpers |
Usage:
import { databases } from "./generated/appwrite";
const customers = databases.use("main").use("customers");
// Create
const customer = await customers.create({
name: "Walter O' Brian",
email: "walter@example.com"
});
// List with typed queries
const results = await customers.list({
queries: (q) => [
q.equal("name", "Walter O' Brian"),
q.orderDesc("$createdAt"),
q.limit(10)
]
});
// Update
await customers.update("customer-id-123", {
email: "walter@scorpion.com"
});
// Delete
await customers.delete("customer-id-123");
// Bulk create
await customers.createMany([
{ name: "Walter O' Brian", email: "walter@example.com" },
{ name: "Paige Dineen", email: "paige@example.com" }
]);Non-Interactive / CI/CD Mode
For headless automation, see the Non-Interactive Mode docs.
Deploy non-interactively
# Push everything
appwrite push all --all --force
# Push specific resources
appwrite push functions --all --force
appwrite push functions --function-id <FUNCTION_ID> --force
appwrite push sites --all --force
appwrite push tables --all --force
appwrite push teams --all --force
appwrite push buckets --all --force
appwrite push webhooks --all --force
appwrite push topics --all --forceGlobal Command Options
| Option | Description |
|---|---|
-v, --version | Output version number |
-V, --verbose | Show complete error log |
-j, --json | Output in JSON format |
-f, --force | Confirm all warnings |
-a, --all | Select all resources |
--id [id...] | Pass a list of IDs |
--report | Generate GitHub error report link |
--console | Get direct link to Console |
--open | Open Console link in browser |
-h, --help | Display help |
Maintenance Commands
# Update CLI using the detected install method
appwrite update
# Show manual update instructions
appwrite update --manual
# Install shell completions
appwrite completion installExamples
# List users with JSON output
appwrite users list --json
# Get verbose error output
appwrite users list --verbose
# View a row in the Console
appwrite tables-db get-row \
--database-id "<DATABASE_ID>" \
--table-id "<TABLE_ID>" \
--row-id "<ROW_ID>" \
--console --open
# Generate error report
appwrite login --reportRelated skills
How it compares
Choose appwrite-cli when your backend already runs on Appwrite and you need terminal deploys and SDK generation; pick platform-native CLIs when your stack is tied to another BaaS provider.
FAQ
How do you install the Appwrite CLI?
appwrite-cli documents installation through `npm install -g appwrite-cli`, Homebrew (`brew install appwrite/appwrite/appwrite`), a curl install script, or Windows Scoop before login and project initialization.
What resources can appwrite-cli deploy?
appwrite-cli covers deploying Appwrite functions, sites, tables, buckets, teams, webhooks, and topics, plus flag-based list queries, non-interactive CI/CD mode, and type-safe SDK generation.
Is Appwrite Cli safe to install?
skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.