Friction

Appwrite

appwrite.io · Backend platform

Open-source backend server with auth, databases, storage and functions.

44 items · 48 source threads · 2 source types · updated 2025-08

Compare

Pain points 21

ItemAreaSeveritySupportLast seen
Function executor loses sync with actual runtime containers

The executor's table of active runtimes can fall out of sync with the real containers, so executions fail with a curl error and the inactive runtime deletion fails in the logs.

Affects: self-hosted function users

Reliability & bugsBlocks work3 sources2023-10

“When you're testing a function, and you have to keep deploying it and running it, and constantly get the CURL error”

“It seems it's possible for the Appwrite Executor's table of active runtimes and the actual running runtime containers to go out of sync”

Fresh local setup rejects database connections on sign-up

Right after setting up Appwrite locally, sign-up fails because MariaDB refuses the connecting container host. The reporter resolved it by creating a root user allowed from any host.

Affects: new self-hosting user

Setup & onboardingCauses churn2 sources2022-04

“Fatal error: Uncaught PDOException: You have an error in your SQL syntax”

“After freshly setting up appwrite on my local and try to test the sign up functionality”

SMS provider setting changed across versions and no longer sends via Twilio

After upgrading from 0.15 to 1.0, the renamed SMS provider environment variable from the new docs is not sending requests to Twilio.

Affects: self-hosting user upgrading versions

Self-hosting & upgradesBlocks work2 sources2023-08

“Failed to create connection: php_network_getaddresses: getaddrinfo failed: Name does not resolve”

“Appwrite is returning `Instance of 'Token'` but the request is not being sent to the `twilio`”

SMTP credentials not validated when saving project SMTP settings

The connection test does not enable SMTP authentication, so wrong usernames or passwords pass and the settings are saved successfully.

Affects: project admin configuring email

Reliability & bugsAnnoyance2 sources2024-12

“However, because `SMTPAuth` isn't set to true, the username and password are not checked”

“So my SMTP server haven't any problem but as the server can't find the address”

Create-user endpoints return a vague server error for a null name

Sending a null name to the user creation endpoints produces an unhelpful server error although the name is optional. The developer, who is building their own SDK, can work around it.

Affects: developer building a custom SDK

API & developer experienceAnnoyance2 sources2024-10

“Name is optional anyway, so specifying it as null should not create this error”

“400 error response with some helpful message”

Server freezes randomly for 15-20 minutes under frequent function calls

Locked: summary and evidence are part of Sprint Pass and Pro

Reliability & bugsCauses churn1 source2022-11
Docker stack stops starting after MariaDB data corruption

Locked: summary and evidence are part of Sprint Pass and Pro

Reliability & bugsCauses churn1 source2022-04
Dart SDK crashes listing documents with null type error

Locked: summary and evidence are part of Sprint Pass and Pro

API & developer experienceBlocks work1 source2025-08
JWT remains valid after the session has expired

Locked: summary and evidence are part of Sprint Pass and Pro

Permissions & securityBlocks work1 source2024-04
User update event payload differs depending on what was changed

Locked: summary and evidence are part of Sprint Pass and Pro

API & developer experienceBlocks work1 source2023-12
Refreshing a Google OAuth session empties the provider access token

Locked: summary and evidence are part of Sprint Pass and Pro

Reliability & bugsBlocks work1 source2023-08
Adding a longer enum value to an attribute causes a server error

Locked: summary and evidence are part of Sprint Pass and Pro

Reliability & bugsBlocks work1 source2023-05
Low-level control and extensibility limited, risk of lock-in

Locked: summary and evidence are part of Sprint Pass and Pro

CustomizationBlocks work1 source2022-08
Large existing database can only be loaded through the SDK API

Locked: summary and evidence are part of Sprint Pass and Pro

Data export & migrationBlocks work1 source2022-05
Newly created storage buckets return not found, only the default works

Locked: summary and evidence are part of Sprint Pass and Pro

Reliability & bugsBlocks work1 source2022-03
Account-created function trigger skipped for OAuth signups

Locked: summary and evidence are part of Sprint Pass and Pro

Reliability & bugsBlocks work1 source2021-11
Dart runtime functions produce no output

Locked: summary and evidence are part of Sprint Pass and Pro

Reliability & bugsBlocks work1 source2021-10
Google login session persists after logging out, auto-signing in again

Locked: summary and evidence are part of Sprint Pass and Pro

Permissions & securityAnnoyance1 source2025-01
Fragmented documentation with outdated code snippets

Locked: summary and evidence are part of Sprint Pass and Pro

DocumentationAnnoyance1 source2024-04
Console form pattern validation broken, causing server errors on invalid IDs

Locked: summary and evidence are part of Sprint Pass and Pro

UI & usabilityAnnoyance1 source2023-08
No documentation for setting up an HTTPS endpoint on an existing SSL server

Locked: summary and evidence are part of Sprint Pass and Pro

DocumentationAnnoyance1 source2021-12

Feature requests 18

ItemAreaSeveritySupportLast seen
Delete a user's sessions when the user is blocked

After blocking a user, their sessions persist and cause sign-in requests from a different user on the same device to be rejected with a user_blocked error.

Affects: app admin blocking users

Permissions & securityBlocks work1 source2023-08

“Therefore a different user using the same device wont be able to sign in because the request is completely blocked”

Atomic increment and decrement for document fields

The user needs atomic updates such as incrementing a counter, because doing it in server functions cannot prevent race conditions. Firestore offers field increments and transactions for this.

Affects: developer building counters like likes

API & developer experienceBlocks work1 source2022-09

“We can do that using server functions at the moment but there is no way to prevent race condition”

Bulk document creation endpoint for large inserts

Inserting 12,000 documents requires 12,000 separate API calls, which is inefficient. The user asks for an endpoint that accepts an array of documents.

Affects: developer importing large datasets

PerformanceBlocks work1 source2022-04

“It is inefficient running 12,000 external createDocument API calls to achieve this”

No direct database access or ORM support blocks production use

The user says Appwrite is hard to use in production because data cannot be written directly to the database without the API. They request a Prisma-style connector and an option to disable Redis caching.

Affects: developer evaluating Appwrite for production

IntegrationsBlocks work1 source2022-03

“With Appwrite, it is also impossible to inject data directly into the DB without going through the Appwrite API”

Database transactions needed to roll back grouped operations

The user wants to group related create, read, update and delete operations into one transaction so everything can be rolled back on failure. Without it data integrity is hard to maintain.

Affects: developer needing data integrity

API & developer experienceBlocks work1 source2022-02

“Really need to be able to group related create/read/update/delete operations into a database transaction so we can rollback everything on any failure”

Cannot query or filter for null values in collections

Locked: summary and evidence are part of Sprint Pass and Pro

API & developer experienceBlocks work1 source2022-01
Allow the same function to run in parallel

Locked: summary and evidence are part of Sprint Pass and Pro

PerformanceBlocks work1 source2021-07
No raw SQL-style query interface in the console for inspecting data

Locked: summary and evidence are part of Sprint Pass and Pro

UI & usabilityAnnoyance1 source2024-04
Make JWT expiration configurable

Locked: summary and evidence are part of Sprint Pass and Pro

CustomizationAnnoyance1 source2023-03
Record which user or team created or updated a document

Locked: summary and evidence are part of Sprint Pass and Pro

Permissions & securityAnnoyance1 source2022-07
Support Cloudflare R2 as an S3-compatible storage backend

Locked: summary and evidence are part of Sprint Pass and Pro

IntegrationsAnnoyance1 source2022-06
Missing offline persistence and optimistic updates compared with Firebase

Locked: summary and evidence are part of Sprint Pass and Pro

API & developer experienceAnnoyance1 source2022-05
Support Postgres as the database

Locked: summary and evidence are part of Sprint Pass and Pro

IntegrationsAnnoyance1 source2022-01
Realtime listening to query results like Firestore

Locked: summary and evidence are part of Sprint Pass and Pro

API & developer experienceAnnoyance1 source2021-12
Single lightweight container to run Appwrite on low-end systems

Locked: summary and evidence are part of Sprint Pass and Pro

Self-hosting & upgradesAnnoyance1 source2020-09
ARM platform support for installing Appwrite

Locked: summary and evidence are part of Sprint Pass and Pro

Self-hosting & upgradesAnnoyance1 source2020-07
One-click Heroku deploy as an alternative to the Docker install

Locked: summary and evidence are part of Sprint Pass and Pro

Self-hosting & upgradesAnnoyance1 source2020-06
Filter users and collections by geo coordinates

Locked: summary and evidence are part of Sprint Pass and Pro

API & developer experienceAnnoyance1 source2020-06

Workarounds 4

ItemAreaSeveritySupportLast seen
Global 60 requests per minute rate limit cannot be configured

The fixed rate limit per IP cannot be adjusted, though some functions like OTP resending need different limits. The user built a proxy function to control limits manually, which is hard to manage.

Affects: developer using functions for OTP resend

CustomizationBlocks work1 source2022-03

“now I have to manually control the limit by creating a proxy function”

Cannot query an array attribute against an array of values

The user wants an array-in-array comparison but the equal query returns nothing. The workaround is a function that explodes the array into a separate collection so an OR can be used, which creates a large collection.

Affects: developer querying array attributes

API & developer experienceBlocks work1 source2022-02

“What I am trying to do is basically an "Array IN Array" comparison”

No logical OR in queries, forcing redundant overlapping downloads

Without OR support the user fires multiple queries with cursors to simulate it while syncing a local database. Overlap between results can reach 100 percent, wasting time and server resources.

Affects: developer syncing a local database

API & developer experienceBlocks work1 source2022-02

“I have to fire multiple queries (with multiple requests with cursor for each of them) to simulate the OR”

Missing Map attribute forces JSON stringifying and a REST facade

A long-time Firestore developer lacks nested Map attributes and has to stringify nested models, then build a REST API in front of Appwrite to reshape the data. This is complicated and takes time from client development.

Affects: Flutter developer coming from Firebase

API & developer experienceBlocks work1 source2022-02

“Not having Map attrib means I have to JSON.stringify all of my Map attribs”

Switching reasons 1

ItemAreaSeveritySupportLast seen
Essential features missing or paywalled, preferring a fully open alternative

A commenter who tried several BaaS tools says Appwrite and Supabase either lack essential features or put them behind a subscription. They favor Parse, which is fully open source with a large feature set.

Affects: developer evaluating BaaS options

Pricing & plansBlocks work1 source2022-08

“Both of these are very popular but they either lack essential features or have them behind a subscription wall”