- Added:
migrationscommands for provider reports, imports, exports, retries, and migration management - Fixed: shell installer verified downloaded binaries against release checksums
- Fixed: rejected incomplete JSON and trailing content before rewriting project and included configs
- Fixed: respected Unicode characters, escapes and negations in deployment ignore patterns
- Updated: required patched Go
1.26.10when building the CLI from source - Updated: WAF command help covered request content and session age conditions
- Updated: built against Go SDK
v7.15.0
- Added:
account list-memberships - Added:
--descriptionon create and update commands for databases, collections, tables, attributes, columns, indexes, buckets, functions, sites, variables, topics, webhooks and keys - Added:
--deny-listonproject update-password-dictionary-policyandupdate-password-personal-data-policy - Added:
--strip-metadataonstorage create-bucketandupdate-bucket - Added:
--self-signedonloginto accept a self-signed certificate for that sign-in - Fixed: an array flag given only
[]sends an empty array, so lists such as--deny-listcan be cleared - Fixed:
pull allandpush allskip console-only resources such as project settings with a warning when only an API key is configured, instead of stopping - Updated: built against sdk-for-go v7.14.0
- Added:
appwrite types -l pythongenerates Pydantic models for tables - Added:
--enum-style constontypesandgenerateemits erasableas constobjects instead of TypeScript enums - Added: config directory follows
XDG_CONFIG_HOMEwhen~/.appwritedoes not exist - Added:
create-queryondatabases,documentsdbandtablesdbto send queries in the request body, with--select - Added:
--totalon list commands inactivities,analytics,backups,domains,mongo,mysqlandpostgresql - Added:
--emailsonmessaging create-emailandmessaging update-email - Fixed:
logincompletes MFA when the account requires more factors - Fixed:
init sitedownloads templates on Windows and no longer changes the global git config - Updated: built on Go SDK v7.13.0
- Added:
analyticsinappwrite.config.json, synced bypull analytics,push analytics,pull allandpush all - Added:
pull analyticsandpull allskip analytics on servers that do not offer it
- Breaking: built on Go SDK v7.12.0; requests send response format
2.5.0and JSON output follows the 2.5 shapes - Breaking: removed
--publicfromanalytics create-propertyandanalytics update-property - Added:
appwrite init apnsto set up Apple Push Notification service for Appwrite Push - Added:
mongo,mysqlandpostgresqlpromote-restoration, and--restore-mode,--target-nameand--auto-promoteoncreate-restoration - Added:
proxy create-smtp-rule - Added:
--email-enabledonfunctions update - Added:
projectcommandslist-environments,create-environment,get-environment,update-environmentanddelete-environment - Added:
project update-password-rotation-policy - Added:
--fingerprintsonproject create-android-platformandupdate-android-platform - Updated: generated TypeScript types take a typed
QueryBuilderfor queries
- Added:
accountpasskey commandslist-passkeys,create-passkey,get-passkey,update-passkey,delete-passkeyandupdate-passkey-verification - Added:
account create-passkey-tokenandaccount update-passkey-tokenfor passkey sign-in - Added:
users list-passkeys,get-passkey,update-passkeyanddelete-passkeycommands - Added:
project update-passkey-policycommand - Updated: built on Go SDK v7.10.0
- Added:
--intervalonfunctions createandfunctions updateto run functions every N minutes - Added:
init,pullandpushread and write a function'sintervalinappwrite.config.json - Updated:
pushsendsintervalonly when the function's config sets it - Updated: commands call Go SDK v7.9.0
- Added:
wafcommands to list, get and delete rules, and create or update bypass, challenge, deny, rate limit and redirect rules - Added:
advisor,analytics,mysql,postgresqlandmongocommands - Added:
presences upsert,presences updateandproject update-o-auth-2-webflowcommands - Added:
--stateonaccount create-o-auth-2-token,--durationonaccount create-email-password-sessionand--currentonaccount delete-sessions - Added:
--totalon the remaining list commands and--channel-idonmessaging create-pushandupdate-push - Updated:
--resourceon theoauth2commands can be repeated to pass several resource URIs - Updated: commands call Go SDK v7.8.0
- Added:
--config-fileflag andAPPWRITE_CONFIG_FILEto choose the project config file - Added:
oauth2 introspectcommand - Added:
--prompton the Auth0, Discord, GitHub, Kakao, Microsoft, Okta, Salesforce and Zoho OAuth2 commands - Fixed:
typesreads tables and collections split out withincludes - Fixed: help no longer prints backticks around flag value names
- Updated: command examples are shell-safe and use realistic values
- Updated: commands call Go SDK v7.5.0
- Breaking: removed
account list-logsandusers list-logs - Breaking: removed
organization create-key,get-key,list-keys,update-keyanddelete-key - Added:
documentsdb,vectorsdbanddomainscommands - Added:
organizationproject key commands:create-ephemeral-project-key,get-project-key,list-project-keys,update-project-key,delete-project-key - Added:
account create-id-token-sessionand email verification and recovery OTP commands - Added:
messaging create-appwrite-providerandmessaging update-appwrite-provider - Added:
project update-o-auth-2-kakao,update-o-auth-2-tik-tokandupdate-password-pwned-policy - Added:
--reply-to-emailand--reply-to-nameon email messages,--qosand--expiryon topics - Added:
--native-client-idsand--native-enabledon the Apple and Google OAuth2 providers - Fixed:
tablesdb get-columnanddatabases get-attributedecode varchar, text, bigint and spatial columns - Fixed:
runno longer reloads when a file is saved unchanged, and still reloads while files keep changing - Fixed:
push functionsgives self-hosted functions a default domain under the Functions domain, not Sites - Fixed:
typesfinds the TypeScript SDK indevDependencies - Updated: console links use the new console routes
- Updated:
runwarnings call the key an ephemeral API key - Updated: commands call Go SDK v7.4.0
- Added:
project update-o-auth-2-cloudflareconfigures the Cloudflare OAuth2 provider - Added:
project update-o-auth-2-resendconfigures the Resend OAuth2 provider - Fixed:
devno longer reloads on a touch or chmod, only when file contents change - Fixed:
devnow picks up files and directories created or deleted after it started - Updated:
tablesdb cutover-migrationis nowtablesdb create-cutover - Updated: Commands now call Go SDK v7.2.0-rc.5
- Updated: Help text covers variable key rules,
users create-jwt --session-id, and the OAuth2 provider list - Updated: Command examples quote string placeholders, so values with spaces or shell metacharacters are safe to copy
- Fixed:
init functionfailed on templates pinned to a wildcard version tag such as0.3.*; the newest matching tag is now resolved - Fixed: template repository refs and paths are passed to Git literally instead of through a shell
- Added:
init functionaccepts flags for non-interactive runs:--name,--function-id,--runtime,--source,--env-file,--deploy, and more - Added:
init functioncan connect a GitHub repository as the function source, existing or newly created - Added:
init functionasks where the function runs and reserves its generated domain up front - Added:
project update-o-auth-2-hugging-faceconfigures the Hugging Face OAuth2 provider - Added:
pull functionskeeps preview domains, Git provider settings, and pending template coordinates inappwrite.config.json - Added: Endpoint mismatch and missing
appwrite.config.jsonfailures print the exact recovery command - Fixed: OAuth2 token endpoint errors are read from
error/error_description, so device login polling and refresh failures report correctly - Fixed: A rejected refresh token names the affected session and suggests
appwrite login - Updated: Commands now call Go SDK 7.2.0-rc.3
- Added:
list-projectsandlist-organizationsreturn the same results for OAuth2, cookie, and self-hosted logins - Added:
list-projectslists every accessible organization, and--organization-idnarrows it to one - Added: Both lists now carry names, member counts, organization, and region instead of bare IDs
- Added: Table view for both lists shows
projects (1 of 224), an empty state, and a next-page command - Added:
appwrite updateprints the release notes URL for the installed version - Fixed:
--versionnow reports when a newer version is available - Fixed: Enrichment requests no longer overwrite the rendered result of a list command
- Updated:
prefsis hidden from the table view and kept in--jsonoutput
- Breaking: Removed
account create-jwt, useusers create-jwtinstead - Breaking: Removed
project create-key, useorganization create-keyinstead - Added:
users get-mfa-challengeretrieves a challenge code to deliver through your own channel - Added:
tablesdb list-migrations,create-migration,get-migration, anddelete-migration - Added:
--scopesonsites createandsites updatelimits the auto-generated build key - Added:
push functionsuploads in parallel when more than one is selected - Added:
run functionstreamscontext.log()andcontext.error()output live - Updated: Commands now call Go SDK 7.1.0
- Added:
project update-mfa-factors-policycontrols which factors can complete an MFA challenge - Added:
tablesdb cutover-migrationcuts a verified migration over to its dedicated compute - Added:
--installation-scopesonproject update-o-auth-2-server - Fixed:
--jsonand--rawkeep GraphQL responses whole instead of flattening the envelope away - Fixed:
pushrejects variable keys the API will not accept before deleting the remote set - Fixed:
runreports a function ready without invoking it first - Updated:
logindefaults to production Cloud rather than whichever endpoint is current - Updated:
loginandlogoutname the account and endpoint they acted on - Updated: Help text lists the accepted column types, relationship types, and delete constraints
The CLI is now a single Go binary. Day-to-day usage carries over, with no runtime to install and nothing downloaded on first run.
- Breaking: Rewrote the CLI in Go, shipping one binary per platform
- Breaking: Removed the commands the Go SDK has no counterpart for, listed in full under
26.0.0-rc.1 - Added: Homebrew, scoop, and
curl | bashinstalls, alongside an npm package that carries the binary - Added: A WebAssembly build, so the same CLI runs in a browser
- Added:
login --switchpicks a stored account by--endpointand--email - Fixed: Query flags such as
--filter,--sort-asc, and--limittake effect without--queries - Fixed: Large uploads complete instead of failing at a ten second deadline
- Updated: Startup is around 9.5ms, down from around 173ms
- Added:
appwrite-cli-wasmpackage runs the CLI in a browser through WebAssembly - Added:
login --switchtakes--endpointand--emailto pick a stored account - Added: Optional boolean flags accept
--flag valuealongside--flag=value - Fixed: Commands reject stray positional arguments instead of ignoring them
- Fixed:
updateno longer prints an update notice before it updates - Updated: Endpoint mismatch errors name the endpoint to pass to
login --switch
- Added:
graphql queryandgraphql mutationaccept a raw GraphQL document at--query - Added:
init skilltakes--all,--skill,--agent, and--methodfor headless installs - Added:
--codeonfunctionsandsites create-deploymentaccepts a source directory - Fixed: Requests no longer fail at a ten second deadline, so large uploads complete
- Fixed:
--self-signedreaches service commands instead of being dropped before the request - Fixed: A timed out mutation reports an unknown outcome instead of an ordinary failure
- Fixed:
--documents,--rows,--columns,--attributes,--indexes, and--operationsparse each value as JSON - Updated:
list-specificationsdocuments that--typedefaults toruntimes
- Breaking: Rewrote the CLI in Go, shipping a single binary with no runtime to install
- Breaking: Removed the
vcs,migrations,notifications, andaffiliatescommand groups - Breaking: Removed
accountkey, push target, OAuth2 session, anddeletecommands - Breaking: Removed
functionsandsitestemplate commands - Breaking: Removed
tablesdbmigration commands andpresences upsert,update - Breaking: Removed usage and log commands on
presences,project,users, andteams - Added: Homebrew, scoop, and
curl | bashinstalls alongside npm - Added: A per-platform npm package, so installing no longer downloads a binary afterwards
- Added:
updatefollows the prerelease channel, so a release candidate moves to the next candidate - Added:
updaterefuses to install an older version unless--forceis passed - Updated: Startup is around 9.5ms, down from around 173ms
- Added:
list-organizationsandlist-projectsrun at the root, alongsidelogin - Added: Hint pointing at
/v1when an endpoint misses the API path - Fixed:
list-organizations,list-projects, andorganization getwork on self-hosted installs - Fixed:
login --endpointverifies the endpoint before prompting for credentials - Fixed: Trailing slashes in an endpoint no longer produce double-slashed request paths
- Fixed: HTML and oversized error pages are summarized instead of printed verbatim
- Fixed:
--reportissue links stay within the length GitHub accepts
- Breaking: Removed the
organizationscommand group covering billing, plans, invoices, and add-ons - Added:
organizationcommands accept--organization-idto target another organization - Added:
projectcommands accept--project-idto target another project - Added: Grouped
--helpscreen with follow-up command hints after each action - Added:
pushandpulldocument--alland--idin their own help - Added:
clientreports the configuredorganizationId - Fixed:
loginwarns and signs in to the base Cloud endpoint instead of failing on a regional one - Fixed:
initno longer stacks a region prefix onto an already regional endpoint - Fixed:
notificationsandoauth2 list-organizations,list-projectscall the console, not the linked project - Fixed: Passwords are masked in full instead of revealing a tail
- Updated: Timestamps, durations, sizes, and large counts render in human-readable form
- Updated: Enabled and disabled lists collapse into wrapped groups instead of wide tables
- Updated: Condensed output notes how many fields
--rawwould add - Updated: Prompts and errors listing several accounts print one account per line
- Updated:
teamshints andregistervisibility point atorganizationandlogin - Updated: Dropped the
deployplaceholder command, which only printed a "usepush" warning
- Added:
previousKeyon an attribute or column renames it in place onpush - Fixed:
client --endpointreuses or switches an existing session instead of minting an unauthenticated stub - Fixed:
client --resetasks for confirmation before signing out signed-in accounts - Fixed: Commands that need a session now list signed-in accounts and suggest
login --switch - Fixed: Regional cloud endpoints match their canonical host when resolving a session
- Fixed:
pushupdates attributes in place instead of recreating them where the API allows it - Fixed:
pushresizes astringattribute in place instead of recreating it - Fixed:
pushno longer recreates indexes whose attributes were renamed - Fixed:
pushaborts on a failed attribute update instead of continuing past it - Fixed:
pushwaits for index deletion to finish before recreating indexes - Fixed:
pushleavesencryptuntouched when the config omits it - Fixed:
logoutsigns out the selected account instead of the current session id - Fixed: Table output wraps long reasons instead of truncating them mid-word
- Updated: Project policy limits for password history, session duration, session count, and users
- Added:
loginagainst Cloud now signs in through your browser - Updated:
--email,--password,--mfa, and--codenow apply to self-hosted instances only - Updated: Existing Cloud sessions keep working in read-only mode until you run
loginagain
- Added:
appsinstallation commands:list-installations,get-installation,delete-installation,create-installation-token - Added:
vcs list-namespacescommand for listing provider namespaces of an installation - Added:
--provider-namespaceoption tovcs create-repository - Added:
tablesdb list-operationscommand for dedicated database lifecycle operations - Added: Compact deployment summaries with human-readable sizes in deployment output
- Added:
--filter,--where,--sort-asc,--sort-desc,--limit,--offset,--cursor-after, and--cursor-beforeoptions tovcs list-repositoriesandactivities list-events - Updated: Command groups now use compact service names:
tablesdbandoauth2.tables-dbstill works as an alias - Updated:
appscommand group now shows a service description in help output - Updated:
storage list-filesdocumentsfolderas a filterable attribute - Fixed:
push sitesandpull sitesnow carryfallbackFileand the VCS fieldsinstallationId,providerRepositoryId,providerBranch,providerSilentMode, andproviderRootDirectory - Fixed: Symlinks in function directories are resolved for
runandpush, confined to the project root - Fixed: Token refresh now uses the logged-in session endpoint, and session credentials are no longer sent to a different endpoint
- Fixed: Site screenshot previews preserve the configured region
- Added:
appsservice commands for managing OAuth2 applications, keys, secrets, and installations - Added:
organizationapp installation commands:list-installations,create-installation,get-installation,update-installation,delete-installation - Added:
teamsapp installation commands:list-installations,create-installation,get-installation,update-installation,delete-installation - Added:
--installation-access-token-durationoption toproject update-o-auth2-server
- Breaking: removed
projectsservice commands - Breaking: removed
healthservice commands - Breaking: removed usage commands:
get-usage,list-usage,get-bucket-usage,get-collection-usage,get-table-usage - Updated: removed
--new-specificationoption frombackups create-restoration - Added:
accountOAuth2 consent commands:list-consents,get-consent,delete-consentand consent token commands - Added:
oauth2 authorize-postandoauth2 logout-postcommands - Added:
project update-o-auth-2-appwritecommand - Added:
--tokenoption tofunctions get-deployment-downloadandsites get-deployment-download
- Fixed: snake_case parameters now map to proper kebab-case flags:
oauth2commands use--client-id,--redirect-uri,--response-type,--request-uri,--code-challenge,--max-ageinstead of the malformed--client-_idstyle names
- Added:
push functionsandpullnow work with API key authentication, enabling CI usage without a console session - Updated: Console-only steps during push, like default domain rules, are skipped with a warning when using an API key
- Updated: Clearer authentication errors that distinguish API key and console session requirements
- Updated:
tablesdb createnow takes--specificationinstead of--dedicated-database-id - Updated: Removed
health get-queue-logscommand - Added:
notificationscommand group for console notifications - Added:
organization get,update, anddeletecommands - Added:
organization list-memberships,create-membership,get-membership,update-membership, anddelete-membershipcommands - Added:
tablesdb list-migrations,create-migration,get-migration, anddelete-migrationcommands for dedicated database migrations - Added:
oauth2 create-par,list-organizations, andlist-projectscommands - Added:
--request-_urioption onoauth2 authorize; client ID, redirect URI, and response type are now optional - Added:
projects list-addons,get-addon,delete-addon,confirm-addon-payment, andget-addon-pricecommands - Added:
create-premium-geo-db-addoncommand onprojectsandorganizations - Added:
account list-logs,teams list-logs, andusers list-logscommands - Added:
health get-geoandget-geo-premiumcommands - Added:
--new-specificationoption onbackups create-restoration - Added:
--promptand--max-ageoptions onproject update-o-auth-2-oidc - Fixed: Project config validation now sends the
X-Appwrite-Projectheader, fixing 401 errors for guest sessions - Fixed: Update check now reads the latest version from the Homebrew tap instead of stale local metadata
- Updated: Removed pre-release activity log commands
list-logs,list-collection-logs,list-document-logs,list-table-logs,list-row-logs,list-message-logs,list-provider-logs,list-subscriber-logs, andlist-topic-logs - Updated: Removed
oauth2 approvecommand, meant for the console consent screen only - Updated:
--scopeonoauth2 authorizeis now optional and supports thephonescope - Updated: CLI OAuth login now requests the
allscope instead ofaccount.admin - Updated: Skills install now uses the
appwrite/skillsrepository - Updated: API key scope limits raised from 100 to 200 scopes
- Fixed: Empty error messages now fall back to the response body instead of a bare
Error: - Updated: Verbose error output is formatted with colored details and indented stack traces
- Added: Regional cloud endpoints are now derived from your configured endpoint in
initandpush - Added:
pushcreates a default function proxy rule when an existing function is missing one - Added:
pushaborts and asks you to re-run when tablesDB deletions change the config - Fixed: Unauthorized sessions now retry an OAuth token refresh before logging out
- Fixed: Auth security policies
limit,sessionsLimit, andpasswordHistorynow accept null for unlimited - Updated:
pushapplies service, protocol, auth method, and policy updates concurrently - Updated: Verbose error logs now include
code,type, andresponsedetails
- Fixed: Release binaries now embed
@napi-rs/keyringnative bindings for all targets
- Fixed: Compiled binaries no longer crash from
@napi-rs/keyringnative bindings
- Added: OAuth refresh tokens now stored in the OS keychain via
@napi-rs/keyring, falling back to config - Added:
--typeoption tofunctions list-specificationsandsites list-specifications - Updated: Bumped
@appwrite.io/consoledependency to^15.1.1 - Updated: Cleaner account selection prompt for
logoutwith a(current)marker - Fixed: OAuth login now clears the stale legacy session cookie
- Fixed: Browser launch on Windows now uses
rundll32for OAuth flows
- Added:
--resourceoption tooauth2 authorize,create-device-authorization, andcreate-tokenfor RFC 8707 resource indicators - Added: Press Enter during device login to open the verification URL in your browser
- Updated: Bumped
@appwrite.io/consoledependency to^15.1.0
- Added: OAuth2 login now requests the
account.adminscope - Fixed:
logoutnow reports the underlying server error when a session can't be revoked - Fixed:
logoutandclient --resetno longer report success when the server session revocation fails
- Added: Support for logging into staging Cloud environments (
stage.cloud.appwrite.io) - Updated: Compiled binaries now built with
--minifyinstead of inline sourcemaps
- Fixed:
organization get-invoice-downloadandget-invoice-viewnow save the invoice to disk via--destination - Fixed: File download commands now report a clear error when the download request fails
- Added:
oauth2command group (authorize,create-token,create-grant,get-grant,approve,reject,revoke,logout,create-device-authorization) - Added:
messaging create-ses-providerandupdate-ses-providercommands for Amazon SES - Added:
project update-o-auth-2-servercommand to configure the OIDC provider - Added:
project update-deny-corporate-email-policycommand - Added:
project update-password-strength-policycommand - Added:
--dedicated-database-idoption totables-db create - Updated: Bumped
@appwrite.io/consoledependency to^15.0.0
- Breaking: Renamed
project update-deny-canonical-email-policytoupdate-deny-aliased-email-policy - Breaking: Moved organization API key commands to the new
organizationgroup (list-keys,create-key,get-key,update-key,delete-key) - Breaking: Moved project management to the new
organizationgroup (list-projects,create-project,get-project,update-project,delete-project) - Added:
presencescommands to track presence and usage - Added:
project getcommand
- Fixed: Kotlin type generation now emits
Longfor Appwrite integer attributes to match the Android and Kotlin SDK models - Fixed: Type generation now includes Sites when validating supported config resource keys
- Breaking: Renamed
project update-canonical-emailstoupdate-deny-canonical-email-policy - Breaking: Renamed
project update-disposable-emailstoupdate-deny-disposable-email-policy - Breaking: Renamed
project update-free-emailstoupdate-deny-free-email-policy - Breaking: Renamed
proxy update-rule-verificationtoupdate-rule-status - Breaking: Removed
--searchoption fromproxy list-rules - Breaking:
functions create-variableandsites create-variablenow require--variable-id - Added:
databases create-big-int-attributeandupdate-big-int-attributecommands - Added:
tablesdb create-big-int-columnandupdate-big-int-columncommands - Added:
--promptoption onproject update-o-auth-2-google - Added: Pagination and filter flags on
vcs list-repository-branchesandsites list-variables - Added:
--on-duplicateoption onmigrations create-appwrite-migration,create-csv-import, andcreate-json-import - Updated: Extended key-list query filters with
key,resourceType,resourceId, andsecret
- Added
--switchand--newflags onappwrite loginto explicitly manage multiple saved accounts - Fixed
appwrite loginto verify the current session via the API and clean up stale guest/unauthorized sessions instead of trusting local metadata - Updated Cloud account login to normalize endpoints to
https://cloud.appwrite.io/v1and reject regional Cloud endpoints
- Breaking: Removed
projects delete. Useproject deleteinstead - Breaking: Replaced
projects update-mock-numberswithproject create-mock-phone,list-mock-phones,get-mock-phone,update-mock-phone, anddelete-mock-phone - Breaking: Renamed
projects update-auth-statustoproject update-auth-methodwith--method-idand--enabledflags - Breaking: Replaced
projects update-o-auth-2with per-providerproject update-o-auth-2-<provider>commands - Breaking: Replaced
projects create-jwtwithproject create-ephemeral-keyfor short-lived API keys - Added
project list-o-auth-2-providers,get-o-auth-2-provider,list-policies,get-policy, andlist-email-templatescommands - Added
fusionauth,keycloak, andkickto supported OAuth2 providers inaccountsession commands - Added
includesfield inappwrite.config.jsonto split resource arrays into separate JSON files;init,pull, andpushresolve resource paths relative to each include
- Added
completion installcommand with completion scripts for zsh, bash, and fish - Added automatic shell-completion install step to the
install.shstandalone installer - Updated Homebrew install and update flow to detect the installed formula and recommend the official
appwrite/appwrite/appwritetap when a different one is in use - Fixed standalone update check to point at the
appwrite/sdk-for-clireleases feed instead of the legacyappwrite/appwrite-clirepo
- Added
--where,--sort-asc,--sort-desc,--limit,--offset,--cursor-after, and--cursor-beforeflags on list commands across services - Added
--selectflag ondatabases list-documents,tablesdb list-rows, and other row/document list commands - Added a hint after query-related errors that points to the new flag-based filters
- Updated
--queriesdescription to mark it as the legacy raw-JSON option, recommending the new flag-based filters for common cases - Updated bundled examples to demonstrate
--limiton list commands
- Breaking: Renamed
project update-protocol-statustoproject update-protocol - Breaking: Renamed
project update-service-statustoproject update-service - Breaking: Removed
projects get-sms-template,projects update-sms-template, andprojects delete-sms-templatecommands - Breaking: Made
--localeoptional onprojects get-email-template,projects update-email-template, andprojects delete-email-template - Breaking: Reordered
projects update-email-templateparameters —--localeis now optional and placed after--message - Added
--pathprompt duringinit siteto choose the local site directory - Added support for initializing sites into existing non-empty directories without a starter template
- Added structured column renderer for
runtimeslistings - Added activity-based deployment timeout tracking so healthy long builds in
push functionandpush siteno longer time out prematurely - Updated
brew install/brew upgradeto use the fully-qualifiedappwrite/appwrite/appwriteformula from theappwrite/homebrew-appwritetap - Updated
deploymentRetentionprompt to clarify it counts days of non-active deployments - Updated CLI help and error output to display the correct program name
appwrite - Removed
enabledfield from site entries inappwrite.config.json - Fixed command help text to render links inline without markdown brackets
- Added source code and entrypoint validation before local function execution
- Added macOS code signature verification for standalone binary installs
- Added
webhooksto the list of supported resource types - Updated Open Runtimes version from v4 to v5
- Updated runtime start commands from
shtobashfor improved compatibility - Updated project init flow with contextual next steps and improved prompts
- Fixed Docker process error handling to report exit codes and signals
- Fixed function container startup to detect early exits before port open
- Fixed stderr output in Docker start to write to stderr instead of stdout
- Added site screenshot terminal preview after
push sitedeployments - Added standalone binary self-update support in
updatecommand - Added installation method detection for smarter version checks (npm, Homebrew, standalone)
- Updated TypeScript query types to use
QueryableFieldValuefor improved type inference - Fixed indentation in deployment error handling blocks
- Breaking: Moved
keyscommands fromprojectstoprojectservice. They no longer require--project-id, butcreate-keynow requires--key-id - Breaking: Moved
update-labelsfromprojectstoprojectservice - Breaking: Moved platform commands from
projectstoprojectservice and split genericcreate-platform/update-platforminto platform-specific commands:create-android-platform,create-apple-platform,create-linux-platform,create-web-platform,create-windows-platform(and corresponding update variants). New methods no longer require--project-id, but require--platform-id, andkeyparameter was renamed to platform-specific terminology, such as--bundle-identifieror--package-name - Added
webhooksservice with full pull and push support for project webhooks - Added
projectservice withupdate-canonical-emails,update-disposable-emails,update-free-emailscommands - Added
protocolsconfiguration section for REST, GraphQL, and WebSocket protocol status - Added
--purgeoption todatabases update-collectionandtables-db update-tablecommands - Added
x(Twitter/X) as supported OAuth2 provider - Fixed console URL generation to normalize cloud.appwrite.io subdomains
- Fixed Linuxbrew path detection in update command
- Added
--activateflag forpush functionto control deployment activation - Added deployment logs with URLs and elapsed time after successful push
- Added explicit deployment activation step after function build completes
- Added
deploymentRetentionfield to function initialization config - Added
--template-repository,--template-owner,--template-root-directory,--template-versionoptions tofunctions create - Added structured collection rendering for improved CLI output formatting
- Fixed console URL generation to properly strip
/v1suffix - Fixed force mode to always prompt for code pull confirmation
- Fixed sensitive key detection to match suffix-based patterns
- Fixed redaction hint display for JSON and raw output modes
- Fixed SDK client initialization for account, locale, migrations, proxy, and vcs services
- Moved
getSafeDirectoryNameto shared utils for pull commands - Updated
.gitignorerule handling to add rules individually
- Fixed: proxy CLI using console SDK instead of project SDK
- Added: Automatic update notifications with cached version checks
- Added:
create-json-exportandcreate-json-importmigration commands - Added:
--activateflag for site push to control deployment activation - Added: Deployment retention prompt during site initialization
- Updated: Improved
.gitignorehandling with hierarchical ignore support - Updated: Function and site init now use safe directory names
- Updated: Config writer prunes empty resource arrays and deprecated site fields
- Fixed: Pinned
@appwrite.io/consoledependency to~8.2.0
- Fixed: Removed
bun.lockfrom.gitignoreso lockfile is tracked in version control
- Added
--show-secretsflag to control display of sensitive values in output - Added automatic redaction of secrets, API keys, tokens, and passwords in CLI output
- Added
init skillcommand for installing Appwrite agent skills for AI coding agents - Added automatic agent skills detection and installation during project initialization
- Added
OPEN_RUNTIMES_ENTRYPOINTenvironment variable to function emulation - Updated
-jand-Routput flag descriptions for clarity - Fixed project init to gracefully handle override decline instead of exiting
- Added
organizationscommand group with multiple subcommands - Added
--rawoption for full raw JSON output in version command - Updated docs for
organizationscommands with new examples
- [BREAKING] Changed
$sequencetype frominttostringfor rows and documents - [BREAKING] Removed
--keyrequired option fromappwrite project update-variable(now optional) - [BREAKING] Removed billing/payment commands from
appwrite account:list-billing-addresses,create-billing-address,get-billing-address,update-billing-address,delete-billing-address,get-coupon,list-invoices,list-payment-methods,create-payment-method,get-payment-method,update-payment-method,delete-payment-method,update-payment-method-provider,update-payment-method-mandate-options - [BREAKING] Removed cloud-specific health commands:
get-console-pausing,get-queue-billing-project-aggregation,get-queue-billing-team-aggregation,get-queue-priority-builds,get-queue-region-manager,get-queue-threats - [BREAKING] Removed
appwrite projects update-console-accesscommand - Added
--variable-idrequired parameter toappwrite project create-variable - Added
--queriesand--totaloptional parameters toappwrite project list-variables - Added new
appwrite users update-impersonatorcommand - Added
impersonatoras a filterable attribute inappwrite users list - Updated API version badge to
1.9.0and compatibility to server version1.9.x
- Breaking: Moved webhook commands from
projectsto newwebhooksservice.
- Added
resolveFileParamto convert file or directory paths intoFileobjects and tar.gz packages
- Breaking: Separated
specificationwithbuildSpecificationandruntimeSpecification; addeddeploymentRetentionto both functions and sites - Added
startCommandoption for sites - Updated
init sitesprompts to selectbuildSpecificationandruntimeSpecification - Improved unauthorized error messages
- Fixed
push tablesnot passingencryptparameter for varchar, text, mediumtext, and longtext string types - Fixed NVM installation path not being detected by
updatecommand - Updated
tardependency to v7.4.3
- Breaking: Changed createDeployment signature; activate option now optional with default true; parameter order updated
- Added TTL option for cached query results in listDocuments and listRows
- Added get-console-pausing health status command
- Added project management commands: update-console-access and update-status
- Updated site deployment docs to reflect new activate option
- Updated role length limit for teams to 81 characters
- Added appwriteImportSource and importExtension options to code generator
- Fix ESLind warnings in generated files with
appwrite generatecommand.
- Fix large double values (e.g.
1.7976931348623157e+308) being expanded into huge integer literals. - Added
activitiescommand withlist-eventsandget-event. - Added
backupscommand with full support for archives, policies, and restorations. - Added account billing commands (addresses, coupons, invoices).
- Added account API key management commands.
- Added account payment method management commands (including provider and mandate updates).
- New: Added CLI commands under projects:
list-schedules,create-schedule, andget-schedulefor managing project schedules. - Packaging/build: Updated packaging to support explicit ESM/CJS outputs with exports. main now points to dist/index.cjs, module to dist/index.js, and exports include type and entry-point mappings. This enables better compatibility for both ESM and CommonJS users.
- Add
--queriesoption tolist-keyscommand - Add
--key-idoption tocreate-keycommand - Add support for the new
Backupsservice - Add
encryptparam support to new string type attributes - Fix
bignumber.jsbundler conflict by removing direct dependency in favor of transitive dependency fromjson-bigint - Fix missing region in console failUrl for failed deployments
- Fix handle null rows in table parser
- Export config zod schemas
- Fix generated TS imports to auto-detect ESM vs non-ESM
- Support type generation for text/varchar/mediumtext/longtext attributes
- Improve CLI session switch and logout UX
- Fix site domain construction
- Feat: Add dedicated commands for text-based attribute management:
create-varchar-attribute,create-text-attribute,create-mediumtext-attribute,create-longtext-attributeupdate-varchar-attribute,update-text-attribute,update-mediumtext-attribute,update-longtext-attribute
- Feat: Add specifications support to CLI
- Fix: Include specifications parameter when updating functions
- Chore: Update installation docs and examples for new text attribute/column commands
- Refactor: Simplify
update-collectioncommand syntax
- Mark
appwrite generatecommand as stable - Improve permissions param to be a typesafe callback
- Fix relationship handling in generated code
- Fix
appwrite clientproperly hanlding--keyparameter - Fix
init sitenot working on Windows
- Allow generation of server side CRUD operations on databases and tables
- Fix npm distribution failing due to missing template files in bundle
- Update generated
databasesservices to automatically initialize a client instance - Update generator to use handlebars templates
- Feat:
appwrite generatecommand to create a fully typesafe SDK for your Appwrite project - Chore: improve creation of columns during table creation by passing them directly instead of creating them one by one
- Improved config validation by adding extra rules in zod schema
- Fix
project initcommand leading to Cannot convert to BigInt error - Fix filter out unwanted attributes being pulled in the config file
- Mark release as stable
- Feat: add pull sync on destruction of remote resources (+ confirmation)
- Fix: refine zod schema to check string size
- Validate using zod schema during push cli command
- Maintain order of keys in local config
- Fix push all command not working correctly
- Fix CLI ES module import issues
- Add
Schemaclass for programmatically pushing and pulling appwrite config - Add client side db generation using
schema.db.generate()command
- Fixes a lot of typescript errors throughout the codebase
- Migrates codebase from JavaScript to TypeScript
Fix type generation for point, lineString and polygon columns
- Change
create-deployment-template'sversionparameter totypeandreference. eg. usage -create-deployment-template --type tag --reference 1.0.0 - Remove
bucket-idparameter fromcreate-csv-exportcommand - Allow enabling or disabling of image
transformationsin a bucket - Fix type generation for
point,lineStringandpolygoncolumns
- Fix duplicate
enumsduring type generation by prefixing them with table name. For example,enum MyEnumwill now be generated asenum MyTableMyEnumto avoid conflicts.
- Add
totalparameter to list queries allowing skipping counting rows in a table for improved performance
- Rename
create-csv-migrationtocreate-csv-importcommand to create a CSV import of a collection/table - Add
create-csv-exportcommand to create a CSV export of a collection/table - Add
create-resend-providerandupdate-resend-providercommands to create and update a Resend Email provider - Fix syncing of tables deleted locally during
push tablescommand - Fix added push command support for cli spatial types
- Fix attribute changing during push
- Replace pkg with @yao-pkg/pkg in dependencies
- Fix
init tablescommand not working - Improve tablesDB resource syncing during
push tablescommand
- Fix
logoutcommand showing duplicate sessions - Fix
logoutcommand showing a blank email even when logged out - Add syncing of
tablesDBresource duringpush tablescommand
- Add transaction support for Databases and TablesDB
- Deprecate
createVerificationmethod inAccountservice - Add
createEmailVerificationmethod inAccountservice
- Fix CLI Dart model generation issues
- Fix row permissions and security sync
- Fix error when pushing columns with relationships
- Fix resource name from attributes to columns for TablesDB indexes
- Breaking: Removed Avatars CLI command and all related subcommands; corresponding examples deleted
- Feat: Geo defaults now accept coordinate arrays for Databases and Tables DB, with automatic normalization
- Feat: Pull command skips deprecated resources by default and shows clearer totals/messages
- Feat: Updated CLI descriptions: Databases marked legacy; added tables-db, projects, and project
- Fix TypeScript type generation now quotes invalid property names to produce valid typings
- Update documentation: Removed Avatars CLI examples and updated help text to reflect new geo defaults and terminology
- Feat: Add support for
appwrite.config.jsonfile- All new projects will be initialized with this configuration file
- Resolves bundler conflicts (e.g., Vite) that incorrectly interpret
.jsonfiles as library imports
- Add
incrementDocumentAttributeanddecrementDocumentAttributesupport toDatabasesservice - Type generation fixes:
- Fix relationships using the relatedCollection's id instead of name
- Update auto generated comment to show relative path instead of absolute path
Note: The existing
appwrite.jsonfile remains fully supported for backward compatibility
- Fix object comparison logic when pushing settings
- Type generation fixes:
- Dart: Fixed import casing to snake_case, removed
extends Documentand hardcoded attributes, removed unnecessary imports - Java: Fixed indentation to 4 spaces, updated imports to
java.util.Objects, fixed enum casing in strict mode as per Oracle official docs - Javascript: Updated optional values formatting from
|nullto| null - Kotlin: Fixed indentation to 4 spaces per Kotlinlang official docs
- PHP: Fixed indentation to 4 spaces per PHP Fig official docs
- Swift: Fixed indentation to 4 spaces, improved
decodeIfPresentusage for optionals, added missingpublictoinitmethod - Typescript: Fixed indentation to 4 spaces per Typescript coding guidelines
- Dart: Fixed import casing to snake_case, removed
- Added
--with-variablesoption to the Sites command for adding/updating environment variables - Fixed Functions environment variables not being pushed with
--with-variables - Removed
awaitPoolswhen wiping old variables
Note: Storing environment variables in the
varsattribute ofappwrite.jsonis now deprecated due to security risks. Variables are now synced directly from the.envfile in the root directory of the function’s or site’s folder.
- Add
encryptattribute support - Add improved warnings on attribute recreation and deletion
- Fix
nullparsing error when using create attribute command - Type generation fixes and improvements:
- Add
--strict/-sflag toappwrite typescommand to generate types in strict mode. This automatically converts the casing of attributes to match the language's naming conventions - Add automatic package import to
dartlanguage which uses package detection to import the correct package - Add
Documentclass extension to generated types indartandjslanguage to support internal attributes like$idand$collectionIdetc. - Add proper enum support to
jslanguage - Fix indentation in
java,kotlinandswiftto use 2 spaces instead of 4 for consistency across all languages - Fix doc comments to use correct syntax in various languages (for eg.
///instead of/*) - Update enums in
dartto use lowerCamelCase instrictmode as per constant_identifier_names
- Add
- Fix circular dependency issue due to usage of
successmethod inutils.jsfile fromparser.jsfile - Type generation fixes:
- Add ability to generate types directly to a specific file by passing a file path to
appwrite types output_path, instead of just a directory - Fix non-required attributes to not be null if default value is provided
- Fix
Modelsimport error - Improve formatting and add auto-generated comments
- Add ability to generate types directly to a specific file by passing a file path to
- Add multi-region support to
initcommand - Update
initcommand to clear previous configuration inappwrite.json - Update localConfig to store multi-region endpoint
- Fix throw error when creating unknown attribute instead of timing out
- Fix equal comparison of large numbers and BigNumber instances using proper equality checks
- Fix duplication of reasons when comparing localConfig with remoteConfig
- Fix
firstOrNull()tofirstOrNullin types generation for dart - Refactor to use
isCloud()method consistently
- Add Type generation fixes:
- Properly handle enum attributes in dart, java and kotlin
- Fix initialisation of null attributes in dart's fromMap method
- Fix relationships and enums in swift
- Add
resourceIdandresourceTypeattributes tocreateRedirectRule - Add
providerReferenceto vcs command for getting repository contents - Add warning comment to
bulk updateDocumentsmethod - Fix type generation for enums in Typescript and PHP language
- Add
typescommand to generate language specific typings for collections. Currently supports -php,swift,dart,js,ts,kotlinandjava - Update bulk operation docs to include experiment feature warnings
- Remove assistant service and commands
- Add
sitescommand - Add
tokenscommand - Add
devKeyssupport toprojectscommand - Add
init site,pull siteandpush sitecommands - Add bulk operation methods like
createDocuments,deleteDocumentsetc. - Add new upsert methods:
upsertDocumentandupsertDocuments - Update GET requests to not include content-type header
- Fix hot swapping error in
python-mlfunction
- Fix GitHub builds by adding
qemu-systempackage - Fix attribute creation timed out
- Add
listOrganizationsmethod toorganizationsservice and fix init project command
- Add specifications support to CLI
- Update package version
- Fix: Missed specifications param when updating a function