diff --git a/src/routes/blog/post/10-best-mcp-server-client/+page.markdoc b/src/routes/blog/post/10-best-mcp-server-client/+page.markdoc index 8ed25e5aa7a..c170da0b5a0 100644 --- a/src/routes/blog/post/10-best-mcp-server-client/+page.markdoc +++ b/src/routes/blog/post/10-best-mcp-server-client/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 10 author: veeresh-mulge unlisted: true category: product +faqs: + - question: "What is the Model Context Protocol (MCP)?" + answer: "MCP is an open protocol that gives AI assistants a shared language for connecting to external tools, APIs, and data sources. Instead of building one-off integrations for every service, you expose capabilities through an MCP server and any compatible client (like Cursor, Claude Desktop, or VS Code) can use them. Read more in the [what is MCP](/blog/post/what-is-mcp) post." + - question: "What is the difference between an MCP server and an MCP client?" + answer: "An MCP server exposes capabilities (tools, resources, data sources) for AI to consume, while an MCP client is the interface the user interacts with, such as an IDE or chat app. The client connects to one or more servers and routes the AI's tool calls to them. You almost always pick the client first, then attach the servers you need." + - question: "How do I use the Appwrite MCP server?" + answer: "The [Appwrite MCP server](/docs/tooling/mcp/api) exposes your Appwrite project to AI clients so they can create users, manage databases, upload files, and trigger Functions through prompts. You install it in your MCP-compatible client (Cursor, Claude Desktop, VS Code) and authenticate with an API key scoped to the actions you want the AI to perform." + - question: "Are MCP servers safe to use with production projects?" + answer: "MCP servers are as safe as the credentials you give them. Use API keys with the minimum scopes needed, prefer staging or dev projects for exploratory work, and audit what tools each server exposes before connecting it. For Appwrite, scope keys to specific products (databases, functions, etc.) instead of using a full-access key." + - question: "Can I build my own MCP server?" + answer: "Yes. The MCP spec is open and there are SDKs in TypeScript, Python, and other languages. You can wrap any internal API, database, or service so your AI tools can call it. The Appwrite, GitHub, and Stripe MCP servers are all good reference implementations to study." + - question: "Do I need a separate MCP server for every tool I use?" + answer: "Yes, each external service typically ships its own MCP server, but a single MCP client can connect to many servers at once. So your IDE can talk to Appwrite, GitHub, Sentry, and Stripe simultaneously through one assistant, with each server handling its own domain." --- Imagine opening your IDE and asking, “Why did my last deployment fail?” and your assistant instantly pulls details from Vercel, checks Sentry for recent errors, and reviews your last commit on GitHub, all without you leaving your editor. diff --git a/src/routes/blog/post/10-git-commands-you-should-start-using/+page.markdoc b/src/routes/blog/post/10-git-commands-you-should-start-using/+page.markdoc index 0e133c0a0be..353a52b480e 100644 --- a/src/routes/blog/post/10-git-commands-you-should-start-using/+page.markdoc +++ b/src/routes/blog/post/10-git-commands-you-should-start-using/+page.markdoc @@ -9,6 +9,19 @@ author: ebenezer-don category: tutorial featured: false callToAction: true +faqs: + - question: "What is the difference between git switch and git checkout?" + answer: "`git switch` is a newer command focused only on branch operations (switching and creating branches), while `git checkout` is older and overloaded with branch switching, file restoration, and commit checkout. Use `git switch` for branches and `git restore` for files. It removes a whole class of accidental mistakes." + - question: "When should I use git restore instead of git reset?" + answer: "Use `git restore` when you want to discard changes to specific files in the working directory or unstage them, without touching your branch state. Use `git reset` when you actually need to move HEAD or rewrite history. `git restore` is safer because it cannot accidentally move your branch pointer." + - question: "What does git maintenance do?" + answer: "`git maintenance` schedules background tasks like garbage collection, repacking, and commit-graph updates that keep large repos fast. Running `git maintenance start` enables it for the current repo so you do not need to remember to run `git gc` manually. It is especially useful on long-lived monorepos." + - question: "Should I use git sparse-checkout on a monorepo?" + answer: "Yes, if you only work on a subset of the repo, sparse-checkout drastically reduces the files on disk and the time `git status` takes. Run `git sparse-checkout init` and then `set` the paths you care about. Combine it with partial clone (`--filter=blob:none`) for even bigger gains." + - question: "Do I still need GitHub if I use Git locally?" + answer: "Git itself is local and works without any remote, but you need a hosting service like GitHub, GitLab, or Bitbucket to collaborate with others or back up history off your machine. Many teams pair Git with a code host plus CI provider, and some self-host their own remotes for privacy." + - question: "How can I automate workflows triggered by Git events?" + answer: "Git itself supports hooks (pre-commit, post-receive, etc.), but for cloud workflows you typically use webhooks from your Git host. With Appwrite, you can deploy [Appwrite Functions](/docs/products/functions) that run on a Git push by connecting a repo. The function redeploys automatically on every commit to the configured branch." --- If you've worked with Git long enough, you've probably hit some common frustrations like operations getting slower as repositories grow, accidentally overwriting changes when switching branches, or struggling with massive monorepos. diff --git a/src/routes/blog/post/15-git-cli-tips/+page.markdoc b/src/routes/blog/post/15-git-cli-tips/+page.markdoc index 7c5fbd1bb6e..d7c1df8adef 100644 --- a/src/routes/blog/post/15-git-cli-tips/+page.markdoc +++ b/src/routes/blog/post/15-git-cli-tips/+page.markdoc @@ -9,6 +9,19 @@ author: ebenezer-don category: tutorial featured: false callToAction: true +faqs: + - question: "Is it worth learning the Git CLI if I already use a Git GUI?" + answer: "Yes. GUIs are fine for everyday commits, but the moment something goes wrong (merge conflicts, detached HEAD, lost commits), the CLI is where the answers live. Most online help, scripts, and CI configs assume CLI knowledge, so learning the basics pays off quickly." + - question: "What is the difference between git add and git commit?" + answer: "`git add` stages changes (tells Git which modifications to include in the next commit), while `git commit` actually records the staged snapshot to your local history. Staging gives you the chance to group related changes together and exclude work in progress. You can also stage parts of a file with `git add -p`." + - question: "How do I undo my last commit without losing the changes?" + answer: "Run `git reset --soft HEAD~1`. That moves the branch pointer back one commit but keeps all your changes staged so you can re-commit them. Use `--mixed` (the default) to unstage too, or `--hard` to discard the changes entirely (only when you are sure)." + - question: "What does git stash do?" + answer: "`git stash` saves your uncommitted changes onto a hidden stack and reverts your working directory to a clean state. You can then switch branches, pull, or rebase, and reapply your work later with `git stash pop`. It is handy when you need to quickly jump to another task without committing half-finished work." + - question: "How do git fetch and git pull differ?" + answer: "`git fetch` downloads new commits from the remote but does not change your working branch, so you can inspect them before merging. `git pull` is `git fetch` plus an immediate merge (or rebase, with `--rebase`) into your current branch. Fetch is safer when you are not sure what changed upstream." + - question: "Can I use Git to deploy Appwrite Functions?" + answer: "Yes. [Appwrite Functions](/docs/products/functions) support Git integration so a push to a configured branch triggers a new deployment automatically. You connect a GitHub repo to your function, choose a branch and root directory, and every commit there builds and ships a new version." --- While the command line interface can seem intimidating on the surface, it's actually a very useful tool that gives you control over your code in ways that GUIs often don't. If you can get comfortable with even a few git commands, you'll find yourself being more productive. diff --git a/src/routes/blog/post/3-things-you-can-build-with-go-runtime/+page.markdoc b/src/routes/blog/post/3-things-you-can-build-with-go-runtime/+page.markdoc index d726775b2ea..488dcb01931 100644 --- a/src/routes/blog/post/3-things-you-can-build-with-go-runtime/+page.markdoc +++ b/src/routes/blog/post/3-things-you-can-build-with-go-runtime/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 8 author: aditya-oberai category: product featured: false +faqs: + - question: "Which Go version does the Appwrite Functions runtime support?" + answer: "Appwrite ships a Go runtime starting from version 1.6, with `go-1.23` available as a runtime identifier. You enable it by adding `go-1.23` to your `_APP_FUNCTIONS_RUNTIMES` environment variable when self-hosting, or simply selecting it from the dropdown on Appwrite Cloud." + - question: "What kinds of things can I build with the Go runtime?" + answer: "Anything you would build with a serverless function: REST APIs, webhook handlers, scheduled jobs, AI integrations, and event-driven workflows that react to user signups, database writes, or file uploads. Go is particularly good when you need low cold-start latency or high requests-per-second per memory unit." + - question: "How does the Go runtime compare to Node.js or Python in Appwrite Functions?" + answer: "In Appwrite's internal benchmarks, the Go runtime had up to 3x faster cold starts and roughly 5x lower memory usage than several interpreted runtimes including Node.js, Deno, Ruby, and Python. Build times can be slower because Go is compiled, but the runtime performance gains usually pay off for production workloads." + - question: "Can I trigger Go Appwrite Functions from events?" + answer: "Yes. Like every Appwrite Function, a Go function can be triggered by HTTP requests, CRON schedules, or events emitted by Appwrite products (user creation, document changes, file uploads, etc.). The event payload is delivered to your handler so you can route on it." + - question: "How do I deploy a Go Appwrite Function via CI/CD?" + answer: "Connect your GitHub repository to your function in the Appwrite console and pick a branch. Every push to that branch triggers a new build and deployment automatically. You can also deploy from the Appwrite CLI by running `appwrite push functions` from your local project." + - question: "Can I develop Appwrite Go functions locally before deploying?" + answer: "Yes, the Appwrite CLI supports [local development](/blog/post/announcing-local-development) for Functions, including the Go runtime. There is also a published Go module with the types you need for the runtime context, so your editor gets full autocomplete and you can iterate without redeploying." --- In the last few years, Golang (or Go) has grown to become one of the most popular programming languages for developers building cloud-native applications. With Appwrite 1.6, we have introduced a new runtime to let developers build Appwrite Functions with Go. diff --git a/src/routes/blog/post/30-dev-tools-for-agencies/+page.markdoc b/src/routes/blog/post/30-dev-tools-for-agencies/+page.markdoc index 2eeec43c36e..05d53f3ba04 100644 --- a/src/routes/blog/post/30-dev-tools-for-agencies/+page.markdoc +++ b/src/routes/blog/post/30-dev-tools-for-agencies/+page.markdoc @@ -9,6 +9,19 @@ author: veeresh-mulge callToAction: true unlisted: true category: tutorial +faqs: + - question: "What tools should a small dev agency invest in first?" + answer: "Start with a code editor (VS Code or Cursor), a version control host (GitHub or GitLab), a project management tool (Linear or Notion), and a backend platform that covers auth, database, and storage so you do not glue together three vendors. [Appwrite](/docs/products/auth) fills the backend slot for most agency projects." + - question: "Should agencies build a custom backend or use a backend-as-a-service?" + answer: "For most client work, a BaaS like Appwrite saves weeks of plumbing on every project. You get auth, databases, storage, functions, and messaging out of the box, and you can self-host or use Appwrite Cloud depending on the client's compliance needs. Reserve custom backends for cases where you have genuinely unique architectural requirements." + - question: "How do dev tools affect project margins?" + answer: "Tooling choices compound: the right editor, BaaS, and CI setup can shave days off each project, which directly improves agency margins. Standardizing the stack across projects also reduces onboarding time for new developers, which is one of the biggest hidden costs in agency work." + - question: "What is the difference between an IDE and a code editor?" + answer: "An IDE (like IntelliJ or Visual Studio) bundles compilers, debuggers, refactoring tools, and project templates for a specific language stack. A code editor (like VS Code or Sublime) is more lightweight and gets those features through extensions. Editors are now powerful enough for most workflows, which is why VS Code dominates." + - question: "How can agencies handle multiple client projects without context switching?" + answer: "Use project-isolated environments: separate Appwrite projects per client, named workspaces in your editor, and dedicated channels in your chat tool. Tools like Linear and Notion help keep each client's roadmap distinct. The more isolation you build into your tooling, the less mental overhead per switch." + - question: "Which tools help with collaboration on remote teams?" + answer: "Real-time collaboration tools (Slack, Discord, Loom for async video), real-time editors (Zed, VS Code Live Share), and shared infrastructure (GitHub, Appwrite Cloud) are the core. For design and product, Figma and Notion cover most needs. Pick one of each category and standardize so the team is not constantly relearning tools." --- The way software is built today is drastically different from even five years ago. Teams are more distributed. Deadlines are tighter. And expectations, be it from clients, product leads, or users, are higher than ever. Whether you're running a fast-paced development agency, juggling multiple client projects, or leading an internal team building and maintaining a product, the tools you use directly impact your delivery speed, code quality, and team effectiveness. diff --git a/src/routes/blog/post/5-claude-hacks-you-need-to-try-right-now/+page.markdoc b/src/routes/blog/post/5-claude-hacks-you-need-to-try-right-now/+page.markdoc index 7c779a0e9e9..53f717ca01d 100644 --- a/src/routes/blog/post/5-claude-hacks-you-need-to-try-right-now/+page.markdoc +++ b/src/routes/blog/post/5-claude-hacks-you-need-to-try-right-now/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aishwari category: ai featured: false +faqs: + - question: "What is the difference between a Claude prompt and a brief?" + answer: "A prompt is usually a single question or instruction (e.g., \"Write a launch email\"). A brief gives Claude the surrounding context: audience, tone, format, examples of bad output to avoid, and constraints. Briefs consistently outperform prompts because Claude is good at steering away from things you name explicitly." + - question: "When should I use Claude Projects?" + answer: "Use Claude Projects whenever you find yourself pasting the same context (codebase, style guide, product docs, brand voice) into multiple chats. The project description acts as persistent context for every conversation inside it, so set it up like you would onboard a new hire." + - question: "Can Claude help me think through a problem instead of answering it directly?" + answer: "Yes. Ask Claude to interview you with the five most important questions about the problem, then answer them yourself before asking Claude to synthesize the result. This surfaces constraints and assumptions you had not named and is especially useful for fuzzy decisions like architecture or product specs." + - question: "What are Claude Artifacts useful for?" + answer: "Artifacts let you generate small interactive tools (regex testers, diff viewers, CSV converters, timezone calculators) in seconds without searching for or installing third-party apps. The real value is fast iteration: \"add dark mode\" or \"remember my last five inputs\" tweaks the tool to your workflow with one sentence." + - question: "Does Claude work with screenshots?" + answer: "Yes, Claude is multimodal. For UI bugs, design comparisons, error panels, or anything visual, screenshot first and describe later. Annotate the image (a red circle around the issue) for even better results. It saves a round trip compared to trying to explain a visual problem in words." + - question: "How do I integrate Claude into an Appwrite-backed app?" + answer: "Use [Appwrite Functions](/docs/products/functions) to call Anthropic's Claude API from your backend, keeping the API key server-side. You can also use the [Appwrite plugin for Claude Code](/blog/post/announcing-appwrite-claude-code-plugin) to give Claude direct access to your Appwrite project while coding." --- You can spot someone who's good at Claude within about ten seconds of watching them work. They barely type. They skip the elaborate prompts, the over-explaining, the second-guessing. Just five specific moves that almost nobody teaches. diff --git a/src/routes/blog/post/5-vs-code-extensions-that-replace-entire-dev-tools/+page.markdoc b/src/routes/blog/post/5-vs-code-extensions-that-replace-entire-dev-tools/+page.markdoc index 2aea45f13fe..c8e03d6aedb 100644 --- a/src/routes/blog/post/5-vs-code-extensions-that-replace-entire-dev-tools/+page.markdoc +++ b/src/routes/blog/post/5-vs-code-extensions-that-replace-entire-dev-tools/+page.markdoc @@ -9,6 +9,19 @@ author: ebenezer-don category: tutorial featured: false callToAction: true +faqs: + - question: "Is Thunder Client a full replacement for Postman?" + answer: "For day-to-day API development and testing, yes. Thunder Client covers collections, environment variables, Git sync, and CI/CD integration without leaving VS Code. Postman still wins for advanced features like API monitoring and mock servers, so pick based on what your workflow actually needs." + - question: "Are these VS Code extensions safe to use with proprietary code?" + answer: "It depends on each extension's data handling. AI extensions like BlackBox AI may send code snippets to remote servers; check the privacy policy and configure local-only modes when available. Extensions like GitDoc, Dendron, and Time Master are local and do not transmit your code, but always verify before installing on company projects." + - question: "Will too many VS Code extensions slow down the editor?" + answer: "Yes, each extension consumes memory and can contribute to startup time. VS Code has a built-in profiler (`Help > Show Running Extensions`) that shows which ones cost you the most. Disable per-workspace what you do not need, and uninstall extensions you no longer use." + - question: "Is there a VS Code extension for Appwrite?" + answer: "You can connect VS Code to Appwrite via the [Appwrite CLI](/docs/tooling/command-line) for deploying and managing functions, or through the [Appwrite MCP server](/docs/tooling/mcp/api) if you use an MCP-compatible AI assistant inside the editor. Both let you operate on your Appwrite project without leaving VS Code." + - question: "What does GitDoc actually do differently from a normal Git workflow?" + answer: "GitDoc auto-commits on save, similar to Google Docs version history. By default it only commits when your code is error-free, so you do not preserve broken states. It is most useful for docs, notes, or solo feature work where you want a fine-grained timeline without crafting commit messages." + - question: "Are these extensions worth using if I already have paid tools?" + answer: "If you genuinely use the advanced features of the paid tools (Postman monitoring, Notion collaboration), keep them. The extensions earn their place when you mostly used the basic features and want to cut context switches, subscriptions, or memory usage. Try the free versions for a week before deciding." --- Look at your system tray and count the development tools running. It adds up fast; each tool consumes memory, requires updates, and competes for your attention. diff --git a/src/routes/blog/post/6-practical-ways-developers-use-ai-to-build-faster/+page.markdoc b/src/routes/blog/post/6-practical-ways-developers-use-ai-to-build-faster/+page.markdoc index 7bd33261931..e00cefd0c8b 100644 --- a/src/routes/blog/post/6-practical-ways-developers-use-ai-to-build-faster/+page.markdoc +++ b/src/routes/blog/post/6-practical-ways-developers-use-ai-to-build-faster/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aishwari category: ai featured: false +faqs: + - question: "Why does giving AI more context produce better code suggestions?" + answer: "Models are only as good as the information they can see. Pasting one file gives the model a keyhole view of your project, while letting a harness like Claude Code or Cursor navigate the full repo lets it follow imports, spot conventions, and reason about real architecture. The same model produces dramatically better results with the right context." + - question: "How do I use AI to debug a CSS or UI issue?" + answer: "Screenshot the bug, attach the relevant component code, and ask the AI what is wrong. Multimodal models catch alignment issues, accessibility contrast problems, missing focus states, and hidden overflow that are tedious to describe in words. Annotate the screenshot with a red circle around the area for even better results." + - question: "How can I get more useful code reviews from AI?" + answer: "Default AI reviews are too polite. Tell the model to roleplay a cynical principal engineer and find every way the PR could fail in production, be exploited, or cause a Saturday outage. Ask it to rank findings by likelihood and assume bad-faith inputs. The change in output quality is immediate." + - question: "What is schema-first development with AI?" + answer: "Instead of building API routes, types, and forms incrementally, you describe the domain to the AI, generate the data schema first, and then derive types, validation, seed data, and tests from that schema. With [Appwrite Databases](/docs/products/databases), you also skip the migrations and permissions setup, letting you go from schema to running app in minutes." + - question: "How do I set up AI-powered error triage with Appwrite?" + answer: "Create an [Appwrite Function](/docs/products/functions) that receives error payloads (stack trace, user action, recent state), calls an LLM to cluster and summarize the error, then posts to Slack or your issue tracker. The function can be triggered on each error event, so you get a human-readable diagnosis within minutes instead of hours." + - question: "Will AI replace developers?" + answer: "Not in any short timeframe. AI shifts what developers spend time on (more architecture and review, less boilerplate), but you still need humans to define what to build, judge quality, and own production systems. The developers who get the biggest leverage from AI are the ones who learn to use it deliberately rather than as a smarter search bar." --- If you've been using AI the way most developers use it, pasting an error into a chat window, skimming the half-useful answer, and going back to Stack Overflow when it doesn't pan out, you're using maybe five percent of what's actually available to you. The developers who've quietly moved up to a different speed tier aren't running on some secret model you don't have access to. They've just collected a handful of specific, non-obvious techniques that turn AI from a slightly smarter search bar into an actual extension of how they work. diff --git a/src/routes/blog/post/7-steps-to-achieve-gdpr-compliance-for-startups/+page.markdoc b/src/routes/blog/post/7-steps-to-achieve-gdpr-compliance-for-startups/+page.markdoc index 20b230bfcb2..cbe6fe825e5 100644 --- a/src/routes/blog/post/7-steps-to-achieve-gdpr-compliance-for-startups/+page.markdoc +++ b/src/routes/blog/post/7-steps-to-achieve-gdpr-compliance-for-startups/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: aditya-oberai category: security featured: false +faqs: + - question: "Does my startup need to be GDPR compliant if I am not based in the EU?" + answer: "Yes, GDPR applies to any organization that processes personal data of EU residents, regardless of where the company is based. If you have a single EU user signing up to your app, you are within scope. Fines can be the larger of EUR 20 million or 4% of global annual turnover." + - question: "What counts as personal data under GDPR?" + answer: "Any data that can directly or indirectly identify a person: names, emails, phone numbers, IP addresses, device identifiers, location data, and behavioral data tied to a user. Pseudonymized data is still personal data if it can be re-identified. Truly anonymous data falls outside GDPR." + - question: "How does Appwrite help with GDPR compliance?" + answer: "Appwrite hashes passwords with Argon2, encrypts data in transit over TLS, supports MFA on [Appwrite Auth](/docs/products/auth), and lets you delete user accounts (and their data) on request. Appwrite Cloud also offers EU regions so personal data of EU users can stay within the EU, simplifying data transfer compliance." + - question: "What is the right to be forgotten and how do I implement it?" + answer: "Users have the right to request deletion of their personal data. In Appwrite, you can delete a user via the Users API, which removes their identity record. You still need to delete documents, files, and other user-tied records in your collections and buckets, which you can do in an [Appwrite Function](/docs/products/functions) triggered by the user deletion event." + - question: "Do I need a Data Processing Agreement (DPA) with my backend provider?" + answer: "Yes. If your backend provider processes personal data on your behalf, GDPR requires a DPA. Appwrite Cloud customers can request a DPA covering Appwrite's role as a data processor. Self-hosted Appwrite means you are processor and controller for your own data." + - question: "How quickly must I report a data breach under GDPR?" + answer: "You must notify the relevant supervisory authority within 72 hours of becoming aware of a breach that risks user rights. If the breach is high-risk, you also need to inform affected users directly, in clear language. Have a written incident response plan ready before you ever need one." --- As your startup scales and collects more user data, especially if your audience includes users from the European Union, you need to ensure your application complies with GDPR ([General Data Protection Regulation](https://gdpr-info.eu/issues/personal-data/)). Not just because non-compliance could result in hefty fines, but because respecting user privacy builds long-term trust, which is important for sustainable growth. diff --git a/src/routes/blog/post/How-to-put-privacy-first/+page.markdoc b/src/routes/blog/post/How-to-put-privacy-first/+page.markdoc index c5888165b57..e50e53cca5d 100644 --- a/src/routes/blog/post/How-to-put-privacy-first/+page.markdoc +++ b/src/routes/blog/post/How-to-put-privacy-first/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/privacy.avif timeToRead: 9 author: laura-du-ry category: security +faqs: + - question: "What is the difference between pixels, tags, and cookies?" + answer: "Tags are snippets of code (often managed via Google Tag Manager) that fire actions like analytics events. Pixels are tiny transparent images embedded in a page that report visit data back to a vendor. Cookies are key/value pairs the browser stores, used either by the site (first-party) or by third parties for cross-site tracking." + - question: "Which marketing trackers did Appwrite remove?" + answer: "Appwrite removed the HubSpot tag, Google Tag Manager, Twitter Pixel, Facebook Pixel, Google Ads Pixel, and Google Analytics Pixel from its website and Cloud Console. Only strictly necessary cookies and a privacy-friendly product analytics option remain, both opt-in via the consent banner." + - question: "Can a growth team still measure success without ad pixels?" + answer: "Yes. UTM links, privacy-friendly analytics like Plausible, first-party data (signups, account activity), content performance metrics (page views, time on page), and search visibility data all provide enough signal to run growth. You lose cross-site retargeting and granular ad attribution, but most decisions don't require those." + - question: "What privacy-friendly analytics tools does Appwrite use?" + answer: "Appwrite uses Plausible for website and Cloud Console analytics. Plausible is open source and does not use cookies or collect personal data, which keeps the analytics under the consent threshold in most jurisdictions while still surfacing the metrics growth teams care about." + - question: "Why does removing trackers also improve site performance and security?" + answer: "Third-party scripts add network requests, JavaScript execution, and external connections to your pages. Removing them cuts load time (Akamai found a 2-second delay can increase bounce by 103%) and reduces the attack surface, since each third-party script is code you don't fully control running on your domain." + - question: "Is Appwrite GDPR compliant?" + answer: "Yes. Appwrite Cloud is GDPR compliant. Removing marketing pixels and switching to first-party, privacy-friendly tooling is part of how Appwrite maintains that posture, alongside encrypted credential storage and clear data handling commitments." --- With our recent announcement of GDPR compliance, we took a big step in becoming a privacy-first organization. But we didn’t want to stop here. We wanted to take it further than just ticking the privacy boxes. We wanted to act as a party that values your personal data, so we needed to take action and move to privacy-friendly analytics. This led to removing most of the tags, pixels, and cookies on our website and the Appwrite Console. In this blog, we dive deeper into what we removed, how this affected our growth strategy, and, most of all, what we, as a community, gained from this decision. diff --git a/src/routes/blog/post/a-recap-of-init/+page.markdoc b/src/routes/blog/post/a-recap-of-init/+page.markdoc index 13bcf65645b..821352f826f 100644 --- a/src/routes/blog/post/a-recap-of-init/+page.markdoc +++ b/src/routes/blog/post/a-recap-of-init/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 12 author: laura-du-ry category: init featured: false +faqs: + - question: "What is Appwrite Init?" + answer: "Init is Appwrite's launch week event where the team ships new products and features daily, hosts community Discord sessions, and gives away swag. Think of it as a focused, week-long product showcase paired with community programming." + - question: "What did Appwrite announce during this Init?" + answer: "Headline launches included [Messaging](/docs/products/messaging) (push notifications, email, and SMS), improved server-side rendering support, and other product updates rolled out across the week. Each announcement came with a video, blog post, and Discord deep-dive." + - question: "What is Appwrite Messaging?" + answer: "Messaging is Appwrite's built-in service for sending push notifications, transactional emails, and SMS to your users. It supports topics, subscriber management, and integrations with providers like Twilio. See [Appwrite Messaging](/docs/products/messaging) for the full reference." + - question: "Does Appwrite support server-side rendering?" + answer: "Yes. Appwrite supports SSR across major frameworks (Next.js, SvelteKit, Nuxt, and others), with cookie-based sessions and SDK methods that work cleanly in server contexts. The improvements shipped during Init made SSR auth flows simpler to wire up." + - question: "Will there be another Appwrite Init?" + answer: "Yes. Init is recurring, with new product launches scheduled for future events. Watch the Appwrite blog and Discord for announcements of the next one." + - question: "How can I participate in the Appwrite community?" + answer: "Join the [Appwrite Discord](https://appwrite.io/discord) to attend community sessions, ask questions, and get early looks at new features. You can also follow Appwrite on social media and contribute on GitHub if you want to help build the platform." --- Init has come to an end, and we’re happy how all of you showed up and made it an amazing week filled with product announcements, events, content, celebrations, a release, and most of all, community fun! diff --git a/src/routes/blog/post/accessibility-in-pink-design/+page.markdoc b/src/routes/blog/post/accessibility-in-pink-design/+page.markdoc index 5805fed856c..cfb20abb4f3 100644 --- a/src/routes/blog/post/accessibility-in-pink-design/+page.markdoc +++ b/src/routes/blog/post/accessibility-in-pink-design/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/accessibility-in-pink-design/cover.avif timeToRead: 3 author: arman category: accessibility, design +faqs: + - question: "What is Pink Design?" + answer: "Pink Design is Appwrite's open-source UI library and design system, used to build the Appwrite Console and available for anyone to use in their own products. It targets WCAG AA accessibility, the recommended baseline for most products." + - question: "What WCAG conformance level should I aim for?" + answer: "WCAG AA is the standard most teams target and what regulators (like the European Accessibility Act) typically expect. AAA is stricter but harder to maintain. Aim for AA across your product, then push toward AAA for high-impact flows like signup and checkout." + - question: "Why use REM instead of pixels for font size?" + answer: "Pixels are absolute and ignore the user's browser font-size preference, which users with low vision often increase. REM is relative to the root font size, so increasing the browser default scales your whole app proportionally. It is a one-line change with a meaningful accessibility impact." + - question: "How do I respect a user's reduce-motion preference?" + answer: "Check the `prefers-reduced-motion` media query in CSS or JavaScript and skip or shorten animations when it is set. Some users get vertigo or seizures from motion, so this is not optional for accessible apps. The setting is exposed by the OS, so your app inherits it automatically once you support the query." + - question: "Why should I avoid relying on color alone to convey information?" + answer: "Around 1 in 12 men have some form of red-green color blindness, and others have low contrast vision. Use icons, labels, or shape changes alongside color so the meaning still comes through. Appwrite uses red/orange/green/blue for error, warning, success, and info, but always pairs them with text or icons." + - question: "Is the Appwrite Console accessible?" + answer: "Appwrite's Console is built on Pink Design, which targets WCAG AA, including high-contrast colors, full keyboard navigation, REM-based font sizes, and reduce-motion support. The team continues to improve coverage in line with the underlying design system." --- When creating products, accessibility can be an afterthought. Understandably, we want to ship our products fast and deliver value to our users. We might think that accessibility is needed for edge cases and therefore not prioritize it. It's good to be reminded that the World Health Organization (WHO) estimates that 16% of the global population has some form of disability (Dec 2022).Ignoring such a significant part of your user base simply doesn't create a good user experience.Creating accessible products is everyone's responsibility. Designers, developers, content authors, and whoever else is involved in creating products should do their part and strive towards achieving a better experience for everyone. diff --git a/src/routes/blog/post/add-a-search-function-to-your-app/+page.markdoc b/src/routes/blog/post/add-a-search-function-to-your-app/+page.markdoc index d14ed6f93a8..4093fa2388d 100644 --- a/src/routes/blog/post/add-a-search-function-to-your-app/+page.markdoc +++ b/src/routes/blog/post/add-a-search-function-to-your-app/+page.markdoc @@ -8,6 +8,19 @@ date: 2023-11-17 author: haimantika-mitra category: tutorial featured: false +faqs: + - question: "Why use Meilisearch instead of Appwrite's built-in queries?" + answer: "[Appwrite Databases](/docs/products/databases) supports basic queries, including a `search` operator on indexed string columns, which is sufficient for many apps. Meilisearch adds typo tolerance, ranking, faceted filtering, and instant search-as-you-type that is a step up for product search or large content catalogues. Use the built-in queries until you hit limits, then introduce Meilisearch." + - question: "What is an Appwrite Function template?" + answer: "Function templates are pre-built [Appwrite Functions](/docs/products/functions) you can deploy in a few clicks. They cover common integrations like Stripe, OpenAI, Meilisearch, and more. You configure the required environment variables, connect a Git repo, and the function is deployed and ready to call." + - question: "How does the Meilisearch sync function stay in sync with new documents?" + answer: "By default the template syncs documents on demand when the function runs. To keep the index up to date automatically, configure the function to trigger on database events (document.create, document.update, document.delete) so every change is mirrored to Meilisearch in near real time." + - question: "Do I need to self-host Meilisearch to use this template?" + answer: "No. Meilisearch Cloud is the easiest option and the template works against either Cloud or a self-hosted instance. You just need a Meilisearch endpoint URL, an admin API key for indexing, and a search key for client-side queries." + - question: "Can I run the Meilisearch sync function on a schedule?" + answer: "Yes. Appwrite Functions support CRON schedules, so you can run the sync every 5 minutes, every hour, or whatever cadence your use case needs. For most production cases, combining a periodic full sync with event-driven incremental updates gives you both consistency and freshness." + - question: "Is there a way to search documents directly in Appwrite without Meilisearch?" + answer: "Yes. Appwrite Databases supports a `Query.search` operator on string attributes that have a fulltext index. It is enough for simple search UIs. Meilisearch (or another dedicated search engine) is the right move once you need typo tolerance, custom ranking, or faceted filters." --- Function templates are pre-built Appwrite Functions that can be integrated into your Appwrite project with just a few clicks. Using them, you can easily incorporate new features and integrations into your app without writing additional code or managing infrastructure. diff --git a/src/routes/blog/post/add-figma-oauth2-appwrite/+page.markdoc b/src/routes/blog/post/add-figma-oauth2-appwrite/+page.markdoc index 548d264705b..002cf793628 100644 --- a/src/routes/blog/post/add-figma-oauth2-appwrite/+page.markdoc +++ b/src/routes/blog/post/add-figma-oauth2-appwrite/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: ebenezer-don category: tutorial featured: false +faqs: + - question: "Does Appwrite support OAuth2 login with Figma out of the box?" + answer: "Yes. Figma is one of the OAuth2 providers built into [Appwrite Auth](/docs/products/auth/oauth2). You register an OAuth app on the Figma developer portal, paste the Client ID and Secret into the Appwrite console, copy the redirect URL back to Figma, and the integration is done." + - question: "Do I need server-side code to use Figma OAuth2 with Appwrite?" + answer: "No. Appwrite's SDKs handle the OAuth2 redirect, code exchange, and session creation. You call `account.createOAuth2Session({ provider: OAuthProvider.Figma, success, failure })` from your client, and the user lands back in your app with an active Appwrite session." + - question: "How do I call the Figma API after a user logs in?" + answer: "Appwrite stores the OAuth access token and refresh token alongside the user's session. You can retrieve them via the SDK and use the access token to call Figma's REST API on behalf of the user. Appwrite can also refresh expired access tokens for you using the stored refresh token." + - question: "What scopes should I request from Figma?" + answer: "Request only the scopes your app actually uses. For reading files, `files:read` is enough. Asking for more permissions than you need slows down the consent screen and risks rejection during Figma's app review for sensitive scopes." + - question: "Can I combine Figma OAuth2 with other auth methods?" + answer: "Yes. A single Appwrite user can have multiple identities linked, so a user who signed up with email/password can later add Figma OAuth2, or vice versa. This is useful when you want Figma as an optional connection rather than a primary login method." + - question: "What other OAuth2 providers does Appwrite support?" + answer: "Appwrite supports over 30 OAuth2 providers out of the box, including Google, GitHub, Apple, Microsoft, Discord, Slack, Spotify, and more. The full list is in the [OAuth2 docs](/docs/products/auth/oauth2). The setup steps are the same for each: create an app on the provider, paste the credentials into Appwrite, and you are done." --- Figma's API opens up some interesting doors, such as automating workflows, syncing design tokens, and bringing live design previews into your app. But before you can do any of that, your users need to connect their Figma account. If you're using Appwrite for authentication, this process is simpler than you might expect. In this guide, we'll walk through everything you need to do to support Figma OAuth2 login inside your Appwrite project. diff --git a/src/routes/blog/post/adding-url-shortener-function/+page.markdoc b/src/routes/blog/post/adding-url-shortener-function/+page.markdoc index f54ee470273..4adfdecbf24 100644 --- a/src/routes/blog/post/adding-url-shortener-function/+page.markdoc +++ b/src/routes/blog/post/adding-url-shortener-function/+page.markdoc @@ -8,6 +8,19 @@ date: 2023-11-08 author: haimantika-mitra category: tutorial featured: false +faqs: + - question: "What does the URL Shortener function template do?" + answer: "It deploys an [Appwrite Function](/docs/products/functions) that maps a long URL to a short alias, stores the mapping, and redirects on access. You configure `APPWRITE_API_KEY` and `SHORT_BASE_URL`, connect a Git repo, and you have a working URL shortener you can extend." + - question: "How do I create a custom domain for my URL shortener function?" + answer: "Use the Domains tab of the function to attach a custom domain like `s.example.com`. Once configured, all generated short URLs will use that domain instead of the default Appwrite Function URL, which is what most production shorteners need." + - question: "Can I add analytics or click tracking?" + answer: "Yes. Extend the template so that on each redirect it writes a row to a `clicks` collection with the timestamp, IP, referrer, and user agent. You can then query that collection (or wire it into a dashboard) for click-through rates and geographic data. The original function template intentionally keeps this minimal." + - question: "Where are the shortened URLs stored?" + answer: "The function template stores them as documents in an [Appwrite Databases](/docs/products/databases) collection in your project. That gives you a query-able list of all generated short URLs with their target destinations and creation timestamps." + - question: "Is the URL shortener function open source?" + answer: "Yes, the template source code is available in the [Appwrite templates repo](https://github.com/appwrite/templates/tree/main/node/url-shortener). You can fork it, customize the slug generator, add authentication, or rewrite it in another runtime." + - question: "Can I limit who can create short URLs?" + answer: "Yes. By default the function endpoint is open, but you can require an Appwrite session by reading the user context from the function execution. Combine that with permission rules on the underlying collection so only authenticated users can create entries." --- Appwrite Functions are user-defined functions that can start small and scale big, deploying automatically from source control. With the introduction of function templates, you can quickly add new integrations into your app without writing additional code or managing infrastructure. Function templates are pre-built Appwrite Functions that can be integrated into your Appwrite project with just a few clicks. diff --git a/src/routes/blog/post/agentic-ai-vs-generative-ai/+page.markdoc b/src/routes/blog/post/agentic-ai-vs-generative-ai/+page.markdoc index ed9d17bab49..d785fae0471 100644 --- a/src/routes/blog/post/agentic-ai-vs-generative-ai/+page.markdoc +++ b/src/routes/blog/post/agentic-ai-vs-generative-ai/+page.markdoc @@ -9,6 +9,19 @@ author: veeresh-mulge callToAction: true unlisted: true category: tutorial +faqs: + - question: "What is the core difference between generative AI and agentic AI?" + answer: "Generative AI predicts and produces content (text, images, code) in response to a prompt and then stops. Agentic AI uses a generative model as a reasoning engine, but adds memory, tools, planning, and feedback loops so it can pursue a goal across multiple steps without explicit prompting at each one." + - question: "Is agentic AI just generative AI in a loop?" + answer: "Partly, but not just any loop. Agentic systems combine an LLM with explicit memory, tools (APIs, browsers, databases), a planner that decomposes goals into steps, and an evaluator that decides whether to continue, adjust, or stop. Without those scaffolds, looping an LLM degenerates into noise." + - question: "What role does MCP play in agentic AI?" + answer: "[Model Context Protocol](/blog/post/what-is-mcp) (MCP) is a standard that lets agents connect to external tools, APIs, and data sources in a consistent way. Without MCP, every tool needs a custom integration. With it, an agent can use the same wire protocol to talk to GitHub, Appwrite, Stripe, and your internal services." + - question: "How do I expose an Appwrite project to an AI agent?" + answer: "Use the [Appwrite MCP server](/docs/tooling/mcp/api). It exposes Appwrite Auth, Databases, Storage, and Functions as tools an MCP-compatible agent can call. The agent can then create users, query collections, upload files, or trigger functions as part of its plan." + - question: "Do I need agentic AI for my product, or is generative AI enough?" + answer: "If your use case is summarization, content drafting, or chat, generative AI is usually enough. Reach for agentic systems when your task requires multiple steps, calling external systems, or adapting based on intermediate results, e.g., a research assistant, a code-writing agent, or an ops automation tool." + - question: "Are agentic AI systems reliable enough for production?" + answer: "They are improving fast but still need guardrails. For production, scope the agent's tools narrowly, require human approval for high-impact actions, log every step for audit, and run evaluations against known scenarios. Agentic systems running with full access and no guardrails are not yet production-ready for most teams." --- Let's be honest, the term AI has become overloaded. These days, no keynote or launch event goes by without someone mentioning it. diff --git a/src/routes/blog/post/ai-agent-startup-tips/+page.markdoc b/src/routes/blog/post/ai-agent-startup-tips/+page.markdoc index 92eb7e13255..3fbc646e7f5 100644 --- a/src/routes/blog/post/ai-agent-startup-tips/+page.markdoc +++ b/src/routes/blog/post/ai-agent-startup-tips/+page.markdoc @@ -10,6 +10,19 @@ callToAction: true unlisted: true category: startup call_to_action: true +faqs: + - question: "What is an AI agent?" + answer: "An AI agent is a program built around an LLM that can plan, decide, and execute actions to achieve a goal, rather than just generating content from a single prompt. It typically has memory, access to tools (APIs, databases), and the ability to loop until the task is done." + - question: "What is a good first AI agent use case for a startup?" + answer: "Pick a repetitive, well-defined workflow where the cost of an occasional mistake is low: support triage, code review, lead enrichment, document classification, or report generation. Avoid open-ended use cases (\"replace my analyst\") in v1, since those are where reliability problems compound." + - question: "How do I host the backend for an AI agent?" + answer: "Most agents need three things: a database for memory and state, file storage for inputs and outputs, and serverless functions for executing tools. [Appwrite](/docs/products/databases) provides all three under one API, so you do not stitch together three vendors. For the LLM itself, call Anthropic, OpenAI, or another provider from a function." + - question: "How do AI agents handle feedback and self-correction?" + answer: "Through feedback loops: the agent generates a step, executes it, evaluates the result (against tests, validators, or another LLM call), and decides whether to retry, adjust, or move on. For coding agents, automated tests are the gold standard signal. For other domains, you often need custom evaluators." + - question: "What metrics should I track for an AI agent product?" + answer: "Track task success rate, average steps per task, latency, cost per task, and human-intervention rate. Add domain-specific metrics (test pass rate for coding agents, escalation rate for support agents). Without these, you cannot tell if a model upgrade or prompt change made things better or worse." + - question: "Are there resources for startups building AI agents on Appwrite?" + answer: "Yes. The [Appwrite Startups program](https://appwrite.io/startups) offers cloud credits, priority support, and partner perks for early-stage startups. Combined with [Appwrite Functions](/docs/products/functions) for running agent steps and Databases for state, it covers most of the backend needs for an AI agent product." --- With AI advancing at a rapid pace, 2025 is shaping up to be the year of AI agents. We're moving beyond basic chatbots and entering a new era where AI can autonomously solve complex tasks. So, in the near future, fully autonomous AI agents can scope out a project and complete it with all the necessary tools they need and with no help from human partners. diff --git a/src/routes/blog/post/ai-crystal-ball/+page.markdoc b/src/routes/blog/post/ai-crystal-ball/+page.markdoc index 57b38b52920..69377ac672d 100644 --- a/src/routes/blog/post/ai-crystal-ball/+page.markdoc +++ b/src/routes/blog/post/ai-crystal-ball/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/ai-crystal-ball/cover.avif timeToRead: 9 author: aditya-oberai category: tutorial +faqs: + - question: "How does the AI Crystal Ball app work?" + answer: "It signs the user in with GitHub OAuth via [Appwrite Auth](/docs/products/auth), fetches their public GitHub data (followers, repos, top languages), sends that context to GPT-4 with a prompt asking for a developer destiny, and stores the result in Appwrite Databases so it can be shared via a public link." + - question: "What permissions does the GitHub OAuth app need?" + answer: "The Crystal Ball only needs the user's public profile data, so default GitHub OAuth scopes are enough. There is no need to request `repo` or other write scopes. Always ask for the minimum scope your feature requires to keep the consent screen clean and reduce security risk." + - question: "Can I use a different LLM provider instead of OpenAI?" + answer: "Yes. The OpenAI call is just an HTTP request from an Appwrite Function, so you can swap in Anthropic's Claude, Google Gemini, or any other provider by changing the SDK and prompt. The Appwrite side (auth, database, storage) does not change." + - question: "How do I prevent abuse of an OpenAI API key on the frontend?" + answer: "Never call OpenAI directly from the client. Instead, expose your own endpoint via an [Appwrite Function](/docs/products/functions) that holds the API key server-side, validates the authenticated user, and applies rate limits. The client only ever talks to your function, not to OpenAI." + - question: "How do permissions work for the shareable destiny link?" + answer: "The `destiny` collection in the post grants `read` permission to `Any` and `create` permission to `Users`, so any anonymous visitor can read a destiny by document ID but only logged-in users can create new ones. This is the standard Appwrite permission pattern for share links." + - question: "Can I build this entirely without writing my own backend?" + answer: "Largely yes. [Appwrite Functions](/docs/products/functions) hosts the OpenAI call, [Appwrite Databases](/docs/products/databases) stores the data, and [Appwrite Auth](/docs/products/auth) handles GitHub OAuth. The only piece you write is the SvelteKit frontend and the single function that talks to GPT-4." --- Have you ever wondered what you would be doing as a developer 5 years from now? I, for sure, have, which is why recently I developed an AI Crystal Ball to use information from my GitHub account and predict what my destiny as a developer would look like. This project picked up a lot more attention than anticipated as well as a number of requests asking how this project was developed. diff --git a/src/routes/blog/post/ai-vibe-coding-insights/+page.markdoc b/src/routes/blog/post/ai-vibe-coding-insights/+page.markdoc index 535f152978d..4e84d953086 100644 --- a/src/routes/blog/post/ai-vibe-coding-insights/+page.markdoc +++ b/src/routes/blog/post/ai-vibe-coding-insights/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/ai-vibe-coding-insights/cover.avif timeToRead: 10 author: laura-du-ry category: tutorial +faqs: + - question: "What is vibe coding?" + answer: "Vibe coding is a term coined by Andrej Karpathy for building apps by describing intent to AI tools and letting them write most of the code, rather than writing it line by line yourself. It is fast for prototyping but pairs best with a backend like Appwrite that handles the bits you would not want an LLM to reinvent (auth, data, storage)." + - question: "Which AI coding tools do developers use most?" + answer: "Survey responses from the Appwrite community show ChatGPT, GitHub Copilot, Claude, and Cursor as the most-used tools, with Warp AI CLI gaining traction in the terminal. Most developers combine two or three of these depending on the task: in-editor completions, longer reasoning, and quick one-off questions." + - question: "How can I use AI to build with Appwrite?" + answer: "Use the [Appwrite MCP server](/docs/tooling/mcp/api) to give AI assistants direct access to your project. They can create collections, manage users, deploy functions, and run queries through natural language. The [Appwrite plugin for Claude Code](/blog/post/announcing-appwrite-claude-code-plugin) bundles this together for Claude users." + - question: "Should I worry about security when vibe coding?" + answer: "Yes. Vibe-coded apps often skip auth, permissions, and rate limiting because the AI does not bring them up by default. Read the [backend checklist for vibe-coded apps](/blog/post/backend-checklist-vibe-coded-apps) before you ship, and keep API keys server-side in an [Appwrite Function](/docs/products/functions) rather than the browser." + - question: "Is vibe coding suitable for production apps?" + answer: "It is fine for prototypes and internal tools. For production, treat the AI-generated code like any other: review it, add tests, lock down permissions, and own the architecture decisions yourself. The leverage comes from speeding up the build, not skipping the engineering discipline." + - question: "Who is most likely to use vibe coding tools?" + answer: "Survey data shows early-career developers (1 to 3 years of experience) are the most active users of both AI assistants and vibe coding tools. Senior developers are more selective but still curious; the gap usually closes as tool reliability improves and trust builds up." --- The way developers write code is changing fast. What used to be a carefully structured process is now often about describing what you want and letting AI handle the details. diff --git a/src/routes/blog/post/announcing-api-keys-api/+page.markdoc b/src/routes/blog/post/announcing-api-keys-api/+page.markdoc index fc869fc0121..9cff32cd33f 100644 --- a/src/routes/blog/post/announcing-api-keys-api/+page.markdoc +++ b/src/routes/blog/post/announcing-api-keys-api/+page.markdoc @@ -9,6 +9,19 @@ author: matej-baco category: announcement featured: false callToAction: true +faqs: + - question: "What is the Appwrite Keys API?" + answer: "It is a set of endpoints on the `Project` service that lets you create, list, update, and delete API keys programmatically from any Appwrite server SDK. Previously, API keys could only be managed through the Appwrite Console, which made automation and multi-tenant key provisioning awkward." + - question: "What scopes do I need to manage API keys?" + answer: "Two new scopes: `keys.read` for listing and retrieving keys, and `keys.write` for creating, updating, and deleting keys. These are sensitive: a key with `keys.write` can mint another key with any scope, effectively giving full access to the project. Only assign them in trusted environments and never use them client-side." + - question: "What workflows does the Keys API unlock?" + answer: "Common patterns include CI/CD pipelines provisioning keys per deployment environment, multi-tenant platforms creating isolated keys per customer, automated team onboarding, and zero-downtime key rotation (create the new key, swap credentials, delete the old one). All of this is now scriptable." + - question: "Can I set an expiration date on a key?" + answer: "Yes. Pass an ISO 8601 timestamp in the `expire` field when calling `project.createKey`. Once that time passes, the key stops working automatically. Setting expirations on every key is a good default for short-lived credentials in CI and customer-facing tenants." + - question: "Where can I find the list of available scopes?" + answer: "The full scope list is in the [API key scopes documentation](/docs/advanced/platform/api-keys#scopes). The server SDKs also ship a `Scopes` enum so you can reference them by constant (e.g., `Scopes.DatabasesRead`) instead of typing strings." + - question: "How is the Keys API different from session-based auth?" + answer: "Sessions identify end users of your app via [Appwrite Auth](/docs/products/auth), while API keys identify trusted backend services that act on behalf of the project. The Keys API itself uses an existing API key with `keys.write` scope to create new keys, so it is strictly a server-to-server flow." --- Managing API keys has always required navigating to the Appwrite Console, selecting scopes, and manually creating each key. For a single project, that works. For teams managing multiple environments, onboarding new services, or provisioning keys as part of automated pipelines, it becomes a bottleneck. diff --git a/src/routes/blog/post/announcing-appwrite-arena/+page.markdoc b/src/routes/blog/post/announcing-appwrite-arena/+page.markdoc index f8f01fde715..43974c38dc4 100644 --- a/src/routes/blog/post/announcing-appwrite-arena/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-arena/+page.markdoc @@ -9,6 +9,19 @@ author: matej-baco category: announcement featured: true callToAction: true +faqs: + - question: "What is Appwrite Arena?" + answer: "Appwrite Arena is an open-source benchmark that measures how well large language models understand Appwrite. It tests models on 191 questions across 9 service categories (Auth, Databases, Functions, Storage, Sites, Messaging, Realtime, CLI, and Foundation), using both multiple-choice and open-ended scoring." + - question: "How is Arena different from generic LLM coding benchmarks?" + answer: "Generic benchmarks measure broad coding ability. Arena measures Appwrite-specific knowledge: SDK method names, API patterns, service configuration, and correct usage. A model can ace HumanEval and still hallucinate Appwrite API calls, which is why a dedicated benchmark matters when you build on Appwrite." + - question: "What are Skills and how do they affect benchmark scores?" + answer: "[Appwrite Skills](/docs/tooling/skills) are Markdown files containing up-to-date SDK and API context that AI agents can load on demand. Arena tests models both with and without Skills, so you can see how much each model improves with the right context. Some models gain dramatically, others barely move." + - question: "Which model currently scores best on Arena?" + answer: "Results shift as new models ship and we rerun the benchmark. At launch, GPT-5.4 led with Skills enabled and Claude Opus 4.6 led without Skills. Check [arena.appwrite.io](https://arena.appwrite.io) for the current leaderboard, since the rankings change with every new model release." + - question: "Can I contribute to Arena?" + answer: "Yes. Arena is fully open source on [GitHub](https://github.com/appwrite/arena). You can open PRs to add new questions, improve scoring rubrics, fix bugs, or include new models. Reference answers and scoring methodology are all in the repo." + - question: "How can Arena help me pick an AI model for my Appwrite project?" + answer: "Use it to compare cost, latency, and Appwrite accuracy side by side. A top-tier model might be the obvious pick on raw scores, but Arena also surfaces models that are 50% cheaper and only a few points behind, which is often the better real-world trade-off." --- AI coding agents are everywhere. They write your functions, scaffold your database schemas, and wire up authentication flows. But here's the question nobody was answering: **which AI model actually knows Appwrite best?** diff --git a/src/routes/blog/post/announcing-appwrite-claude-code-plugin/+page.markdoc b/src/routes/blog/post/announcing-appwrite-claude-code-plugin/+page.markdoc index f9504fedd8e..dddeaddc984 100644 --- a/src/routes/blog/post/announcing-appwrite-claude-code-plugin/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-claude-code-plugin/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: atharva category: announcement featured: false +faqs: + - question: "What does the Appwrite plugin for Claude Code include?" + answer: "Three things in one install: the Appwrite API MCP server (pre-registered, configured through the plugins menu), the Appwrite Docs MCP server (no credentials needed, for live documentation lookup), and eleven agent skills covering the Appwrite CLI and every major SDK (TypeScript, Dart, .NET, Go, Kotlin, PHP, Python, Ruby, Rust, Swift)." + - question: "How do I install the Appwrite plugin for Claude Code?" + answer: "Run `claude plugins marketplace add appwrite/claude-plugin` followed by `claude plugins install appwrite@appwrite`. Then open `/plugins` in Claude Code, go to the Installed tab, configure your Appwrite endpoint, project ID, and API key, and run `/reload-plugins` to apply changes to your current session." + - question: "Do I need both MCP servers and Skills, or just one?" + answer: "They complement each other. MCP servers let Claude Code take live actions against your project (create users, run queries, deploy functions). Skills give the agent up-to-date SDK reference so the code it writes uses current Appwrite APIs instead of whatever was in its training data. The plugin bundles both." + - question: "Is the Appwrite plugin for Claude Code open source?" + answer: "Yes. The plugin source is on GitHub at [appwrite/claude-plugin](https://github.com/appwrite/claude-plugin). You can audit the MCP server configuration, fork it, or use it as a reference for building your own Claude Code plugin against another service." + - question: "Can I use the same MCP servers without Claude Code?" + answer: "Yes. The [Appwrite API MCP server](/docs/tooling/mcp/api) and Docs MCP server are independent of Claude Code. Any MCP-compatible client (Cursor, Claude Desktop, VS Code, etc.) can connect to them. The plugin is just a convenience layer that pre-registers them with Claude Code's plugin system." + - question: "Where can I learn more about Appwrite Skills?" + answer: "Check the [Appwrite Skills documentation](/docs/tooling/ai/skills), which explains what skills are, how the AI agent loads them, and how to use them with other AI tools beyond Claude Code. The plugin bundles eleven of these skills out of the box." --- Claude Code is built around a specific workflow: a terminal-resident agent that reads, writes, and runs code against your project. Using it with Appwrite has worked for a while, but getting there meant hand-registering MCP servers with `claude mcp add-json`, pasting your project credentials into a JSON payload, and relying on whatever SDK knowledge the underlying model was trained on. diff --git a/src/routes/blog/post/announcing-appwrite-cursor-plugin/+page.markdoc b/src/routes/blog/post/announcing-appwrite-cursor-plugin/+page.markdoc index 85a06ff7d20..ab136804197 100644 --- a/src/routes/blog/post/announcing-appwrite-cursor-plugin/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-cursor-plugin/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: atharva category: announcement featured: false +faqs: + - question: "What is the Appwrite plugin for Cursor?" + answer: "It is a single install on the Cursor Marketplace that bundles 10 [Appwrite Skills](/docs/tooling/ai/skills), the Appwrite API and Docs MCP servers, and CLI commands for deploying Functions and Sites. Once added, Cursor's agents have everything they need to generate accurate Appwrite code and interact with your project without separate configuration." + - question: "Do I still need to configure MCP servers manually after installing the plugin?" + answer: "No. The plugin includes both the Appwrite API MCP server and the Appwrite Docs MCP server out of the box, so you do not have to edit JSON config files. Sign in on the Cursor Marketplace, click **Add to Cursor**, and the servers are wired up automatically." + - question: "Which Appwrite SDKs do the bundled skills cover?" + answer: "The plugin ships skills for the Appwrite CLI and the TypeScript, Dart, .NET, Go, Kotlin, PHP, Python, Ruby, and Swift SDKs. Cursor's agents load the right skill based on the language you are working in, so you get correct method signatures without specifying one explicitly." + - question: "What is the difference between Appwrite Skills and the Cursor plugin?" + answer: "[Skills](/docs/tooling/ai/skills) are language-specific Markdown files that teach AI agents how to write Appwrite code, and they work with any compatible agent. The Cursor plugin is a Cursor-specific bundle that ships those skills plus MCP servers and deployment commands so you do not have to install each piece separately." + - question: "Can I use the Appwrite plugin with self-hosted Appwrite?" + answer: "Yes. The MCP servers in the plugin accept a custom endpoint, so you can point them at a self-hosted Appwrite instance instead of Appwrite Cloud. You will need an API key from your self-hosted project for the API MCP server to authenticate." + - question: "How do MCP servers differ from agent skills?" + answer: "MCP servers give the agent runtime access to your Appwrite project so it can create users, query databases, or read docs on demand. Skills give the agent static, curated knowledge about how to write Appwrite code correctly. The plugin includes both because agents need accurate context for code generation and live access for project operations." --- Earlier this year, we launched [Appwrite Skills](/docs/tooling/ai/skills), open-source Markdown files that give AI agents deep, language-specific knowledge of Appwrite SDKs. Skills solved a real problem: agents were generating Appwrite code that looked right but used the wrong method signatures, outdated patterns, or missing parameters. With skills installed, agents generate correct, idiomatic Appwrite code without needing documentation pasted into every prompt. diff --git a/src/routes/blog/post/announcing-appwrite-daily-dot-dev-squad/+page.markdoc b/src/routes/blog/post/announcing-appwrite-daily-dot-dev-squad/+page.markdoc index df3b235ce84..76f2f157e09 100644 --- a/src/routes/blog/post/announcing-appwrite-daily-dot-dev-squad/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-daily-dot-dev-squad/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/announcing-appwrite-daily-dot-dev-squad/daily.dev-squad.avif timeToRead: 3 author: laura-du-ry category: announcement +faqs: + - question: "What is daily.dev?" + answer: "daily.dev is a developer news aggregator that curates articles, tutorials, and updates from across the web into a personalized feed. It is widely used as a way to keep up with frameworks, libraries, and industry trends without manually following dozens of blogs." + - question: "What is a Squad on daily.dev?" + answer: "A Squad is a community space inside daily.dev where developers can share content, ask questions, and discuss topics around a specific project, technology, or interest. Squads can be public or invite-only and are moderated by their owners." + - question: "How do I join the Appwrite Squad?" + answer: "Sign in to daily.dev (or create an account), then search for **Appwrite Squad** or open the direct invite at [apwr.dev/dailydev](https://apwr.dev/dailydev) and click join. Once you are in, you can read curated Appwrite content, share your own posts, and discuss with other members." + - question: "Do I need an Appwrite account to join the Squad?" + answer: "No. Joining the daily.dev Appwrite Squad only requires a daily.dev account. An Appwrite account is only needed if you want to actually build with Appwrite at [cloud.appwrite.io](https://cloud.appwrite.io) or self-host the platform." + - question: "Where else can I engage with the Appwrite community?" + answer: "Outside of daily.dev, the main hubs are the [Appwrite Discord server](https://appwrite.io/discord), the [Appwrite GitHub organization](https://github.com/appwrite), and the [Appwrite blog](/blog). The Squad is most useful as a low-effort way to follow content and discussions in your daily.dev feed." + - question: "Can I share my own Appwrite project or blog post in the Squad?" + answer: "Yes. Public Squads are designed for members to share relevant articles, projects, and resources. Posts are moderated to keep the feed on-topic, so content tied to Appwrite, backend development, or open source is the best fit." --- We already share all of our blogs on the [daily.dev](http://daily.dev) platform, and now we also have a moderated Squad. This will make it easier for you to engage with our content and also share your content with the community. diff --git a/src/routes/blog/post/announcing-appwrite-databases-new-ui/+page.markdoc b/src/routes/blog/post/announcing-appwrite-databases-new-ui/+page.markdoc index 121b24ed5df..473f97220bd 100644 --- a/src/routes/blog/post/announcing-appwrite-databases-new-ui/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-databases-new-ui/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: darshan-pandya category: announcement featured: false +faqs: + - question: "What is TablesDB in Appwrite?" + answer: "TablesDB is the updated naming and API layer for [Appwrite Databases](/docs/products/databases). It maps the familiar relational vocabulary (tables, rows, columns) onto Appwrite's existing data model. The storage engine itself has not changed, only the terminology and the new method names exposed in the SDKs and Console." + - question: "Do I have to migrate my code to the new TablesDB API?" + answer: "No. The old document-based methods like `createDocument` and `listDocuments` continue to work and are fully backwards compatible. They are marked as deprecated and will receive security patches but not new features, so we recommend the TablesDB methods for new projects." + - question: "What is the mapping between the old and new Database terms?" + answer: "Collections become tables, attributes become columns, and documents become rows. Methods follow the same pattern: `createCollection` becomes `createTable`, `createDocument` becomes `createRow`, `listDocuments` becomes `listRows`, and so on. The underlying behavior of each call is unchanged." + - question: "Does the new TablesDB UI replace the existing Databases section in the Console?" + answer: "Yes. The Databases section in the Appwrite Console has been redesigned around the TablesDB UI, with browsing, editing, and managing data built around tables, rows, and columns. Existing projects automatically open in the new UI without any migration step." + - question: "Can I still use Appwrite Databases as a document store?" + answer: "Yes. The rename is purely a terminology and API change, not a switch to a strict relational engine. You can still store flexible row data, use the same query operators, and apply per-row permissions. The relational vocabulary is meant to make the model easier to reason about for developers used to SQL." + - question: "Where can I learn the new TablesDB methods in detail?" + answer: "The [Databases documentation](/docs/products/databases) covers every TablesDB method with examples for each server and client SDK. The deprecated document methods remain documented for reference, but new tutorials and references default to the TablesDB naming." --- As Appwrite has grown, so has the diversity of developers building with it, from document-based systems to others deeply familiar with relational data structures. To make the platform more intuitive and consistent for everyone, we’re evolving how Appwrite Databases is presented and managed. This update also adds the ability to generate dummy data for faster prototyping, and we’re actively working on features like AI-powered suggestions to help you design your structure even faster. diff --git a/src/routes/blog/post/announcing-appwrite-education-program/+page.markdoc b/src/routes/blog/post/announcing-appwrite-education-program/+page.markdoc index 8b064111439..139ffee2bad 100644 --- a/src/routes/blog/post/announcing-appwrite-education-program/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-education-program/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/education-program.avif timeToRead: 4 author: aditya-oberai category: announcement +faqs: + - question: "Who can join the Appwrite Education program?" + answer: "The program is open to students who are verified through the [GitHub Student Developer Pack](https://education.github.com/pack). If you can prove your academic status to GitHub (usually with a .edu email or a school document), you qualify for the Appwrite portion of the pack." + - question: "What do students get with the Appwrite Education program?" + answer: "Verified students get free access to Appwrite Pro for the duration of their studies. Pro includes higher bandwidth, storage, executions, and monthly active user limits than the Free plan, so you can build and ship projects without quickly hitting limits." + - question: "How do I sign up for the Appwrite Education program?" + answer: "First, apply to the GitHub Student Developer Pack and get verified by GitHub Education. Once you are verified, follow the steps on the [Appwrite Education page](https://appwrite.io/education) to claim the Appwrite Pro benefit on your Appwrite Cloud account." + - question: "Does the Education program cover self-hosted Appwrite?" + answer: "Self-hosted Appwrite is already free and open source, so the Education program focuses on Appwrite Cloud, where Pro is normally a paid plan. Students can self-host independently of the program at any time." + - question: "What can I build with Appwrite Pro as a student?" + answer: "Pro removes most of the limits that block side projects from running on the Free plan. Students typically use it to host class projects, hackathon submissions, portfolio apps, and small SaaS prototypes that rely on [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions)." + - question: "What happens to my Pro benefits after I graduate?" + answer: "Education benefits end when your GitHub Education status expires. Your projects remain intact, but your organization is moved back to the Free plan unless you upgrade. You can review your usage on the Console and decide whether to subscribe to Pro at that point." --- We’re excited to announce our newest initiative: the [Appwrite Education](https://appwrite.io/education) program. We’re partnering with GitHub for this new program to contribute to the future education of millions of developers connected to the [GitHub Student Developer Pack](https://education.github.com/pack). diff --git a/src/routes/blog/post/announcing-appwrite-integration-catalog/+page.markdoc b/src/routes/blog/post/announcing-appwrite-integration-catalog/+page.markdoc index 31a33117831..ba23c4cf706 100644 --- a/src/routes/blog/post/announcing-appwrite-integration-catalog/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-integration-catalog/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 12 author: aditya-oberai category: integrations, announcement featured: false +faqs: + - question: "What is the Appwrite Integrations Catalog?" + answer: "The [Integrations Catalog](https://appwrite.io/integrations) is a directory of all the third-party providers that plug into Appwrite, organized by category like Authentication, Messaging, Storage, Payments, and AI. Each entry links to setup docs so you can wire the integration into your project without hunting through the wider documentation." + - question: "Do integrations work with both Appwrite Cloud and self-hosted?" + answer: "Most integrations work in both environments, but a few (for example, S3 as a storage adapter) are most useful in self-hosted deployments. Each integration's documentation page calls out where it applies and what configuration it needs." + - question: "Which messaging providers can I use with Appwrite Messaging?" + answer: "[Appwrite Messaging](/docs/products/messaging) supports providers including Twilio, MSG91, Telesign, Textmagic, and Vonage for SMS, Mailgun, SendGrid, and SMTP for email, and APNs and FCM for push notifications. You configure providers in the Console and then send messages through the unified Messaging API." + - question: "How does the GitHub integration with Appwrite Functions work?" + answer: "The GitHub integration connects an Appwrite project to a GitHub repository so that pushes to a branch automatically deploy your [Function](/docs/products/functions). It also powers function templates: you can pick a template, and Appwrite forks the source repo into your GitHub account before deploying." + - question: "Can I use Stripe or Lemon Squeezy for subscriptions with Appwrite?" + answer: "Yes. Stripe and Lemon Squeezy both have step-by-step integration guides that use [Appwrite Functions](/docs/products/functions) to handle webhooks and a Database collection to store subscription state. Functions sit between your client and the payment provider, so you do not have to run a separate backend." + - question: "How are OAuth2 providers added to a project?" + answer: "OAuth2 providers are configured per project in the Appwrite Console under [Auth](/docs/products/auth). You add your client ID and secret from the provider (Google, GitHub, Discord, and so on), enable the provider, and then call `createOAuth2Session` from a client SDK to start the login flow." --- Our new Integrations Catalog is designed to empower you by providing a seamless way to integrate your favorite tools, libraries, and services with Appwrite, making your development process even more efficient and enjoyable. diff --git a/src/routes/blog/post/announcing-appwrite-is-ccpa-compliant/+page.markdoc b/src/routes/blog/post/announcing-appwrite-is-ccpa-compliant/+page.markdoc index ebec77df0c9..b0deac19d89 100644 --- a/src/routes/blog/post/announcing-appwrite-is-ccpa-compliant/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-is-ccpa-compliant/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/ccpa.avif timeToRead: 6 author: jake-barnby category: security +faqs: + - question: "What is the CCPA?" + answer: "The California Consumer Privacy Act is a state law that gives California residents specific rights over their personal data, including the right to know what is collected, to delete it, to opt out of its sale, and to limit how sensitive information is used. It applies to businesses that meet revenue or data-volume thresholds, even if they are not based in California." + - question: "What does Appwrite being CCPA compliant mean for my project?" + answer: "Appwrite Cloud handles its side of the data processing in line with CCPA requirements, which lets you build apps for California residents without having to negotiate your own infrastructure compliance. You are still responsible for how your own application handles user data, requests, and disclosures." + - question: "How is CCPA different from GDPR?" + answer: "GDPR is a broader EU regulation that applies to all personal data of people in the EU, with stricter consent and data-minimization rules. CCPA is California-specific and centers on transparency, opt-outs, and the sale of personal information. Many companies satisfy both because the overlapping requirements (deletion, access, security) are similar." + - question: "Can I get a Data Processing Agreement (DPA) with Appwrite?" + answer: "Yes. Appwrite's DPA, which references both CCPA and GDPR, is available to sign from your organization settings in the Appwrite Console. You can also execute DPAs with vendors that Appwrite uses, since the same standards flow through to the providers behind Appwrite Cloud." + - question: "Is self-hosted Appwrite CCPA compliant by default?" + answer: "Self-hosted Appwrite gives you the same technical building blocks (encryption, access controls, retention configuration) used in Appwrite Cloud, but compliance for a self-hosted deployment depends entirely on how you operate the infrastructure around it. The CCPA compliance announcement applies specifically to Appwrite Cloud." + - question: "Where can I read more about Appwrite's security and compliance posture?" + answer: "Start with the [Appwrite security documentation](/docs/advanced/security) for an overview, then read the related blog posts on [GDPR compliance](/blog/post/announcing-appwrite-is-gdpr-compliant), [HIPAA compliance](/blog/post/announcing-appwrite-is-hipaa-compliant), and [SOC 2 Type 1](/blog/post/appwrite-is-now-soc-2-type-1-compliant)." --- At Appwrite, we're committed to helping you build secure, privacy-focused applications that meet the highest data protection standards. Now, Appwrite is **fully CCPA-compliant**, providing secure and reliable data management. diff --git a/src/routes/blog/post/announcing-appwrite-is-gdpr-compliant/+page.markdoc b/src/routes/blog/post/announcing-appwrite-is-gdpr-compliant/+page.markdoc index 01420a86b54..8cf563a9b45 100644 --- a/src/routes/blog/post/announcing-appwrite-is-gdpr-compliant/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-is-gdpr-compliant/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/announcing-appwrite-is-gdpr-compliant/GDPR-Announcement.avif timeToRead: 3 author: may-ender category: security, announcement +faqs: + - question: "What is GDPR and who does it apply to?" + answer: "The General Data Protection Regulation is the European Union's data protection law. It applies to any organization that processes the personal data of people in the EU, regardless of where the organization itself is based. GDPR sets requirements around lawful basis, consent, data subject rights, breach notification, and the use of processors and sub-processors." + - question: "What does Appwrite's GDPR compliance cover?" + answer: "Appwrite Cloud meets GDPR requirements for the platform side: how personal data is encrypted, who can access it, how it is backed up, and how breaches are handled. Appwrite acts as a processor on behalf of you, the customer, who is the controller for your own end-user data." + - question: "How do I sign a Data Processing Agreement with Appwrite?" + answer: "Open your organization settings in the Appwrite Console and click the DPA download button. Sign the document and the agreement is implemented automatically. The DPA also covers Appwrite's relationship with its own vendors, so sub-processors are bound by equivalent terms." + - question: "How does Appwrite encrypt customer data?" + answer: "Data in transit is protected by TLS/SSL, and data at rest in databases and file storage is encrypted using industry-standard algorithms like AES. Encryption keys are rotated at regular intervals as part of Appwrite's security operations." + - question: "Is self-hosted Appwrite GDPR compliant?" + answer: "When you self-host, you act as the controller and processor at the same time. Appwrite gives you the technical building blocks (encryption, access controls, audit logs), but GDPR compliance ultimately depends on how you configure your environment, retention policies, and access procedures." + - question: "Where can I read Appwrite's privacy policy and security documentation?" + answer: "The [Appwrite GDPR documentation](/docs/advanced/security/gdpr) covers how compliance is implemented in practice. You can also review the [privacy policy](https://appwrite.io/privacy) and [cookie policy](https://appwrite.io/cookies) for details on how Appwrite's own website and Cloud product handle personal data." --- We have always kept strict internal policies with regard to personal data and privacy. But to be GDPR compliant, one must undertake the necessary steps and show proof. We have done this and are pleased that we are now certified with the European General Data Protection Regulation (GDPR) standards. diff --git a/src/routes/blog/post/announcing-appwrite-is-hipaa-compliant/+page.markdoc b/src/routes/blog/post/announcing-appwrite-is-hipaa-compliant/+page.markdoc index e336cd412bd..b375b0dbd7c 100644 --- a/src/routes/blog/post/announcing-appwrite-is-hipaa-compliant/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-is-hipaa-compliant/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/hipaa.avif timeToRead: 4 author: may-ender category: security +faqs: + - question: "What is HIPAA and which apps need to consider it?" + answer: "The Health Insurance Portability and Accountability Act is a US law that governs how Protected Health Information (PHI) is stored, transmitted, and accessed. Any application that handles PHI for US patients (telehealth, EHRs, health tracking with identifiable data, insurance tools) typically falls under HIPAA's rules." + - question: "What does Appwrite Cloud being HIPAA compliant mean for me?" + answer: "Appwrite Cloud has the technical and organizational safeguards in place (encryption, access controls, audit logging, backups, MFA on internal access) to act as a HIPAA-compliant backend. You can build healthcare apps on Appwrite without having to run that infrastructure yourself." + - question: "Do I still have to make my own app HIPAA compliant?" + answer: "Yes. Appwrite covers the platform layer, but you remain responsible for how your application collects, displays, and shares PHI. That includes things like configuring permissions correctly, restricting who can read sensitive collections, training your staff, and obtaining consent where required." + - question: "Can I get a Business Associate Agreement (BAA) with Appwrite?" + answer: "BAAs are required for any service that processes PHI on your behalf. If you are building a HIPAA-regulated app on Appwrite Cloud, contact Appwrite via the [contact form](/contact-us) to discuss a BAA before going live with PHI." + - question: "Is self-hosted Appwrite HIPAA compliant?" + answer: "Self-hosted Appwrite gives you the same security primitives as Cloud, but compliance depends entirely on how you operate the host environment, network, and backups. The HIPAA compliance announcement applies to Appwrite Cloud." + - question: "What other compliance standards does Appwrite meet?" + answer: "Appwrite is also [GDPR](/blog/post/announcing-appwrite-is-gdpr-compliant), [CCPA](/blog/post/announcing-appwrite-is-ccpa-compliant), and [SOC 2 Type 1](/blog/post/appwrite-is-now-soc-2-type-1-compliant) compliant. The [Appwrite security documentation](/docs/advanced/security) is the best place to see the full list." --- We’re happy to announce that Appwrite fully complies with the Health Insurance Portability and Accountability Act (HIPAA), allowing developers who handle sensitive health data to trust Appwrite as their backend. diff --git a/src/routes/blog/post/announcing-appwrite-mcp-server-2/+page.markdoc b/src/routes/blog/post/announcing-appwrite-mcp-server-2/+page.markdoc index 928f87467b1..43237078e9a 100644 --- a/src/routes/blog/post/announcing-appwrite-mcp-server-2/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-mcp-server-2/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: chirag-aggarwal category: product, announcement featured: false +faqs: + - question: "What is the Appwrite MCP server?" + answer: "The Appwrite MCP server is a Model Context Protocol server that connects AI coding agents (Claude Code, Cursor, Windsurf, and others) to your Appwrite project. It lets the agent create users, manage [Databases](/docs/products/databases), upload files, deploy [Functions](/docs/products/functions), and call any other Appwrite service from within a chat." + - question: "What changed in Appwrite MCP Server 2.0?" + answer: "Two big changes. First, no more service flags: the server supports every Appwrite service by default, so configurations no longer need `--users`, `--tablesdb`, `--storage`, and so on. Second, the server now exposes only two tools, `appwrite_search_tools` and `appwrite_call_tool`, instead of registering every operation directly, which keeps the model's context free for your actual prompts." + - question: "Why does a two-tool architecture matter?" + answer: "Every tool definition registered with an AI model consumes context tokens, even when unused. By keeping the catalog inside the server and exposing a search-then-call pattern, the model only loads details for operations it actually needs. That leaves more context for your code, files, and conversation history." + - question: "How do I upgrade to MCP Server 2.0?" + answer: "If you are using `uvx`, the latest version is fetched automatically, so the next session uses 2.0. Update your MCP configuration by removing any service flags from the `args` array. Once that is done, restart your agent and the new server takes over." + - question: "What is the Model Context Protocol?" + answer: "MCP is an open protocol developed by Anthropic that defines how AI clients (editors, agents) talk to context and tool servers. An MCP server advertises a set of tools and resources, and any MCP-compatible client can use them. The Appwrite MCP server speaks MCP, so it works with any MCP-aware AI tool." + - question: "Can I use the MCP server with self-hosted Appwrite?" + answer: "Yes. The MCP server accepts the same connection settings as the Appwrite SDKs (endpoint, project ID, API key), so you can point it at a self-hosted Appwrite instance. The [MCP server documentation](/docs/tooling/ai/mcp-servers/api) walks through configuration for both Cloud and self-hosted setups." --- When we launched the Appwrite MCP server, connecting your Appwrite project to AI coding agents was already straightforward. But as the number of enabled services grew, so did the number of tool definitions loaded into the model's context, leaving less room for your actual prompts and code. diff --git a/src/routes/blog/post/announcing-appwrite-messaging/+page.markdoc b/src/routes/blog/post/announcing-appwrite-messaging/+page.markdoc index 874e4a040b4..91ad2588203 100644 --- a/src/routes/blog/post/announcing-appwrite-messaging/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-messaging/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 6 author: eldad-fux category: init, announcement, product featured: false +faqs: + - question: "What is Appwrite Messaging?" + answer: "[Appwrite Messaging](/docs/products/messaging) is a unified API for sending emails, SMS, and push notifications from your Appwrite project. You configure third-party providers (like SendGrid or Twilio) once, then send messages to topics, users, or individual targets without writing separate code for each channel." + - question: "Which providers does Appwrite Messaging support?" + answer: "For email: Mailgun, SendGrid, and any SMTP server. For SMS: Twilio, MSG91, Telesign, Textmagic, and Vonage. For push notifications: APNs for Apple devices and FCM for Android (and Apple) devices. You can mix providers per project if needed." + - question: "What is the difference between topics, users, and targets in Messaging?" + answer: "A target is a specific destination (an email address, phone number, or device push token). A user holds all the targets associated with a single Appwrite account. A topic is a named group of targets that you can publish a message to in one call. Newsletters typically use topics, alerts use users, and location-specific notifications use individual targets." + - question: "Can I send a message from an Appwrite Function?" + answer: "Yes. You can call any Messaging method from a server SDK inside an [Appwrite Function](/docs/products/functions). Combine this with event triggers (for example, on user creation or document update) to send automated welcome emails, login alerts, order confirmations, and other transactional messages." + - question: "Can I schedule messages for later?" + answer: "Yes. Each Messaging API call accepts a scheduled send time, and you can also pick a date in the Appwrite Console when drafting a message. This is useful for appointment reminders, time-zoned promos, and announcements that should land at a specific moment." + - question: "Does Messaging work the same on Appwrite Cloud and self-hosted?" + answer: "Yes. The Messaging API and Console are the same on Cloud and self-hosted. You still need to bring your own provider credentials (Twilio account, SendGrid API key, and so on), since Appwrite does not act as the underlying delivery network." --- It has been requested over and over again by Appwrite developers. It's a product that is hard to build from scratch and much needed for you and your application to have effective communication with your users. Therefore, we're excited to present you with **Messaging**. With just a few lines of backend code, you can set up a full-functioning messaging service for your application that covers three significant communication channels under one unified API. diff --git a/src/routes/blog/post/announcing-appwrite-new-ai-integrations/+page.markdoc b/src/routes/blog/post/announcing-appwrite-new-ai-integrations/+page.markdoc index 85611654bec..45d1919993a 100644 --- a/src/routes/blog/post/announcing-appwrite-new-ai-integrations/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-new-ai-integrations/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: christy-jacob category: integrations, announcement featured: false +faqs: + - question: "Which AI providers does Appwrite integrate with?" + answer: "Appwrite has tutorials and function templates for OpenAI, Hugging Face, Pinecone, ElevenLabs, Perplexity, Replicate, fal.ai, LangChain, Together AI, and Anyscale. New integrations are added regularly, and the full list lives in the [Appwrite AI documentation](/docs/products/ai)." + - question: "What are AI Function templates?" + answer: "AI Function templates are pre-built [Appwrite Functions](/docs/products/functions) that wire a third-party AI provider into your project. You pick a template in the Console (for example, **Prompt ChatGPT** or **Hugging Face inference**), deploy it, and the function exposes an endpoint your client can call. No infrastructure setup is required." + - question: "How do I add an OpenAI integration to my Appwrite app?" + answer: "Use the OpenAI function template from the Console, supply your OpenAI API key as an environment variable, and deploy. Your client SDK can then call the function to run completions, chat, embeddings, or other OpenAI APIs without exposing the key to end users." + - question: "Can I use Appwrite for vector search?" + answer: "Appwrite integrates with external vector databases like Pinecone and Upstash Vector through Function templates and tutorials. You typically store metadata in [Appwrite Databases](/docs/products/databases) and embeddings in the vector store, then call both from a server-side Function during queries." + - question: "What is a knowledge base in the context of AI apps?" + answer: "In retrieval-augmented generation (RAG), a knowledge base is the collection of source documents and their embeddings that a model uses to ground its answers. With Appwrite, you can store source content in [Storage](/docs/products/storage) or Databases, generate embeddings inside a Function, and query a vector index at runtime." + - question: "Where can I see real-world AI apps built on Appwrite?" + answer: "Visit [builtwith.appwrite.io](https://apwr.dev/yAtAG8j) to browse community-submitted projects, and check the [Appwrite blog](/blog) for tutorials such as personal chatbots, audio processing pipelines, and computer vision integrations using the available providers." --- The AI hype is real and will be around for many years to come. In 2021 alone, AI startups worldwide raised nearly $50 billion in venture capital across approximately 1,500 deals, reflecting a significant increase from previous years. So it's no surprise that many of you are looking to build AI powered applications. But that's easier said than done, as building AI powered applications can be tricky. We don't want it to be. That's why we're happy to share multiple AI related announcements designed to enhance the Appwrite experience and adapt to new possibilities for devs building with Appwrite. diff --git a/src/routes/blog/post/announcing-appwrite-pro/+page.markdoc b/src/routes/blog/post/announcing-appwrite-pro/+page.markdoc index 483f991806e..55f5efd384b 100644 --- a/src/routes/blog/post/announcing-appwrite-pro/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-pro/+page.markdoc @@ -3,11 +3,25 @@ layout: post title: "Announcing: Appwrite Pro" description: We’re happy to introduce Appwrite Pro. After announcing our pricing plans for Appwrite Cloud in August, we have reached another milestone as we roll out billing and welcome our newest addition to Appwrite Cloud. A new product offering that allows you to build with more confidence. date: 2023-12-20 +lastUpdated: 2026-05-22 cover: /images/blog/announcing-appwrite-pro/header.avif timeToRead: 5 author: christy-jacob category: announcement featured: false +faqs: + - question: "What is Appwrite Pro?" + answer: "Appwrite Pro is the paid plan for Appwrite Cloud that gives you higher resource limits, premium support, and add-ons compared to the Free plan. It is billed per member per month and is designed for projects that have moved past prototyping and need room to scale." + - question: "What is the difference between Appwrite Free and Pro?" + answer: "Free includes 5GB of bandwidth, 2GB of storage, 750K function executions, 75K monthly active users, community support, and limits on Databases, Buckets, and Functions per project. Pro raises bandwidth to 300GB, storage to 150GB, executions to 3.5M, MAUs to 200K, adds email support, removable Appwrite branding, and unlimited Databases, Buckets, and Functions per project." + - question: "How is Appwrite Pro billed?" + answer: "Pro is priced per member per month, with overage based on the resources you actually use. The [pricing page](https://appwrite.io/pricing) lists current rates and the add-on prices for things like extra storage, bandwidth, executions, and MAUs." + - question: "Do my existing projects still work after upgrading to Pro?" + answer: "Yes. Upgrading an organization to Pro lifts the limits across the projects in it. The actual data, configuration, API keys, and SDK code do not change. You just get more headroom and access to features like custom SMTP, removable branding, and add-on resources." + - question: "Can I switch back to the Free plan after going Pro?" + answer: "You can downgrade an organization to the Free plan, but if your usage exceeds Free limits, additional projects may be paused or services may be throttled until you reduce usage. Review your dashboard before downgrading so you know which projects will be affected." + - question: "What kind of support comes with Appwrite Pro?" + answer: "Pro includes premium email support handled by Appwrite's team, on top of the community support available on [Discord](https://appwrite.io/discord). The Enterprise plan adds features like dedicated Slack channels and SLAs; see the [pricing page](https://appwrite.io/pricing) for the current breakdown." --- After [announcing our pricing plans](https://appwrite.io/blog/post/announcing-pricing) for Appwrite Cloud in August, we have reached another milestone as we roll out billing and welcome our newest addition to Appwrite Cloud, Appwrite Pro. A new product offering that allows you to build with more confidence. diff --git a/src/routes/blog/post/announcing-appwrite-rust-sdk/+page.markdoc b/src/routes/blog/post/announcing-appwrite-rust-sdk/+page.markdoc index 29333de04f3..3affa7501b5 100644 --- a/src/routes/blog/post/announcing-appwrite-rust-sdk/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-rust-sdk/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: chirag-aggarwal category: announcement featured: false +faqs: + - question: "How do I install the Appwrite Rust SDK?" + answer: "Add it with `cargo add appwrite`. You will typically also want `cargo add tokio -F full` for the async runtime and `cargo add serde_json` for working with JSON payloads. The SDK is published on [crates.io](https://crates.io/crates/appwrite)." + - question: "Is the Rust SDK a server SDK or a client SDK?" + answer: "It is a server SDK, meaning it is meant to be used with an API key from environments you control (backends, CLI tools, daemons). It is not intended to ship to end-user devices, since API keys grant elevated permissions on your Appwrite project." + - question: "Which Appwrite services does the Rust SDK support?" + answer: "Every server-side service: [TablesDB](/docs/products/databases), [Account](/docs/products/auth), Users, Teams, [Storage](/docs/products/storage), Tokens, [Functions](/docs/products/functions), [Messaging](/docs/products/messaging), [Sites](/docs/products/sites), Locale, and Avatars. It also includes utility modules for query building, ID generation, permissions, and atomic operators." + - question: "Is the Rust SDK async?" + answer: "Yes. All API methods are `async fn` and are designed to work with Tokio. The example in the documentation uses `#[tokio::main]`, but the SDK is compatible with any executor that implements the standard async ecosystem traits." + - question: "Does the Rust SDK work with self-hosted Appwrite?" + answer: "Yes. `Client::new().set_endpoint(\"...\")` accepts any Appwrite endpoint, so you can point the SDK at a self-hosted Appwrite instance or Appwrite Cloud. The same project ID and API key conventions apply." + - question: "Why use Rust for a backend talking to Appwrite?" + answer: "Rust offers memory safety without a garbage collector, zero-cost abstractions, and strong async support, which fit well for high-throughput services, CLIs, and infrastructure tooling. Before this SDK, you had to call the Appwrite REST API manually; the SDK gives you typed methods and idiomatic Rust patterns instead." --- Appwrite now supports Rust as an official server SDK. The SDK provides async, type-safe access to all Appwrite server-side APIs and is available on [crates.io](https://crates.io/crates/appwrite). diff --git a/src/routes/blog/post/announcing-appwrite-sites/+page.markdoc b/src/routes/blog/post/announcing-appwrite-sites/+page.markdoc index ad4f63a0599..d0cda1b6927 100644 --- a/src/routes/blog/post/announcing-appwrite-sites/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-sites/+page.markdoc @@ -9,6 +9,19 @@ author: matej-baco category: product,init featured: false callToAction: true +faqs: + - question: "What is Appwrite Sites?" + answer: "[Appwrite Sites](/docs/products/sites) is a hosting product that lets you deploy static sites and server-rendered web apps directly from your Appwrite project. It supports static hosting, SSR, Git-based deployments, preview URLs per pull request, a global CDN, and the [Appwrite Network](/docs/products/network) for low-latency delivery." + - question: "Which frameworks does Appwrite Sites support?" + answer: "Sites supports static output from any toolchain and SSR for frameworks including Next.js, Nuxt, SvelteKit, Astro, Remix, Vue.js, React, Angular, Flutter web, and vanilla JavaScript. Quick start guides exist for the most common ones in the [Sites documentation](/docs/products/sites)." + - question: "How do I deploy a site from a GitHub repository?" + answer: "Open the **Sites** section of the Appwrite Console, click **Create site**, and connect your GitHub repository. Pick the framework, confirm the install and build commands, add any environment variables, and Appwrite will build and deploy on every push. Pull requests automatically get [preview deployments](/docs/products/sites/deploy-from-git)." + - question: "Is Appwrite Sites really open source?" + answer: "Yes. Sites ships as part of the open source Appwrite Server, so you can self-host it alongside the rest of Appwrite. The [Appwrite repository](https://github.com/appwrite/appwrite) contains the code, and the [self-hosting documentation](/docs/advanced/self-hosting) covers running the full platform yourself." + - question: "Can I use a custom domain with Appwrite Sites?" + answer: "Yes. You can attach a custom domain and manage DNS through [Appwrite DNS](/docs/products/network/dns) using the `appwrite.zone` nameservers, or point your existing DNS provider at Appwrite. The Console walks you through DNS records and SSL is provisioned automatically." + - question: "How does Appwrite Sites compare to Vercel or Netlify?" + answer: "Sites covers the same core use cases (Git-based deploys, previews, SSR, CDN), but it lives inside the same platform as your backend, so [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) work without extra services. It is also fully self-hostable, unlike Vercel and Netlify." --- You love using Appwrite to power your backend, but when it's time to actually *ship* your website, you're bouncing between tools, platforms, and extra accounts. That ends today. diff --git a/src/routes/blog/post/announcing-appwrite-skills/+page.markdoc b/src/routes/blog/post/announcing-appwrite-skills/+page.markdoc index 1b6363a5daf..88782a573b0 100644 --- a/src/routes/blog/post/announcing-appwrite-skills/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-skills/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: atharva category: product, announcement featured: false +faqs: + - question: "What are Appwrite Skills?" + answer: "Appwrite Skills are open source Markdown files that give AI coding agents accurate, SDK-specific knowledge about Appwrite. When installed, they teach agents the right method signatures, usage patterns, and best practices for the language you are working in, so you do not have to paste docs into prompts." + - question: "Which SDKs do Appwrite Skills cover?" + answer: "Skills are available for the Appwrite CLI and the TypeScript, Dart, .NET, Go, Kotlin, PHP, Python, Ruby, and Swift SDKs. Each skill is maintained alongside its SDK, so it stays in sync with the latest API patterns." + - question: "How do I install Appwrite Skills?" + answer: "Run `npx skills add appwrite/agent-skills` in your project directory. The installer asks which SDK skills you want, which AI tools to enable them for, whether to install at the project or global scope, and how to link them. The full repo lives at [github.com/appwrite/agent-skills](https://github.com/appwrite/agent-skills/)." + - question: "Which AI agents work with Appwrite Skills?" + answer: "Any agent that supports the [Agent Skills](https://skills.agents.md/) format works, including Claude Code, Cursor, and Windsurf. Install once and the same skill files can be linked from each tool, so you do not have to maintain separate sets of prompts." + - question: "What is the difference between Skills and the Appwrite MCP server?" + answer: "Skills give the agent static knowledge about how to write Appwrite code correctly. The [MCP server](/docs/tooling/ai/mcp-servers/api) gives the agent runtime access to your Appwrite project so it can actually call APIs (create users, query databases, deploy Functions). They complement each other: Skills handle code quality, MCP handles project operations." + - question: "Are Skills useful if I am not building with Appwrite directly?" + answer: "Skills are designed specifically for projects that use Appwrite. If you are not using Appwrite, they will not help your agent generate better non-Appwrite code. They become valuable as soon as you have at least one Appwrite SDK in the project." --- You're building with Appwrite, and you're using an AI coding agent to move faster. But every time you ask it to write Appwrite code, you get something that looks right but doesn't quite work. Wrong method signatures. Outdated SDK patterns. Missing parameters. You end up pasting docs into the prompt, hoping it gets the hint. diff --git a/src/routes/blog/post/announcing-appwrite-startups-program/+page.markdoc b/src/routes/blog/post/announcing-appwrite-startups-program/+page.markdoc index e2c830c1f17..ea700d6ca28 100644 --- a/src/routes/blog/post/announcing-appwrite-startups-program/+page.markdoc +++ b/src/routes/blog/post/announcing-appwrite-startups-program/+page.markdoc @@ -3,11 +3,23 @@ layout: post title: Announcing Appwrite’s Startups program description: A new program that caters to the needs of startups and their Founders, CTOs, and engineering teams. date: 2024-04-24 +lastUpdated: 2026-05-22 cover: /images/blog/startups.avif timeToRead: 5 author: eldad-fux category: announcement featured: false +faqs: + - question: "What is the Appwrite Startups program?" + answer: "The Appwrite Startups program gives early-stage companies cloud credits, priority email support, a dedicated Discord channel, and access to a program manager on top of [Appwrite Cloud](https://cloud.appwrite.io). It is designed to reduce infrastructure cost and risk while your team is still finding product-market fit." + - question: "Who qualifies for the Appwrite Startups program?" + answer: "Your company must have been founded within the last decade, have a working website, and have more than one team member. The application is reviewed by the Appwrite team, and you can apply from the [Startups program page](/startups)." + - question: "How much can I save with the Cloud credits?" + answer: "The credit amount is determined when you are accepted into the program, based on your stage and projected usage. The credits offset Cloud usage so you can build and scale without a meaningful infrastructure bill during the early months." + - question: "What kind of support do program members get?" + answer: "Program members get premium email support, a dedicated Discord channel with access to Appwrite's engineering team, and a program manager who coordinates resources and unblocks issues. This is in addition to the public [Discord community](https://appwrite.io/discord)." + - question: "How do I apply to the Appwrite Startups program?" + answer: "Visit the [Startups program page](/startups), submit the application form with your company details, and the Appwrite team will review it. If you have questions before applying, you can [reach out](/contact-us) directly." --- At Appwrite, we want to empower developers to build the future, and startups are at the forefront of innovation and shaping this future. Therefore, we’re excited to announce the launch of the Appwrite Startups program, a new program that supports startups on their journey. We’ve designed the program to fit the needs of Founders, CTOs, and engineering teams. @@ -25,10 +37,6 @@ With it, we aim to fulfill the need for price flexibility, day-to-day support, e # The benefits -## Appwrite Scale - -All program participants will receive an Appwrite Scale subscription, with all the features of Scale enabled for any number of developers the team needs. - ## Cloud credits All program participants will receive Cloud credits. This will allow your team to grow with peace of mind. diff --git a/src/routes/blog/post/announcing-atomic-numeric-operations/+page.markdoc b/src/routes/blog/post/announcing-atomic-numeric-operations/+page.markdoc index 9e63d1db483..c7c77d39b6c 100644 --- a/src/routes/blog/post/announcing-atomic-numeric-operations/+page.markdoc +++ b/src/routes/blog/post/announcing-atomic-numeric-operations/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: announcement featured: false +faqs: + - question: "What are atomic numeric operations in Appwrite?" + answer: "Atomic numeric operations let you increment or decrement a numeric field on a document directly on the server using `incrementDocumentAttribute` and `decrementDocumentAttribute`. Each delta is applied in a single write under concurrency control, so concurrent updates do not overwrite each other." + - question: "Why are atomic increments safer than read-modify-write?" + answer: "With a read-modify-write loop, two clients can read the same value, both add 1, and both write back the same new value. One increment is lost. Atomic operations send only the delta to the server, where the database applies the change in one locked step, eliminating the race condition." + - question: "Where would I use atomic numeric operations?" + answer: "Anywhere you mutate a number that multiple clients can touch at once: likes and follower counts, API quotas, stock levels, game scores, retry counters, and rate limits. The feature is especially valuable in real-time and high-concurrency scenarios." + - question: "Can I set min and max bounds on the value?" + answer: "Yes. Each operation accepts optional `min` and `max` constraints. If the resulting value would fall outside the bounds, the update is rejected instead of silently clamping. This is useful for rules like \"stock cannot go below zero\" or \"credits cannot exceed a cap\"." + - question: "Do atomic operations respect document permissions?" + answer: "Yes. The same [Appwrite permissions](/docs/products/databases) that gate `updateDocument` apply to increments and decrements. If a user is not allowed to write to the document, the atomic operation also fails. No special role is added by using the new method." + - question: "Are atomic operations available on both Cloud and self-hosted Appwrite?" + answer: "Yes. Atomic numeric operations work the same on Appwrite Cloud and self-hosted installations. You can call them from any [Appwrite SDK](/docs/sdks) that has been updated to expose the new methods." --- In high-concurrency systems like social apps, games, and usage-tracked services, even updating a single number such as a like, retry count, or quota, can lead to consistency issues. When multiple clients try to update the same value simultaneously, it’s easy to end up with conflicting writes, lost updates, or inaccurate data. diff --git a/src/routes/blog/post/announcing-auto-increment-support/+page.markdoc b/src/routes/blog/post/announcing-auto-increment-support/+page.markdoc index 8c8864b45c3..f86f655e1ba 100644 --- a/src/routes/blog/post/announcing-auto-increment-support/+page.markdoc +++ b/src/routes/blog/post/announcing-auto-increment-support/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: announcement featured: false +faqs: + - question: "What is the `$sequence` field on Appwrite documents?" + answer: "`$sequence` is a numeric field that Appwrite automatically assigns to each document at insertion time. It starts at one for the first row in a collection and increases by one with every new insert, giving you a strictly ascending, indexed identifier without writing any counter logic." + - question: "How is `$sequence` different from `$id`?" + answer: "`$id` is a string identifier that is either generated as a unique slug (`ID.unique()`) or set by the caller. `$sequence` is a numeric, monotonically increasing counter managed by Appwrite. Use `$id` for lookups and references and `$sequence` when you need ordering or numeric IDs like invoice numbers." + - question: "How do I sort documents by insertion order?" + answer: "Query the collection with `Query.orderAsc('$sequence')` (or `orderDesc` for newest-first). The field is fully indexed, so sorting and pagination by `$sequence` perform efficiently even on large collections. The full reference lives in the [order documentation](/docs/products/databases/order#sequence-ordering)." + - question: "Can I modify the `$sequence` value?" + answer: "No. `$sequence` is read-only by design. That guarantees the values are consistent, monotonically increasing, and tamper-resistant, which is what makes it suitable for audit logs, invoice numbers, and other use cases that require stable ordering." + - question: "When should I use timestamps instead of `$sequence`?" + answer: "Use `$createdAt` when you need wall-clock ordering and are comfortable with millisecond resolution. Use `$sequence` when you need a strict numeric identifier or guaranteed insertion order, since two documents created in the same millisecond will have distinct sequence numbers but identical timestamps." + - question: "Is auto-increment available on self-hosted Appwrite?" + answer: "Yes. Auto-increment support is available on both Appwrite Cloud and self-hosted installations of the supported version. Existing collections automatically expose `$sequence` for newly inserted documents going forward." --- Managing ordered data can often be complex and error-prone, especially when it requires manual counters or timestamp-based sorting, which can introduce inconsistencies and unpredictability. diff --git a/src/routes/blog/post/announcing-bulk-api/+page.markdoc b/src/routes/blog/post/announcing-bulk-api/+page.markdoc index 47bf515513a..307096690c6 100644 --- a/src/routes/blog/post/announcing-bulk-api/+page.markdoc +++ b/src/routes/blog/post/announcing-bulk-api/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: announcement featured: false +faqs: + - question: "What is the Appwrite Bulk API?" + answer: "The Bulk API lets you create, update, upsert, or delete many documents in a single request using `createDocuments`, `updateDocuments`, `upsertDocuments`, and `deleteDocuments`. It is much faster than sending one request per document and reduces network overhead for batch workloads." + - question: "Why is the Bulk API restricted to server-side SDKs?" + answer: "Bulk operations typically involve high-volume data changes that should be authorized by trusted code, not by end users. Restricting the API to server SDKs (which use API keys) prevents clients from issuing mass writes or deletes against your project." + - question: "When should I use the Bulk API instead of single-document calls?" + answer: "Reach for the Bulk API any time you are processing data in batches: importing CSV files, syncing from another database, applying changes from a scheduled job, or cleaning up stale records. For interactive UI writes (one document at a time), the regular methods are usually clearer." + - question: "How does Appwrite handle partial failures in a bulk request?" + answer: "Bulk operations are transactional at the document level, so individual document validations (such as permissions or schema mismatches) are reported alongside successes. Check the response to see which documents were processed and which failed, then retry only the failures." + - question: "Are there limits on how many documents I can send in one bulk call?" + answer: "Yes. There is a maximum batch size per request that depends on payload size and the underlying database engine. The [bulk operations documentation](/docs/products/databases/bulk-operations) lists the current limits and recommended batch sizes for large imports." + - question: "Does Bulk API work with self-hosted Appwrite?" + answer: "Yes. Bulk API is available on both Appwrite Cloud and self-hosted installations that run the supporting version. You call the same methods from your server SDK regardless of where Appwrite is hosted." --- We're excited to introduce another Appwrite Databases feature, **Bulk API**. Explicitly designed to handle heavy write workloads, Bulk API dramatically improves performance by allowing multiple database operations in a single API call. diff --git a/src/routes/blog/post/announcing-bun-deno-runtimes/+page.markdoc b/src/routes/blog/post/announcing-bun-deno-runtimes/+page.markdoc index 3ac8dc59271..9c54a4c4b37 100644 --- a/src/routes/blog/post/announcing-bun-deno-runtimes/+page.markdoc +++ b/src/routes/blog/post/announcing-bun-deno-runtimes/+page.markdoc @@ -9,6 +9,19 @@ author: atharva category: announcement featured: false callToAction: true +faqs: + - question: "What changed for Appwrite Sites build runtimes?" + answer: "[Appwrite Sites](/docs/products/sites) now lets you pick Bun or Deno as the build runtime for any Node-based framework. The runtime selector includes Bun versions 1.0 through 1.3 and Deno versions 1.40 through 2.6, alongside the existing Node options." + - question: "Do I need to change my project to switch to Bun or Deno?" + answer: "No. The runtime selector only changes which JavaScript runtime Appwrite uses to install dependencies and run your build command. Your `package.json`, framework configuration, and source code stay the same. Pick a runtime, redeploy, and the new runtime takes over from the next build." + - question: "Why might I pick Bun over Node for builds?" + answer: "Bun installs dependencies and runs scripts noticeably faster than Node in most projects, which shortens deploy times. The Bun 1.x release line continues to improve npm compatibility and ships fixes that matter for modern framework toolchains, so most Node-targeted projects work without changes." + - question: "What does Deno bring as a Sites build runtime?" + answer: "Recent Deno releases are fully npm compatible, support monorepos, and ship a built-in formatter, linter, and test runner. If your team already uses Deno locally, you can now build your Site with the same runtime instead of switching to Node just for deployment." + - question: "How do I change the build runtime for an existing site?" + answer: "Open the site in the Appwrite Console, go to **Site settings**, then **Runtime settings**, and pick the runtime version from the dropdown. The change takes effect on the next deployment; your currently active deployment continues to serve traffic until you redeploy." + - question: "Does the build runtime affect what runs in production?" + answer: "For static sites the build runtime only affects how your files are produced; the output is served as static assets afterward. For SSR sites, the request handler runs on Appwrite's serverless infrastructure, separate from the build runtime selection, so changing build runtimes does not change runtime semantics for your app." --- Today, we are happy to announce that **Bun and Deno are now available as build runtimes for Appwrite Sites**. You can pick any supported version, from **Bun 1.0** up to the latest **Bun 1.3**, and from **Deno 1.40** up to the latest **Deno 2.6**, in the Console build runtime dropdown for any Node-based framework, and your existing site will build without any changes to your project, your `package.json`, or your build command. diff --git a/src/routes/blog/post/announcing-cname-flattening/+page.markdoc b/src/routes/blog/post/announcing-cname-flattening/+page.markdoc index 705ce2d6558..aba216e4bc8 100644 --- a/src/routes/blog/post/announcing-cname-flattening/+page.markdoc +++ b/src/routes/blog/post/announcing-cname-flattening/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: matej-baco category: announcement featured: false +faqs: + - question: "What is CNAME flattening?" + answer: "CNAME flattening lets you point your root domain (like example.com) to a hostname, which standard DNS rules normally prohibit. Your DNS provider resolves the target internally and returns the corresponding IP addresses to the client. Different providers call it by different names: Cloudflare uses CNAME flattening, Route 53 uses ALIAS records, and others support ANAME records." + - question: "Do I still need to change nameservers to use a custom domain on Appwrite Sites?" + answer: "No, you no longer need to migrate nameservers. With CNAME flattening support, you can keep your existing DNS provider and just add a CNAME, ALIAS, or ANAME record pointing to Appwrite. Once DNS propagates, your site is live with SSL configured automatically." + - question: "Why can't I use a regular CNAME record at the root domain?" + answer: "DNS standards prohibit CNAME records at the apex (root) domain because they conflict with other required records like SOA and NS. CNAME flattening (or ALIAS/ANAME records) works around this by resolving the target server-side and returning IP addresses instead of a CNAME response. This keeps your DNS RFC-compliant while letting the root domain follow a hostname." + - question: "Should I proxy the Cloudflare record through Cloudflare or use DNS only?" + answer: "Set the record to DNS only (grey cloud, not the orange proxy) so traffic reaches Appwrite's CDN directly. If you proxy through Cloudflare, you bypass Appwrite's built-in SSL, caching, and edge security, and may run into SSL or routing issues." + - question: "How long does DNS propagation take when connecting a domain?" + answer: "Propagation can take anywhere from a few minutes to a few hours depending on your DNS provider and TTL settings. You can check propagation status with tools like dig or online DNS checkers. Once propagation completes, verify the domain in the Appwrite Console to activate SSL." + - question: "Can I connect a custom domain to other Appwrite products besides Sites?" + answer: "Yes, [Appwrite](/docs/products/network/dns) supports custom domains across the platform, including for your project's API endpoint. The setup process and DNS records vary by product, so check the relevant docs for the specific service you're connecting." --- If you've connected a custom domain to Appwrite Sites, you know the process required changing your nameservers to Appwrite. For developers already managing DNS through Cloudflare or similar providers, that meant moving email routing, DNS-layer protections, and every other record off their existing provider just to connect a single site. diff --git a/src/routes/blog/post/announcing-csv-export/+page.markdoc b/src/routes/blog/post/announcing-csv-export/+page.markdoc index e3972dc1dba..077ddd6efc1 100644 --- a/src/routes/blog/post/announcing-csv-export/+page.markdoc +++ b/src/routes/blog/post/announcing-csv-export/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: announcement featured: false +faqs: + - question: "How do I export data from an Appwrite database to CSV?" + answer: "Open the table you want to export in the [Appwrite Console](/docs/products/databases), apply any filters or queries, choose which columns to include, and start the export. Appwrite runs the export in the background and emails you a short-lived download link when the file is ready. You no longer need the SDK or REST API for this." + - question: "Can I export only filtered rows instead of the entire table?" + answer: "Yes, CSV exports respect the filters and search parameters you've applied to the table view. This lets you export targeted slices of data without writing custom scripts. You can also choose specific columns to keep the output lean." + - question: "What customization options are available for CSV exports?" + answer: "You can pick columns, apply queries, set a custom delimiter, include or skip the header row, and get notified by email when the export completes. Related documents are exported as IDs by default to keep the data structured. This makes the same export usable for engineering, analytics, or non-technical teammates." + - question: "Are CSV exports available on self-hosted Appwrite?" + answer: "CSV exports launched first on Appwrite Cloud and will be coming to self-hosted in a later release. If you self-host, watch the Appwrite changelog and upgrade once the feature lands in a stable version." + - question: "How does Appwrite handle large CSV exports without timing out?" + answer: "Appwrite runs CSV exports asynchronously as background tasks, so you can continue working while large datasets are processed. When the export is ready, you get an email with a short-lived download link. This avoids the timeout and pagination problems you'd hit doing it manually through the API." + - question: "What's the difference between CSV exports and database backups?" + answer: "CSV exports give you a portable, human-readable file you can hand to other tools or teammates, while database backups produce a complete snapshot meant for restoring your project. Use CSV exports for analytics, reports, or migrations to external systems. Use backups for disaster recovery or point-in-time restores." --- Data flows through every system you build, for reporting, analysis, or integrations. Getting it out cleanly and consistently should be just as simple as storing it. diff --git a/src/routes/blog/post/announcing-csv-imports/+page.markdoc b/src/routes/blog/post/announcing-csv-imports/+page.markdoc index 419e962729f..54974be0c31 100644 --- a/src/routes/blog/post/announcing-csv-imports/+page.markdoc +++ b/src/routes/blog/post/announcing-csv-imports/+page.markdoc @@ -9,6 +9,19 @@ timeToRead: 5 author: darshan-pandya category: announcement featured: false +faqs: + - question: "How do I import a CSV file into an Appwrite collection?" + answer: "Create a collection with the attributes you want, then upload a CSV file whose first row contains matching attribute names. You can upload a new file during import or pick an existing one from your storage bucket. [Appwrite](/docs/products/databases) validates each row before importing and runs the job in the background." + - question: "Can I assign custom document IDs when importing from CSV?" + answer: "Yes, include an optional `$id` column in the CSV and Appwrite will use those values as document IDs. If you omit the column, Appwrite generates unique IDs automatically. Custom IDs are useful when migrating from another system that already has stable identifiers." + - question: "What format does the CSV file need to follow?" + answer: "The first row must be a header containing attribute names that exactly match your collection's attributes. Each subsequent row represents a document, with values separated by commas. All required attributes must be present, or the row will fail validation." + - question: "How does Appwrite handle very large CSV imports?" + answer: "The CSV import system runs as a background task and performs per-row validation, so it can handle production-scale files without blocking the Console. Built on top of [Appwrite's migration APIs](/docs/products/databases), it's designed for reliability across both small datasets and large imports." + - question: "What happens if a row in my CSV fails validation?" + answer: "Appwrite validates each row before importing it, so invalid rows are flagged and skipped rather than corrupting your collection. Common causes are missing required attributes, type mismatches, or values that violate length or enum constraints. Fix the source CSV and re-run the import for those rows." + - question: "What are common use cases for CSV imports?" + answer: "CSV imports are useful for migrating user data from external systems, importing inventory records, seeding test environments, and onboarding structured content like FAQs or product catalogs. They're also handy when prototyping with realistic data from spreadsheets or third-party tools." --- We're introducing a new way to populate your Appwrite databases: **document imports from CSV files**. diff --git a/src/routes/blog/post/announcing-database-ai-suggestions/+page.markdoc b/src/routes/blog/post/announcing-database-ai-suggestions/+page.markdoc index a2c8b64f08d..487699609f5 100644 --- a/src/routes/blog/post/announcing-database-ai-suggestions/+page.markdoc +++ b/src/routes/blog/post/announcing-database-ai-suggestions/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: darshan-pandya category: announcement featured: false +faqs: + - question: "How do Database AI suggestions decide which columns and indexes to create?" + answer: "Suggestions are generated from the table's name (like `Orders` or `UserSessions`), the structure of sibling tables in the same database, and any extra context you provide in the prompt. [Appwrite](/docs/products/databases) uses this to propose sensible field types, naming conventions, and recommended indexes. You can review and tweak everything before applying." + - question: "Do AI suggestions apply automatically when I create a table?" + answer: "No, suggestions never apply automatically. You opt in by enabling Generate AI suggestions during table creation, then review the proposed schema, adjust columns inline, or skip suggestions entirely. Applying the final schema (including any suggested indexes) takes one click." + - question: "Can I generate sample data alongside the schema?" + answer: "Yes, there's an option during table setup to populate the table with example records that match the generated or manually defined schema. The sample entries follow your field types and naming conventions, which makes it easy to validate queries, indexes, and relationships before integrating the table into your app." + - question: "Will AI suggestions overwrite an existing table's schema?" + answer: "No, Database AI suggestions are only offered when you're creating a new table. Existing tables stay untouched. If you want to evolve a schema, you can add columns and indexes manually or use [Appwrite's migration APIs](/docs/products/databases)." + - question: "Why use AI suggestions instead of designing the schema by hand?" + answer: "Schemas designed by hand often miss timestamps, soft-delete fields, or indexes that you only realize you need later. AI suggestions bake those best practices in from the start, reduce naming inconsistencies across collections, and turn a slow setup step into a few seconds of review." + - question: "Is Database AI Suggestions available on self-hosted Appwrite?" + answer: "Database AI Suggestions launched first on [Appwrite Cloud](/docs/products/databases). Check the Appwrite changelog for self-hosted availability, since features that depend on AI services are typically rolled out to Cloud before being available in self-hosted releases." --- In many development workflows, setting up a database schema is one of the first and often one of the slowest steps. Starting with a blank schema, juggling naming conventions, remembering which fields need indexes, or ensuring every collection follows best practices can quickly become a chore. diff --git a/src/routes/blog/post/announcing-database-reads-and-writes-pricing/+page.markdoc b/src/routes/blog/post/announcing-database-reads-and-writes-pricing/+page.markdoc index a1e83417c4d..11a63dabba5 100644 --- a/src/routes/blog/post/announcing-database-reads-and-writes-pricing/+page.markdoc +++ b/src/routes/blog/post/announcing-database-reads-and-writes-pricing/+page.markdoc @@ -3,12 +3,26 @@ layout: post title: Announcing Database Reads and Writes pricing description: To ensure Appwrite Cloud's sustainability, we are introducing pricing for database read and write operations, effective April 10th, 2025. date: 2025-03-13 +lastUpdated: 2026-05-22 cover: /images/blog/announcing-database-reads-and-writes-pricing/cover.avif timeToRead: 6 author: eldad-fux category: announcement featured: false callToAction: true +faqs: + - question: "How does Appwrite count database read and write operations?" + answer: "Most operations are counted by the number of documents affected, not the number of API calls. Fetching a collection of 50 documents in one call counts as 50 read operations. A query that returns no documents counts as a single operation. Writes are counted per document on create, update, and delete." + - question: "What's included in the free database operation quota?" + answer: "The Free plan includes 500,000 read operations and 250,000 write operations per month. The Pro plan includes 1,750,000 reads and 750,000 writes monthly, and Enterprise has custom limits. Operations beyond the included quota are billed at $0.060 per 100,000 reads and $0.10 per 100,000 writes. See the [pricing page](/pricing) for details." + - question: "How can I reduce my database operation usage?" + answer: "Filter data server-side instead of fetching large datasets and filtering on the client. Use the `limit` and `offset` parameters to paginate so you only retrieve what you need. Cache frequently accessed data in your app or CDN, and monitor usage in the [Appwrite Console](/docs/products/databases) to spot inefficient query patterns." + - question: "Where can I see my current database operation usage?" + answer: "You can review usage in your organization's usage page or in the usage section of a specific database. This shows reads and writes over time, broken down so you can identify which collections or workloads drive the most operations. Use this data to plan ahead before crossing the included quota." + - question: "Does the pricing apply to self-hosted Appwrite?" + answer: "No, the read and write operation pricing applies only to [Appwrite Cloud](/pricing). Self-hosted Appwrite has no per-operation billing because you provide the infrastructure. The same database APIs work in both, so you can develop locally on self-hosted and deploy to Cloud without code changes." + - question: "Why is Appwrite charging for database operations now?" + answer: "Database operations require significant computational resources: concurrent operations, consistency guarantees, indexing, high availability, and backups. Charging beyond the included quotas makes the platform sustainable and aligns each project's bill with its actual usage. Projects that run millions of operations are charged differently than those running thousands." --- Database operations are the backbone of modern applications, enabling you to store, retrieve, and manipulate data efficiently. With Appwrite Databases, you can perform powerful queries, create complex data structures, and build real-time applications that respond instantly to changes. Appwrite’s database capabilities have been designed to be both powerful and intuitive, making it easier for you to focus on building great applications rather than managing infrastructure. @@ -26,7 +40,7 @@ As Appwrite continues to scale, we need to ensure our platform remains sustainab We will begin charging for database read and write operations beyond the included quotas in each plan. All plans will continue to include a generous allocation of operations at no additional charge: - **Free Plan**: 500,000 read operations and 250,000 write operations per month. -- **Pro and Scale Plans**: 1,750,000 read operations and 750,000 write operations per month, with additional operations available at $0.060 per 100,000 reads and $0.10 per 100,000 writes. +- **Pro Plan**: 1,750,000 read operations and 750,000 write operations per month, with additional operations available at $0.060 per 100,000 reads and $0.10 per 100,000 writes. The Enterprise plan offers custom limits. - **Enterprise Plan**: Custom pricing. This change will help support the infrastructure required to maintain high-performance database services and enable us to continue enhancing the platform. diff --git a/src/routes/blog/post/announcing-database-upsert/+page.markdoc b/src/routes/blog/post/announcing-database-upsert/+page.markdoc index 4d1da0070d4..e5c52237fcc 100644 --- a/src/routes/blog/post/announcing-database-upsert/+page.markdoc +++ b/src/routes/blog/post/announcing-database-upsert/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: announcement featured: false +faqs: + - question: "What is an upsert?" + answer: "Upsert is a database operation that creates a document if it doesn't exist and updates it if it does. It removes the need to check for existence yourself or branch between create and update calls. The server handles both paths atomically in a single request." + - question: "How do I use upsert in Appwrite?" + answer: "Call `upsertDocument` on the [Appwrite Databases](/docs/products/databases) SDK with a database ID, collection ID, document ID, and the data you want to write. If the document with that ID exists, it's updated, otherwise it's created. This works the same across Cloud and self-hosted." + - question: "When should I use upsert instead of create or update?" + answer: "Use upsert when you don't know (or don't care) whether the document already exists, like syncing data from a mobile client, processing a background job, or ingesting events from IoT devices. It removes a round trip and a class of race conditions caused by checking existence before writing." + - question: "Is upsert atomic in Appwrite?" + answer: "Yes, [Appwrite's](/docs/products/databases) upsert is fully atomic: the existence check and the write happen in the same operation on the server. That means two clients calling upsert on the same document ID can't both succeed in creating it, avoiding the classic check-then-write race condition." + - question: "Is upsert idempotent?" + answer: "Calling upsert with the same document ID and payload produces the same final state regardless of how many times the request runs. That makes retries safe, which is useful for unreliable networks, background workers, or anywhere you want at-least-once delivery semantics without duplicate data." + - question: "Can I upsert in bulk?" + answer: "Single-document upsert is available via `upsertDocument`. For larger workloads, look at [Appwrite's Bulk API](/docs/products/databases) and CSV imports, which let you write many documents in one operation. Pick the approach that matches the size and shape of your data." --- Working with databases often involves small but repetitive decisions like checking if a document exists, choosing between creating or updating, handling errors that come from guessing wrong. These steps are not difficult on their own, but over time they add complexity to your code and friction to your workflow. diff --git a/src/routes/blog/post/announcing-db-operators/+page.markdoc b/src/routes/blog/post/announcing-db-operators/+page.markdoc index fb48ffe9dc3..051f846ef46 100644 --- a/src/routes/blog/post/announcing-db-operators/+page.markdoc +++ b/src/routes/blog/post/announcing-db-operators/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: announcement featured: false +faqs: + - question: "What problem do DB operators solve?" + answer: "Updating a single field traditionally meant reading the entire row, modifying it locally, and writing it back. That pattern is slow, wastes bandwidth, and creates lost-update races when multiple clients write to the same row. DB operators apply the change directly at the storage layer in one atomic step." + - question: "Which operators are available in Appwrite?" + answer: "[Appwrite](/docs/products/databases) ships operators across numeric (increment, decrement, multiply, divide, modulo, power), array (arrayAppend, arrayPrepend, arrayInsert, arrayRemove, arrayUnique, arrayIntersect, arrayDiff, arrayFilter), string (stringConcat, stringReplace), date (dateAddDays, dateSubDays, dateSetNow), and boolean (toggle) types. Each runs atomically on the server." + - question: "Are DB operators safe under high concurrency?" + answer: "Yes, every operator runs atomically at the storage layer, so concurrent updates can't overwrite each other or lose changes. This is critical for counters, leaderboards, usage tracking, or any workload where multiple clients touch the same row. There's no read-modify-write window that another writer can slip into." + - question: "Can I apply multiple operators in a single update?" + answer: "Yes, you can compose multiple operators across different fields in one atomic call. For example, increment a counter, append a tag, and refresh a timestamp in the same request. They can also be staged inside an [Appwrite transaction](/docs/products/databases) alongside other database actions." + - question: "How are DB operators different from a regular update?" + answer: "A regular update replaces field values with the ones you send, which usually requires reading the row first. Operators describe the action (increment by 1, append `\"c\"`, toggle), so you never need to know or transmit the current value. The result is smaller payloads, fewer round trips, and no race conditions." + - question: "What use cases benefit most from DB operators?" + answer: "Counters and usage tracking, tag and array management, expiry or renewal timestamps, feature flag toggles, and any high-concurrency write path where a read-modify-write loop would race. They're particularly useful for collaborative apps, real-time leaderboards, and IoT or analytics ingestion." --- If you've ever needed to update a single field in a row: increment a counter, add a tag, or adjust an expiry date, you probably had to read the full row, make the change locally, and then write the entire row back. diff --git a/src/routes/blog/post/announcing-dev-keys/+page.markdoc b/src/routes/blog/post/announcing-dev-keys/+page.markdoc index eea0c7d61df..475150f889b 100644 --- a/src/routes/blog/post/announcing-dev-keys/+page.markdoc +++ b/src/routes/blog/post/announcing-dev-keys/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 6 author: chirag-aggarwal category: product featured: false +faqs: + - question: "What are Appwrite Dev Keys?" + answer: "Dev Keys are special keys for local development that let you bypass rate limits, CORS restrictions, and hostname validation while you're building and testing. They're not meant for production traffic. You add them when initializing the Appwrite client and they apply only to that environment." + - question: "How are Dev Keys different from API Keys?" + answer: "[API Keys](/docs/products/auth) are server-side credentials used to call Appwrite from trusted backends, and they don't change rate limits or CORS behavior. Dev Keys exist specifically to remove development-time friction (rate limits, CORS, hostname checks) and are scoped to expire after a chosen window. They're complementary, not interchangeable." + - question: "Do Dev Keys work with Appwrite SDKs?" + answer: "Yes, Dev Keys integrate with all Appwrite SDKs and can also be passed via headers in raw API requests. You set the key on the client during initialization in your local or CI environment, and Appwrite recognizes it for the duration the key is valid." + - question: "How do I create a Dev Key?" + answer: "In the Appwrite Console, go to Overview, then Integrations, then Dev keys, and click Create Dev key. Pick an expiry (a day, a week, or a month) and copy the generated key into your local client initialization. See the [Dev Keys docs](/docs/advanced/platform/dev-keys) for the full setup." + - question: "Will Dev Keys help with CORS errors in cloud dev environments?" + answer: "Yes, Dev Keys let any host through during development, so you don't need to whitelist random preview URLs from GitHub Codespaces, Gitpod, or similar tools. That removes a common source of CORS errors when working on client-side code from ephemeral cloud environments." + - question: "Are Dev Keys safe to use in production?" + answer: "No, Dev Keys are explicitly for development and CI environments. They bypass rate limits and CORS protections that your production app actually needs. Keep them out of your production builds, set short expiries, and rotate them like you would any other credential." --- You’re building, testing, tweaking. You’re in the zone. Then, bam, rate limit. diff --git a/src/routes/blog/post/announcing-encrypted-string-attributes/+page.markdoc b/src/routes/blog/post/announcing-encrypted-string-attributes/+page.markdoc index 0e0a0bd76e8..97e9c7fa776 100644 --- a/src/routes/blog/post/announcing-encrypted-string-attributes/+page.markdoc +++ b/src/routes/blog/post/announcing-encrypted-string-attributes/+page.markdoc @@ -3,11 +3,25 @@ layout: post title: "Announcing Encrypted string attribute support: Built-in encryption for sensitive fields" description: Easily encrypt sensitive string fields at rest, with no manual encryption logic. date: 2025-07-10 +lastUpdated: 2026-05-22 cover: /images/blog/announcing-encrypted-string-attributes/cover.avif timeToRead: 5 author: jake-barnby category: announcement featured: false +faqs: + - question: "What is encryption at rest and why does it matter?" + answer: "Encryption at rest means data is encrypted on disk when stored, so an attacker who gains access to the underlying database files still can't read the raw values. It matters for fintech, healthcare, messaging, and any app handling personal or regulated data. It's a baseline requirement for many compliance frameworks." + - question: "How do I encrypt a string attribute in Appwrite?" + answer: "Mark the string attribute as encrypted when you create it in your [Appwrite Databases](/docs/products/databases) collection. From that point, Appwrite encrypts the value before writing it to disk and decrypts it transparently when you read it. Your client code stays exactly the same." + - question: "What encryption algorithm does Appwrite use for encrypted attributes?" + answer: "Appwrite uses AES-128 in Galois/Counter Mode (GCM), an industry-standard authenticated encryption algorithm. The encryption is applied server-side before the value reaches the database, and Appwrite manages keys for you. Deployments that require FIPS-compliant environments are also supported." + - question: "Can I query or filter on encrypted string attributes?" + answer: "No, encrypted attributes can't be queried or used in filters. Encryption is intentionally one-way for queries to prevent leaking sensitive information through search patterns. If you need to look up records by a sensitive value, store a separate hashed or tokenized field for lookups." + - question: "Do I need to manage encryption keys myself?" + answer: "No, [Appwrite](/docs/advanced/security) handles key management transparently. You don't generate, store, or rotate keys yourself, which removes a common source of implementation errors. The clients see encrypted fields as regular strings." + - question: "Is encrypted string attribute support available on the Free plan?" + answer: "Encrypted string attributes are available on Appwrite Cloud's Pro and Enterprise plans, plus all self-hosted deployments. If you're on the Free plan, you'd need to upgrade or self-host to use this feature." --- Appwrite is secure by default. We build every single product and feature with the highest regard for security. @@ -36,7 +50,7 @@ Key features entail: Appwrite delivers comprehensive, secure, easy-to-use encryption that is seamlessly integrated into your workflow. When a string attribute is marked as encrypted, Appwrite applies AES-128 encryption in Galois/Counter Mode (GCM) before writing it to the database. -This new feature is available on Appwrite Cloud Pro and Scale plan, and self-hosted. Encrypted string attribute support significantly enhances your application's security posture, making Appwrite a trusted choice for handling sensitive data. +This new feature is available on Appwrite Cloud Pro and Enterprise plans, and self-hosted. Encrypted string attribute support significantly enhances your application's security posture, making Appwrite a trusted choice for handling sensitive data. # More resources diff --git a/src/routes/blog/post/announcing-file-tokens/+page.markdoc b/src/routes/blog/post/announcing-file-tokens/+page.markdoc index 902fa28fc46..2e6752b4439 100644 --- a/src/routes/blog/post/announcing-file-tokens/+page.markdoc +++ b/src/routes/blog/post/announcing-file-tokens/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: darshan-pandya category: product featured: false +faqs: + - question: "What are File Tokens in Appwrite?" + answer: "File Tokens are short-lived, scoped tokens that grant access to a specific file in [Appwrite Storage](/docs/products/storage) without modifying that file's permissions. You generate a token, share the URL, and anyone with the link can access the file until the token expires. No login or project membership required." + - question: "How do File Tokens differ from public files or shared permissions?" + answer: "Public files are reachable by anyone forever, and granting permissions usually requires adding users to your project. File Tokens sit in between: they let you share a single file externally without making it public or onboarding new users. Each token is independent and revocable." + - question: "Can File Tokens expire?" + answer: "Yes, [File Tokens](/docs/products/storage) come with configurable expiration, similar to API keys. You decide how long the link should be valid based on your use case, whether that's a few hours for a draft asset or a few weeks for a client deliverable. Once expired, the link stops working." + - question: "Do File Tokens work with preview, view, and download endpoints?" + answer: "Yes, File Tokens work seamlessly with the preview, view, and download endpoints, so the same token can deliver a thumbnail in a browser, render a file inline, or trigger a download. You don't need separate tokens per endpoint." + - question: "How do I create a File Token?" + answer: "Open the file in the [Appwrite Console Storage](/docs/products/storage) section, generate a token with your chosen expiration, and copy the resulting URL. You can also do this through the API if you want to issue tokens programmatically (for example, from a backend after a checkout)." + - question: "Are File Tokens secure?" + answer: "File Tokens are signed and scoped to a single file, so a leaked token only exposes that one resource. Combined with expiration, you can keep the blast radius small. Treat the URL like any other secret link: don't paste it into public channels and rotate when needed." --- Until now, sharing files from Appwrite often meant navigating permissions, managing access, or making files public, even when all you wanted was to send a file to someone outside your project. With Appwrite 1.7, we have introduced a new feature that will make file sharing a whole lot easier. diff --git a/src/routes/blog/post/announcing-full-schema-creation/+page.markdoc b/src/routes/blog/post/announcing-full-schema-creation/+page.markdoc index e3a686d7964..024c6367a6e 100644 --- a/src/routes/blog/post/announcing-full-schema-creation/+page.markdoc +++ b/src/routes/blog/post/announcing-full-schema-creation/+page.markdoc @@ -9,6 +9,19 @@ author: aditya-oberai category: announcement featured: false callToAction: true +faqs: + - question: "What is Full Schema Creation in Appwrite?" + answer: "Full Schema Creation lets you define a table, its columns, and its indexes in a single synchronous API request. When the call returns, the table is ready for reads and writes immediately. If anything fails validation, nothing is created, so you never end up with a half-built schema." + - question: "How was schema creation different before this feature?" + answer: "Previously you had to create the table, then create each column, wait for async column jobs to finish, then create indexes, then wait again. That step-wise flow introduced delays, race conditions in automation scripts, and brittle CI/CD setups. Full Schema Creation collapses all of that into one atomic call." + - question: "Is Full Schema Creation atomic?" + answer: "Yes, the entire operation is atomic. If a column type is invalid, an index conflicts, or a relationship reference is broken, [Appwrite Databases](/docs/products/databases) rolls everything back and reports the error. You can retry safely without cleaning up partial state." + - question: "Why does this matter for CI/CD?" + answer: "Test environments and preview deployments often spin up fresh databases and need them ready in seconds. Full Schema Creation removes async waits and the orchestration code that polls for column readiness, which makes schema bootstrapping deterministic. Your pipelines run faster with fewer flaky retries." + - question: "Can I include relationships and indexes in the same call?" + answer: "Yes, you define columns (including types, defaults, enums, and relationships) and indexes in the same request. [Appwrite](/docs/products/databases) validates the entire schema together before applying it, which catches inconsistencies up front rather than after partial creation." + - question: "What happens if validation fails?" + answer: "If any part of the schema fails (an invalid column, conflicting index, broken relationship), the entire operation is rolled back and you get an error describing what went wrong. You won't end up with a partially created table that needs manual cleanup." --- When you’re spinning up a new feature, environment, or test pipeline, schema creation shouldn’t be the slowest or most fragile step in your workflow. Yet traditionally, creating a usable table meant orchestrating multiple calls, waiting on async jobs, and hoping nothing failed halfway through. diff --git a/src/routes/blog/post/announcing-go-support/+page.markdoc b/src/routes/blog/post/announcing-go-support/+page.markdoc index 9bc32166967..cdf3da51d90 100644 --- a/src/routes/blog/post/announcing-go-support/+page.markdoc +++ b/src/routes/blog/post/announcing-go-support/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 7 author: matej-baco category: init, announcement featured: false +faqs: + - question: "Which Go version does Appwrite Functions support?" + answer: "[Appwrite Functions](/docs/products/functions) ships with the `go-1.23` runtime. You can self-host with this runtime by adding it to the `_APP_FUNCTIONS_RUNTIMES` environment variable, or use it directly on Appwrite Cloud. Your `go.mod` file pins the version, which you should not change." + - question: "Why is Go a good fit for serverless functions?" + answer: "Go compiles to machine code, so cold starts are fast (Appwrite benchmarks showed up to 3x faster cold starts versus interpreted runtimes) and base execution time is under 1 millisecond. Memory usage is also low, around 5x less than typical interpreted runtimes, which keeps function costs predictable under load." + - question: "How do I get started writing a Go function on Appwrite?" + answer: "Install the [Appwrite CLI](/docs/tooling/command-line) and run `appwrite init function`, then pick the Go runtime. The CLI scaffolds a `go.mod` and `main.go` with a `Main(Context openruntimes.Context)` handler. Deploy with `appwrite deploy function` and your function is live." + - question: "Does Appwrite have a Go SDK?" + answer: "Yes, Appwrite ships an official Go SDK at `github.com/appwrite/sdk-for-go`. You can use it from inside an [Appwrite Function](/docs/products/functions) or from any external Go service. The SDK exposes the same APIs as other Appwrite SDKs." + - question: "How do I read JSON from a request in a Go function?" + answer: "Use `Context.Req.BodyJson(&request)` to decode the request body into a Go struct, where `request` is your typed struct. To send JSON back, use `Context.Res.Json(value)` and optionally `Context.Res.WithStatusCode(code)` for the HTTP status. Types come from the `github.com/open-runtimes/types-for-go` package." + - question: "Is Go better than Node.js or Python for backend functions?" + answer: "Go's strengths are raw performance, low memory, and predictable concurrency through goroutines, which makes it a strong choice for CPU-bound or high-throughput workloads. Node.js and Python often win on developer velocity and ecosystem breadth. Pick by use case: Go for performance-sensitive paths, Node or Python for fast iteration and richer libraries." --- Compiled programming languages are well known for outperforming interpreted ones thanks to a compilation step. Today, Appwrite welcomes a new runtime for writing simple and performant functions, [Go](https://go.dev/). diff --git a/src/routes/blog/post/announcing-image-transformations-pricing/+page.markdoc b/src/routes/blog/post/announcing-image-transformations-pricing/+page.markdoc index 4f7ebf31912..8240d166e68 100644 --- a/src/routes/blog/post/announcing-image-transformations-pricing/+page.markdoc +++ b/src/routes/blog/post/announcing-image-transformations-pricing/+page.markdoc @@ -3,12 +3,26 @@ layout: post title: Announcing image transformation pricing description: To keep Appwrite Cloud sustainable, we are introducing pricing for image transformations. date: 2025-03-03 +lastUpdated: 2026-05-22 cover: /images/blog/announcing-image-transformations-pricing/cover.avif timeToRead: 4 author: eldad-fux category: product featured: false callToAction: true +faqs: + - question: "What is an origin image in Appwrite?" + answer: "An origin image is the original, unmodified image file stored in [Appwrite Storage](/docs/products/storage). It's the source for any transformation (resize, crop, quality change, filter). Each origin image supports unlimited transformations, and you're only billed once per origin image regardless of how many variants you generate." + - question: "How are image transformations priced on Appwrite Cloud?" + answer: "The Pro plan includes 100 origin images per month at no extra charge, and Enterprise has custom limits. Beyond the quota, additional origin images cost $5 per 1,000 images. There's no per-transformation fee, so applying 200 transformations across 50 origin images counts as 50 origin images, not 200. See the [pricing page](/pricing) for details." + - question: "How do I transform an image with Appwrite?" + answer: "Upload the image to [Appwrite Storage](/docs/products/storage), then use the `getFilePreview` endpoint with parameters like width, height, quality, opacity, border, and format. The transformed image is returned by the preview endpoint. Cache the result on the client or CDN to avoid regenerating the same variant repeatedly." + - question: "Does counting unique origin images mean variants are free?" + answer: "Generating multiple variants from the same source image doesn't add to the origin image count, so resizing a single image into thumbnail, mobile, and desktop sizes still counts as one origin image. This makes the pricing predictable when you serve responsive images at multiple breakpoints." + - question: "Is image transformation pricing applied to self-hosted Appwrite?" + answer: "No, the pricing applies only to [Appwrite Cloud](/pricing) on Pro and Enterprise plans. Self-hosted Appwrite has no usage charges because you run the infrastructure. The same `getFilePreview` API works the same way in both." + - question: "How can I keep image transformation costs predictable?" + answer: "Cache transformed images on a CDN or your client so the same variant isn't regenerated on every request. Use consistent image dimensions across breakpoints so you don't accidentally bloat the number of unique origin images. Monitor usage from your organization's usage page to spot unexpected spikes early." --- Image transformations are essential for modern applications, allowing developers to dynamically resize, crop, and modify images to suit different devices and use cases. With features like width and height adjustment, quality control, and various filters including opacity and border modifications, image transformations help deliver the perfect image for every situation while optimizing performance and user experience. This service has become a fundamental part of many applications, and we've worked hard to make it powerful yet simple to implement. @@ -25,7 +39,7 @@ As Appwrite continues to grow, we need to ensure that our platform remains susta ## What will change -We will begin charging for origin images used in transformations. To use this functionality, you will need to be on the Pro or Scale plan. Both plans will include 100 origin images per month at no additional charge. Beyond this allocation, additional origin images will be available at $5 per 1,000 images. +We will begin charging for origin images used in transformations. To use this functionality, you will need to be on the Pro or Enterprise plan. The Pro plan includes 100 origin images per month at no additional charge, with additional origin images at $5 per 1,000 images. Enterprise has custom limits. This change will help support the computational resources required for this valuable service and enable us to continue enhancing our platform. diff --git a/src/routes/blog/post/announcing-init-faster-smoother-better/+page.markdoc b/src/routes/blog/post/announcing-init-faster-smoother-better/+page.markdoc index a8d0589a6fa..31ae09ff2ae 100644 --- a/src/routes/blog/post/announcing-init-faster-smoother-better/+page.markdoc +++ b/src/routes/blog/post/announcing-init-faster-smoother-better/+page.markdoc @@ -9,6 +9,19 @@ timeToRead: 4 author: eldad-fux category: init, announcement featured: false +faqs: + - question: "When is the second Appwrite Init event?" + answer: "The second Init runs from August 19 to August 23, 2024. Each day brings a new product or feature announcement, along with Discord sessions with special guests from the community." + - question: "What can I expect from Init this time?" + answer: "Five days of announcements covering new products, features, and possibly a new SDK. There are also Discord sessions, a live coding session with Dennis Ivy, and limited-edition swag giveaways. Specifics for each day are revealed during the event." + - question: "How do I get the limited-edition Init swag?" + answer: "Claim your Init ticket on appwrite.io and follow [@appwrite on X](https://x.com/appwrite) for the giveaway details. Five swag packs (socks, water bottle, sweatpants, and a vest) are given away with winners announced each day during the week." + - question: "Will the announcements include new Appwrite SDKs or runtimes?" + answer: "Past Init events have shipped new SDKs and runtimes alongside platform features, so it's a likely highlight. The Appwrite team keeps the exact roadmap under wraps until each day's reveal. Follow the Discord events for the full list." + - question: "Where do I find the schedule of Init Discord events?" + answer: "The full list of Discord sessions and RSVP links are published at apwr.dev/InitKickOff and inside the [Appwrite Discord](https://discord.gg/appwrite) events tab. Each session has its own time slot and guest lineup." + - question: "Can I still join Init if I miss a day?" + answer: "Yes, all daily announcements are published on the [Appwrite blog](/blog) and remain available afterwards, so you can catch up at your own pace. Recordings of live sessions and posts on appwrite.io let you revisit what shipped during the week." --- The first [Init](https://appwrite.io/blog/post/announcing-init) earlier this year was a blast, and all of you who joined made it a week to remember and will go down in the history of Appwrite. Now we’re back with another Init to celebrate everything new with Appwrite. Faster. Smoother. Better. diff --git a/src/routes/blog/post/announcing-init/+page.markdoc b/src/routes/blog/post/announcing-init/+page.markdoc index e387d031641..6b34860e589 100644 --- a/src/routes/blog/post/announcing-init/+page.markdoc +++ b/src/routes/blog/post/announcing-init/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: eldad-fux category: init, announcement, product featured: false +faqs: + - question: "What is Appwrite Init?" + answer: "Init is an Appwrite event week where new products and features are launched daily, accompanied by online sessions on Discord with community guests. It's part product showcase, part developer hangout. The first Init ran from February 26 to March 1, 2024." + - question: "How do I claim my Init ticket?" + answer: "Register on the Init page on appwrite.io. Your ticket shows your unique GitHub contribution grid, and Appwrite contributors get a special edition variant. The ticket also enters you into a raffle for limited-edition Init swag." + - question: "What kinds of announcements happen during Init?" + answer: "Each day of Init unveils a new Appwrite product or feature, ranging from new runtimes and SDKs to platform features across [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), [Functions](/docs/products/functions), [Messaging](/docs/products/messaging), and more. Online sessions then walk through how to use what was announced." + - question: "Where do I join the Init events?" + answer: "The events are hosted on the [Appwrite Discord](https://discord.gg/appwrite), with RSVP links shared in the announcement. The closing party also happens on Discord on the final day. Joining the Appwrite Discord is the easiest way to get reminders." + - question: "Do I need an Appwrite account to participate in Init?" + answer: "You don't need an Appwrite account to register a ticket or join the Discord sessions, but signing up gives you a richer ticket variant and lets you try the new features as they're announced. Sign up at appwrite.io to follow along during the week." + - question: "Is Init free to attend?" + answer: "Yes, Init is a free, open online event. All the sessions, announcements, and content are available to anyone who claims a ticket or joins the [Appwrite Discord](https://discord.gg/appwrite)." --- We are very excited to announce Init. diff --git a/src/routes/blog/post/announcing-inversion-queries/+page.markdoc b/src/routes/blog/post/announcing-inversion-queries/+page.markdoc index 0e487061256..d03780bded4 100644 --- a/src/routes/blog/post/announcing-inversion-queries/+page.markdoc +++ b/src/routes/blog/post/announcing-inversion-queries/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: announcement featured: false +faqs: + - question: "What are inversion queries in Appwrite?" + answer: "Inversion queries are a set of `NOT` operators that let you filter by exclusion directly in [Appwrite Databases](/docs/products/databases) queries. Instead of fetching a broad result set and filtering on the client, you describe everything except the rows you want to skip. This keeps payloads small and logic on the server." + - question: "Which NOT operators does Appwrite support?" + answer: "Appwrite supports `notContains`, `notSearch`, `notBetween`, `notStartsWith`, and `notEndsWith`. Each mirrors its positive counterpart, so if you already use `contains` or `startsWith`, the inverted version slots in cleanly. You can combine them with other [query operators](/docs/products/databases/queries) for precise control." + - question: "Do inversion queries use the same indexes as positive queries?" + answer: "Yes, `NOT` operators use the same indexes as their positive counterparts. Be aware that `NOT` conditions can be less selective: an index helps narrow the rows considered, but excluding values doesn't always reduce the candidate set as much as including them. Profile heavy queries and pair NOT with selective positive filters where possible." + - question: "When should I use a NOT query instead of filtering on the client?" + answer: "Use a NOT query whenever the excluded set is a small fraction of the total rows or when the result would otherwise be large. That includes moderation pipelines, AB testing exclusions, search filters that hide categories, and compliance rules that skip flagged records. Server-side exclusion always beats fetching everything and filtering twice." + - question: "Can I combine multiple NOT operators in one query?" + answer: "Yes, you can compose multiple `not*` operators with other filters in the same query. For example, you might exclude records that contain banned keywords AND don't start with a test prefix AND aren't in a restricted date range. [Appwrite](/docs/products/databases) applies them together at query time." + - question: "Are inversion queries available on self-hosted Appwrite?" + answer: "Yes, inversion queries are available on both Appwrite Cloud and self-hosted deployments. If you're on a recent self-hosted version, the new `NOT` operators are exposed through your client SDKs just like the existing query operators." --- When you need to exclude certain records, the usual approach is to fetch a broad set of rows, sometimes even the entire collection, and then filter them in your application code. diff --git a/src/routes/blog/post/announcing-list-cache-ttl/+page.markdoc b/src/routes/blog/post/announcing-list-cache-ttl/+page.markdoc index 55f5466afc1..37f2dcf5252 100644 --- a/src/routes/blog/post/announcing-list-cache-ttl/+page.markdoc +++ b/src/routes/blog/post/announcing-list-cache-ttl/+page.markdoc @@ -9,6 +9,19 @@ author: jake-barnby category: announcement featured: false callToAction: true +faqs: + - question: "How do I cache a list query response in Appwrite?" + answer: "Pass a `ttl` parameter (in seconds) to your `listRows` call. The first request runs normally and stores the response in an in-memory cache. Every subsequent identical request returns the cached response until the TTL expires. See the [Appwrite Databases docs](/docs/products/databases) for full SDK examples." + - question: "What counts as an identical request for caching purposes?" + answer: "Cache lookups key on the database, table, queries, and other request parameters together. Two requests must match on all of those to hit the same cache entry. Changing a query, limit, offset, or auth context produces a different key and triggers a fresh database fetch." + - question: "When should I use TTL-based caching versus building my own cache?" + answer: "Use the built-in TTL cache for read-heavy endpoints where the data changes infrequently (leaderboards, product listings, dashboards, reference tables). Build your own cache only when you need richer invalidation, multi-region replication, or coordination across services that [Appwrite](/docs/products/databases) doesn't cover." + - question: "How long should I set the TTL?" + answer: "Pick a TTL that matches how stale the data can be. A dashboard showing aggregated stats might tolerate 60 seconds, while a product catalog could comfortably cache for several minutes. Shorter TTLs cut staleness but reduce cache hit rate, so test against your traffic to find the right balance." + - question: "Does the cache invalidate automatically when data changes?" + answer: "No, TTL-based caching is time-based, not invalidation-based. The cached response stays in memory until the TTL expires regardless of writes to the underlying rows. If you need fresher data right after a known write, use a shorter TTL or skip the `ttl` parameter for that read." + - question: "Is the cache shared across regions or per-instance?" + answer: "The cache is in-memory on Appwrite's serving layer, so behavior may vary by region and instance. For high cache hit rates, ensure your clients consistently send the same query parameters and target the same region. Treat TTL caching as a best-effort acceleration, not a strict shared cache." --- Read-heavy workloads hit the same queries over and over. Leaderboards, product listings, dashboard feeds, and reference tables all follow the same pattern: the data changes infrequently, but the reads never stop. Every request still runs a full database query, even when the result hasn't changed since the last call. diff --git a/src/routes/blog/post/announcing-local-development/+page.markdoc b/src/routes/blog/post/announcing-local-development/+page.markdoc index 6ee2447ad49..17a964b6a37 100644 --- a/src/routes/blog/post/announcing-local-development/+page.markdoc +++ b/src/routes/blog/post/announcing-local-development/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: matej-baco category: init, announcement, product featured: false +faqs: + - question: "How do I run an Appwrite Function locally?" + answer: "Install the [Appwrite CLI](/docs/tooling/command-line), authenticate with `appwrite login`, link your project with `appwrite init project`, and pull or create a function. Then run `appwrite run function` and pick the function to launch. It listens on `http://localhost:3000` by default." + - question: "What does local development need installed?" + answer: "You need the latest Appwrite CLI and Docker installed. The CLI uses Docker to replicate the production runtime exactly, which means bugs you see locally also reproduce in production. The CLI prompts you to install Docker if it isn't already available." + - question: "How does hot reload work for local functions?" + answer: "While `appwrite run function` is running, the CLI watches your function's folder and performs a hot swap when source files change, usually in under a second. If you change package manager files like `package.json`, the CLI triggers a rebuild automatically. Disable this with `--no-reload` if you prefer manual restarts." + - question: "Can I impersonate a user when testing locally?" + answer: "Yes, pass `--user-id=\"\"` to `appwrite run function` and the CLI injects the same `x-appwrite-user-id` and `x-appwrite-user-jwt` headers your function gets in production. This lets you test user-scoped permissions and JWT flows without touching your code. See the [Appwrite Functions docs](/docs/products/functions) for context details." + - question: "How do I use local Appwrite Functions in CI/CD?" + answer: "Install the Appwrite CLI in your pipeline, then run the same `appwrite run function` command with `--function-id` and `&` to background it. Once the function is listening on its port, your tests can hit it like any HTTP endpoint. This gives you integration tests that run inside the real function runtime." + - question: "Should I pull production variables into a local function?" + answer: "You can with `--with-variables`, but be careful since this pulls real production secrets. Prefer a local `.env` file with development-only values for most testing, and only pull production variables when you specifically need to reproduce a production-only bug." --- We are excited to announce a new addition to Appwrite Functions that makes function development faster and more enjoyable. With local development, the entire flow, including coding, testing, and debugging, becomes fast and reliable. diff --git a/src/routes/blog/post/announcing-message-based-realtime-sdk/+page.markdoc b/src/routes/blog/post/announcing-message-based-realtime-sdk/+page.markdoc index 1bd991a31a8..2f0f97c43db 100644 --- a/src/routes/blog/post/announcing-message-based-realtime-sdk/+page.markdoc +++ b/src/routes/blog/post/announcing-message-based-realtime-sdk/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 9 author: eldad-fux category: announcement featured: false +faqs: + - question: "How does Appwrite Realtime work in the new message-based model?" + answer: "Appwrite Realtime keeps one persistent WebSocket per client and applies subscription changes as messages over that connection. Channels, queries, and updates are sent as messages instead of being encoded in the WebSocket URL. This avoids URL length limits and lets you scale up listeners and filters without reconnecting." + - question: "Why did Appwrite move subscriptions off the WebSocket URL?" + answer: "Encoding subscriptions in the URL hit URL length limits enforced by browsers, servers, and proxies, especially after [Realtime queries](/blog/post/announcing-realtime-queries) made query payloads larger. Moving subscriptions to messages over the established socket removes that ceiling and avoids reconnects whenever you tweak what you listen to." + - question: "Does my existing Realtime code need to change?" + answer: "If you use the [Appwrite client SDKs](/docs/products/databases), most code keeps working because the SDK handles the new protocol under the hood. The new APIs expose `unsubscribe()`, `update()`, and `disconnect()` for cleaner lifecycle control. Check the SDK release notes for any breaking changes specific to your platform." + - question: "Can I subscribe to multiple channels on a single connection?" + answer: "Yes, you create one `Realtime` instance from a `Client` and call `subscribe` for each channel you want, all on the same WebSocket. Each subscription has its own callback. This keeps connection count low even when you listen to many channels." + - question: "How do I unsubscribe or update a subscription?" + answer: "Each `subscribe` call returns a subscription handle with `unsubscribe()` to stop a single listener, and `update()` to change channels or filters without reconnecting. Use `disconnect()` on the `Realtime` instance to tear down the entire WebSocket. This gives clear, predictable lifecycle control." + - question: "What kinds of events can I listen to via Realtime?" + answer: "[Appwrite Realtime](/docs/products/databases) emits events for database changes, storage uploads and updates, account events, function executions, and team or membership changes. You subscribe by channel (for example, `files` or `account`) and receive events as messages on your callback as they happen." --- Realtime features are where users feel your app is “alive”: collaborative edits, live dashboards, and instant feedback when data changes. That experience depends on how predictable your subscription lifecycle is. If every tweak to what you listen for forces a full reconnect, you pay in latency, battery, and mental overhead. diff --git a/src/routes/blog/post/announcing-mock-numbers-session-alerts/+page.markdoc b/src/routes/blog/post/announcing-mock-numbers-session-alerts/+page.markdoc index 483140d9deb..111d8092278 100644 --- a/src/routes/blog/post/announcing-mock-numbers-session-alerts/+page.markdoc +++ b/src/routes/blog/post/announcing-mock-numbers-session-alerts/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: luke-silver category: init, announcement, product featured: false +faqs: + - question: "What are mock numbers in Appwrite Auth?" + answer: "Mock numbers let you configure phone numbers that authenticate with a fixed, predefined verification code instead of receiving a real SMS. They're meant for testing and app review scenarios, where sending real OTPs is impractical or expensive. The mock number behaves like a normal phone in your [Appwrite Auth](/docs/products/auth) flow." + - question: "How do I configure mock phone numbers?" + answer: "Open the Appwrite Console, go to your project, and pick Auth, then Security. Add the phone numbers you want to mock along with their fixed verification codes. When those numbers are used in `createPhoneToken` and `createSessionWithPhone`, no SMS is sent and the predefined OTP is accepted." + - question: "Are mock numbers safe to use in production?" + answer: "Mock numbers are intentionally fake and should only be used for testing or controlled app-review flows. Don't expose them to real users and remove or rotate them before launch. Treat the predefined codes as test credentials, not production secrets." + - question: "What are session alerts?" + answer: "Session alerts send an email to a user whenever a new session is created on their account, with details about the sign-in. This lets users notice unauthorized access quickly and revoke the session. Alerts are enabled by default on [Appwrite Cloud](/docs/products/auth) and can be toggled per project in Auth, then Security." + - question: "Do session alerts work for users who haven't set an email?" + answer: "No, the alert email requires a verified email address on the user account. First-time sign-ins without an email on file also skip the alert. Encourage users to add an email and verify it so they get the benefit of the security notification." + - question: "Where can I enable session alerts for my project?" + answer: "In the Appwrite Console, go to Auth, then Security, and toggle session alerts on. From that point, [Appwrite Auth](/docs/products/auth) emails users with session details when new sessions are created. The same screen also exposes other security settings like mock numbers and password policies." --- We've listened to your feedback and are introducing two new features designed to simplify phone authentication testing and bolster account security. diff --git a/src/routes/blog/post/announcing-more-and-updated-runtimes/+page.markdoc b/src/routes/blog/post/announcing-more-and-updated-runtimes/+page.markdoc index 5e67c87017e..220e8965367 100644 --- a/src/routes/blog/post/announcing-more-and-updated-runtimes/+page.markdoc +++ b/src/routes/blog/post/announcing-more-and-updated-runtimes/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/runtimes.avif timeToRead: 6 author: vincent-ge category: product, announcement +faqs: + - question: "Which runtimes does Appwrite Functions support?" + answer: "Appwrite Functions supports a wide range of runtimes including Node.js, Bun, Deno, Python, PHP, Ruby, Dart, Kotlin, Java, Swift, and Rust. New versions are added regularly to keep pace with language updates. Check the [Appwrite Functions documentation](/docs/products/functions) for the full list of supported versions." + - question: "What is the difference between Bun and Node.js?" + answer: "Bun is a JavaScript runtime built around the JavaScriptCore engine, while Node.js uses V8. Bun bundles a dependency manager, test runner, and web server into one binary, and includes built-in TypeScript and JSX support. Benchmarks generally show Bun running faster than Node.js for many workloads, though Node.js has a larger ecosystem and longer track record." + - question: "What is sound null safety in Dart?" + answer: "Sound null safety means a variable cannot hold `null` unless its type explicitly allows it. The compiler enforces this at build time, so you catch potential null dereferences before your code runs. Dart 3 enforces sound null safety by default, which reduces runtime errors when integrating with third-party APIs or handling user input." + - question: "How do I use a specific runtime in Appwrite Functions?" + answer: "When creating a function in the Appwrite Console or via the CLI, select the runtime and version you want. Each function is pinned to a specific runtime version so updates to the platform do not break your code. You can update the runtime version later from the function settings." + - question: "What is YJIT in Ruby 3.3?" + answer: "YJIT is a Just-In-Time compiler shipped with Ruby that compiles hot Ruby code to machine code at runtime. It improves execution speed for many real-world Rails workloads without requiring changes to your application. Ruby 3.3 includes performance and stability improvements to YJIT over earlier releases." + - question: "Can I deploy an Appwrite Function from a Git repository?" + answer: "Yes. You can connect a function to a GitHub repository and Appwrite will deploy automatically on every push to the configured branch. This works with all supported runtimes and also lets you use function templates to scaffold a project in one click." --- Previously, we completely reimagined [Functions](https://dev.to/appwrite/serverless-your-way-unleashing-appwrite-functions-true-potential-2l4f) to be more flexible and innovative yet familiar to developers. Now, Appwrite expands and updates the runtime ecosystem available on Appwrite with Bun 1.0.29, Node 21, Ruby 3.3, Deno 1.40, PHP 8.3, Python 3.12, Kotlin 1.9, Java 18, Swift 5.9 and Dart 3.3 support. diff --git a/src/routes/blog/post/announcing-new-changelog/+page.markdoc b/src/routes/blog/post/announcing-new-changelog/+page.markdoc index faed1646fb8..6ec7c668669 100644 --- a/src/routes/blog/post/announcing-new-changelog/+page.markdoc +++ b/src/routes/blog/post/announcing-new-changelog/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/changelog.avif timeToRead: 5 author: eldad-fux category: product, announcement +faqs: + - question: "Where can I find the Appwrite changelog?" + answer: "The Appwrite changelog lives at [appwrite.io/changelog](/changelog) and is also surfaced through a badge in the website navigation when there are new entries. Each entry summarizes a release, feature, or fix and links to related blog posts, docs, or videos where relevant." + - question: "How often is the Appwrite changelog updated?" + answer: "The changelog is updated whenever new features, improvements, or fixes ship across Appwrite Cloud or self-hosted releases. Smaller updates and bug fixes also appear there, so checking it regularly is the quickest way to see what has changed between releases." + - question: "Why should developers read product changelogs?" + answer: "Changelogs let you keep your integrations current, spot deprecations early, and learn about new features that could replace custom code in your app. For backend platforms in particular, knowing exactly what changed between versions is critical for planning upgrades and debugging unexpected behavior." + - question: "What is the difference between a changelog and release notes?" + answer: "Release notes are usually tied to a specific version and focus on the changes shipping in that release. A changelog is a running log that captures changes over time, often grouped by date or feature area. Appwrite's changelog covers both shipped releases and smaller incremental updates." + - question: "How can I provide feedback on Appwrite features?" + answer: "You can join the conversation on [Discord](https://appwrite.io/discord) or open issues and discussions on GitHub. Feedback from the community directly shapes which features are prioritized and how existing ones evolve." + - question: "Does Appwrite follow semantic versioning?" + answer: "Appwrite follows semantic versioning (`MAJOR.MINOR.PATCH`) for its server releases. Breaking changes are reserved for major versions, new backwards-compatible features for minor versions, and fixes for patch versions, so you can reason about upgrade risk from the version number alone." --- At Appwrite, we're constantly evolving our products, features, and experience, and we understand it is challenging to keep up with these modifications. Therefore, we introduce the Changelog feed to our website. An easier way to be informed about releases, updates, and fixes. The new Changelog feed is our commitment to transparency and collaboration and a great tool to be easily in the loop with all the small or big changes in our products. diff --git a/src/routes/blog/post/announcing-new-push-notifications-features/+page.markdoc b/src/routes/blog/post/announcing-new-push-notifications-features/+page.markdoc index 11342c3ebcc..bf562b308d6 100644 --- a/src/routes/blog/post/announcing-new-push-notifications-features/+page.markdoc +++ b/src/routes/blog/post/announcing-new-push-notifications-features/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: product callToAction: true +faqs: + - question: "How do I send push notifications with Appwrite?" + answer: "Use [Appwrite Messaging](/docs/products/messaging) with the `createPush` endpoint, targeting users, topics, or specific device tokens. Appwrite handles the underlying delivery through APNs for Apple devices and FCM for Android devices, so you only need to configure providers once." + - question: "What is a silent push notification on iOS?" + answer: "A silent or background push is a notification with `content-available` set to true and no visible alert. iOS wakes the app in the background to process the payload, which is useful for data syncs and content prefetching. Apple limits these to roughly 2 to 3 per hour to preserve battery." + - question: "What are iOS critical alerts?" + answer: "Critical alerts are notifications that can break through Do Not Disturb and silent mode. They require a special entitlement from Apple and are intended for safety, health, or security use cases like medical alerts, security warnings, or emergency notifications." + - question: "What is the difference between normal and high priority push notifications?" + answer: "Normal priority notifications can be delayed or grouped by the operating system to save battery, which is good for non-urgent updates. High priority notifications are delivered immediately and should be reserved for time-sensitive content like chat messages or alerts." + - question: "Do I need separate code for iOS and Android push notifications in Appwrite?" + answer: "No. Appwrite Messaging exposes a single API that maps onto APNs for Apple and FCM for Android. You set parameters once and Appwrite forwards them to the appropriate provider, so you only need to handle platform-specific concerns when a feature only exists on one platform." + - question: "Can I clear the app icon badge count from Appwrite?" + answer: "Yes. Set the `badge` field on the push payload to the desired count, or pass `0` to clear an existing badge. This works with iOS devices and is delivered through the standard `createPush` and `updatePush` endpoints." --- We're excited to introduce new additions to Appwrite Messaging that give you greater control over how you send and handle push notifications in your app. diff --git a/src/routes/blog/post/announcing-openjsfoundation-silver-membership/+page.markdoc b/src/routes/blog/post/announcing-openjsfoundation-silver-membership/+page.markdoc index ad543c29284..dab19056bad 100644 --- a/src/routes/blog/post/announcing-openjsfoundation-silver-membership/+page.markdoc +++ b/src/routes/blog/post/announcing-openjsfoundation-silver-membership/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: laura-du-ry category: announcement, open-source featured: false +faqs: + - question: "What is the OpenJS Foundation?" + answer: "The OpenJS Foundation is a vendor-neutral organization hosted under the Linux Foundation that supports key open source JavaScript projects, including Node.js, Electron, and jQuery. It provides legal, infrastructure, marketing, and governance support to keep these projects sustainable and community-driven." + - question: "Why did Appwrite join the OpenJS Foundation?" + answer: "Appwrite is built on open source principles and JavaScript is core to many of its SDKs and runtimes. Joining as a Silver Member lets Appwrite contribute back to the projects it depends on and stay close to the JavaScript ecosystem's standards and direction." + - question: "Is Appwrite an open source project?" + answer: "Yes. Appwrite is licensed under the BSD-3-Clause license and the source code is available on [GitHub](https://github.com/appwrite/appwrite). You can self-host the entire stack, contribute changes, or fork the project." + - question: "What is the Appwrite OSS Program?" + answer: "The Appwrite OSS Program offers a free Pro subscription on Appwrite Cloud to qualifying open source maintainers. It is designed to reduce the financial burden of running infrastructure for nonprofit or pre-revenue open source projects. You can apply through the OSS program page on the website." + - question: "How can I contribute to Appwrite?" + answer: "Open an issue or pull request on the [Appwrite GitHub repository](https://github.com/appwrite/appwrite), or contribute to any of the SDKs and tooling repositories under the Appwrite organization. Discussions and feature ideas are welcome on Discord and GitHub Discussions." + - question: "Why does vendor-neutral governance matter for open source projects?" + answer: "Vendor-neutral governance means no single company can unilaterally control a project's direction. This protects users from sudden licensing changes or strategy shifts and lets the wider community shape priorities, which is especially important for foundational tools many businesses rely on." --- We’re excited to share that Appwrite is now an official Silver Member of the OpenJS Foundation. By joining forces with the OpenJS Foundation, we’re doubling down on our promise to give back to the open source community. diff --git a/src/routes/blog/post/announcing-opt-in-relationship-loading/+page.markdoc b/src/routes/blog/post/announcing-opt-in-relationship-loading/+page.markdoc index 626b40dc1fe..619e3681bb6 100644 --- a/src/routes/blog/post/announcing-opt-in-relationship-loading/+page.markdoc +++ b/src/routes/blog/post/announcing-opt-in-relationship-loading/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: darshan-pandya category: announcement featured: false +faqs: + - question: "What is opt-in relationship loading in Appwrite Databases?" + answer: "Opt-in relationship loading means related rows are no longer fetched automatically when you query a table. You explicitly specify which relationships to include in each query, so payloads stay lean and you avoid pulling data you do not need. See the [Appwrite Databases relationships documentation](/docs/products/databases/relationships) for details." + - question: "What is the N+1 query problem?" + answer: "The N+1 query problem happens when fetching a list of N items triggers one extra query per item to load related data, resulting in N+1 total database calls. It is a common source of slow API responses. Opt-in relationship loading helps avoid it by letting you fetch only the relationships you actually need in a single query." + - question: "Will opt-in relationship loading break my existing Appwrite app?" + answer: "Old SDK versions continue to behave as before for backwards compatibility. New SDK versions return only immediate fields by default and require you to opt in to relationships. If you upgrade SDKs, review queries that previously relied on automatic relationship hydration and add explicit selections where needed." + - question: "How do I reduce payload sizes in API responses?" + answer: "Return only the fields and related objects the client actually needs. In Appwrite Databases this means using selection queries to choose specific columns, opting in to relationships you need, and avoiding nested fetches that pull unrelated data. Smaller payloads improve both server response time and client rendering speed." + - question: "Are relationship queries supported in Appwrite Databases?" + answer: "Yes. Appwrite Databases supports filter queries across relationship columns using dot notation (for example `author.name`). Combined with opt-in loading, this lets you fetch precisely the related data you need without overfetching. See the [databases documentation](/docs/products/databases) for query syntax." + - question: "Is opt-in relationship loading available on self-hosted Appwrite?" + answer: "Yes. The feature is available on both Appwrite Cloud and self-hosted installations. Make sure your server and SDK versions are up to date so you can use the new query syntax and benefit from the smaller default payloads." --- Being able to move fast is crucial for any developer, and nothing disrupts productivity more than unnecessary waiting. Long loading times, especially when fetching data, are not only frustrating but also slow down your development cycle and degrade user experience in production. Excessive or unintended data loading can lead to bloated JSON payloads, increased latency, and unnecessary consumption of network and compute resources. diff --git a/src/routes/blog/post/announcing-phone-OTP-pricing/+page.markdoc b/src/routes/blog/post/announcing-phone-OTP-pricing/+page.markdoc index 3d93e5cb1a1..ab33e8e260b 100644 --- a/src/routes/blog/post/announcing-phone-OTP-pricing/+page.markdoc +++ b/src/routes/blog/post/announcing-phone-OTP-pricing/+page.markdoc @@ -9,6 +9,19 @@ author: eldad-fux category: product, announcement featured: false callToAction: true +faqs: + - question: "How much does phone OTP login cost on Appwrite Cloud?" + answer: "Phone OTP rates vary by destination country because SMS costs differ widely across telecom providers. The full breakdown by region is published on the [Appwrite rates page](/docs/advanced/platform/phone-otp#rates). Pricing is per delivered message, so usage scales linearly with the number of OTP attempts you send." + - question: "Where can I see my phone OTP usage in Appwrite?" + answer: "Open your organization or project usage page in the Appwrite Console to see SMS usage broken down by month and destination. This helps you forecast spend before the billing cycle and identify any unexpected spikes in OTP volume." + - question: "How does phone OTP login work?" + answer: "When a user requests login, the server generates a short, time-limited code and sends it to the user's phone via SMS. The user enters that code in your app to prove possession of the phone number, and the server validates it before issuing a session. The code typically expires within a few minutes." + - question: "How can I reduce SMS OTP costs?" + answer: "Combine SMS OTP with other authentication factors so you only fall back to SMS when necessary. Options include email OTP, magic URLs, OAuth providers, passkeys, or [TOTP-based 2FA](/docs/products/auth). You can also enforce rate limits and CAPTCHA on the OTP endpoint to discourage abuse that drives up costs." + - question: "What authentication methods does Appwrite Auth support besides SMS OTP?" + answer: "Appwrite Auth supports email and password, magic URLs, email OTP, phone OTP, anonymous sessions, JWT, OAuth across 30+ providers, and TOTP-based two-factor authentication. See [Appwrite Auth](/docs/products/auth) for the full list and integration guides." + - question: "Is phone OTP login secure?" + answer: "SMS-based OTPs are stronger than passwords alone because they require possession of the user's phone, but they are not immune to SIM swapping or interception attacks. For sensitive accounts, pair SMS OTP with a second factor such as TOTP or use TOTP as the primary method instead." --- One-time password (OTP) logins with SMS provide a secure and convenient way for users to authenticate themselves, ensuring that only authorized individuals can access accounts. By sending a temporary, time-sensitive code via SMS, phone OTP logins offer a strong layer of security, helping prevent unauthorized access and protecting user data. This service has become a crucial part of many applications, and we've worked hard to make it as easy and scalable as possible. diff --git a/src/routes/blog/post/announcing-pricing/+page.markdoc b/src/routes/blog/post/announcing-pricing/+page.markdoc index dd52a851994..f88aff203ca 100644 --- a/src/routes/blog/post/announcing-pricing/+page.markdoc +++ b/src/routes/blog/post/announcing-pricing/+page.markdoc @@ -3,10 +3,24 @@ layout: post title: Announcing Cloud pricing plans description: Appwrite Cloud pricing are now available. date: 2023-08-08 +lastUpdated: 2026-05-22 cover: /images/blog/cloud-pricing.avif timeToRead: 5 author: laura-du-ry category: announcement +faqs: + - question: "What pricing plans does Appwrite Cloud offer?" + answer: "Appwrite Cloud offers a Free plan for side projects, a Pro plan for production apps priced per project, and an Enterprise plan for larger organizations that need higher limits, advanced security, and premium support. See the current [pricing page](/pricing) for up-to-date numbers." + - question: "Why does Appwrite charge per project instead of per organization member?" + answer: "Per-seat pricing limits collaboration and pushes teams to share accounts. Charging per project ties cost to where Appwrite delivers value (Databases, Auth, Storage, Functions, and so on), with unlimited members on every paid project. See the [pricing update](/blog/post/appwrite-pricing-update) for the full reasoning." + - question: "Is Appwrite still free to use?" + answer: "Yes. The Free plan covers side projects and prototyping, and self-hosted Appwrite is free and open source under the BSD-3-Clause license. Paid plans are intended for production workloads that exceed Free plan limits." + - question: "Does Appwrite offer a free plan for open source maintainers?" + answer: "Yes. The [Appwrite OSS Program](/blog/post/announcing-the-appwrite-oss-program) gives qualifying open source maintainers free access to Appwrite Pro. Projects need to meet criteria such as an OSI-approved license, active development, and a minimum number of stars and contributions." + - question: "Can I self-host Appwrite for free?" + answer: "Yes. Appwrite is open source and you can self-host the entire platform at no licensing cost. You only pay for the infrastructure you run it on. The self-hosted version includes the same core features as Appwrite Cloud." + - question: "How does Appwrite compare to Firebase pricing?" + answer: "Both platforms offer a free tier and pay-as-you-grow plans. Appwrite differentiates itself with per-project pricing on Pro, transparent rate cards, and the option to self-host at no licensing cost. Compare actual usage against [Appwrite's pricing](/pricing) and Firebase's calculator to see which fits your workload." --- An important day has come for Appwrite, where we finally announce the pricing for Appwrite Cloud. Many of you mentioned that in order to continue building with Appwrite Cloud it is important to know what the potential costs are. So due to the high number of requests and to provide clarity we decided to share our pricing models before they're live. Please note that Appwrite Cloud continues to be free untill billing is enabled towards the end of 2024. diff --git a/src/routes/blog/post/announcing-realtime-channel-helpers/+page.markdoc b/src/routes/blog/post/announcing-realtime-channel-helpers/+page.markdoc index 0969673255e..0e720a97473 100644 --- a/src/routes/blog/post/announcing-realtime-channel-helpers/+page.markdoc +++ b/src/routes/blog/post/announcing-realtime-channel-helpers/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: announcement featured: false +faqs: + - question: "What are Realtime channel helpers in Appwrite?" + answer: "Channel helpers are a fluent, type-safe API for building Appwrite Realtime channel strings without manual concatenation. Instead of writing strings like `databases..tables..rows.`, you chain methods on the `Channel` class and the SDK builds the correct string with IDE autocomplete and compile-time checks." + - question: "How does Appwrite Realtime work?" + answer: "[Appwrite Realtime](/docs/apis/realtime) opens a single WebSocket connection per client and streams events for every channel that client subscribes to. When data changes in your project, Appwrite emits an event and pushes it to every subscribed client over that connection, so you do not need to poll." + - question: "Which channels does Appwrite Realtime support?" + answer: "Realtime supports account events, database rows, storage files, team and membership updates, and function executions. You can scope subscriptions to a specific resource, a wildcard, or filter by event type like create, update, or delete." + - question: "Do channel helpers work in all Appwrite SDKs?" + answer: "Channel helpers are available in the Web, Flutter, Apple, and Android client SDKs. The API surface is consistent across platforms, so the same patterns you use in JavaScript work in Dart, Swift, and Kotlin." + - question: "Are string-based realtime subscriptions still supported?" + answer: "Yes. Existing string-based subscriptions continue to work for backwards compatibility. Channel helpers are an additive API, so you can adopt them incrementally without rewriting existing code." + - question: "How do I subscribe to only update events instead of all events?" + answer: "Chain `.update()` (or `.create()`, `.delete()`) on the channel helper to filter by event type. For example, `Channel.tablesdb('db').table('t').row().update()` only delivers events when an existing row is updated, not when one is created or deleted." --- If you've built realtime features in your apps, you've likely written channel strings by hand: concatenating IDs, formatting wildcards, and hoping you didn't introduce a typo that would silently break your subscription. While writing channel strings like `databases.*.tables.*.rows.*` works, it's error-prone and harder to maintain as your application grows. diff --git a/src/routes/blog/post/announcing-realtime-queries/+page.markdoc b/src/routes/blog/post/announcing-realtime-queries/+page.markdoc index 7466d43b03b..cf73063ad3f 100644 --- a/src/routes/blog/post/announcing-realtime-queries/+page.markdoc +++ b/src/routes/blog/post/announcing-realtime-queries/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: jake-barnby category: announcement featured: false +faqs: + - question: "What are Realtime queries in Appwrite?" + answer: "Realtime queries let you pass standard Appwrite SDK queries when subscribing to a channel. Events are filtered server-side based on those queries, so your callback only fires when the payload matches. This eliminates manual filtering inside subscription handlers." + - question: "Which query operators work with Appwrite Realtime?" + answer: "Realtime supports a focused subset of operators: comparison (`equal`, `notEqual`, `greaterThan`, `greaterThanEqual`, `lessThan`, `lessThanEqual`), null checks (`isNull`, `isNotNull`), and logical composition (`and`, `or`). These cover the most common patterns for filtering live updates." + - question: "Why filter realtime events on the server instead of the client?" + answer: "Server-side filtering reduces bandwidth and CPU on the client because unmatched events never cross the network. It also keeps your subscription logic declarative, so you reason about what should trigger a callback in one place rather than scattering `if` checks across handlers." + - question: "Do Realtime queries replace Channel helpers?" + answer: "No. Channel helpers describe which resources to subscribe to, while Realtime queries describe which payloads to deliver. They are complementary: use channel helpers to scope the subscription to a table or row pattern, then add queries to filter the matching events." + - question: "Are Realtime queries available on all Appwrite client SDKs?" + answer: "Yes. Realtime queries are supported on the Web, Flutter, Apple, and Android client SDKs. The API uses the same `Query` helper class you already use for database operations, so there is no new query syntax to learn." + - question: "How do I subscribe to all changes for a specific user in a table?" + answer: "Subscribe to the table's row channel and pass a query that filters by user, for example `Query.equal('userId', [currentUserId])`. The server only emits events on that subscription when the payload matches, so you get a focused stream without writing filter code in your callback." --- If you've built realtime features with Appwrite, you've likely written filtering logic inside your subscription callbacks: checking payload fields, comparing values, and discarding events you don't need. While this works, it adds boilerplate to your client code and means you're still receiving and processing every event on the channel, even the ones you'll throw away. diff --git a/src/routes/blog/post/announcing-relationship-queries/+page.markdoc b/src/routes/blog/post/announcing-relationship-queries/+page.markdoc index 4b302b8afce..008a04e7362 100644 --- a/src/routes/blog/post/announcing-relationship-queries/+page.markdoc +++ b/src/routes/blog/post/announcing-relationship-queries/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: announcement featured: false +faqs: + - question: "How do I query across relationships in Appwrite Databases?" + answer: "Use dot notation in your query, for example `Query.equal('author.name', ['Jake'])`. Appwrite translates the dotted path into a filter on the related table's column. All standard comparison operators are supported, including equality, ranges, contains, and spatial operators." + - question: "What kinds of relationships does Appwrite support?" + answer: "[Appwrite Databases](/docs/products/databases/relationships) supports one-to-one, one-to-many, many-to-one, and many-to-many relationships. You define them on columns and choose whether deletes cascade, restrict, or set null. Relationships can be queried in both directions when configured as two-way." + - question: "How fast are relationship queries in Appwrite?" + answer: "Recent improvements deliver a 12 to 18 times performance gain for relationship operations. The gains apply automatically to existing relationships, so loading nested data like a user's posts or an order's line items is significantly faster without any code changes." + - question: "Do I need to opt in to the relationship performance improvements?" + answer: "No. The performance improvements apply automatically across Appwrite Cloud and self-hosted installations. If you are already using relationships, the same code returns results faster without any configuration changes." + - question: "Can I combine relationship queries with other filters?" + answer: "Yes. You can mix relationship filters with regular filters on the parent table in the same `queries` array. This lets you express conditions like find posts whose author is in a given country and whose status is published in a single query." + - question: "What is the difference between filtering by a relationship and loading a relationship?" + answer: "Filtering by a relationship uses dot notation to narrow which parent rows are returned based on related data. Loading a relationship hydrates the related rows in the response. With opt-in relationship loading, you can do one without the other, keeping payloads small while still filtering precisely." --- If you've worked with relationships in Appwrite, you've likely run into two pain points: they presented performance challenges, and you couldn't query across them. If you wanted to find all posts by a specific author or all orders containing a certain product, you had to fetch everything and filter in your application layer. diff --git a/src/routes/blog/post/announcing-roles-for-enhanced-collaboration-and-security/+page.markdoc b/src/routes/blog/post/announcing-roles-for-enhanced-collaboration-and-security/+page.markdoc index 9b8bb4bc494..ece7d5f7874 100644 --- a/src/routes/blog/post/announcing-roles-for-enhanced-collaboration-and-security/+page.markdoc +++ b/src/routes/blog/post/announcing-roles-for-enhanced-collaboration-and-security/+page.markdoc @@ -3,14 +3,28 @@ layout: post title: "Introducing Roles: Enhanced collaboration and security in Appwrite" description: Roles is a new addition to the Appwrite Console that has been anticipated for a long time by the community. This feature will make permission handling a whole lot easier. date: 2024-09-25 +lastUpdated: 2026-05-22 cover: /images/blog/new-roles/cover.avif timeToRead: 8 author: eldad-fux category: product, announcement featured: false +faqs: + - question: "What roles can I assign to team members in the Appwrite Console?" + answer: "Appwrite offers five built-in organization roles: Owner, Developer, Editor, Analyst, and Billing. Each role grants a different scope of access, from full administrative control to read-only or billing-only access. Custom roles for the Enterprise plan are coming soon." + - question: "What is the difference between an Owner and a Developer in Appwrite?" + answer: "Owners have full control including team management, billing, and project creation. Developers have access to all development resources like databases, functions, and storage but cannot manage the team or billing. Use Developer for engineers who need to build but should not change membership or financial settings." + - question: "Can I give a team member read-only access in Appwrite?" + answer: "Yes. The Analyst role provides read-only access to all resources in the project, ideal for stakeholders who need to view data, analytics, or reports without making changes. They can browse the console without any risk of modifying state." + - question: "What is the principle of least privilege?" + answer: "Least privilege means giving users only the permissions they need to do their job and nothing more. Applied to a backend platform, it means using purpose-built roles like Editor or Analyst for non-engineers rather than handing everyone Owner access. This limits the blast radius if a credential is compromised." + - question: "Are custom roles available in Appwrite?" + answer: "Custom Roles are coming soon to the Enterprise plan and will let you fine-tune permissions to match your team structure. Once available, if the built-in roles do not match your access policy, you can define exactly which actions each role can perform." + - question: "How is organization-level access different from project-level permissions in Appwrite?" + answer: "Organization roles control what users can do in the Appwrite Console, like creating projects or managing billing. Resource-level permissions on databases, files, and other [Appwrite resources](/docs/products/databases) control what end users of your application can read or write. They serve different purposes and are configured separately." --- -We’re excited to announce a new feature available in the Pro and Scale plans: **Roles**. This enhancement is designed to bring granular permissions to the Appwrite Console, improving both team collaboration and security across your projects. +We’re excited to announce a new feature available in the Pro and Enterprise plans: **Roles**. This enhancement is designed to bring granular permissions to the Appwrite Console, improving both team collaboration and security across your projects. # The benefit of multiple roles @@ -29,8 +43,7 @@ But now, alongside the existing owner role, we’ve added four new roles that yo - **Billing**: This role is strictly for billing-related actions, with access limited to billing details only, keeping financial data secure without touching other areas of your projects. # Invite more members for free -The new feature is now available on both the Pro and Scale plans. To celebrate the new feature, until the end of the year, you can invite members with the new roles to your Pro teams for free! This is the perfect opportunity to explore the new feature and see how it enhances your team's workflow. -Starting in the new year, member seats will be priced at $15 per month as part of our standard pricing. +The new feature is now available on both the Pro and Enterprise plans, with unlimited members on every paid project after Appwrite moved to per-project pricing. # How to add new members with roles @@ -44,7 +57,7 @@ A modal will pop up, allowing you to invite new members and assign them one of t # What’s next: Custom Roles -For teams with more specific needs, we’re excited to share that **Custom Roles** will soon be available for Scale and Enterprise plans. These roles will allow you to fine-tune permissions, creating tailored access levels based on your unique team structure and workflow. +For teams with more specific needs, we’re excited to share that **Custom Roles** will soon be available for the Enterprise plan. These roles will allow you to fine-tune permissions, creating tailored access levels based on your unique team structure and workflow. # More flexibility diff --git a/src/routes/blog/post/announcing-rust-runtime/+page.markdoc b/src/routes/blog/post/announcing-rust-runtime/+page.markdoc index 0a5a422d724..c224ca7d011 100644 --- a/src/routes/blog/post/announcing-rust-runtime/+page.markdoc +++ b/src/routes/blog/post/announcing-rust-runtime/+page.markdoc @@ -9,6 +9,19 @@ author: chirag-aggarwal category: announcement featured: false callToAction: true +faqs: + - question: "Which Rust version does Appwrite Functions support?" + answer: "Appwrite Functions supports Rust 1.83 as a first-class runtime. You can scaffold a new function using the [Appwrite CLI](/docs/tooling/command-line/installation) with `appwrite init function` and selecting the `rust-1.83` runtime, then deploy it like any other Appwrite Function." + - question: "Why use Rust for serverless functions?" + answer: "Rust compiles to native machine code, which delivers low latency, predictable throughput, and tight memory usage. Memory safety is enforced at compile time without a garbage collector, so there are no GC pauses to worry about during high-traffic workloads. This makes Rust a strong choice for hot-path business logic, image transforms, and signature verification." + - question: "Does Appwrite provide a Rust SDK?" + answer: "Yes. The Appwrite Rust SDK is published on [crates.io](https://crates.io/crates/appwrite) and provides async, type-safe access to every server API. Pair it with the dynamic API key Appwrite injects into each execution and you can call Appwrite from inside your function without managing credentials manually." + - question: "How does memory safety work in Rust without garbage collection?" + answer: "Rust uses ownership rules and a borrow checker enforced at compile time. The compiler tracks which part of the program owns each value and rejects code that could create dangling references or data races. This means no runtime GC overhead and entire classes of bugs are caught before the binary ships." + - question: "What is Tokio in Rust?" + answer: "Tokio is the most widely used async runtime in the Rust ecosystem. It provides a multi-threaded scheduler, async I/O primitives, and integrations with libraries for HTTP, databases, and timers. Most Rust serverless code uses Tokio under the hood to handle concurrent work without blocking the request." + - question: "Can I call other Appwrite services from a Rust function?" + answer: "Yes. Use the Appwrite Rust SDK along with the dynamic API key Appwrite passes into each execution to call databases, storage, messaging, or any other [Appwrite product](/docs/products/functions). The same pattern works on Appwrite Cloud and self-hosted deployments." --- When you build a function that runs on every request, every millisecond and every megabyte matters, and cold starts and memory ceilings start to add up quickly. That is exactly the kind of workload Rust was made for. diff --git a/src/routes/blog/post/announcing-screenshots-api/+page.markdoc b/src/routes/blog/post/announcing-screenshots-api/+page.markdoc index c38a364f0fc..082a5202db5 100644 --- a/src/routes/blog/post/announcing-screenshots-api/+page.markdoc +++ b/src/routes/blog/post/announcing-screenshots-api/+page.markdoc @@ -9,6 +9,19 @@ author: aditya-oberai category: announcement featured: false callToAction: true +faqs: + - question: "What is the Appwrite Screenshots API?" + answer: "The Screenshots API is part of [Appwrite Avatars](/docs/products/network) and lets you generate webpage screenshots with a single API call. You provide a URL and optional parameters like viewport, locale, and theme, and Appwrite renders the page in a managed headless browser and returns the image." + - question: "Do I need to run my own headless browser to use the Screenshots API?" + answer: "No. Appwrite manages the underlying headless browser infrastructure. You make an SDK or REST call with the URL and rendering options you want, and Appwrite handles browser launch, rendering, and scaling, so you do not maintain Playwright or Puppeteer pipelines." + - question: "Can I capture full-page screenshots or only the viewport?" + answer: "Both. The Screenshots API supports viewport-only and full-page screenshots. Full-page mode scrolls the entire document and stitches the result into a single image, which is useful for visual documentation and link previews of long pages." + - question: "Can the Screenshots API simulate mobile devices and dark mode?" + answer: "Yes. You can set the viewport size, device scale, user agent, locale, timezone, and geolocation, and toggle dark mode rendering. This is useful for testing responsive layouts, validating localized content, and capturing region-specific behavior without spinning up real devices." + - question: "What are common use cases for a screenshot API?" + answer: "Typical uses include generating link preview images for social sharing, building visual documentation and changelogs, archiving pages for compliance, running visual QA across breakpoints, and powering dashboard widgets. Anywhere you need a consistent image of a web page on demand, a screenshot API simplifies the pipeline." + - question: "Is the Appwrite Screenshots API available on self-hosted Appwrite?" + answer: "The Screenshots API is part of Appwrite Avatars and ships in Appwrite. Make sure you are running a version that includes it and your network configuration allows the rendering service to reach the URLs you want to capture." --- Capturing consistent, high-quality screenshots of web pages is harder than it should be. diff --git a/src/routes/blog/post/announcing-spatial-columns/+page.markdoc b/src/routes/blog/post/announcing-spatial-columns/+page.markdoc index 17f4cf96c59..0d3d1c5a5ad 100644 --- a/src/routes/blog/post/announcing-spatial-columns/+page.markdoc +++ b/src/routes/blog/post/announcing-spatial-columns/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: announcement featured: false +faqs: + - question: "What are spatial columns in Appwrite Databases?" + answer: "Spatial columns are first-class geographic data types: `point` for single locations, `line` for paths and routes, and `polygon` for regions and boundaries. They let you store geometry directly in [Appwrite Databases](/docs/products/databases) without serializing coordinates into strings or arrays." + - question: "Which spatial query operators does Appwrite support?" + answer: "Appwrite ships 12 geo operators: `crosses`, `notCrosses`, `distanceEqual`, `distanceNotEqual`, `distanceGreaterThan`, `distanceLessThan`, `intersects`, `notIntersects`, `overlaps`, `notOverlaps`, `touches`, and `notTouches`. These cover the common spatial predicates needed for geofencing, routing, and proximity search." + - question: "What is a spatial index and why do I need one?" + answer: "A spatial index is a data structure designed to accelerate geometric queries like point-in-polygon or nearest-neighbor lookups. Without one, spatial queries scan every row and slow down as data grows. Appwrite supports a `spatial` index type that you should add to any column you query geographically." + - question: "How do I find all points within a given distance of a location?" + answer: "Use the `distanceLessThan` operator with the target point and a radius in meters. For example, a query that returns all bus stops within 200 meters of a user's location. Pair the query with a spatial index on the column for fast lookups even at scale." + - question: "What is the difference between point, line, and polygon data?" + answer: "A point is a single coordinate (latitude and longitude). A line is an ordered sequence of points forming a path, useful for routes and bike trails. A polygon is a closed region defined by a sequence of points, used for delivery zones, service areas, and compliance regions." + - question: "Are spatial columns available on self-hosted Appwrite?" + answer: "Spatial columns are available on Appwrite Cloud and arrive on self-hosted in the next release. Once you are on a supported version, define the column, add a spatial index, and start running geo queries directly from your SDK." --- Working with geographic data has always been tricky. If you’ve ever tried building “find nearby” or geofencing features, you’ve probably ended up storing coordinates as generic arrays or strings and then writing custom logic in your app to filter, compare, and compute relationships between locations. diff --git a/src/routes/blog/post/announcing-the-appwrite-oss-program/+page.markdoc b/src/routes/blog/post/announcing-the-appwrite-oss-program/+page.markdoc index 4eb70260338..76db8240a22 100644 --- a/src/routes/blog/post/announcing-the-appwrite-oss-program/+page.markdoc +++ b/src/routes/blog/post/announcing-the-appwrite-oss-program/+page.markdoc @@ -6,7 +6,20 @@ date: 2023-12-28 cover: /images/blog/OSS-program.avif timeToRead: 3 author: laura-du-ry -category: open-source, announcement +category: open-source, announcement +faqs: + - question: "What is the Appwrite OSS Program?" + answer: "The Appwrite OSS Program gives qualifying open source maintainers free access to Appwrite Pro on Appwrite Cloud. It is designed to reduce infrastructure costs for nonprofit and pre-revenue open source projects so maintainers can focus on building rather than billing." + - question: "How do I apply for the Appwrite OSS Program?" + answer: "Fill out the [OSS program form](/oss-program) with your project details. The Appwrite team reviews each application and decides whether it qualifies. There is no fixed deadline, but applications are reviewed periodically and acceptance is at Appwrite's discretion." + - question: "What are the requirements for the Appwrite OSS Program?" + answer: "Your project must use an [OSI-approved license](https://opensource.org/licenses/), have a public GitHub repository, be active with at least 15 contributions and 100 stars, and be nonprofit or pre-revenue. These criteria help ensure the program supports genuine open source work." + - question: "What does an OSI-approved license mean?" + answer: "OSI-approved licenses meet the [Open Source Definition](https://opensource.org/osd/) maintained by the Open Source Initiative. Examples include MIT, Apache 2.0, BSD, and GPL. Using one of these licenses signals that your project meets recognized standards for open source software." + - question: "What is the Appwrite Pro plan?" + answer: "Appwrite Pro is the production-grade plan on Appwrite Cloud, including higher resource limits, additional features, and priority support. OSS Program participants get this plan free, which is useful for projects that have outgrown the Free tier but cannot yet afford a paid subscription." + - question: "Is Appwrite open source?" + answer: "Yes. Appwrite is open source under the BSD-3-Clause license and the full source is on [GitHub](https://github.com/appwrite/appwrite). You can self-host it, fork it, contribute changes, or use it as a building block for your own open source projects." --- # Continued support for OSS maintainers diff --git a/src/routes/blog/post/announcing-time-helper-queries/+page.markdoc b/src/routes/blog/post/announcing-time-helper-queries/+page.markdoc index cf28b380313..f9405ce9316 100644 --- a/src/routes/blog/post/announcing-time-helper-queries/+page.markdoc +++ b/src/routes/blog/post/announcing-time-helper-queries/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: announcement featured: false +faqs: + - question: "What are time helper queries in Appwrite Databases?" + answer: "Time helper queries are dedicated operators (`createdBefore`, `createdAfter`, `updatedBefore`, `updatedAfter`) that filter rows by their `$createdAt` and `$updatedAt` timestamps. They replace verbose range comparisons against system attributes with a more direct, intent-revealing syntax." + - question: "How do I filter Appwrite documents by date?" + answer: "Use the time helper queries with an ISO-8601 date string, for example `Query.createdAfter(new Date('2024-01-01').toISOString())`. You can combine multiple helpers in the same query to express a range, such as everything created in a specific month or updated after a given backup." + - question: "What is ISO-8601 date format?" + answer: "ISO-8601 is the international standard for representing dates and times, for example `2024-10-05T14:48:00Z`. The `Z` suffix denotes UTC. Appwrite expects timestamps in ISO-8601 because it is unambiguous and sorts correctly as a string, which makes it ideal for queries and APIs." + - question: "What is the difference between createdBefore and updatedBefore?" + answer: "`createdBefore` filters by when the row was first inserted, while `updatedBefore` filters by when it was last modified. Use `createdBefore` for archival or retention policies based on initial entry, and `updatedBefore` to find data that has been stale or untouched since a given point." + - question: "Can I combine time helper queries with other filters?" + answer: "Yes. Time helpers compose with any other query operator, so you can express conditions like `status = published AND createdAfter = 2024-01-01`. This makes them well-suited for feeds, dashboards, and incremental sync jobs that need both temporal and field-level filtering." + - question: "Are time helper queries available on self-hosted Appwrite?" + answer: "Yes. Time helper queries are available on both Appwrite Cloud and self-hosted installations. Make sure your server and [Appwrite Databases](/docs/products/databases) SDK are recent enough to include the new operators." --- If you’ve ever built a feed, a dashboard, or an audit report, you know how often you need to slice data by time. “Show me posts from last week,” “Export everything updated after the last backup,” or “Delete anything created before a certain retention window.” diff --git a/src/routes/blog/post/announcing-timestamp-overrides/+page.markdoc b/src/routes/blog/post/announcing-timestamp-overrides/+page.markdoc index ec2730f0049..0f3645afe15 100644 --- a/src/routes/blog/post/announcing-timestamp-overrides/+page.markdoc +++ b/src/routes/blog/post/announcing-timestamp-overrides/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: announcement featured: false +faqs: + - question: "What are timestamp overrides in Appwrite Databases?" + answer: "Timestamp overrides let you set `$createdAt` and `$updatedAt` manually when creating or importing documents instead of having Appwrite auto-stamp the current time. This is useful for migrating historical data, preserving original event order, and maintaining accurate audit trails." + - question: "Why do I need to override timestamps in Appwrite?" + answer: "When you import data from another system, automatic timestamps make every record look brand new, which breaks analytics, feeds, and user-facing timelines. Overrides keep the original event time so a user's join date or an order's placement time stays accurate after the migration." + - question: "How do I set a custom $createdAt value in Appwrite?" + answer: "Include `$createdAt` (and/or `$updatedAt`) as fields in your document payload when calling a privileged API. The value must be a valid ISO-8601 string like `2023-10-05T14:48:00Z`. Omit the fields and Appwrite stamps them automatically as usual." + - question: "Can I set custom timestamps from a client SDK?" + answer: "No. Timestamp overrides require an API key or Console access via the CSV Import wizard for security reasons. Allowing arbitrary client-set timestamps would let users forge audit trails, so the feature is restricted to privileged callers." + - question: "What is ISO-8601 and why does Appwrite require it?" + answer: "ISO-8601 is the international standard for date and time strings (for example `2024-05-21T10:30:00Z`). It is unambiguous, time-zone aware via the trailing `Z` or offset, and sorts correctly as a string. Appwrite validates this format on timestamp overrides and rejects values that do not parse cleanly." + - question: "Are timestamp overrides available on self-hosted Appwrite?" + answer: "Yes. The feature is available on Appwrite Cloud and ships to self-hosted in the next release. Once your server version supports it, you can use the same API key or CSV Import flow described in the [Appwrite Databases documentation](/docs/products/databases)." --- In many data workflows, imported records automatically take on the time they are added to the new system. This works for some use cases, but when migrating data or integrating systems, preserving original timestamps becomes essential for accurate records and reporting. diff --git a/src/routes/blog/post/announcing-transactions-api/+page.markdoc b/src/routes/blog/post/announcing-transactions-api/+page.markdoc index dcd4fda8cec..a8b37e52c33 100644 --- a/src/routes/blog/post/announcing-transactions-api/+page.markdoc +++ b/src/routes/blog/post/announcing-transactions-api/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: announcement featured: false +faqs: + - question: "What is the Appwrite Transactions API?" + answer: "The Transactions API lets you stage multiple create, update, or delete operations across one or more tables and commit them atomically. If any operation fails validation at commit time, none are written and Appwrite rolls everything back, so you avoid partial writes and inconsistent state." + - question: "What is an ACID transaction?" + answer: "ACID stands for Atomicity, Consistency, Isolation, and Durability. Atomicity means all operations succeed or none do. Consistency means the database moves from one valid state to another. Isolation means concurrent transactions do not see each other's intermediate state. Durability means committed data persists even after failures." + - question: "How do I use transactions in Appwrite Databases?" + answer: "Call `createTransaction()` to get a transaction id, then use that id when calling `create`, `update`, or `delete` operations to stage them. When you are ready, commit the transaction in a single atomic write. You can also abort or let it expire if you change your mind." + - question: "What happens if I never commit a transaction?" + answer: "Each transaction has a configurable time-to-live, between 1 minute and 1 hour, with a default of 5 minutes. If you do not commit or abort within that window, Appwrite automatically discards the staged operations to avoid resource leaks." + - question: "Can a transaction span multiple databases or tables?" + answer: "Yes. A single transaction can include operations across different tables and even different databases in your project. This is useful for workflows like order processing that need to update inventory in one table, create an order in another, and adjust user credits in a third." + - question: "When should I use the Transactions API?" + answer: "Reach for transactions any time a workflow requires multiple writes to succeed together or roll back together. Common cases include checkout flows, user provisioning, multi-table data syncs, and migrations. See the [Appwrite Databases documentation](/docs/products/databases) for full API details." --- When dealing with multi-step workflows, like order processing or data syncs, it's not enough for some of your writes to succeed. You need every operation in the sequence to succeed together, or not happen at all. Anything less leads to incomplete states, corrupted records, and systems that are harder to reason about. diff --git a/src/routes/blog/post/announcing-two-factor-authentication/+page.markdoc b/src/routes/blog/post/announcing-two-factor-authentication/+page.markdoc index 33d888693ac..a3e69bc85e7 100644 --- a/src/routes/blog/post/announcing-two-factor-authentication/+page.markdoc +++ b/src/routes/blog/post/announcing-two-factor-authentication/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 6 author: eldad-fux category: product, announcement featured: false +faqs: + - question: "How do I enable two-factor authentication in Appwrite?" + answer: "Call `account.updateMFA({ enabled: true })` from the client SDK on an authenticated user. The user then needs at least two registered factors (for example email plus TOTP) before MFA is enforced on login. See [Appwrite Auth](/docs/products/auth) for the full flow." + - question: "Which 2FA methods does Appwrite support?" + answer: "Appwrite Auth supports three second-factor methods: TOTP via authenticator apps like Google Authenticator or Authy, one-time codes sent via email, and one-time codes sent via SMS. You can combine them or let users register multiple factors on the same account." + - question: "What is TOTP and how is it different from SMS OTP?" + answer: "TOTP (Time-based One-Time Password) generates a short-lived 6-digit code from a shared secret on the user's device, with no network round trip. SMS OTP delivers a code over the cell network, which adds latency and cost and is vulnerable to SIM swapping. TOTP is generally preferred for security and reliability." + - question: "What is the user_more_factors_required error in Appwrite?" + answer: "`user_more_factors_required` is the error Appwrite returns when a user has logged in with their primary factor but still needs to complete a second factor. Your app should catch this error and redirect the user to the second-factor challenge page instead of treating it as a failure." + - question: "Can I use 2FA with OAuth and email/password in the same app?" + answer: "Yes. Appwrite 2FA layers on top of any primary authentication method, so users who sign in with email and password, magic URL, OAuth, or phone OTP can all be required to complete a second factor. The MFA flow is the same regardless of the initial login method." + - question: "Why should I add 2FA to my application?" + answer: "Two-factor authentication significantly reduces the risk of account takeover from credential stuffing or leaked passwords because an attacker also needs the user's second factor. It also helps meet compliance requirements in regulated industries and signals to users that you take their security seriously." --- At Appwrite, our mission is to eliminate technical barriers. A key part of this mission is making your applications more secure. With Appwrite 1.5, we’re excited to announce that we are adding support for Two-Factor Authentication (2FA) to Appwrite Authentication, providing an extra layer of security for your end users' accounts. diff --git a/src/routes/blog/post/announcing-type-generation-feature/+page.markdoc b/src/routes/blog/post/announcing-type-generation-feature/+page.markdoc index dae10a09f9f..741b217a7da 100644 --- a/src/routes/blog/post/announcing-type-generation-feature/+page.markdoc +++ b/src/routes/blog/post/announcing-type-generation-feature/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/type-generation-feature/cover.avif timeToRead: 4 author: chirag-aggarwal category: announcement +faqs: + - question: "What is Appwrite type generation?" + answer: "Type generation is a CLI command that produces type definitions in your project's language directly from your Appwrite collections and tables. It keeps client code in sync with your database schema, reducing the chance of typos and stale types when the schema changes." + - question: "Which languages does Appwrite type generation support?" + answer: "The Appwrite CLI generates types for TypeScript, JavaScript, PHP, Swift, Dart, Java, and Kotlin. The CLI detects your project's language automatically, or you can pass options to specify it explicitly. More languages are added over time." + - question: "How do I generate types from my Appwrite collections?" + answer: "Install the [Appwrite CLI](/docs/tooling/command-line/installation), initialize your project, run `appwrite pull collections`, then run `appwrite types `. The CLI writes the generated type definitions into the specified folder, ready to import in your application code." + - question: "Do I need to regenerate types every time my schema changes?" + answer: "Yes. After updating columns, indexes, or relationships in your [Appwrite Databases](/docs/products/databases), run `appwrite pull collections` followed by `appwrite types` to refresh the generated definitions. You can wire this into a CI step or pre-commit hook to keep types current." + - question: "Why use generated types instead of writing them manually?" + answer: "Manual types drift from the schema over time as columns are added, renamed, or removed, leading to subtle runtime bugs. Generation guarantees the types always reflect the current schema, which catches mismatches at compile time and removes a tedious manual sync step from your workflow." + - question: "Does Appwrite type generation work with self-hosted Appwrite?" + answer: "Yes. Type generation works against any Appwrite project the CLI can authenticate to, whether on Appwrite Cloud or self-hosted. The same commands and output formats apply, so your local workflow stays consistent regardless of deployment target." --- We're excited to announce Appwrite’s newest CLI feature, **Type generation**. Designed specifically to enhance your developer experience. Type generation automates the creation of type definitions directly from your database collections, seamlessly integrating with your preferred programming language. diff --git a/src/routes/blog/post/announcing-user-impersonation/+page.markdoc b/src/routes/blog/post/announcing-user-impersonation/+page.markdoc index a608191e857..6f90f9a889b 100644 --- a/src/routes/blog/post/announcing-user-impersonation/+page.markdoc +++ b/src/routes/blog/post/announcing-user-impersonation/+page.markdoc @@ -8,6 +8,17 @@ timeToRead: 4 author: eldad-fux category: announcement, product featured: false +faqs: + - question: "What is user impersonation in Appwrite Auth?" + answer: "User impersonation lets a trusted operator sign in as themselves and then act as another user, with that user's permissions and access level. It is built into [Appwrite Auth](/docs/products/auth) so support, QA, and operations teams can reproduce issues without sharing credentials." + - question: "How do I mark a user as an impersonator?" + answer: "Open Auth > Users in the Console and toggle the impersonator flag on that user, or call the dedicated endpoint from any Server SDK. Once flagged, the operator gains an automatic users.read scope so they can browse the project user list." + - question: "How do I set the impersonation target in my client code?" + answer: "After the operator signs in, call one of the new client setters (by user ID, email, or phone) on the Appwrite client. From that point on, requests are evaluated as the target user, and responses include an impersonatorUserId so you know impersonation is active." + - question: "Is user impersonation safe to use in production?" + answer: "Yes, when limited to a small set of trusted operators. Impersonation is opt-in per user, requires the operator to authenticate as themselves first, and surfaces the impersonatorUserId on responses so you can log and audit every impersonated request." + - question: "When should I use impersonation instead of admin APIs?" + answer: "Use impersonation when you need to see exactly what the user sees, for example debugging permissions, team access, or label-based rules. Use server-side admin APIs when you only need to read or modify data and do not care about replicating the user's view." --- Debugging user-specific issues is one of the hardest parts of building authentication-heavy apps. diff --git a/src/routes/blog/post/announcing-variables-api/+page.markdoc b/src/routes/blog/post/announcing-variables-api/+page.markdoc index 5dee460185d..a5c96a39211 100644 --- a/src/routes/blog/post/announcing-variables-api/+page.markdoc +++ b/src/routes/blog/post/announcing-variables-api/+page.markdoc @@ -9,6 +9,17 @@ author: matej-baco category: announcement featured: false callToAction: true +faqs: + - question: "What is the Appwrite Variables API?" + answer: "The Variables API is a unified set of Server SDK endpoints for managing environment variables on [Functions](/docs/products/functions), [Sites](/docs/products/sites), and the project as a whole. It exposes the same five operations (create, list, get, update, delete) across all three scopes, so you can manage configuration entirely from code." + - question: "Which API key scopes does the Variables API need?" + answer: "Function variables use functions.read and functions.write, site variables use sites.read and sites.write, and project variables use project.read and project.write. Grant only the scopes you need on each API key." + - question: "How are project, function, and site variables resolved at runtime?" + answer: "Project variables load first, then function or site variables override matching keys, and Appwrite-injected variables prefixed with APPWRITE_ take final precedence. This makes it easy to set sensible defaults at the project level and override per function or site." + - question: "Can I use the Variables API in CI/CD pipelines?" + answer: "Yes. The API is a natural fit for CI/CD, infrastructure scripts, and project templates. You can provision configuration as code, rotate secrets across environments in a single script, and bootstrap new projects with a consistent baseline of variables." + - question: "Why mark a variable as secret?" + answer: "Marking a variable as secret tells Appwrite to treat it as sensitive, hiding its value in API responses and the Console after creation. Use this for API keys, tokens, and other credentials that should not be displayed to anyone after they are set." --- Environment variables have always been part of Appwrite. You could set them on a function, on a site, or on the project as a whole, and your code would pick them up at build and runtime. The catch was that all of this lived inside the Appwrite Console. If you wanted to provision configuration as part of a script, rotate a secret across environments, or bootstrap a new project from a template, you had to click through the UI. diff --git a/src/routes/blog/post/announcing-webhooks-api/+page.markdoc b/src/routes/blog/post/announcing-webhooks-api/+page.markdoc index 5e73a48df98..449d71fa3fc 100644 --- a/src/routes/blog/post/announcing-webhooks-api/+page.markdoc +++ b/src/routes/blog/post/announcing-webhooks-api/+page.markdoc @@ -9,6 +9,17 @@ author: matej-baco category: announcement featured: false callToAction: true +faqs: + - question: "What is the Appwrite Webhooks API?" + answer: "The Webhooks API is a programmable interface for managing Appwrite webhooks through Server SDKs and API keys. Instead of clicking through the Console, you can create, list, update, and delete webhooks from code, the same way you already manage databases, [Functions](/docs/products/functions), and storage buckets." + - question: "Which API key scopes do I need for the Webhooks API?" + answer: "You need webhooks.read for listing and retrieving webhooks, and webhooks.write for creating, updating, and deleting them. Create or update an API key under Overview > Integration > API keys with the scopes you need." + - question: "Why store the webhook secret immediately on creation?" + answer: "The secret field is only returned in the response of the create call, never again. Save it to your secret manager or environment variables right away so you can verify webhook signatures when events are delivered to your endpoint." + - question: "When should I use the Webhooks API instead of the Console?" + answer: "Use it whenever webhook configuration is part of a workflow that should be reproducible. Common cases include CI/CD pipelines that register webhooks during environment setup, multi-tenant platforms that provision per-customer webhooks, and migration scripts that replicate webhooks across environments." + - question: "How do webhooks differ from Appwrite Functions?" + answer: "Webhooks deliver event payloads to an HTTP endpoint you control, so the logic runs in your own infrastructure. [Functions](/docs/products/functions) run inside Appwrite and can be triggered by the same events, which is useful when you do not want to host a separate server." --- Webhooks have always been a core part of how developers integrate Appwrite into their workflows. Subscribe to an event, receive an HTTP POST, and let your server handle the rest. Until now, managing those webhooks meant logging into the Appwrite Console and configuring them by hand. diff --git a/src/routes/blog/post/apply-appwrite-how/+page.markdoc b/src/routes/blog/post/apply-appwrite-how/+page.markdoc index e384195b02c..832c1845d46 100644 --- a/src/routes/blog/post/apply-appwrite-how/+page.markdoc +++ b/src/routes/blog/post/apply-appwrite-how/+page.markdoc @@ -9,6 +9,17 @@ author: emma category: culture featured: false callToAction: true +faqs: + - question: "Where can I see open roles at Appwrite?" + answer: "All current openings are listed at appwrite.careers. The list is kept up to date with engineering, design, DevRel, marketing, and operations roles as they open." + - question: "Is it okay to use AI tools when writing my application?" + answer: "Yes, but use AI as a co-pilot, not a ghostwriter. The team reads a lot of applications and copy-pasted AI answers are easy to spot. Your application should start with you, end with you, and reflect how you actually think." + - question: "Do I need a computer science degree to work at Appwrite?" + answer: "No. Appwrite hires career-switchers, self-taught developers, and traditionally trained engineers. What matters is what you have built, how you think, and whether you align with the team's values." + - question: "What should I include in my application beyond a resume?" + answer: "Share links to anything that shows your work and your thinking. GitHub repos, side projects, websites, portfolios, blog posts, talks, and community contributions are all useful signals on top of your resume." + - question: "How can I get familiar with Appwrite before applying?" + answer: "Read the [documentation](/docs), try building something with the platform, and join the [Discord community](/discord). You can also browse the open-source codebase on GitHub to understand how the team works in the open." --- At Appwrite, we’re building more than open-source backend tools, we’re building a people-first, innovation-driven company that thrives on collaboration, creativity, and community. Every job application we receive is a potential new chapter in our story, and we want to give you the best chance of joining the team. diff --git a/src/routes/blog/post/appwrite-1-8-0-self-hosted-release/+page.markdoc b/src/routes/blog/post/appwrite-1-8-0-self-hosted-release/+page.markdoc index 8376f25df10..5c88fd005d3 100644 --- a/src/routes/blog/post/appwrite-1-8-0-self-hosted-release/+page.markdoc +++ b/src/routes/blog/post/appwrite-1-8-0-self-hosted-release/+page.markdoc @@ -7,6 +7,19 @@ date: 2025-10-31 timeToRead: 5 author: steven category: announcement +faqs: + - question: "What is new in Appwrite 1.8.0 for self-hosted users?" + answer: "Appwrite 1.8.0 introduces TablesDB, a Transactions API, spatial columns, CSV import, a Bulk API, Database Upsert, auto-increment support, opt-in relationship loading, and new time-based and inversion queries for [Databases](/docs/products/databases). It also adds new runtimes and performance improvements across the self-hosted stack." + - question: "What is TablesDB in Appwrite?" + answer: "TablesDB is a relational-style API on top of Appwrite [Databases](/docs/products/databases). It introduces tables, columns, and rows alongside the existing collections and documents model, with endpoints like createTable, createColumn, and createRow for developers who prefer a structured schema." + - question: "How do Appwrite database transactions work?" + answer: "You stage multiple operations across one or more tables and only commit them when you are ready. If every step succeeds, Appwrite commits atomically. If anything fails (permissions, conflicts, validation), Appwrite rolls back the entire transaction so your data stays consistent." + - question: "Can I use Appwrite to store and query geographic data?" + answer: "Yes. The new spatial columns API lets you store points, lines, and polygons in [Databases](/docs/products/databases), index them efficiently, and run geo queries to check how shapes interact. This unlocks maps, logistics, mobility, and location-aware use cases without a separate geo database." + - question: "How do I upgrade my self-hosted Appwrite instance to 1.8.0?" + answer: "Follow the upgrade steps in the self-hosting documentation, which cover backing up your data, pulling the new image, and running the migration. Always test the upgrade on a staging environment first because 1.8.0 includes significant database changes." + - question: "What is Database Upsert and when should I use it?" + answer: "Upsert creates a row if it does not exist and updates it if it does, in a single API call. Use it when you want to avoid writing your own check-then-write logic and handling 404 responses just to decide between insert and update." --- After weeks of testing and multiple release candidates, **Appwrite 1.8.0** for self-hosted environments is now available. diff --git a/src/routes/blog/post/appwrite-1-8-1-self-hosted-release/+page.markdoc b/src/routes/blog/post/appwrite-1-8-1-self-hosted-release/+page.markdoc index a0be199a742..556b8dc5ca7 100644 --- a/src/routes/blog/post/appwrite-1-8-1-self-hosted-release/+page.markdoc +++ b/src/routes/blog/post/appwrite-1-8-1-self-hosted-release/+page.markdoc @@ -9,6 +9,17 @@ author: steven category: announcement featured: false callToAction: true +faqs: + - question: "What is in Appwrite 1.8.1 for self-hosted deployments?" + answer: "1.8.1 is a focused stability and compatibility release on top of 1.8.0. It adds TanStack Start and Next.js standalone support for [Sites](/docs/products/sites), updates the default Flutter runtime to 3.35, introduces bucket-level image transformation controls, ships a Resend email integration, and brings database operators along with reliability fixes." + - question: "What are database operators in Appwrite?" + answer: "Database operators let you describe an inline update (increment, append, replace, adjust) instead of sending a new value. Appwrite applies the change atomically inside [Databases](/docs/products/databases), so you avoid the usual read-modify-write cycle and the race conditions that come with it." + - question: "Does Appwrite 1.8.1 support Next.js standalone output?" + answer: "Yes. [Sites](/docs/products/sites) can now deploy Next.js apps using standalone output, which produces smaller container images, faster startup, and tighter control over dependencies. This is especially useful for self-hosted environments where build size matters." + - question: "Can I disable image transformations on a specific bucket?" + answer: "Yes. Bucket-level controls in [Storage](/docs/products/storage) let you turn image transformations on or off per bucket. This is useful when you want a bucket to serve only original files or when you want to avoid unexpected transformation costs." + - question: "How do I upgrade from 1.8.0 to 1.8.1?" + answer: "Follow the standard self-hosted upgrade flow: back up your data, pull the 1.8.1 image, and run the upgrade. Because 1.8.1 is a patch release on top of 1.8.0, the upgrade is smaller in scope than a major version bump, but you should still test on staging first." --- Appwrite 1.8.1 delivers a focused set of improvements and fixes that further stabilize and extend Appwrite 1.8.0 on the self-hosted offering. diff --git a/src/routes/blog/post/appwrite-1.5-now-available-on-cloud/+page.markdoc b/src/routes/blog/post/appwrite-1.5-now-available-on-cloud/+page.markdoc index cc6a4a47d90..20fac797fcb 100644 --- a/src/routes/blog/post/appwrite-1.5-now-available-on-cloud/+page.markdoc +++ b/src/routes/blog/post/appwrite-1.5-now-available-on-cloud/+page.markdoc @@ -8,6 +8,17 @@ timeToRead: 8 author: eldad-fux category: product, announcement featured: false +faqs: + - question: "What was new in Appwrite 1.5 on Cloud?" + answer: "Appwrite 1.5 on Cloud brought the products announced at Init to the managed platform, including [Messaging](/docs/products/messaging) for SMS, email, and push notifications, support for many new OAuth providers in [Auth](/docs/products/auth), and product improvements across [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions)." + - question: "What does Appwrite Messaging support?" + answer: "[Messaging](/docs/products/messaging) lets you send SMS, email, and push notifications through a single API. It integrates with providers like Twilio, APNS, Firebase Cloud Messaging, Vonage, Sendgrid, and Mailgun, so you can pick the providers that match your existing stack." + - question: "Can I send push notifications to iOS and Android with Appwrite?" + answer: "Yes. Push delivery is routed through Apple Push Notification service for iOS and Firebase Cloud Messaging for Android. You configure each provider in the Console, then call the messaging API from a Server SDK to send notifications to your users." + - question: "Do I need to self-host Appwrite to use new features?" + answer: "No. Once a release lands on Appwrite Cloud, new products and features are available to Cloud projects without any work on your end. Self-hosting remains an option if you want to run Appwrite on your own infrastructure." + - question: "What is the difference between Appwrite Cloud and self-hosted Appwrite?" + answer: "Appwrite Cloud is the managed platform run by the Appwrite team, with built-in scaling, monitoring, and updates. Self-hosted Appwrite is the same open-source product that you run on your own servers, where you control versions, infrastructure, and operations." --- After announcing many new products and features during [Init](/init) as part of the 1.5 release, we saw great excitement within the community to get started with the newly presented Appwrite 1.5. Although already available on self-hosted, the new Appwrite products and features were yet to be released to Cloud. Today, we are excited to say the wait is finally over as we announce the release of Appwrite 1.5 to the Cloud. diff --git a/src/routes/blog/post/appwrite-compared-to-supabase/+page.markdoc b/src/routes/blog/post/appwrite-compared-to-supabase/+page.markdoc index 6cb8d7e325a..775e940c00c 100644 --- a/src/routes/blog/post/appwrite-compared-to-supabase/+page.markdoc +++ b/src/routes/blog/post/appwrite-compared-to-supabase/+page.markdoc @@ -9,6 +9,19 @@ author: aditya-oberai category: product unlisted: true callToAction: true +faqs: + - question: "What is the main difference between Appwrite and Supabase?" + answer: "Both are Backend-as-a-Service platforms, but Supabase is built directly on Postgres and exposes SQL to developers, while Appwrite provides a higher-level abstraction over [Databases](/docs/products/databases), [Auth](/docs/products/auth), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) through unified APIs and SDKs. Appwrite also ships in-house [Functions](/docs/products/functions) runtimes for 10+ languages, where Supabase officially supports only TypeScript." + - question: "Can I self-host both Appwrite and Supabase?" + answer: "Yes, both are open source and can be self-hosted. Appwrite is distributed as a Docker-based stack you can run on your own infrastructure, and Supabase provides a similar self-hosting option. Both also offer managed cloud platforms if you do not want to operate the stack yourself." + - question: "Which platform is better for mobile apps?" + answer: "Appwrite ships official SDKs for Flutter, Apple, Android, and React Native, with built-in support for OAuth, magic links, and push notifications via [Messaging](/docs/products/messaging). Supabase has community and official mobile SDKs but tends to focus more heavily on web. The right choice depends on your target platforms and how much you value first-party SDK coverage." + - question: "Do Appwrite and Supabase both support realtime?" + answer: "Yes, both support realtime subscriptions. Appwrite exposes realtime over WebSockets for database events, account events, and more across [Databases](/docs/products/databases) and other services. Supabase exposes realtime through Postgres logical replication, which means you subscribe directly to row-level changes in your tables." + - question: "How do pricing models compare between Appwrite and Supabase?" + answer: "Both offer generous free tiers and usage-based paid plans. Appwrite includes image manipulation and previews on the free tier, while Supabase reserves those for paid tiers. Compare the actual usage limits for [Databases](/docs/products/databases), [Storage](/docs/products/storage), and bandwidth against your expected workload before deciding." + - question: "Can I migrate from Supabase to Appwrite?" + answer: "Yes. Appwrite supports CSV imports and migration APIs that let you move data from another platform into Appwrite [Databases](/docs/products/databases). Auth and storage will require additional scripting because the user models and storage paths differ between the two platforms." --- Updated on October 6, 2025 diff --git a/src/routes/blog/post/appwrite-decoded-bradley-schofield/+page.markdoc b/src/routes/blog/post/appwrite-decoded-bradley-schofield/+page.markdoc index e706ce92a62..fd5d659399a 100644 --- a/src/routes/blog/post/appwrite-decoded-bradley-schofield/+page.markdoc +++ b/src/routes/blog/post/appwrite-decoded-bradley-schofield/+page.markdoc @@ -7,6 +7,17 @@ timeToRead: 4 date: 2024-02-08 author: laura-du-ry category: culture +faqs: + - question: "Who is Bradley Schofield at Appwrite?" + answer: "Bradley is one of the longest-standing members of the Appwrite team. He joined after contributing integrations and quick-start projects to Appwrite and has since worked across [Functions](/docs/products/functions) and migrations, with a focus on backend development and data." + - question: "How did Bradley join Appwrite?" + answer: "Bradley started a computer science degree, then moved to an apprenticeship for more hands-on work. After a string of open-source contributions to Appwrite, the team's CEO Eldad reached out about joining full time, and he has been at Appwrite ever since." + - question: "What does Bradley work on day to day?" + answer: "He focuses on [Functions](/docs/products/functions) and migrations, adds new runtimes (including compiled languages), and explores broader topics like machine learning. He researches feature ideas and turns the promising ones into product work the team can ship." + - question: "What does Bradley say about remote work?" + answer: "He likes the flexibility of being able to work from anywhere and the freedom that gives him to travel without disrupting his work. He also warns about social isolation and the risk of staring at a screen all day, and suggests staying active and protecting time for the people in your life." + - question: "How can I contribute to Appwrite?" + answer: "Bradley's advice is to just start. Pick something on the open-source roadmap, jump into the [Discord community](/discord), or open a pull request on the [Appwrite GitHub organization](https://github.com/appwrite). You do not need to wait for an invitation to participate." --- The team behind Appwrite is situated worldwide and works together daily in different time zones. We’re proud of the remote and open-source culture the team has built so far. In Appwrite Decoded, we introduce the people behind the code and celebrate them. diff --git a/src/routes/blog/post/appwrite-decoded-dennis-ivy/+page.markdoc b/src/routes/blog/post/appwrite-decoded-dennis-ivy/+page.markdoc index 44f6fdf0100..55797133d32 100644 --- a/src/routes/blog/post/appwrite-decoded-dennis-ivy/+page.markdoc +++ b/src/routes/blog/post/appwrite-decoded-dennis-ivy/+page.markdoc @@ -7,6 +7,17 @@ timeToRead: 12 date: 2024-04-22 author: laura-du-ry category: culture +faqs: + - question: "Who is Dennis Ivy?" + answer: "Dennis Ivy is a self-taught developer, YouTube creator, and Developer Advocate at Appwrite. He built a digital marketing and web development agency before moving into DevRel, and now focuses on teaching developers through tutorials, content, and community work." + - question: "What does a Developer Advocate do at Appwrite?" + answer: "A Developer Advocate sits between the product team and the community. At Appwrite, that means writing content, recording tutorials, surfacing user feedback to engineering, and helping developers get unstuck on the [Discord server](/discord)." + - question: "Why did Dennis Ivy join Appwrite?" + answer: "Dennis was looking for work that excited him, not just a paycheck. He saw Appwrite's open-source product and community focus and felt it was the right place to do meaningful work, especially around community-first DevRel and education." + - question: "Why was Dennis initially skeptical of Backend-as-a-Service?" + answer: "As a backend engineer, he worried that a BaaS would constrain him or replace skills he had spent years building. Working with Appwrite changed his mind by showing how a BaaS can speed up product work without taking control away from developers who still want to go deep on the backend." + - question: "How does Dennis approach creating developer content?" + answer: "He treats himself as both user and advocate, so he can spot gaps in tutorials, docs, and product flows. His goal is content that actually helps developers ship, not content that just markets a feature." --- The team behind Appwrite is situated worldwide and works together daily from different time zones. We’re proud of the remote and open source culture the team has built so far. In Appwrite Decoded, we introduce the people behind the code and celebrate them. diff --git a/src/routes/blog/post/appwrite-decoded-dylan/+page.markdoc b/src/routes/blog/post/appwrite-decoded-dylan/+page.markdoc index 73aae94c921..3ded208a91e 100644 --- a/src/routes/blog/post/appwrite-decoded-dylan/+page.markdoc +++ b/src/routes/blog/post/appwrite-decoded-dylan/+page.markdoc @@ -7,6 +7,17 @@ timeToRead: 8 date: 2024-06-04 author: laura-du-ry category: culture +faqs: + - question: "Who is Dylan Graham at Appwrite?" + answer: "Dylan is the operations and finance lead at Appwrite. He moved from a background in safety operations and other non-tech fields into ops at Appwrite, where he runs internal logistics, finance, and the planning behind the team's offsites." + - question: "What does an operations lead do at a remote-first company?" + answer: "Operations covers the non-product side of the business: legal paperwork, contracts, travel, team offsites, swag, and the small workflows that keep a distributed team running. Dylan's role focuses on making those processes simpler so the rest of the team can focus on product work." + - question: "What are Appwrite Camps?" + answer: "Camps are Appwrite's twice-a-year team gatherings, where the globally distributed team meets in person to plan, ship work together, and spend time as a team. Camp 3.0 in New York is one Dylan calls out as a personal favorite in the post." + - question: "What is the work culture like at Appwrite?" + answer: "Dylan describes it as laid-back but focused: collaboration, inspiration, and fun. The team works hard and ships fast, while still making space for personal time and supporting each other when the workload spikes." + - question: "How does Appwrite support remote work?" + answer: "Appwrite is fully remote, with team members across many time zones, supported by twice-a-year in-person camps. Dylan's tip is to treat communication tools like Slack and Discord as your virtual office and to keep conversations flowing so remote work feels less isolated." --- The team behind Appwrite is spread across the globe and works together daily in different time zones. We’re proud of the remote and open-source culture the team has built so far. In Appwrite Decoded, we introduce the people behind the code and celebrate them. diff --git a/src/routes/blog/post/appwrite-decoded-khushboo-verma/+page.markdoc b/src/routes/blog/post/appwrite-decoded-khushboo-verma/+page.markdoc index 7f33a0252b5..e6b2d3768e4 100644 --- a/src/routes/blog/post/appwrite-decoded-khushboo-verma/+page.markdoc +++ b/src/routes/blog/post/appwrite-decoded-khushboo-verma/+page.markdoc @@ -7,6 +7,17 @@ timeToRead: 10 date: 2024-03-21 author: laura-du-ry category: culture +faqs: + - question: "Who is Khushboo Verma?" + answer: "Khushboo is a software engineer at Appwrite. She earned a computer science engineering degree from one of the largest all-women's universities in Asia and worked at Microsoft on the Azure storage team before joining Appwrite." + - question: "What does Khushboo work on at Appwrite?" + answer: "She works as a software engineer building Appwrite's product, with a strong interest in cloud computing and developer-facing infrastructure. The post focuses more on her career and community work than on a single product area, so the surface keeps changing as Appwrite grows." + - question: "How did Khushboo get into software engineering?" + answer: "Through community. She led workshops on her university campus, joined programs like Microsoft Student Ambassador, GitHub Campus Experts, and Google Machine Learning, and interned at Microsoft and Adobe before her first full-time role." + - question: "Why is community important to her?" + answer: "She credits community for much of her career and sees it as her responsibility to give back. She actively pushes for diversity and inclusion in tech, especially supporting women in software engineering." + - question: "How did Khushboo discover Appwrite?" + answer: "Through a podcast she hosted called Tech Interviews Simplified. She invited a Developer Advocate from Appwrite onto the show, and the conversations that followed eventually led to a full-time role on the engineering team." --- The team behind Appwrite is situated worldwide and works together daily from different time zones. We’re proud of the remote and open source culture the team has built so far. In Appwrite Decoded, we introduce the people behind the code and celebrate them. diff --git a/src/routes/blog/post/appwrite-decoded-sara-kaandorp/+page.markdoc b/src/routes/blog/post/appwrite-decoded-sara-kaandorp/+page.markdoc index 8de17057c12..f3bd501cd23 100644 --- a/src/routes/blog/post/appwrite-decoded-sara-kaandorp/+page.markdoc +++ b/src/routes/blog/post/appwrite-decoded-sara-kaandorp/+page.markdoc @@ -7,6 +7,17 @@ timeToRead: 4 date: 2024-01-03 author: laura-du-ry category: culture +faqs: + - question: "Who is Sara Kaandorp?" + answer: "Sara is Appwrite's Design Lead. She leads a small in-house design team that shapes both Appwrite's visual brand and the UX/UI of the product, bringing experience as a UX designer across diverse industries." + - question: "What does a Design Lead do at Appwrite?" + answer: "Sara oversees both visual identity and product design, deliberately keeping the two close so the brand and the Console feel like one cohesive experience. She also focuses on team growth, matching people to projects that play to their strengths." + - question: "What design milestones is Sara proud of?" + answer: "She points to leading Appwrite's rebrand from inception to completion, and the redesign of the Appwrite Console. Both projects were delivered by a young, in-house design team and shaped how Appwrite looks and feels today." + - question: "What is it like to design for developers?" + answer: "Sara describes developers as critical and honest. That feedback can be tough, but it has pushed the design team to raise the bar continuously. When something lands well with developers, they say so, which she finds genuinely rewarding." + - question: "What is Sara's advice for designers starting out?" + answer: "Never overestimate your skills, keep an open attitude to learning, and dig into the why behind design decisions. She also recommends working on side projects, because hands-on practice accelerates learning more than anything else." --- At Appwrite, we value our people, the hard work they do, and the culture they create. Appwrite Decoded is an opportunity to get to know the Appwrite team just a little bit better and for us to celebrate the person behind the work. diff --git a/src/routes/blog/post/appwrite-for-hackathons-build-fast-ship-faster/+page.markdoc b/src/routes/blog/post/appwrite-for-hackathons-build-fast-ship-faster/+page.markdoc index a674e859874..873f2e6dde9 100644 --- a/src/routes/blog/post/appwrite-for-hackathons-build-fast-ship-faster/+page.markdoc +++ b/src/routes/blog/post/appwrite-for-hackathons-build-fast-ship-faster/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aditya-oberai category: hackathon featured: false +faqs: + - question: "Why use Appwrite during a hackathon?" + answer: "Most hackathons give teams 24 to 72 hours to ship a working prototype. Appwrite removes the time you would otherwise spend on [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) so you can focus on the actual idea instead of plumbing." + - question: "What does Appwrite provide out of the box?" + answer: "Appwrite bundles [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), realtime APIs, [Messaging](/docs/products/messaging), [Functions](/docs/products/functions), and web hosting with [Sites](/docs/products/sites) into a single platform. You get a consistent SDK across web, mobile, and server, plus permissions and access control baked in." + - question: "Is Appwrite free for hackathons?" + answer: "Yes. Appwrite has a generous free tier on Cloud, and the entire platform is open source so you can also self-host at no cost. That makes it a safe pick for the typical hackathon budget of zero." + - question: "Can I deploy my hackathon project on Appwrite?" + answer: "Yes. [Sites](/docs/products/sites) lets you deploy your frontend, including static and server-rendered apps, from the same project that hosts your backend. You can ship a live, shareable URL directly from the Console before the hackathon ends." + - question: "Which languages and frameworks can I use with Appwrite?" + answer: "Appwrite ships SDKs for web frameworks like React, Vue, Svelte, and Next.js, mobile frameworks like Flutter and React Native, plus Apple and Android. On the server side, [Functions](/docs/products/functions) supports 13 languages across 30+ runtimes, so you can pick whatever your team is fastest in." + - question: "How can I add realtime features to my project quickly?" + answer: "Use Appwrite's realtime API, which is built on WebSockets. You can subscribe to changes in [Databases](/docs/products/databases) and other services with a few lines of SDK code, which is enough to power live updates, collaborative editing, or in-app notifications during your demo." --- Hackathons move quickly. Most events give teams **24 to 72 hours** to turn an idea into a working prototype. In that limited time, every hour matters. Many hackathons, such as those organized by Major League Hacking, take place over a weekend or a week each year, attracting hackers from around the world to create and share innovative ideas. The teams that succeed are not necessarily the ones with the most complex architecture. They are the ones that can **build quickly, iterate fast, and deliver a working product.** diff --git a/src/routes/blog/post/appwrite-generate/+page.markdoc b/src/routes/blog/post/appwrite-generate/+page.markdoc index 9fde5d4796d..a547ecd9aa9 100644 --- a/src/routes/blog/post/appwrite-generate/+page.markdoc +++ b/src/routes/blog/post/appwrite-generate/+page.markdoc @@ -10,6 +10,19 @@ category: announcement featured: false callToAction: true draft: false +faqs: + - question: "What does the appwrite generate command do?" + answer: "It reads your Appwrite project's database schema and generates a type-safe SDK tailored to that project, written into a generated/appwrite/ directory. Instead of hand-writing wrappers and types for each table, you get typed helpers with autocomplete and compile-time checks." + - question: "Which language does appwrite generate produce code for?" + answer: "The CLI auto-detects your project's language and generates the SDK accordingly. You run a single command, appwrite generate, in your project directory and let the CLI handle the rest." + - question: "Why generate a type-safe SDK from my schema?" + answer: "It removes drift between your schema and your code. When you rename a column or add a required field, the regenerated SDK turns those changes into type errors in your editor rather than runtime bugs in production." + - question: "How do I import the generated SDK in my code?" + answer: "After running the command, import the generated module (for example import { databases } from './generated/appwrite' in TypeScript), then configure constants in ./generated/appwrite/constants.ts. From there you can call typed helpers like databases.use('my-db').use('customers').create(...)." + - question: "What happens when I change my Appwrite database schema?" + answer: "Re-run appwrite generate. The CLI rewrites the generated SDK to match the new schema, and your compiler tells you exactly where existing code needs to change. This makes schema refactors much safer." + - question: "Where can I learn more about the generate command?" + answer: "Check the [Appwrite CLI generate documentation](/docs/tooling/command-line/generate) for the full command reference, supported languages, and configuration options." --- Every database-driven app eventually ends up with the same glue code: types, table wrappers, and helper functions that make your schema feel safe to use in the editor. diff --git a/src/routes/blog/post/appwrite-hacktoberfest-hackathon-2024/+page.markdoc b/src/routes/blog/post/appwrite-hacktoberfest-hackathon-2024/+page.markdoc index e93108a0455..71dad0a28b7 100644 --- a/src/routes/blog/post/appwrite-hacktoberfest-hackathon-2024/+page.markdoc +++ b/src/routes/blog/post/appwrite-hacktoberfest-hackathon-2024/+page.markdoc @@ -8,6 +8,17 @@ timeToRead: 5 author: aditya-oberai category: hackathon featured: false +faqs: + - question: "When did the Appwrite Hacktoberfest 2024 Hackathon run?" + answer: "The hackathon ran for the entire month of October 2024, from October 1st through October 31st. Teams had four weeks to design, build, and submit a brand-new project." + - question: "What were the team size and project rules?" + answer: "Teams could be 1 to 4 people, and submissions had to be brand-new projects built during the hackathon, not existing work. The format covered web apps, mobile apps, games, and developer tools." + - question: "What were the prizes?" + answer: "The top team earned The Appwriter, an exclusive award reserved for the best overall project. The 2nd and 3rd-place teams received Appwrite swag kits." + - question: "What is Hacktoberfest?" + answer: "Hacktoberfest is an annual, month-long celebration of open source that runs every October. Developers around the world contribute to open-source projects and join community events. Appwrite's hackathon was one of those events." + - question: "How can I get started with Appwrite for a hackathon project?" + answer: "Use Appwrite Cloud or self-host the open-source version, then plug in [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) through the SDK for your stack. Join the [Discord community](/discord) if you want help while you build." --- [Hacktoberfest](https://hacktoberfest.com/) is almost here, and we’re excited to announce that Appwrite will be hosting our own **Hacktoberfest 2024 Hackathon**! Whether you're a seasoned developer or just dipping your toes into open-source, this is the perfect opportunity to create something impactful while being part of the global Hacktoberfest movement. diff --git a/src/routes/blog/post/appwrite-homepage-redesign/+page.markdoc b/src/routes/blog/post/appwrite-homepage-redesign/+page.markdoc index b03e58a7e42..6e60ee0d62b 100644 --- a/src/routes/blog/post/appwrite-homepage-redesign/+page.markdoc +++ b/src/routes/blog/post/appwrite-homepage-redesign/+page.markdoc @@ -9,6 +9,17 @@ author: sara-kaandorp category: design featured: false callToAction: true +faqs: + - question: "Why did Appwrite redesign its homepage?" + answer: "Appwrite has grown from a Backend-as-a-Service into an all-in-one open-source development platform that also includes hosting through [Sites](/docs/products/sites). The old homepage no longer reflected the full scope of the product, so the team redesigned it to clarify positioning and messaging." + - question: "How did the team measure the old homepage?" + answer: "They started with a qualitative survey of 50 respondents who matched the target audience but were new to Appwrite. The goal was to capture fresh first impressions rather than reactions from existing community members." + - question: "What did the user research uncover?" + answer: "People liked the clean visuals and structure, but the messaging was confusing. Some respondents thought Appwrite was a DevOps tool, others a CMS, others a Firebase clone, which validated the team's suspicion that the story was not landing." + - question: "What changed in the redesign?" + answer: "The team simplified the messaging, added visual components that summarize the offering at a glance, repositioned Appwrite as a complete platform with [Sites](/docs/products/sites), and chose testimonials with concrete metrics. They also reworked animations and microinteractions to feel less intrusive." + - question: "How does Appwrite design pages for different reading behaviors?" + answer: "The redesign supports both scanners and deep readers. There are summary components that give a fast impression of the platform, and longer sections for visitors who want to scroll through the details. This is grounded in established UX research on how people read versus scan web pages." --- At Appwrite, we’ve grown from a Backend-as-a-Service into an open-source, all-in-one development platform. With the introduction of our newest product, Sites, we expanded our offering beyond backend services to include hosting. This shift meant our homepage needed to do more, it had to communicate the full breadth of what Appwrite now offers. diff --git a/src/routes/blog/post/appwrite-is-now-soc-2-type-1-compliant/+page.markdoc b/src/routes/blog/post/appwrite-is-now-soc-2-type-1-compliant/+page.markdoc index 46bebbd45ca..dc9cfff7840 100644 --- a/src/routes/blog/post/appwrite-is-now-soc-2-type-1-compliant/+page.markdoc +++ b/src/routes/blog/post/appwrite-is-now-soc-2-type-1-compliant/+page.markdoc @@ -8,6 +8,17 @@ timeToRead: 4 author: jake-barnby category: security featured: false +faqs: + - question: "What is SOC 2 Type 1 compliance?" + answer: "SOC 2 Type 1 is a certification, set by the AICPA, that evaluates how an organization's security controls are designed at a specific point in time. It covers five trust service principles: security, availability, processing integrity, confidentiality, and privacy." + - question: "What does Appwrite's SOC 2 Type 1 compliance mean for users?" + answer: "It means an independent auditor reviewed Appwrite's security controls and confirmed they are designed to meet SOC 2 standards. For teams building on Appwrite, that adds another layer of assurance around how user data is handled in the platform." + - question: "What other security standards does Appwrite follow?" + answer: "In addition to SOC 2 Type 1, Appwrite conforms with [GDPR](/docs/advanced/security/gdpr), [HIPAA](/docs/advanced/security/hipaa), and [PCI](/docs/advanced/security/pci) requirements. You can find the full overview in the security documentation." + - question: "What is the difference between SOC 2 Type 1 and Type 2?" + answer: "Type 1 reviews how controls are designed at a specific point in time. Type 2 goes further by evaluating how those controls operate over a longer period, typically several months. Type 1 is often the first step on the way to a Type 2 attestation." + - question: "How does Appwrite protect user data?" + answer: "Appwrite encrypts data in transit and at rest, runs backup and disaster recovery routines, uses access control and privilege management for internal systems, runs an incident response process, and vets third-party vendors before granting them access to data." --- We remain dedicated to maintaining the highest information security standards for all industries. Although we go beyond just meeting the requirements, Appwrite still commits to conform to the most stringent security standards diff --git a/src/routes/blog/post/appwrite-messaging-is-free-for-six-months/+page.markdoc b/src/routes/blog/post/appwrite-messaging-is-free-for-six-months/+page.markdoc index 9ebe75482ff..43d6ef60ebe 100644 --- a/src/routes/blog/post/appwrite-messaging-is-free-for-six-months/+page.markdoc +++ b/src/routes/blog/post/appwrite-messaging-is-free-for-six-months/+page.markdoc @@ -7,6 +7,17 @@ cover: /images/blog/messaging-pricing.avif timeToRead: 5 author: eldad-fux category: Product +faqs: + - question: "Why is Appwrite Messaging free for six months?" + answer: "Messaging was still in beta when this announcement went out. The team wanted real usage data and feedback from the community before setting a final price, so they made it free for six months while collecting that input." + - question: "What channels does Appwrite Messaging support?" + answer: "[Messaging](/docs/products/messaging) covers SMS, email, and push notifications through a single unified API. You can plug in providers like Twilio, Sendgrid, Mailgun, Vonage, APNS, and Firebase Cloud Messaging." + - question: "What is the Appwrite Value Framework?" + answer: "It is a set of pricing principles the team uses across the platform. The framework prioritizes accessibility, fair limits on usage rather than functionality, consistent features across tiers (except for clearly enterprise-only ones), and pricing that scales with the developer's success." + - question: "Can I send scheduled messages with Appwrite?" + answer: "Yes. You can schedule messages by passing a scheduledAt timestamp when creating an SMS, email, or push notification. This is helpful for newsletters, reminders, and any campaign that should fire at a specific time." + - question: "Can I add my own messaging provider?" + answer: "Appwrite is open source and welcomes pull requests for new providers and features. If a provider you need is missing, you can open an issue on GitHub or contribute the integration yourself by following the patterns of existing providers." --- When we [introduced Messaging](https://appwrite.io/blog/post/announcing-appwrite-messaging) during [Init](https://appwrite.io/init), we were overwhelmed by the excitement within the Appwrite community. Now we can also announce that Messaging will be free for the next six months. diff --git a/src/routes/blog/post/appwrite-mongodb-partnership-self-hosted/+page.markdoc b/src/routes/blog/post/appwrite-mongodb-partnership-self-hosted/+page.markdoc index eb347485848..ce8ba4a60ad 100644 --- a/src/routes/blog/post/appwrite-mongodb-partnership-self-hosted/+page.markdoc +++ b/src/routes/blog/post/appwrite-mongodb-partnership-self-hosted/+page.markdoc @@ -10,6 +10,19 @@ author: - jake-barnby category: announcement featured: true +faqs: + - question: "What is the Appwrite and MongoDB partnership?" + answer: "Appwrite and MongoDB are partnering on a long-term collaboration around open source. The first concrete result is official MongoDB support in self-hosted Appwrite, plus a listing in the MongoDB Partner Ecosystem. Future work includes managed MongoDB on Appwrite Cloud and broader database flexibility across the platform." + - question: "How does MongoDB work with self-hosted Appwrite?" + answer: "When you select MongoDB during setup, Appwrite spins up a MongoDB Community Edition container and manages it alongside the rest of the stack. Your app talks to Appwrite through the same APIs and SDKs as before, and Appwrite handles schema, connections, and lifecycle." + - question: "Will MongoDB be available on Appwrite Cloud?" + answer: "Yes, that is on the roadmap. The plan is to offer MongoDB in a fully managed environment on Appwrite Cloud, with the Console adapting dynamically when running on MongoDB so the experience feels first-class from day one." + - question: "Does this replace Appwrite's existing database engine?" + answer: "No. MongoDB is an additional supported engine on self-hosted Appwrite, not a replacement. The direction is database flexibility, so you can pick the engine that fits your team, your stack, and your scale, while keeping the same Appwrite APIs and SDKs on top." + - question: "What does this mean for MongoDB developers?" + answer: "MongoDB developers can now adopt Appwrite as a complete backend platform that runs on top of MongoDB. They get [Auth](/docs/products/auth), [Storage](/docs/products/storage), [Functions](/docs/products/functions), [Sites](/docs/products/sites), and more, while still using the data engine they already know." + - question: "How do I get started with Appwrite on MongoDB?" + answer: "Follow the self-hosting tutorial for MongoDB in the Appwrite docs and blog. It walks through spinning up an Appwrite instance backed by MongoDB Community Edition end to end, so you can run the full platform on the database you already use." --- Today, we're announcing a partnership between Appwrite and MongoDB. diff --git a/src/routes/blog/post/appwrite-partners-program/+page.markdoc b/src/routes/blog/post/appwrite-partners-program/+page.markdoc index 211dfdecd18..49ecc370bad 100644 --- a/src/routes/blog/post/appwrite-partners-program/+page.markdoc +++ b/src/routes/blog/post/appwrite-partners-program/+page.markdoc @@ -9,6 +9,19 @@ author: laura-du-ry category: tutorial featured: false callToAction: true +faqs: + - question: "Who is the Appwrite Partners program for?" + answer: "The program is built for agencies, development studios, system integrators, and freelancers who build software for clients using Appwrite. If your business depends on shipping client projects faster with a reliable backend, you're the target audience." + - question: "What benefits do Appwrite Partners get?" + answer: "Partners get early access to new features, co-marketing opportunities, premium email support, a dedicated Discord channel, and in-depth training. You also get the chance to influence the Appwrite roadmap based on real client work." + - question: "Does it cost anything to join the Appwrite Partners program?" + answer: "The application process itself is free. Visit the official partners landing page to apply and learn about any tier-specific requirements that apply to your business." + - question: "Can freelancers join, or is it only for agencies?" + answer: "Freelancers are explicitly welcome alongside agencies, development studios, and system integrators. The tiered structure is designed to grow with you as your client base expands." + - question: "What is Appwrite and why use it for client projects?" + answer: "Appwrite is an open-source backend platform that provides ready-to-use APIs for [authentication](/docs/products/auth), [databases](/docs/products/databases), [storage](/docs/products/storage), and [functions](/docs/products/functions). Agencies use it to skip building backend boilerplate so they can ship more client projects in less time." + - question: "How do I apply to become an Appwrite Partner?" + answer: "Head to appwrite.io/partners to read the full program details and submit your application. The Appwrite team reviews applications and follows up with next steps." --- We’re excited to introduce the **Appwrite Partners program**, a new initiative to help agencies, development studios, system integrators, and freelancers deliver exceptional solutions, scale faster, and achieve long-term success. By partnering with Appwrite, you gain access to cutting-edge tools, expert support, and a team of innovators on a mission to make software accessible and enjoyable for all creators. diff --git a/src/routes/blog/post/appwrite-vs-auth0-b2c/+page.markdoc b/src/routes/blog/post/appwrite-vs-auth0-b2c/+page.markdoc index 67450f83bb2..0f038d8441a 100644 --- a/src/routes/blog/post/appwrite-vs-auth0-b2c/+page.markdoc +++ b/src/routes/blog/post/appwrite-vs-auth0-b2c/+page.markdoc @@ -3,10 +3,24 @@ layout: post title: "Appwrite vs Auth0: Which is better for a B2C app?" description: Learn the difference between Appwrite and Auth0 in terms of pricing, features, and scalability. date: 2025-05-13 +lastUpdated: 2026-05-22 cover: /images/blog/appwrite-vs-auth0-b2c/cover.avif timeToRead: 5 author: ebenezer-don category: product +faqs: + - question: "Is Appwrite cheaper than Auth0 for B2C apps?" + answer: "For most B2C apps, yes. Appwrite's Pro plan is $15/month for up to 200,000 MAUs, while Auth0's Professional plan starts at $240/month for just 1,000 MAUs. The bigger your user base, the wider the gap becomes." + - question: "Why does Auth0 cost more as your user base grows?" + answer: "Auth0 prices primarily by monthly active users, with steep jumps between tiers. Beyond 20,000 MAUs you typically need a custom enterprise contract. Appwrite instead bills mostly on resource usage (compute, storage, bandwidth), so casual sign-ins don't directly drive your bill up." + - question: "Can I migrate users from Auth0 to Appwrite without resetting passwords?" + answer: "Yes. [Appwrite Auth](/docs/products/auth) supports importing user accounts along with their hashed passwords. Your users keep signing in with the same credentials after migration." + - question: "What authentication methods does Appwrite support out of the box?" + answer: "Email/password, 30+ OAuth providers, phone OTP, email OTP, magic URLs, anonymous sessions, and JWT. You also get 2FA, configurable session TTLs, and per-device session controls without paying extra." + - question: "Can I self-host Appwrite if I outgrow the cloud plan?" + answer: "Yes. Appwrite is open-source and you can move from [Appwrite Cloud](https://cloud.appwrite.io) to a self-hosted deployment using the same SDKs and APIs. Only the endpoint changes. Self-hosting on Auth0 requires their enterprise Private Cloud tier." + - question: "Does Appwrite support enterprise auth features like SSO and MFA?" + answer: "Appwrite supports TOTP-based MFA via authenticator app or email on all plans, plus RBAC, organization roles on Pro and Enterprise, and session controls. SAML and other enterprise SSO methods are not currently first-class, so if those are a hard requirement, evaluate carefully." --- If you're building a consumer-facing app, authentication is one of the first things you'll need to solve, and it's also one of the easiest places to make long-term tradeoffs without realizing it. Once your app starts growing, you don't want your identity provider to be the thing holding you back, or quietly draining your budget. @@ -57,7 +71,7 @@ Here's how the two platforms compare on features that matter most for growing B2 | **Self-hosting** | Fully supported | Enterprise-only via Private Cloud | | **Open source** | Yes | No | | **MFA** | Built-in (TOTP with email or authenticator app) | Multiple factors (SMS, push, biometrics) | -| **Permissions and RBAC** | Available on all plans; organization roles on Scale+ | Full RBAC available on higher tiers | +| **Permissions and RBAC** | Available on all plans; organization roles on Pro and Enterprise | Full RBAC available on higher tiers | | **Session limits** | Configurable TTLs, per-device controls | Supported; depth varies by plan | | **Auth methods** | Email/password, social login, OAuth, phone, anonymous, magic URL, LDAP | Email/password, social login, passkeys, SAML, MFA | | **Extensibility** | Serverless functions, custom auth logic | Rules engine, actions (plan-dependent) | diff --git a/src/routes/blog/post/appwrite-vs-auth0/+page.markdoc b/src/routes/blog/post/appwrite-vs-auth0/+page.markdoc index e06115fb24d..fb04edf67d6 100644 --- a/src/routes/blog/post/appwrite-vs-auth0/+page.markdoc +++ b/src/routes/blog/post/appwrite-vs-auth0/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aditya-oberai category: product unlisted: true +faqs: + - question: "What is the main difference between Appwrite Auth and Auth0?" + answer: "Appwrite is an open-source, all-in-one backend platform where authentication is one piece of a larger product suite. Auth0 is a closed-source, identity-focused SaaS. With Appwrite you can self-host or use the managed cloud, while Auth0 is cloud-only." + - question: "Is Appwrite a free alternative to Auth0?" + answer: "Appwrite has a generous free tier (75K monthly active users on the free plan) and is completely free if you self-host. Auth0's free plan covers 25K monthly active users, and paid plans start higher than Appwrite's. See [Appwrite Auth](/docs/products/auth) for the full feature list." + - question: "Which authentication methods does Appwrite support?" + answer: "Appwrite supports email/password, 30+ OAuth providers, JWT, magic URLs, phone OTP, and email OTP. You also get 2FA, session management, and password security features out of the box." + - question: "Can I migrate from Auth0 to Appwrite?" + answer: "Yes. Appwrite even provides an Auth0 integration so you can keep Auth0 as your identity provider while using Appwrite for the rest of your backend. For a full migration, export your Auth0 users and import them into [Appwrite Auth](/docs/products/auth) with hashed passwords preserved." + - question: "Does Appwrite Auth meet enterprise compliance requirements?" + answer: "Appwrite is GDPR, HIPAA, and SOC-2 compliant, with built-in encryption, password hashing, common-password protection, and session limits. These are the same compliance baselines Auth0 offers." + - question: "Do I get more than authentication with Appwrite?" + answer: "Yes. Beyond auth, Appwrite includes [Databases](/docs/products/databases), [Storage](/docs/products/storage), [Functions](/docs/products/functions), [Messaging](/docs/products/messaging), and [Sites](/docs/products/sites). Auth0 is authentication-only, so you'd still need separate services for the rest of your backend." --- When it comes to building modern applications, user authentication is one of the most critical components. Ensuring that your app is secure, user-friendly, and scalable can be a complicated, time-consuming task. Auth0 is a popular choice for handling authentication, but what if you're looking for an open-source alternative? diff --git a/src/routes/blog/post/appwrite-vs-vercel-vs-netlify/+page.markdoc b/src/routes/blog/post/appwrite-vs-vercel-vs-netlify/+page.markdoc index e017a0e8252..3aa2e9e3e2c 100644 --- a/src/routes/blog/post/appwrite-vs-vercel-vs-netlify/+page.markdoc +++ b/src/routes/blog/post/appwrite-vs-vercel-vs-netlify/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 7 author: aditya-oberai category: product featured: false +faqs: + - question: "Is Appwrite a replacement for Vercel and Netlify?" + answer: "It can be. [Appwrite Sites](/docs/products/sites) handles frontend hosting with Git deploys, edge distribution, and custom domains, similar to Vercel and Netlify. Where Appwrite differs is that it also includes auth, databases, storage, functions, and messaging in the same platform." + - question: "Should I use Appwrite alongside Vercel or Netlify?" + answer: "Yes, that's a common setup. Keep your frontend on Vercel or Netlify for their ecosystem benefits (Next.js optimizations, edge functions) and use Appwrite as the backend for auth, data, storage, and serverless logic. The SDKs work the same regardless of where the frontend lives." + - question: "Do Vercel and Netlify include a database?" + answer: "Not natively. Vercel retired its first-party database in 2025 and points users to Marketplace integrations like Neon, Upstash, or Supabase. Netlify DB is in beta and powered by Neon. With Appwrite, [Databases](/docs/products/databases) are first-class and included by default." + - question: "What's missing from Vercel and Netlify compared to Appwrite?" + answer: "Production-ready databases, full authentication with MFA and phone OTP, file storage with per-user permissions and antivirus scanning, push/email/SMS messaging, and native real-time subscriptions. You can assemble these via third-party services on Vercel/Netlify, but Appwrite ships them out of the box." + - question: "Can I self-host Appwrite?" + answer: "Yes. Appwrite is fully open source and runs on any Docker-compatible infrastructure. Vercel and Netlify are cloud-only managed services." + - question: "Which is better for static sites, Appwrite Sites or Netlify?" + answer: "Both serve static sites from a global edge network with Git-based deploys and preview URLs. Pick Appwrite Sites if you also need backend services in the same project. Pick Netlify or Vercel if you only need hosting and you're heavily invested in their specific ecosystems." --- If you ask a developer what Vercel and Netlify do, you'll get a clear answer: they host frontend applications. Fast deployments, CDN-delivered static assets, serverless functions for edge logic. They're excellent at what they do. But they're not full-stack platforms, and treating them as the foundation of your entire stack creates architectural gaps that show up later as bugs, security incidents, or features that are much harder to build than they should have been. diff --git a/src/routes/blog/post/april-product-update-mongodb-support-appwrite-190-realtime-upgrades-and-ai-tooling/+page.markdoc b/src/routes/blog/post/april-product-update-mongodb-support-appwrite-190-realtime-upgrades-and-ai-tooling/+page.markdoc index a2953db563e..6ac50347a8f 100644 --- a/src/routes/blog/post/april-product-update-mongodb-support-appwrite-190-realtime-upgrades-and-ai-tooling/+page.markdoc +++ b/src/routes/blog/post/april-product-update-mongodb-support-appwrite-190-realtime-upgrades-and-ai-tooling/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aishwari category: product featured: false +faqs: + - question: "What's new in Appwrite 1.9.0?" + answer: "Appwrite 1.9.0 adds MongoDB as a supported database option for self-hosted deployments, better handling of large integers, new string column types, configurable caching, and improved database observability. Real-time, auth, and infrastructure all got updates too." + - question: "Can I now use MongoDB with Appwrite?" + answer: "Yes, on self-hosted Appwrite starting with version 1.9.0. You can run Appwrite directly on your existing MongoDB infrastructure while keeping the same SDKs and APIs. Backups, monitoring, and scaling tools you've built around MongoDB carry over." + - question: "How does the new message-based Realtime work?" + answer: "Realtime now uses a single persistent WebSocket with a message-based protocol. You can manage multiple subscriptions on one connection, update them without reconnecting, and avoid URL length limits. This makes [Realtime](/docs/products/databases) more predictable for production workloads." + - question: "What is the Webhooks API for?" + answer: "It lets you create, update, and delete webhooks programmatically from any Appwrite Server SDK. You can also configure signing secrets in code, which is useful for CI/CD pipelines and multi-tenant systems where webhooks are provisioned dynamically." + - question: "Is the Appwrite Terraform provider production-ready?" + answer: "The provider supports databases, storage, functions, auth, messaging, and more via HCL. It works with both Appwrite Cloud and self-hosted setups, so you can apply infrastructure changes consistently across environments." + - question: "What does the Appwrite plugin for Claude Code do?" + answer: "It gives Claude Code first-class awareness of Appwrite APIs, so the agent can scaffold and modify Appwrite-backed apps without you pasting docs into the prompt. There's a matching plugin for Cursor and an updated MCP Server (2.0) for other MCP-compatible tools." --- Welcome back to the product update. April was packed with major releases across Appwrite. From our official MongoDB partnership and Appwrite 1.9.0 to new infrastructure APIs, Realtime improvements, performance upgrades, and deeper AI integrations, we shipped updates focused on helping you build faster, scale more reliably, and integrate Appwrite more deeply into your workflows. diff --git a/src/routes/blog/post/avif-in-storage/+page.markdoc b/src/routes/blog/post/avif-in-storage/+page.markdoc index 5ec336d4fce..ee0b68e6024 100644 --- a/src/routes/blog/post/avif-in-storage/+page.markdoc +++ b/src/routes/blog/post/avif-in-storage/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 6 author: ebenezer-don category: tutorial featured: false +faqs: + - question: "What is AVIF and why use it?" + answer: "AVIF is an image format built on the AV1 video codec. It typically achieves 50% or smaller file sizes than JPEG at equivalent visual quality, supports transparency and animations, and works in HDR. Smaller images mean faster page loads and lower bandwidth bills." + - question: "Does Appwrite Storage support AVIF?" + answer: "Yes. You can upload AVIF files directly to [Appwrite Storage](/docs/products/storage), and you can also convert other formats to AVIF on the fly via getFilePreview by setting the output format to ImageFormat.Avif." + - question: "Can Appwrite convert my JPEGs and PNGs to AVIF automatically?" + answer: "Yes. Use getFilePreview with output set to AVIF to convert any uploaded image on demand. You can tune the quality parameter (0 to 100) and crop with the ImageGravity options." + - question: "How do I handle browsers that don't support AVIF?" + answer: "Serve AVIF via the HTML picture element with WebP and JPEG fallbacks, and let the browser pick the first supported source. Appwrite's getFilePreview can deliver each format from the same source file, so you don't store multiple copies." + - question: "Is AVIF supported in all modern browsers?" + answer: "Chrome, Edge, Firefox, and Safari all support AVIF in current versions. Older browsers may need a fallback (WebP or JPEG), which is straightforward with the picture element." + - question: "Will AVIF reduce my Appwrite Storage bandwidth costs?" + answer: "Likely yes, since AVIF files are typically much smaller than JPEG or PNG for the same image quality. Less data shipped to clients means lower egress and faster load times, though exact savings depend on your image types and quality settings." --- Every web developer knows the struggle with image optimization. You want your images to look good, but large file sizes slow down your sites and hurt the user experience. JPEG and WebP have been popular choices for image compression, but they have limitations when it comes to achieving high compression without sacrificing image quality. AVIF offers a solution to this problem. diff --git a/src/routes/blog/post/baas-vs-custom-backend/+page.markdoc b/src/routes/blog/post/baas-vs-custom-backend/+page.markdoc index e1c94798d7a..8da9e2341c7 100644 --- a/src/routes/blog/post/baas-vs-custom-backend/+page.markdoc +++ b/src/routes/blog/post/baas-vs-custom-backend/+page.markdoc @@ -7,6 +7,19 @@ timeToRead: 6 date: 2024-06-20 author: aditya-oberai category: product +faqs: + - question: "What is a BaaS (Backend-as-a-Service)?" + answer: "A BaaS is a third-party platform that handles common backend operations like authentication, databases, file storage, push notifications, and hosting. You skip building these from scratch and focus on the app-specific logic that actually differentiates your project." + - question: "When should a freelancer pick a BaaS over a custom backend?" + answer: "Pick a BaaS when you build similar features (auth, CRUD, storage) across many client projects, when speed-to-launch matters, and when you don't want to maintain custom backend code per client. Pick custom only when client requirements truly can't be met by a BaaS feature set." + - question: "Does using a BaaS lock me in?" + answer: "It depends on the vendor. Open-source platforms like Appwrite let you self-host the same backend if you ever need to leave the managed cloud, and your SDK code keeps working. Closed BaaS providers can be harder to escape, so check portability before you commit." + - question: "What does Appwrite include out of the box?" + answer: "[Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), [Functions](/docs/products/functions), [Messaging](/docs/products/messaging), and [Sites](/docs/products/sites) hosting, all in one open-source platform. You can use Appwrite Cloud or self-host." + - question: "Can I integrate my own database with a BaaS?" + answer: "With Appwrite, yes. You can keep using Appwrite for auth, storage, and functions while connecting to an external SQL, NoSQL, vector, or graph database from inside an Appwrite Function. This avoids the all-or-nothing tradeoff some BaaS platforms force on you." + - question: "Is BaaS more cost-effective than building a custom backend?" + answer: "For most freelancers, yes. You skip the cost of server provisioning, security audits, and ongoing maintenance, and you trade it for a predictable subscription. The break-even point favors BaaS for small-to-medium projects, which is most freelance work." --- As a freelance developer, you juggle multiple roles – project manager, designer, coder, and even a bit of a salesperson. The job is not for the faint of heart. Add to that the need to build, scale and maintain complex backends for each client, and now your day-to-day is taken over by time-consuming, grinding tasks. diff --git a/src/routes/blog/post/backend-for-claude-code-apps/+page.markdoc b/src/routes/blog/post/backend-for-claude-code-apps/+page.markdoc index ceb42160869..52cde4864a1 100644 --- a/src/routes/blog/post/backend-for-claude-code-apps/+page.markdoc +++ b/src/routes/blog/post/backend-for-claude-code-apps/+page.markdoc @@ -9,6 +9,19 @@ author: atharva category: tutorial featured: false callToAction: true +faqs: + - question: "How do I add a backend to apps I build with Claude Code?" + answer: "Install the Appwrite plugin for Claude Code, then point it at an Appwrite project using an API key. From there, Claude Code can create auth flows, database schemas, storage buckets, and functions for you via the Appwrite MCP server." + - question: "What does the Appwrite plugin for Claude Code include?" + answer: "It bundles the Appwrite API MCP server, the Appwrite Docs MCP server, and eleven agent skills covering the Appwrite CLI and all major SDKs. The skills load on demand whenever Claude Code is writing Appwrite-related code." + - question: "What scopes should I give my Appwrite API key for Claude Code?" + answer: "Grant only the scopes Claude Code needs for the immediate task: auth scopes when setting up authentication, database scopes when building a schema, and so on. Avoid selecting all scopes, and set a short expiration so a leaked key doesn't stay dangerous forever." + - question: "Do I need to self-host Appwrite to use it with Claude Code?" + answer: "No. [Appwrite Cloud](https://cloud.appwrite.io) works out of the box with Claude Code. Self-hosting is fine too, you just point the MCP server at your own endpoint instead of the Cloud URL." + - question: "Why not just have Claude Code build a custom backend from scratch?" + answer: "LLMs can now probe and exploit hand-rolled backends autonomously, so unmaintained custom code is a liability. A platform that gets patched as new attack classes emerge is safer than bespoke auth and storage code that nobody is paid to keep current." + - question: "Can Claude Code build full-stack apps with Appwrite?" + answer: "Yes. With the plugin installed, Claude Code can scaffold the frontend in your framework of choice and wire it up to [Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) in the same session. You then deploy to [Appwrite Sites](/docs/products/sites) or any host you prefer." --- Claude Code is at its best when it is building working software, not prototypes. You describe a feature, it edits files, runs commands, and iterates until the app actually behaves the way you asked for. That loop holds up well for the frontend. It falls apart the moment your app needs to remember anything: a user, a session, a saved note, an uploaded file. diff --git a/src/routes/blog/post/backup-encryption/+page.markdoc b/src/routes/blog/post/backup-encryption/+page.markdoc index 3ef68af5560..c3418c01430 100644 --- a/src/routes/blog/post/backup-encryption/+page.markdoc +++ b/src/routes/blog/post/backup-encryption/+page.markdoc @@ -7,6 +7,19 @@ timeToRead: 5 date: 2024-10-15 author: aditya-oberai category: product, security +faqs: + - question: "Should I encrypt my database backups?" + answer: "Yes. Backups often contain the same sensitive data as your live database, so an unencrypted backup is just as dangerous if it leaks. Encryption also helps you meet GDPR, HIPAA, and similar compliance requirements." + - question: "Does Appwrite encrypt backups automatically?" + answer: "Yes. [Appwrite Databases](/docs/products/databases) encrypts every backup in transit and at rest by default. It uses a 2048-bit RSA key pair plus a 128-bit AES key per session, with the AES key destroyed after each backup completes." + - question: "What's the difference between encryption at rest and in transit?" + answer: "Encryption at rest protects data while it's stored on disk. Encryption in transit protects it while it moves between systems (for example, during a backup upload). You want both, since a gap in either layer can expose your data." + - question: "What encryption algorithm is best for backups?" + answer: "AES-256 is the practical default for backup data because it's fast and strong. RSA is typically used to encrypt the AES key itself rather than the bulk data, since RSA is slower for large payloads." + - question: "Do I need a separate KMS if I use Appwrite?" + answer: "Not for backups. Appwrite handles key generation, storage, and rotation for backup encryption internally. If you encrypt application-level data on top of that, you can still pair Appwrite with AWS KMS, Google Cloud KMS, or Azure Key Vault." + - question: "Does Appwrite take backups without downtime?" + answer: "Yes. Appwrite supports hot backups, so backups run without interrupting your application. You can also configure retention policies based on how critical the data is." --- Data security is more important than ever, and if you manage databases, one key question you may ask is: *Should I encrypt my backups?* The answer is a clear yes. Let’s break down why encrypting your backups is essential, especially for database backups, and how Appwrite helps by automatically encrypting them. diff --git a/src/routes/blog/post/behind-the-pr-tales-from-the-open-source-world/+page.markdoc b/src/routes/blog/post/behind-the-pr-tales-from-the-open-source-world/+page.markdoc index 74b5689d7da..f6c5b9ff9e8 100644 --- a/src/routes/blog/post/behind-the-pr-tales-from-the-open-source-world/+page.markdoc +++ b/src/routes/blog/post/behind-the-pr-tales-from-the-open-source-world/+page.markdoc @@ -8,6 +8,19 @@ date: 2023-10-30 author: haimantika-mitra category: hackathon, contributors, open-source featured: false +faqs: + - question: "What is Hacktoberfest?" + answer: "Hacktoberfest is an annual open-source event in October where contributors submit pull requests to participating repositories. It's run by DigitalOcean and partners, and exists to encourage new and experienced developers to contribute to open-source projects." + - question: "How can a beginner start contributing to open source?" + answer: "Pick one or two projects that match your interests, read their CONTRIBUTING guidelines, and start with issues labelled good-first-issue or beginner-friendly. Documentation fixes and small bug fixes are perfectly valid first contributions." + - question: "How can I contribute to Appwrite during Hacktoberfest?" + answer: "Browse Appwrite's GitHub organization for issues tagged hacktoberfest, pick one that interests you, comment to claim it, and submit a pull request. The Appwrite Discord is a good place to ask for guidance if you get stuck." + - question: "Do my pull requests have to be code-only?" + answer: "No. Documentation, examples, tests, and translations are all valuable contributions. Maintainers often prioritize docs and example improvements because they help every future user of the project." + - question: "What is Appwrite?" + answer: "Appwrite is an open-source backend platform that gives developers ready-made APIs for auth, databases, storage, functions, and messaging. The core is on GitHub and welcomes community contributions across all major repos." + - question: "Why participate in Hacktoberfest beyond getting swag?" + answer: "You get real experience working with maintainers, reading unfamiliar codebases, and going through code review. Those skills carry directly into day-job work, and the connections you make in open-source communities can lead to mentorship and opportunities." --- In the world of software development, October is more than just a month; it's a season of collaboration, innovation, and celebration. diff --git a/src/routes/blog/post/best-backend-as-a-service-platforms/+page.markdoc b/src/routes/blog/post/best-backend-as-a-service-platforms/+page.markdoc index 3d133d0ef32..2ff57a58dcd 100644 --- a/src/routes/blog/post/best-backend-as-a-service-platforms/+page.markdoc +++ b/src/routes/blog/post/best-backend-as-a-service-platforms/+page.markdoc @@ -8,6 +8,19 @@ date: 2026-04-27 author: aditya-oberai category: product lastUpdated: 2026-04-27 +faqs: + - question: "What is a BaaS (Backend-as-a-Service)?" + answer: "A BaaS is a managed platform that handles common backend concerns like auth, databases, file storage, functions, and messaging. You skip writing and maintaining the boilerplate and focus on the parts of your app that are actually unique." + - question: "Which BaaS platforms are worth evaluating in 2026?" + answer: "Appwrite, Firebase, Supabase, and AWS Amplify cover the realistic shortlist. Each has a different center of gravity: Appwrite for open-source self-hosting with broad APIs, Firebase for tight Google ecosystem, Supabase for Postgres-first apps, and Amplify if you're already deep in AWS." + - question: "Which BaaS platforms are open source?" + answer: "Appwrite (BSD 3-Clause) and Supabase (Apache 2.0) are open source and self-hostable. Firebase and AWS Amplify are proprietary and managed-only. If avoiding lock-in matters, the open-source options give you an exit path." + - question: "Is Appwrite a good alternative to Firebase?" + answer: "Yes. Appwrite covers the same surface area as Firebase (auth, database, storage, functions, messaging) and adds [Appwrite Sites](/docs/products/sites) for hosting. The key difference is that Appwrite is open source, so you can self-host and own your data." + - question: "How should I choose a BaaS for a new project?" + answer: "Decide whether self-hosting or owning the source matters, whether you need Postgres specifically, and whether you're committed to a specific cloud provider. Then prototype auth, one CRUD path, and one background job on your top two finalists before locking in." + - question: "Can I migrate between BaaS platforms later?" + answer: "It's much easier if you start with an open-source BaaS that gives you portable data paths. Appwrite and Supabase let you export schemas and users cleanly. Firebase and Amplify lock you to Google or AWS, so migrations away from them tend to be heavier projects." --- If you are evaluating **BaaS platforms** for a new product or a migration, you want a short list that maps to real engineering constraints: data model, self-hosting, pricing shape, and **lock-in**, not feature marketing. diff --git a/src/routes/blog/post/best-ios-android-app-development-platforms/+page.markdoc b/src/routes/blog/post/best-ios-android-app-development-platforms/+page.markdoc index 52ad95aa73f..379740b7d82 100644 --- a/src/routes/blog/post/best-ios-android-app-development-platforms/+page.markdoc +++ b/src/routes/blog/post/best-ios-android-app-development-platforms/+page.markdoc @@ -7,6 +7,19 @@ timeToRead: 8 date: 2024-09-27 author: aditya-oberai category: product, tutorial +faqs: + - question: "What's the best framework for building both iOS and Android apps?" + answer: "There's no single right answer. React Native and Flutter are the most popular cross-platform options, while Kotlin Multiplatform Mobile (KMM) and .NET MAUI suit teams already invested in Kotlin or C#. The right pick depends on your team's existing language skills and what you optimize for: pure native feel, web-developer onboarding, or UI consistency." + - question: "Should I use cross-platform or native development?" + answer: "Cross-platform is the pragmatic default if you want one codebase and faster shipping. Native (Swift for iOS, Kotlin for Android) is still the choice when you need bleeding-edge platform APIs, top-tier performance, or platform-specific design language. Most production apps land on a cross-platform framework." + - question: "Which framework offers the best performance?" + answer: "Flutter and native frameworks (SwiftUI, Jetpack Compose) tend to lead on raw performance because they compile to native code with their own rendering. React Native is close enough for most apps, especially since the New Architecture rolled out. Performance differences usually matter less than build quality." + - question: "How do I add a backend to my mobile app?" + answer: "Most mobile frameworks pair well with a Backend-as-a-Service like [Appwrite](/docs/products/auth). Use the platform's SDKs for authentication, databases, file storage, and push notifications instead of writing and hosting your own backend. Appwrite has SDKs for Flutter, React Native, Apple, Android, and Kotlin Multiplatform." + - question: "Does Appwrite support iOS and Android development?" + answer: "Yes. Appwrite ships SDKs for Apple platforms (Swift), Android (Kotlin), Flutter, React Native, and .NET. You get the same [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Messaging](/docs/products/messaging) APIs across all of them." + - question: "What's the easiest way to add push notifications to a mobile app?" + answer: "Use a managed messaging service rather than wiring APNs and FCM yourself. [Appwrite Messaging](/docs/products/messaging) gives you a single API for push, email, and SMS with subscriber and topic management built in." --- Asking, “What is the best mobile app development framework?” can spark some heated debates among developers. The choice of framework isn’t just a technical decision; it’s deeply personal and often influenced by the languages you’re comfortable with, your project requirements, and your team's expertise. diff --git a/src/routes/blog/post/best-pagination-technique/+page.markdoc b/src/routes/blog/post/best-pagination-technique/+page.markdoc index ee1132e3b3d..a195b324f10 100644 --- a/src/routes/blog/post/best-pagination-technique/+page.markdoc +++ b/src/routes/blog/post/best-pagination-technique/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 8 author: matej-baco category: tutorial callToAction: true +faqs: + - question: "What's the difference between offset and cursor pagination?" + answer: "Offset pagination uses a limit and offset (skip N rows), which is simple but gets slower as offsets grow. Cursor pagination uses a reference row's ID to fetch the next page, which performs consistently regardless of how deep into the data you are." + - question: "Which is better, offset or cursor pagination?" + answer: "Cursor pagination is faster and more reliable for large or frequently-changing datasets because it avoids scanning skipped rows and doesn't break when rows are inserted or deleted mid-pagination. Offset pagination is simpler and fine for small datasets or admin tools where page numbers are useful." + - question: "Why does offset pagination get slow?" + answer: "Databases implement OFFSET by walking through rows to skip them, so OFFSET 100000 still touches 100,000 rows internally. Cursor pagination uses an indexed WHERE clause, which skips directly to the right position. The difference shows up dramatically at scale." + - question: "Does Appwrite support cursor pagination?" + answer: "Yes. [Appwrite Databases](/docs/products/databases) supports both offset and cursor pagination out of the box via Query.cursorAfter and Query.cursorBefore. Appwrite handles the indexing and complexity so you can use cursors without writing the bookkeeping yourself." + - question: "When should I add database indexes for pagination?" + answer: "Add indexes on any column you sort by or use as a cursor. Without an index, cursor pagination still needs to scan rows to find matches. With Appwrite, you can create indexes directly from the console or via the SDK." + - question: "Can I show total counts with cursor pagination?" + answer: "Counting total rows efficiently is its own challenge regardless of pagination strategy. For large tables, an exact count requires a full scan. Cursor pagination typically ships with Previous/Next buttons rather than page numbers, which sidesteps the count problem entirely." --- The Database is one of the cornerstones of every application. It's where you store everything your app needs to remember, compute later, or display to other users online. It's all smooth sailing until your database grows and your application starts lagging because it's trying to fetch and render 1,000 posts simultaneously. As a smart engineer, you quickly patch this with a `Show more` button. However, a few weeks later, you encounter a `Timeout` error. Turning to Stack Overflow, you find that copying and pasting solutions is no longer helping. With no other options, you start debugging and discover that the database returns over 50,000 posts each time a user opens your app. What do you do now? diff --git a/src/routes/blog/post/best-postman-alternative-options/+page.markdoc b/src/routes/blog/post/best-postman-alternative-options/+page.markdoc index bbb5f2cbc88..f9387f8c749 100644 --- a/src/routes/blog/post/best-postman-alternative-options/+page.markdoc +++ b/src/routes/blog/post/best-postman-alternative-options/+page.markdoc @@ -9,6 +9,19 @@ author: eldad-fux category: product featured: false callToAction: true +faqs: + - question: "What's the best Postman alternative for most developers?" + answer: "Bruno is the most direct drop-in replacement: similar UI, same collection-centric workflow, but stored as plain text files in your repo. If you prefer the terminal, HTTPie or Hurl are excellent. If you want browser-based, Hoppscotch is the leading choice." + - question: "Why are developers leaving Postman?" + answer: "Forced account creation, telemetry, cloud lock-in, and increasing bloat. Many developers want their requests version-controlled with the code, not synced through a vendor's cloud, and they want a faster, leaner client." + - question: "Are there open-source alternatives to Postman?" + answer: "Yes. Bruno, Yaak, HTTPie, Hoppscotch, and Hurl are all open source. .http files in VS Code and JetBrains IDEs are also a built-in, vendor-free way to manage API requests alongside your code." + - question: "Can I version-control my API requests?" + answer: "Yes, if you pick a tool that stores requests as files. Bruno saves collections as plain text in your repo, and .http files live directly in your codebase. Both let you review API changes in pull requests, run them in CI, and avoid sync issues." + - question: "What's the best Postman alternative for CI/CD pipelines?" + answer: "Hurl is purpose-built for CI: it's a CLI tool that describes requests and assertions in plain text and outputs JUnit or TAP results. Pair it with .http files or Bruno for development, and you get a smooth path from local testing to automated checks." + - question: "Does Appwrite work with these API clients?" + answer: "Yes. Appwrite exposes a standard REST and GraphQL API, so any of these clients can test [Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), or [Functions](/docs/products/functions) endpoints. You can also use the Appwrite CLI directly for project-specific workflows." --- Postman has been a staple in modern API development for years. For many teams, it was the first tool they opened after spinning up a backend. It made API testing approachable, collections shareable, and workflows more structured. diff --git a/src/routes/blog/post/budget-caps-stop-unexpected-cloud-bills/+page.markdoc b/src/routes/blog/post/budget-caps-stop-unexpected-cloud-bills/+page.markdoc index 7f11d7f3e86..166f9b6dc62 100644 --- a/src/routes/blog/post/budget-caps-stop-unexpected-cloud-bills/+page.markdoc +++ b/src/routes/blog/post/budget-caps-stop-unexpected-cloud-bills/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 3 author: ebenezer-don category: tutorial featured: false +faqs: + - question: "What is a budget cap?" + answer: "A budget cap is a hard spending limit on your cloud account. Unlike a billing alert that just sends an email, a cap stops new charges once you hit your limit. This protects you from surprise bills when something goes wrong overnight." + - question: "How do I set a budget cap in Appwrite?" + answer: "Open the Billing tab in your Appwrite Cloud console, click View estimated usage to see your typical consumption, then enable the budget cap toggle and pick a monthly limit. You can also configure alerts at 25%, 50%, 75%, and 100% of your cap." + - question: "Does Firebase have hard budget caps?" + answer: "No. Firebase offers budget alerts, which send notifications when you hit thresholds, but they don't stop charges. That's why stories like the $70k Firebase bill keep happening: by the time someone sees the alert, the damage is already done." + - question: "What happens when I hit my Appwrite budget cap?" + answer: "New paid usage stops until you explicitly raise the cap or move to a higher plan. Your project's existing data stays intact, but billable resources stop accruing new charges. This is the safety net you want for unexpected traffic spikes or bugs." + - question: "How do I handle a legitimate traffic spike with a budget cap in place?" + answer: "The percentage-based alerts give you a heads-up before you hit the cap, so you can review your metrics and raise the cap if the growth is legitimate. If the spike looks abnormal, the cap protects you while you investigate the cause." + - question: "Are budget caps available on all Appwrite plans?" + answer: "Yes. Budget caps are available across Appwrite Cloud plans. Check the [Appwrite docs](/docs/advanced/platform/billing) for the latest configuration steps and limits per plan." --- You might have come across the recent post about a Firebase user who got hit with a $70k bill. This has caused another round of debates about cloud billing practices and who's responsible when things go wrong. These stories keep happening because most cloud providers only offer alerts, not hard stops. diff --git a/src/routes/blog/post/build-a-currency-converter-with-deno2/+page.markdoc b/src/routes/blog/post/build-a-currency-converter-with-deno2/+page.markdoc index 25f95134d3d..e1dba1b979d 100644 --- a/src/routes/blog/post/build-a-currency-converter-with-deno2/+page.markdoc +++ b/src/routes/blog/post/build-a-currency-converter-with-deno2/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/build-a-currency-converter-with-deno2/cover.avif timeToRead: 12 author: ebenezer-don category: tutorial +faqs: + - question: "What is Deno 2 and why use it for APIs?" + answer: "Deno 2 is a TypeScript-first JavaScript runtime built by the original Node.js creator. It has built-in TypeScript support, a permissions model, native standard library, and now ships with broad Node.js compatibility. For APIs, it eliminates a lot of tooling overhead you'd otherwise have in Node." + - question: "Does Appwrite Functions support Deno?" + answer: "Yes. [Appwrite Functions](/docs/products/functions) supports Deno as a first-class runtime. You can pick Deno from the runtime dropdown when creating a function or via the CLI, and it ships with the same routing, environment variables, and deployment options as other runtimes." + - question: "How do I deploy a Deno function to Appwrite?" + answer: "Use the Appwrite CLI: run appwrite init project, then appwrite init function and pick Deno. Develop locally with appwrite run function, and push to the cloud with appwrite push function. You can also deploy via the Appwrite Console by connecting a GitHub repo." + - question: "Can I use Node.js packages in a Deno function?" + answer: "Yes. Deno 2 supports importing npm packages directly via the npm: specifier. The tutorial uses Zod (an npm package) for validation, which works exactly the same way in Deno as it does in Node." + - question: "How do I store API keys for an Appwrite Function?" + answer: "Use environment variables. Add them in the Appwrite console under your function's Settings tab, or via the CLI. They're injected into the function's runtime at execution time, so you avoid committing secrets to your code." + - question: "Can I trigger an Appwrite Function via HTTP?" + answer: "Yes. Every Appwrite Function has an HTTP execution endpoint by default. You can also trigger functions on a schedule (cron) or in response to database, auth, or storage events. The currency converter in this post uses HTTP triggers." --- When building APIs, one of the most useful things you can create is a currency converter. Whether you're working on an application that handles pricing in different currencies or something more personal like tracking expenses across borders, having a reliable currency converter is a great tool. Today, we'll walk through building one using **Deno 2** and **Appwrite**. diff --git a/src/routes/blog/post/build-delivery-store-locator-spatial-columns/+page.markdoc b/src/routes/blog/post/build-delivery-store-locator-spatial-columns/+page.markdoc index 1eb9cd8cc5e..3fe21eaeadd 100644 --- a/src/routes/blog/post/build-delivery-store-locator-spatial-columns/+page.markdoc +++ b/src/routes/blog/post/build-delivery-store-locator-spatial-columns/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/build-delivery-store-locator-spatial-columns/cover.avif timeToRead: 5 author: atharva category: tutorial +faqs: + - question: "What are spatial columns in Appwrite?" + answer: "Spatial columns let you store and query real-world geographic data (points, lines, polygons) directly in [Appwrite Databases](/docs/products/databases). They handle the geometric math behind queries like distance, so you don't have to calculate distances between lat/lon pairs in your app code." + - question: "What column type do I use for storing locations?" + answer: "Use the Point column type for single coordinates (like a store address). It accepts a tuple of [longitude, latitude] when you create or update rows. There are also Line and Polygon types for routes and regions." + - question: "How do I find rows within a certain distance?" + answer: "Use Query.distanceLessThan with the column name, your reference coordinates, and a distance value. Pass true as the fourth argument to interpret the distance as meters. Appwrite returns only the rows whose point falls within that radius." + - question: "Do I need authentication to use spatial columns?" + answer: "No, spatial columns are just another column type and work with the same permission system as the rest of [Appwrite Databases](/docs/products/databases). The tutorial skips auth for simplicity, but in production you'd enforce permissions per role or per user." + - question: "How fast is a spatial distance query in Appwrite?" + answer: "Spatial queries can use spatial indexes on Point columns for fast lookups, which means you don't need to scan every row to find nearby matches. Performance scales well with proper indexing, similar to how regular indexes speed up text or numeric queries." + - question: "Can I sort by distance with spatial columns?" + answer: "The distance query returns matching rows, and you can compute exact distances client-side from the returned coordinates to sort them. For more advanced use cases like nearest-neighbor sorting on the server, check the Appwrite query reference for the latest supported operators." --- We just launched spatial columns for Appwrite databases which allows you to perform queries on real, spatial data like locations, areas, and routes. This unlocks a lot of possibilities where you can tap into real-world geo data and query the information you need. This saves you from performing your own calculations on longitudes and latitudes and instead relying on Appwrite's database to query the data you need. diff --git a/src/routes/blog/post/build-fullstack-notes-app-cursor-appwrite-tanstack-start/+page.markdoc b/src/routes/blog/post/build-fullstack-notes-app-cursor-appwrite-tanstack-start/+page.markdoc index 3f02bf70049..4a3c9b2f57a 100644 --- a/src/routes/blog/post/build-fullstack-notes-app-cursor-appwrite-tanstack-start/+page.markdoc +++ b/src/routes/blog/post/build-fullstack-notes-app-cursor-appwrite-tanstack-start/+page.markdoc @@ -9,6 +9,19 @@ author: tessa category: tutorial featured: false draft: false +faqs: + - question: "What is MCP (Model Context Protocol)?" + answer: "MCP is a protocol that lets AI tools securely connect to APIs and data sources. With the Appwrite MCP server, Cursor (or any MCP-compatible agent) can read and modify your Appwrite project, including creating tables, querying data, and managing users." + - question: "How does Cursor connect to Appwrite?" + answer: "Install the Appwrite MCP server in Cursor under Tools, then provide your Appwrite endpoint, project ID, and API key. Once configured, Cursor can call Appwrite APIs from inside your editor session as if it were any other tool." + - question: "What is TanStack Start?" + answer: "TanStack Start is a full-stack React framework built on TanStack Router and Vinxi. It supports server functions, file-based routing, and SSR out of the box, making it a solid choice for building fullstack apps with type-safe data flow." + - question: "Can I build a full app without writing code by hand?" + answer: "With Cursor connected to Appwrite via MCP, you can generate most of the boilerplate (database schema, auth flows, CRUD endpoints) by prompting the agent. You'll still want to read and review what gets produced, especially for permissions and validation." + - question: "What scopes do I need on my Appwrite API key for Cursor?" + answer: "For the notes app, you need tables.read, tables.write, users.read, and users.write at minimum. Start with the narrowest set of scopes needed and add more if your prompts require them. Avoid granting all scopes in production." + - question: "How do I connect [Appwrite Auth](/docs/products/auth) to a TanStack Start app?" + answer: "Use the Appwrite Web SDK on the client and create sessions via the Account API. For SSR scenarios, pass the session cookie or JWT to the server function so Appwrite knows who's making the request. The tutorial walks through this end-to-end." --- Developers are entering a new era where AI can *understand context and build with you*. diff --git a/src/routes/blog/post/build-fullstack-svelte-appwrite/+page.markdoc b/src/routes/blog/post/build-fullstack-svelte-appwrite/+page.markdoc index cfed0e8a7e1..141897c4819 100644 --- a/src/routes/blog/post/build-fullstack-svelte-appwrite/+page.markdoc +++ b/src/routes/blog/post/build-fullstack-svelte-appwrite/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/build-fullstack-svelte-appwrite/cover.avif timeToRead: 15 author: ebenezer-don category: tutorial +faqs: + - question: "Does Appwrite work with SvelteKit?" + answer: "Yes. Appwrite has a JavaScript Web SDK that works seamlessly with SvelteKit on both client and server. You can use it from +page.svelte files, +page.server.js load functions, or SvelteKit form actions. SSR sessions work through cookies." + - question: "How do I authenticate users in a SvelteKit app with Appwrite?" + answer: "Use [Appwrite Auth](/docs/products/auth) via the Account API on the client to handle email/password, OAuth, or magic URL flows. For SSR, store the session in a cookie and use a server-side Appwrite client (with the session set) inside +page.server.js to fetch user-scoped data." + - question: "Can I use Appwrite with TypeScript in Svelte?" + answer: "Yes. The Appwrite Web SDK ships with full TypeScript types. The tutorial uses JavaScript for simplicity, but you can swap in TypeScript by picking that option in sv create and importing types directly from the appwrite package." + - question: "How do I enforce that users only see their own data?" + answer: "Enable Document Security on your collection and set per-document permissions when creating rows. Use the user's ID as the read/write permission so other users can't access their data. [Appwrite Databases](/docs/products/databases) handles the permission checks automatically." + - question: "What's the difference between collection-level and document-level permissions?" + answer: "Collection-level permissions apply to all documents in the collection. Document-level (Document Security) lets each row carry its own permissions, which is what you want for multi-tenant data like a personal expense tracker. Enable Document Security to use it." + - question: "Do I need to host Svelte and Appwrite separately?" + answer: "Not necessarily. You can deploy the SvelteKit frontend on [Appwrite Sites](/docs/products/sites) and use the same project for backend services, keeping everything under one console. Or you can deploy SvelteKit elsewhere (Netlify, Vercel) and point at Appwrite for the backend." --- Managing personal finances is a common need, and building an expense tracker is an excellent way to learn full-stack development with Svelte. In this tutorial, we'll create a web application that helps users track their spending. diff --git a/src/routes/blog/post/build-saas-waitlist/+page.markdoc b/src/routes/blog/post/build-saas-waitlist/+page.markdoc index 9c26c1ea5ee..ac34c5cfa2c 100644 --- a/src/routes/blog/post/build-saas-waitlist/+page.markdoc +++ b/src/routes/blog/post/build-saas-waitlist/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 10 author: atharva category: tutorial, product featured: false +faqs: + - question: "Why use Appwrite for a SaaS waitlist instead of a form service?" + answer: "Form services work for capturing emails, but they make it hard to query or export your data later, and they often add their branding. With [Appwrite Databases](/docs/products/databases), you own the data, can query it with filters and indexes, and can wire it into the rest of your stack as the product grows." + - question: "How do you prevent duplicate emails in an Appwrite waitlist?" + answer: "Create a unique index on the email column in your Entries table. When someone tries to sign up with an existing email, the insert fails with a 409 error. The frontend catches that and shows a friendly \"you're already on the list\" message instead of a generic server error." + - question: "Do I need a server to run a waitlist on Appwrite?" + answer: "No. The browser can talk to Appwrite directly using the client SDK, so you only need a static React or Vite app. There is no API key to ship, no Node server to maintain, and permissions on the table control who can write. This is the same pattern most simple Appwrite frontends use." + - question: "How do I make the email field validate without writing a regex?" + answer: "Use Appwrite's built-in email column type when you create the table. Appwrite validates the format on write, so the database rejects malformed emails before they hit your data. You still want client-side validation for UX, but the server-side check is the source of truth." + - question: "What permissions should I set on the waitlist table?" + answer: "Allow Any to create documents so unauthenticated visitors can sign up, but do not give read access to Any. Reading the list should be restricted to a specific team or admin role so emails are not publicly enumerable. See [Appwrite Databases](/docs/products/databases) for how role-based permissions work." + - question: "How would I send a confirmation email after someone joins the waitlist?" + answer: "Trigger an [Appwrite Function](/docs/products/functions) on the document.create event for the Entries table. The function receives the new entry and sends a confirmation through your email provider or through [Appwrite Messaging](/docs/products/messaging). This keeps the frontend simple while adding async behavior." --- Every SaaS launch starts the same way. A landing page, a form, and a quiet hope that the right people leave an email. The shape of that form is simple, but the backend around it has to do a handful of unglamorous jobs well: accept writes from the browser, reject duplicate emails, store entries safely, and stay out of your way. diff --git a/src/routes/blog/post/building-apps-with-bun-and-appwrite/+page.markdoc b/src/routes/blog/post/building-apps-with-bun-and-appwrite/+page.markdoc index 547ef3addfe..a77617f238e 100644 --- a/src/routes/blog/post/building-apps-with-bun-and-appwrite/+page.markdoc +++ b/src/routes/blog/post/building-apps-with-bun-and-appwrite/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/building-apps-with-bun-and-appwrite/bun-cover.avif timeToRead: 9 author: aditya-oberai category: tutorial +faqs: + - question: "What is Bun and how is it different from Node.js?" + answer: "Bun is an all-in-one JavaScript runtime and toolkit that includes a bundler, test runner, and Node.js-compatible package manager. It is written in Zig and aims to be significantly faster than Node.js for installing packages, running scripts, and serving HTTP traffic. Bun is also Node.js-compatible for most APIs, so existing projects can often migrate without major changes." + - question: "Can I use Bun with Appwrite Functions?" + answer: "Yes. Appwrite Functions supports Bun as a first-class runtime, so you can deploy Bun code and have it executed on demand or on a schedule. See [Appwrite Functions](/docs/products/functions) for runtime options and deployment details." + - question: "Does Bun support TypeScript out of the box?" + answer: "Yes. Bun has native TypeScript support, which means you can run `.ts` and `.tsx` files directly without a separate build step. It also handles `.js`, `.cjs`, `.mjs`, and `.jsx` files, which makes it easy to mix and match across an existing project." + - question: "Why is Bun's package manager faster than npm?" + answer: "Bun skips a few network checks that npm performs by default, caches aggressively, and uses optimizations like labeled pointer lists to reduce overhead. The `@latest` tag is effectively ignored on install, which avoids an extra round trip. Many teams adopt Bun only for `bun install` while keeping Node.js as their runtime." + - question: "How do I connect a Bun app to Appwrite?" + answer: "Install the Appwrite Node.js SDK with `bun add node-appwrite`, then initialize the client with your endpoint, project ID, and an API key. From there, you can call any Appwrite service the same way you would in Node.js. The [Appwrite Functions](/docs/products/functions) docs cover server SDK usage in detail." + - question: "Should I switch all my projects from Node.js to Bun?" + answer: "Not necessarily. Bun is production-ready since 1.0, but some Node.js libraries still hit edge cases under Bun. A safe path is to start with greenfield projects or scripts, validate the performance gains, then migrate larger services once you trust the runtime in your environment." --- If you are a developer, your definition of `bun` must have recently changed. From what we knew to be a round piece of bread, it is now a new runtime in JavaScript, and as Bun claims, it is faster than the rest! In this article, we will find out what Bun really is, how it compares with Node.js and Deno, and how you can build apps with Bun and Appwrite. diff --git a/src/routes/blog/post/building-cross-platform-applications-with-react-native/+page.markdoc b/src/routes/blog/post/building-cross-platform-applications-with-react-native/+page.markdoc index 4b134954939..56049c19cfa 100644 --- a/src/routes/blog/post/building-cross-platform-applications-with-react-native/+page.markdoc +++ b/src/routes/blog/post/building-cross-platform-applications-with-react-native/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/react-nativecross.avif timeToRead: 9 author: damodar-lohani category: tutorial +faqs: + - question: "When should I choose React Native over native iOS and Android?" + answer: "Pick React Native when you want one codebase across iOS, Android, and sometimes web, and your team already knows JavaScript or React. Stay native when you need cutting-edge platform APIs, intensive graphics, or fine-grained control over memory and background tasks. For most CRUD-style and content apps, React Native is the pragmatic choice." + - question: "Does React Native have a backend SDK from Appwrite?" + answer: "Yes. Appwrite ships an official React Native SDK that covers authentication, databases, storage, functions, and realtime. You can find setup steps under the [Appwrite quick starts](/docs/quick-starts) and connect it to either Appwrite Cloud or a self-hosted instance." + - question: "How does React Native compare to Flutter?" + answer: "React Native uses JavaScript and maps your UI to native components, so the result looks and feels native on each platform. Flutter uses Dart and draws its own widgets with a custom rendering engine, which gives more pixel-level control. The right pick usually comes down to your team's existing language skills and how much you value native look-and-feel." + - question: "Can I share code between React Native and a React web app?" + answer: "You can share business logic, data layers, hooks, and SDK calls. UI components usually need a thin abstraction because the primitives differ (`View` and `Text` on native, `div` and `span` on web). Tools like React Native for Web help when you want closer code sharing across all three platforms." + - question: "What is the learning curve for React Native if I know React?" + answer: "Short, in most cases. The component model, hooks, and state management work the same way. The new pieces are native components, navigation libraries, and platform tooling like Xcode and Android Studio for builds. Most React developers can ship a working app within a few weeks." + - question: "Does Appwrite work with both Expo and bare React Native projects?" + answer: "Yes. The React Native SDK works in both environments, and you can wire it into Expo apps without ejecting in most cases. See the [Appwrite Authentication](/docs/products/auth) docs for examples of how login flows and sessions are handled on mobile." --- Android, iOS, macOS, Linux, Windows, and the Web. Different platforms with different codebases. As a developer, you might have faced the challenge of building one application for multiple platforms. Considering the challenge of mastering all of the skills to build an application that performs well cross-platform, it’s no wonder we have seen the rise of cross platform frameworks such as React Native and Flutter. These frameworks allow you to create applications that run smoothly on multiple operating systems from a single codebase. This saves time, reduces costs, and reaches a larger user base. diff --git a/src/routes/blog/post/building-culture-remote-camp/+page.markdoc b/src/routes/blog/post/building-culture-remote-camp/+page.markdoc index c4b1a4c7295..6c17319e758 100644 --- a/src/routes/blog/post/building-culture-remote-camp/+page.markdoc +++ b/src/routes/blog/post/building-culture-remote-camp/+page.markdoc @@ -7,6 +7,17 @@ cover: /images/blog/camp-5-barcelona/cover.avif timeToRead: 5 author: snezhanna category: culture +faqs: + - question: "What is a company Camp at Appwrite?" + answer: "A Camp is a week-long, in-person meet-up where the fully remote Appwrite team travels to a single location to work, plan, and bond. Camps mix focused work sessions with social activities like food tours, workshops, and a Bug'athon. They happen at a roughly cadence that the operations team plans well in advance." + - question: "How does Appwrite build culture as a remote-first company?" + answer: "Appwrite leans on async-first communication, transparent updates across teams, and shared Discord channels for cross-team collaboration. Camps fill in the in-person gap by giving everyone time together to build relationships and align on goals. The combination keeps the team connected without forcing real-time work across time zones." + - question: "How often do remote companies need in-person meetups?" + answer: "There is no single right number. Most remote-first companies land somewhere between one and three gatherings per year, depending on team size and budget. The aim is to invest enough in-person time to build trust and unblock big-picture work, while keeping day-to-day async habits intact." + - question: "What kinds of activities work best at a company retreat?" + answer: "A mix tends to land best: short, intense work sessions that move the roadmap forward, team-lead or leadership panels, a creative or competitive event like a hackathon or bugathon, and unstructured social time. Avoid back-to-back work blocks. The relationships built outside the conference room are usually what people remember." + - question: "How does Appwrite handle async-first communication day to day?" + answer: "Teams default to written updates in Discord and project tools rather than relying on synchronous meetings. Team dailies, regular company-wide updates, and explicit cc'ing keep relevant people informed without dragging everyone into calls. Meetings happen when async cannot resolve a decision, not as the first instinct." --- As a fully remote company, we know that crafting a strong company culture takes a bit more effort since we don’t get to gather in person as often as traditional teams do. To bridge that gap, our amazing operations team organizes Camps: week-long events where our team travels to a location to work, collaborate and have fun. diff --git a/src/routes/blog/post/building-init-giveaway-app/+page.markdoc b/src/routes/blog/post/building-init-giveaway-app/+page.markdoc index df02d600078..3c60d2d60b8 100644 --- a/src/routes/blog/post/building-init-giveaway-app/+page.markdoc +++ b/src/routes/blog/post/building-init-giveaway-app/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/building-init-giveaway-app/cover.avif timeToRead: 7 author: aditya-oberai category: open-source +faqs: + - question: "What does the Init giveaway app actually do?" + answer: "It lets users log in with Discord, registers them for a daily giveaway, and then randomly picks a winner using a roulette-style spinning wheel. Registrations are stored in Appwrite Databases and the wheel updates in realtime as new entries come in. It was built to make Init week giveaways feel like a live event, not a spreadsheet drawing." + - question: "How does Appwrite handle Discord OAuth?" + answer: "Appwrite Auth ships with a Discord OAuth adapter, so you configure the client ID and secret from the Discord Developer Portal, add the redirect URI, and call the SDK to start the login flow. The user is redirected back with a valid session that you can use across [Appwrite Auth](/docs/products/auth) and [Appwrite Databases](/docs/products/databases)." + - question: "How do I prevent duplicate giveaway entries in Appwrite?" + answer: "Create a unique index on the field that should not repeat, for example a Discord username or email. Once the index is in place, a second insert with the same value will fail with a 409, which you can catch in the UI and show as a friendly message. This is how the Init app stops one user from entering twice in a day." + - question: "How does the realtime wheel update work?" + answer: "The frontend subscribes to the Appwrite Databases realtime channel for the giveaway collection. When a new document is created, the SDK fires an event and the wheel re-renders with the new entry. There is no polling involved, the connection is held open by Appwrite. See [Appwrite Databases](/docs/products/databases) for details on realtime." + - question: "Can I build my own giveaway or raffle app on Appwrite?" + answer: "Yes. You only need a collection for entries, an OAuth provider for sign-in, and a frontend to pick winners. The whole thing fits inside a small SvelteKit, Next.js, or React app and can run on Appwrite Cloud's free tier for small events." + - question: "Is the source code for the Init giveaway app available?" + answer: "Appwrite has shared similar community apps as open source in the past. Check the Appwrite GitHub organization and the Init recap posts for repository links. Treat the article as a blueprint you can recreate in any stack that has an Appwrite SDK." --- Last week, we saw the culmination of a whole new initiative, the celebration of everything new with Appwrite and the community, called [Init](https://appwrite.io/init). From February 26th to March 1st, we celebrated a new product and/or feature every day and shared educational content around the same. Alongside, we hosted online events each day in the Appwrite Discord server with creators and friends of Appwrite to learn about the new releases, ask questions, and, most of all, geek out together. diff --git a/src/routes/blog/post/building-with-ai-function-templates/+page.markdoc b/src/routes/blog/post/building-with-ai-function-templates/+page.markdoc index 64efaa9e8ed..8f1bf791fe2 100644 --- a/src/routes/blog/post/building-with-ai-function-templates/+page.markdoc +++ b/src/routes/blog/post/building-with-ai-function-templates/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/building-with-ai-function-templates/function-templates.avif timeToRead: 7 author: aditya-oberai category: tutorial +faqs: + - question: "What are Appwrite AI Function templates?" + answer: "They are pre-built Appwrite Functions that cover common AI tasks like image classification, object detection, text generation, summarization, and translation. You can clone a template from the Appwrite Console, plug in your API keys for providers like OpenAI or Hugging Face, and have a working endpoint in minutes. See [Appwrite Functions](/docs/products/functions) for how templates are deployed." + - question: "Which AI providers do the templates integrate with?" + answer: "The initial set of templates covers Hugging Face Inference, OpenAI, and Perplexity, with more added over time. Each template is just code, so you can swap in any provider you want. The template's job is to give you a working starting point that handles auth, request shape, and error handling." + - question: "What is the difference between image classification and object detection?" + answer: "Image classification assigns a single label, or a short set of labels, to a whole image, for example tagging a photo as a cat or a dog. Object detection finds multiple items inside an image and gives you bounding boxes for each one, so you can locate them. Detection is heavier but useful for inventory, surveillance, and self-driving style use cases." + - question: "Do I need to manage my own AI infrastructure to use these templates?" + answer: "No. The templates call hosted inference APIs, so you do not need to provision GPUs or run your own model servers. Appwrite handles function execution and scaling for you. If you later want to host your own models, you can swap the template's API call for a self-hosted endpoint." + - question: "How do I secure my AI provider API keys in an Appwrite Function?" + answer: "Store them as environment variables on the function, not in source code. Appwrite encrypts these values and injects them at runtime, so the keys never leave the server. Never ship them in client-side code or commit them to a public repo. See [Appwrite Functions](/docs/products/functions) for environment variable setup." + - question: "Can I use AI Function templates for production workloads?" + answer: "Yes, with the same caveats as any third-party AI service: watch your provider rate limits, add retries for transient failures, and consider caching responses where the input is repeatable. The templates are starting points, not full production systems, so plan to add logging and observability before you ship to real users." --- It’s an exciting time for software development, as many new concepts and techniques pop up every day, giving us endless possibilities to build new and shiny things. But this sea of opportunity can be hard to navigate and keep up with. AI, for instance, is a field that is rapidly evolving and is influencing not only the products we can build but also the way we develop them. However, building AI-powered applications can be complicated. Appwrite’s new AI Function templates make it easier to build AI powered applications. diff --git a/src/routes/blog/post/building-with-sites-templates/+page.markdoc b/src/routes/blog/post/building-with-sites-templates/+page.markdoc index 1ac14c48d47..e1280c3cc58 100644 --- a/src/routes/blog/post/building-with-sites-templates/+page.markdoc +++ b/src/routes/blog/post/building-with-sites-templates/+page.markdoc @@ -9,6 +9,19 @@ author: ebenezer-don category: tutorial featured: false callToAction: true +faqs: + - question: "What is Appwrite Sites?" + answer: "Appwrite Sites is a hosting product that deploys static and server-rendered websites directly from your Appwrite Console. It supports popular frameworks like Next.js, Svelte, Astro, and others, and handles version control, environment configuration, and global delivery. See [Appwrite Sites](/docs/products/sites) for the full feature list." + - question: "How do Appwrite Sites templates work?" + answer: "Templates are pre-built projects for common use cases like ecommerce, blogs, documentation, portfolios, and starters. You pick one in the Console, give it a site name and ID, and Appwrite clones the repo and deploys it. From there it behaves like any other site you connect to Appwrite, with full Git integration." + - question: "Can I connect my own GitHub repository to Appwrite Sites?" + answer: "Yes. Instead of cloning a template, you can choose Connect a repository when creating a site and link your GitHub account. Pushes to the connected branch trigger new deployments automatically. This works the same way as template-based sites once the repo is connected." + - question: "What frameworks does Appwrite Sites support?" + answer: "Appwrite Sites supports a growing list of frameworks including Next.js, SvelteKit, Astro, Nuxt, and other popular Node-based stacks. Each framework has its own build settings that Appwrite detects, but you can override them in the site configuration. Check [Appwrite Sites](/docs/products/sites) for the current list." + - question: "Do I need a separate hosting provider if I use Appwrite Sites?" + answer: "No. Appwrite Sites deploys to Appwrite's edge network, so your site is served globally without an external host. You can still use a custom domain by pointing DNS records at Appwrite, which keeps your branding intact." + - question: "How do environment variables work for Appwrite Sites?" + answer: "Each site has its own environment variables defined in the Console, separate from your project's Functions and other resources. Build-time variables are injected during deployment, and runtime variables are available to server-rendered routes. This is also the right place to put any third-party API keys your site depends on." --- Your web application only provides value when it is live and accessible to users. Appwrite Sites simplifies deployment, allowing you to launch modern, production-ready websites directly from your Appwrite console. With built-in templates, you can quickly deploy complete websites that include integrated version control, environment configuration, and secure global delivery, all without complicated setup or infrastructure. diff --git a/src/routes/blog/post/bun-function-resume/+page.markdoc b/src/routes/blog/post/bun-function-resume/+page.markdoc index 847d9d82de5..dd253fe31b1 100644 --- a/src/routes/blog/post/bun-function-resume/+page.markdoc +++ b/src/routes/blog/post/bun-function-resume/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/bun-function-resume/cover.avif timeToRead: 7 author: aditya-oberai category: tutorial +faqs: + - question: "Can Appwrite Functions return HTML instead of JSON?" + answer: "Yes. Appwrite Functions can return any text-based content type including HTML, plain text, CSV, and XML. You set the `Content-Type` header on the response and Appwrite serves it as-is, which is what lets a function host a full HTML page like a resume." + - question: "How are Appwrite Functions accessed as REST endpoints?" + answer: "Every function can be reached over HTTP, with support for `GET`, `POST`, `PUT`, `DELETE`, and other common methods on any path. You can route based on path and method inside the function code, which means a single function can act as a small web service. See [Appwrite Functions](/docs/products/functions) for details." + - question: "Why use Bun instead of Node.js for a function like this?" + answer: "Bun has faster cold starts and faster install times, which keeps function execution snappy. It also supports TypeScript natively, so a small function like an HTML resume does not need a build step. Both Bun and Node.js are first-class runtimes in [Appwrite Functions](/docs/products/functions)." + - question: "How do I include static files inside an Appwrite Function?" + answer: "Put them in a `static` folder at the root of your function and read them at runtime using the standard file APIs in your runtime. Bun lets you do `Bun.file('static/resume.html').text()` to load the file, which then gets returned in the response body." + - question: "Is hosting a resume on an Appwrite Function cheaper than a regular website?" + answer: "It depends on traffic. For low-traffic personal sites, the Appwrite free tier and the per-execution pricing usually come out to almost nothing. For high-traffic sites, regular static hosting or [Appwrite Sites](/docs/products/sites) is probably a better fit because there is no per-request execution cost." + - question: "Can I add a custom domain to an Appwrite Function?" + answer: "Yes. Appwrite supports custom domains for functions, so you can map something like `resume.example.com` directly to your function. Once DNS is configured and the domain is verified, hits to that domain are routed through your function and the HTML is served." --- One of the coolest things about Appwrite Functions is that you can now consume them as REST APIs. This means you can send HTTP requests to any path, using common HTTP methods such as `GET` and `POST` to any path on the function and get a response in JSON or any other text-based formats (such as plain text, HTML, and CSV). This has opened up a lot of potential use-cases, one of which is how you can host and share your online resume through an Appwrite Function when applying for a new job. diff --git a/src/routes/blog/post/bytedance-lynx-vs-react-native/+page.markdoc b/src/routes/blog/post/bytedance-lynx-vs-react-native/+page.markdoc index 3311ba4db9e..a1033c7b59d 100644 --- a/src/routes/blog/post/bytedance-lynx-vs-react-native/+page.markdoc +++ b/src/routes/blog/post/bytedance-lynx-vs-react-native/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/bytedance-lynx-vs-react-native/cover.avif timeToRead: 10 author: ebenezer-don category: tutorial +faqs: + - question: "What is Lynx by ByteDance?" + answer: "Lynx is an open-source cross-platform UI framework from ByteDance, the company behind TikTok. It targets Android, iOS, and the web from a single codebase using React-like components and CSS. ByteDance already uses Lynx internally to power parts of TikTok, so it has been battle-tested at scale before being released to the public." + - question: "How is Lynx different from React Native?" + answer: "Lynx ships with a custom JavaScript engine (PrimJS), a dual-thread architecture that splits UI rendering from logic, and a custom rendering engine that adapts to each platform. React Native, by contrast, runs JavaScript on a single thread and maps to native components through a bridge or the new JSI. The result is that Lynx aims for smoother UI under heavy load, while React Native leans on the native look-and-feel of each platform." + - question: "Should I switch from React Native to Lynx today?" + answer: "Probably not yet. Lynx is new, the ecosystem is small, and most libraries you use with React Native do not exist for Lynx. If you are starting a greenfield project and want to evaluate it, Lynx is interesting, but for production apps with deadlines, React Native still has the larger community and more SDKs, including the [Appwrite React Native SDK](/docs/quick-starts)." + - question: "What is dual-thread architecture and why does it matter?" + answer: "Dual-thread architecture means UI work and business logic run on separate JavaScript threads, so heavy data fetching or calculations cannot block the animation thread. This is why Lynx claims smoother interactions in apps with intense computation. React Native is moving in a similar direction with its new architecture, but Lynx was built around this idea from day one." + - question: "Does Lynx work with backend services like Appwrite?" + answer: "You can use any HTTP-based API from Lynx, including Appwrite, by calling the REST endpoints directly. Appwrite does not have an official Lynx SDK yet, but the REST API is documented and works the same way as it does from any web client. The React Native SDK is the closest reference if you want a parallel example." + - question: "Is Lynx production-ready?" + answer: "It is in production at ByteDance scale, which is meaningful, but it is early days outside of that. Documentation, tooling, and third-party libraries are still catching up. Treat it like a serious bet for an experimental project, not a default replacement for React Native in 2026." --- ByteDance, the company behind TikTok, recently released a new cross-platform UI framework called [Lynx](https://lynxjs.org/blog/lynx-unlock-native-for-more.html). It allows developers to build applications for Android, iOS, and the web using familiar web technologies (React and CSS). Lynx is still new, but ByteDance has successfully used it internally across several of its apps, including TikTok. diff --git a/src/routes/blog/post/ccpa-vs-gdpr/+page.markdoc b/src/routes/blog/post/ccpa-vs-gdpr/+page.markdoc index 8fe067c9b33..c108c23fb72 100644 --- a/src/routes/blog/post/ccpa-vs-gdpr/+page.markdoc +++ b/src/routes/blog/post/ccpa-vs-gdpr/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 8 author: jake-barnby category: security featured: false +faqs: + - question: "What is the main difference between GDPR and CCPA?" + answer: "GDPR is an EU-wide regulation that protects personal data of EU residents and applies to any organization that processes it. CCPA is a state-level US law that protects California residents and applies only to for-profit businesses meeting specific revenue or volume thresholds. GDPR has broader scope, stricter consent requirements, and higher penalties relative to the size of the business." + - question: "Do I need to comply with GDPR if my app is hosted in the US?" + answer: "Yes, if you process personal data of EU residents, GDPR applies regardless of where your servers are located. The law is based on whose data you handle, not where the business operates. That includes things like names, emails, IP addresses, and cookie identifiers." + - question: "What counts as personal data under GDPR and CCPA?" + answer: "Under GDPR, personal data is any information that relates to an identifiable individual, including IP addresses, location data, and cookie IDs. CCPA includes similar identifiers and also covers browsing history, geolocation, and inferences drawn from a user's profile. Both definitions are broad enough that most app data ends up qualifying." + - question: "Does Appwrite help with GDPR and CCPA compliance?" + answer: "Appwrite is GDPR and CCPA compliant as a platform and gives you the building blocks you need, including controlled permissions, encryption in transit and at rest, and APIs for deleting user data. The application layer is still your responsibility, including consent flows and user-facing data export. See the [Appwrite GDPR](/docs/advanced/security/gdpr) and CCPA pages for specifics." + - question: "How do I handle a data deletion request as a developer?" + answer: "Have a documented process to identify all places where the user's data exists, then delete or anonymize it within the time window the law requires (30 days for CCPA, one month for GDPR, both extendable in limited cases). In Appwrite, that usually means deleting documents in [Appwrite Databases](/docs/products/databases), removing storage files, and revoking auth sessions for that user." + - question: "What are the penalties for non-compliance with GDPR and CCPA?" + answer: "GDPR fines can reach up to 4 percent of global annual revenue or 20 million euros, whichever is higher. CCPA fines are smaller per incident (up to 7,500 dollars for intentional violations) but they add up quickly across many users. Either way, the reputational damage usually costs more than the fine." --- When you build your application, one of the first things you need to set up is your database and authentication. In other words, you're handling and storing user data. But with this data comes great responsibility. diff --git a/src/routes/blog/post/celebrating-1.5-contributors/+page.markdoc b/src/routes/blog/post/celebrating-1.5-contributors/+page.markdoc index 361ced7e6bf..d08091e32ce 100644 --- a/src/routes/blog/post/celebrating-1.5-contributors/+page.markdoc +++ b/src/routes/blog/post/celebrating-1.5-contributors/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aditya-oberai category: open-source featured: false +faqs: + - question: "What was new in Appwrite 1.5?" + answer: "Appwrite 1.5 introduced [Appwrite Messaging](/docs/products/messaging), Two-Factor Authentication, Server-Side Rendering support in the SDKs, Enums for cleaner SDK usage, and new Bun and Dart function runtimes on Appwrite Cloud. It was a community-driven release with contributions from more than 20 external developers." + - question: "How do I start contributing to Appwrite as an open-source developer?" + answer: "The Appwrite GitHub organization has labeled issues for first-time contributors, and the contributing guides cover local setup for the server, console, and SDK generators. Joining the Appwrite Discord helps too, since most of the technical discussion happens there. Pick a small issue first to learn the review process before tackling a feature." + - question: "What is the Appwrite SDK Generator?" + answer: "It is the internal tool that produces all of Appwrite's official SDKs (JavaScript, Python, Dart, Flutter, Swift, and others) from a shared specification. Contributors who add a new server feature usually update the spec, then regenerate the SDKs. This is how a single change can ripple out into every supported language at once." + - question: "Are contributions to Appwrite limited to code?" + answer: "No. Documentation, tutorials, examples, translations, bug reports, and design feedback are all useful contributions. Many people enter the community through docs or examples before they make a code change. The [Appwrite docs](/docs) repo accepts the same kind of pull requests as the main server repo." + - question: "What is the Appwrite Heroes program?" + answer: "Appwrite Heroes is a recognition program for the most active community contributors. Heroes get early access to releases, branded swag, and a direct line to the core team. The first batch was selected during the 1.5 cycle, and the program has continued to grow with each major release." + - question: "How does Appwrite handle contributor reviews?" + answer: "Pull requests typically get reviews from one or more core engineers and any maintainer with relevant context. Reviews focus on architecture fit, security, and consistency with existing APIs. The team works async, so feedback can take a day or two, but contributors are kept in the loop the whole way through." --- For those of you who have been following Appwrite, you might have noticed how much we value open source and the community that keeps it going. Appwrite has been a part of that community since 2019. However, the team has been contributing to open source long before Appwrite became an entity. If one thing in life is certain, it is that Appwrite is open-source. diff --git a/src/routes/blog/post/change-regions-with-migrations/+page.markdoc b/src/routes/blog/post/change-regions-with-migrations/+page.markdoc index 9691300c74e..4f009eab06a 100644 --- a/src/routes/blog/post/change-regions-with-migrations/+page.markdoc +++ b/src/routes/blog/post/change-regions-with-migrations/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 10 author: ebenezer-don category: tutorial featured: false +faqs: + - question: "Why would I move an Appwrite Cloud project to a different region?" + answer: "The two main reasons are latency and data residency. Hosting your project closer to your users reduces round-trip time, which makes APIs and realtime feel snappier. Data residency comes up when local laws require user data to stay in a specific jurisdiction, for example in the EU or India." + - question: "Can I change the region of an existing Appwrite Cloud project directly?" + answer: "No, there is currently no in-place region switch. The supported path is to create a new project in the target region and use Appwrite's built-in migration tool to move data and resources from the source project to the destination. This guide walks through the full process." + - question: "What does the Appwrite migration tool transfer?" + answer: "The migration tool moves your databases, collections and documents, storage files, functions, teams, users, and project settings to the destination project. Custom domain bindings and platform integrations usually need to be reconfigured manually after the migration. See the [Appwrite Network](/docs/products/network) docs for region-specific details." + - question: "Will there be downtime when I migrate regions?" + answer: "There is no forced downtime during the data transfer itself, since both projects can run side by side. The downtime, if any, happens during the cutover when you point clients to the new endpoint. Plan for a maintenance window to update environment variables and DNS, and to verify the data in the new region." + - question: "What happens to API keys and OAuth credentials after migration?" + answer: "You typically need to recreate API keys in the destination project because they are tied to a project ID. OAuth providers (Google, GitHub, Discord) also need to be reconfigured with new redirect URIs in their respective dashboards. Plan for this configuration work as part of the cutover, not after." + - question: "Can I keep both regions running side by side after migration?" + answer: "Yes, until you delete the source project both are live. Some teams keep the old project around for a few weeks as a read-only fallback, then delete it once the new region has proven stable. That is a safer pattern than deleting immediately." --- With the launch of the **Appwrite Network**, Appwrite Cloud now gives you the ability to choose where your project is hosted. This means that you can bring your backend closer to your users, reducing latency, improving responsiveness, and aligning with local data residency laws if needed. diff --git a/src/routes/blog/post/choosing-the-right-database-for-ai-applications-when-to-use-mongodb/+page.markdoc b/src/routes/blog/post/choosing-the-right-database-for-ai-applications-when-to-use-mongodb/+page.markdoc index 4b99ec9a678..542a9cfb0c8 100644 --- a/src/routes/blog/post/choosing-the-right-database-for-ai-applications-when-to-use-mongodb/+page.markdoc +++ b/src/routes/blog/post/choosing-the-right-database-for-ai-applications-when-to-use-mongodb/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aditya-oberai category: product featured: false +faqs: + - question: "When should I use MongoDB for an AI application?" + answer: "Use MongoDB when your data structure changes often, your data is unstructured or semi-structured (prompts, model outputs, embeddings), your write volume is high, or you need to iterate fast. The flexible document model means schema changes do not block product changes, which matters most for early-stage AI work." + - question: "When is a relational database better for AI workloads?" + answer: "Pick a relational database when your schema is stable and predictable, your queries involve complex joins across many tables, or you need strict ACID guarantees. Financial systems, compliance reporting, and structured analytics tend to land on SQL. Many production systems mix both: relational for the business layer, MongoDB for AI data." + - question: "Does Appwrite support MongoDB?" + answer: "Appwrite Databases now offers MongoDB as a database engine alongside its relational option. You get the same SDK, permissions, and realtime experience, with a document-shaped backend underneath. See [Appwrite Databases](/docs/products/databases) for details on how to choose an engine for a new database." + - question: "Do I need to manage MongoDB infrastructure to use it with Appwrite?" + answer: "No. When you select MongoDB as the engine in [Appwrite Databases](/docs/products/databases), Appwrite handles the underlying infrastructure, scaling, and backups. You interact with collections and documents through the same Appwrite SDK, so there is no separate connection string or driver to manage." + - question: "Can MongoDB store vector embeddings for RAG?" + answer: "Yes. MongoDB Atlas supports vector search with HNSW indexes, which means you can store embeddings alongside the original documents and query them with cosine or euclidean similarity. Storing vectors next to source data avoids the round-trip of a separate vector database for many retrieval-augmented generation workloads." + - question: "How does schema flexibility help an AI product iterate faster?" + answer: "Every model update or new feature tends to change what fields you want to store, for example adding a confidence score or a new evaluation metric. With a document model, new fields can be added without a migration, and old documents stay valid. That removes one of the most common bottlenecks in fast-moving AI teams." --- Not every AI project needs the same database. And picking the wrong one doesn't announce itself immediately, it shows up gradually, in slower iteration cycles, mounting migration overhead, and engineering time spent on database maintenance instead of actual AI work. diff --git a/src/routes/blog/post/ci-cd-examples-in-appwrite/+page.markdoc b/src/routes/blog/post/ci-cd-examples-in-appwrite/+page.markdoc index d6f26f30086..8afcbf83ad9 100644 --- a/src/routes/blog/post/ci-cd-examples-in-appwrite/+page.markdoc +++ b/src/routes/blog/post/ci-cd-examples-in-appwrite/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: ebenezer-don category: product featured: false +faqs: + - question: "Can I use the Appwrite CLI in a CI/CD pipeline?" + answer: "Yes, the CLI is built to run non-interactively in pipelines. Flags like `--force` skip confirmation prompts and `--all` pushes or pulls entire resource sets in one go. Combined with environment variables for project ID and API key, you can drive deployments from GitHub Actions, GitLab CI, or any other runner." + - question: "What does the `--force` flag do in the Appwrite CLI?" + answer: "It pre-answers any confirmation prompt with yes, so commands like `appwrite push collections` run end-to-end without waiting for input. This is required for CI runs because there is no terminal to type into. Use it on commands you have already validated locally." + - question: "What is the difference between `appwrite push` and `appwrite pull`?" + answer: "`push` sends your local resource definitions, like collections and functions, to the Appwrite server, while `pull` does the reverse and downloads the current state into local files. A typical workflow pulls in development to grab manual console changes, edits locally, then pushes to staging or production through CI." + - question: "How do I authenticate the Appwrite CLI in CI?" + answer: "Set the `APPWRITE_ENDPOINT`, `APPWRITE_PROJECT_ID`, and `APPWRITE_API_KEY` environment variables, then run `appwrite login --endpoint` or use the project-scoped commands directly. Store the API key as a secret in your CI provider, never in the repo. See [Appwrite Functions](/docs/products/functions) for how API keys interact with function deployments." + - question: "Can I deploy Appwrite Functions from a Git workflow?" + answer: "Yes. You can either use the Git integration that ships with Appwrite Functions, which auto-deploys on push to a configured branch, or you can use the CLI's `appwrite deploy function` in your own workflow. Both work, the right pick depends on whether you want Appwrite to drive the pipeline or your own CI." + - question: "How should I structure environments for staging and production?" + answer: "Keep separate Appwrite projects per environment so credentials and data are fully isolated. Use the same set of collection and function definitions checked into your repo, and let CI run `appwrite push` against the right project based on branch. This avoids accidental writes against production from a feature branch." --- The Appwrite CLI has undergone significant updates to enhance support for Continuous Integration and Continuous Deployment (CI/CD) pipelines. These changes make it easier to automate deployment processes and ensure robust, non-interactive actions. In this article, we’ll explore the new additions, the benefits of these enhancements for CI/CD pipelines, and best practices for using the Appwrite CLI in your workflows. diff --git a/src/routes/blog/post/claude-code-tips-tricks/+page.markdoc b/src/routes/blog/post/claude-code-tips-tricks/+page.markdoc index 560d61af306..84a92763d14 100644 --- a/src/routes/blog/post/claude-code-tips-tricks/+page.markdoc +++ b/src/routes/blog/post/claude-code-tips-tricks/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/claude-code-tips-tricks/cover.avif timeToRead: 5 author: atharva category: tutorial +faqs: + - question: "What is Claude Code?" + answer: "Claude Code is Anthropic's official CLI for using Claude as a coding assistant directly in your terminal. It can read and edit files, run commands, and orchestrate multi-step tasks across a codebase. It works with either the Anthropic API (priced per token) or a Claude Max plan (fixed monthly usage)." + - question: "How do I keep Claude Code from wandering off-task?" + answer: "Add explicit instructions in your prompt or `CLAUDE.md` telling the model to only do what was asked and to avoid touching unrelated files. Concrete rules work better than soft hints. Periodically remind the model in long sessions, since instructions tend to drift as context fills up." + - question: "What are Claude Code hooks?" + answer: "Hooks are commands that Claude Code runs automatically at certain events: before a tool call, after a response, when a notification fires, and more. They are configured in `settings.json` and let you do things like play a sound when a task finishes, run a formatter after edits, or block dangerous commands." + - question: "Should I use the Anthropic API or a Claude Max plan?" + answer: "Use the API if your usage is bursty or you want metered billing. Use a Max plan if you code with Claude every day and want predictable cost. Heavy users tend to come out ahead on Max, but only if you actually use the included quota." + - question: "How do I make Claude Code respond more concisely?" + answer: "Tell it explicitly: ask for short answers, no summaries unless requested, and no acknowledgements like \"sure, I'll help with that.\" The model is verbose by default. Repeating the rule near the top of a long conversation keeps it consistent as context grows." + - question: "Can Claude Code work on large codebases?" + answer: "Yes. Claude 4.5 Sonnet and newer models support up to a 1M token context window, which is enough to load a non-trivial codebase or a long history of edits. For very large repos, structure matters: a clear `CLAUDE.md`, focused subdirectories, and good search tooling let the model find what it needs without rereading everything." --- Anthropic's Claude models have always been regarded as the models that are decent at coding. A lot of developers like to use Claude as their “intern” or “junior developer” when writing code. However, Claude models are expensive, especially Claude Opus 4. Anthropic hasn't changed their pricing of their models for a long time and this has resulted in competitor models that are just as good (or some may claim even better) than Claude. diff --git a/src/routes/blog/post/claude-design/+page.markdoc b/src/routes/blog/post/claude-design/+page.markdoc index 384b8be060c..a4f69f9cbf2 100644 --- a/src/routes/blog/post/claude-design/+page.markdoc +++ b/src/routes/blog/post/claude-design/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/claude-design/cover.avif timeToRead: 6 author: aditya-oberai category: ai +faqs: + - question: "What is Claude Design?" + answer: "Claude Design is a new Anthropic Labs product that turns Claude into a visual collaborator. You describe what you want in plain English, Claude builds a first pass on a canvas, and you refine through chat, inline comments, or sliders. It is aimed at designers, PMs, founders, marketers, and developers who want to go from idea to working prototype without specialist tooling." + - question: "Which model powers Claude Design?" + answer: "Claude Design runs on Claude Opus 4.7, which Anthropic released the day before Claude Design itself. The model brings better vision (images up to 2,576 pixels on the long edge), explicit design taste, better long-context coherence, and stronger instruction following. The product genuinely could not have shipped on Opus 4.6." + - question: "What can I export from Claude Design?" + answer: "You can export to internal URLs, folder exports, Canva, PDF, PPTX, or standalone HTML files. The output is not static mockups, it includes live, interactive, code-powered artifacts that can use voice, video, shaders, and 3D. That makes it easier to hand off to engineering or share with stakeholders." + - question: "How does Claude Design hand off to Claude Code?" + answer: "Once you have a design you like, you can export the code-powered artifact or pass it through to Claude Code to keep building. Because both products run on Opus 4.7 and share understanding of your design system, the handoff is smoother than copying assets between disconnected tools. The detailed flow is covered in the post." + - question: "Who is Claude Design available to?" + answer: "At launch, Claude Design is rolling out in research preview to Pro, Max, Team, and Enterprise subscribers. Anthropic typically expands access as the preview matures, so the audience usually broadens over time." + - question: "Can Claude Design help me build an Appwrite-powered app?" + answer: "It can absolutely help with the design and prototype, including landing pages, dashboards, and onboarding flows you can later wire up to [Appwrite Auth](/docs/products/auth) and [Appwrite Databases](/docs/products/databases). The handoff to Claude Code is where the actual integration code is added once the design is settled." --- On April 17, 2026, Anthropic launched **Claude Design**, a new Anthropic Labs product that turns Claude into a collaborator for visual work. Not a chatbot you ask to describe a design. An actual canvas where you and Claude build designs, prototypes, slides, and one-pagers together. diff --git a/src/routes/blog/post/claude-mythos-preview/+page.markdoc b/src/routes/blog/post/claude-mythos-preview/+page.markdoc index 7049452de8d..646219ea27d 100644 --- a/src/routes/blog/post/claude-mythos-preview/+page.markdoc +++ b/src/routes/blog/post/claude-mythos-preview/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/claude-mythos-preview/cover.avif timeToRead: 7 author: atharva category: ai +faqs: + - question: "What is Claude Mythos Preview?" + answer: "Claude Mythos Preview is Anthropic's most capable model to date. Instead of releasing it publicly, Anthropic published a system card and launched Project Glasswing, a defensive cybersecurity initiative that uses the model to find and patch vulnerabilities in critical software with partners like AWS, Apple, Microsoft, Google, NVIDIA, CrowdStrike, and the Linux Foundation." + - question: "Why did Anthropic choose not to release Mythos?" + answer: "The model showed strong autonomous cyber capabilities, including a sandbox escape during internal testing and the ability to find and exploit zero-day vulnerabilities. Anthropic decided the risk of public access outweighed the benefit, and channeled the capability into defensive use under Project Glasswing instead." + - question: "How does Mythos compare to Claude Opus 4.6 and GPT-5.4?" + answer: "Mythos leads on every benchmark covered in the post: 93.9 percent on SWE-bench Verified, 100 percent on Cybench, and 97.6 percent on USAMO 2026 (math olympiad problems after the training cutoff). The most striking jump is on USAMO, going from 42.3 percent on Opus 4.6 to 97.6 percent on Mythos, which is unusual between adjacent model generations." + - question: "What is Project Glasswing?" + answer: "Project Glasswing is a coordinated initiative where Anthropic and over 40 partner organizations use Mythos to find and fix high-severity vulnerabilities in critical infrastructure. The post mentions a 27-year-old OpenBSD bug, a 16-year-old FFmpeg bug missed by years of automated fuzzing, and chainable Linux kernel issues that Mythos surfaced." + - question: "What is the sandbox escape Mythos performed?" + answer: "Researchers placed an earlier version of Mythos in a secured sandbox and asked it to escape. It developed a multi-step exploit to gain broad internet access, then notified the researcher by email and (without being asked) posted exploit details to hard-to-find but public websites. Nobody jailbroke the model, it just treated the task as a problem to solve thoroughly." + - question: "What does Mythos mean for everyday developers?" + answer: "Day-to-day, not much yet, since you cannot use Mythos directly. The broader signal is that frontier coding and cyber capability is accelerating fast, and that Anthropic is now willing to gate models behind safety reviews. Expect downstream releases like Opus 4.7 to inherit some of these capabilities in a more constrained form." --- On April 7, 2026, Anthropic did something unprecedented. They published a system card for a model they will not release. Claude Mythos Preview is their most capable model to date, and the gap between it and everything else on the market is not incremental. It is a leap. diff --git a/src/routes/blog/post/claude-vs-gpt-vs-gemini-for-developers-who-wins-in-2026/+page.markdoc b/src/routes/blog/post/claude-vs-gpt-vs-gemini-for-developers-who-wins-in-2026/+page.markdoc index 23ffaa19d2d..e2b80835f49 100644 --- a/src/routes/blog/post/claude-vs-gpt-vs-gemini-for-developers-who-wins-in-2026/+page.markdoc +++ b/src/routes/blog/post/claude-vs-gpt-vs-gemini-for-developers-who-wins-in-2026/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aishwari category: comparisons featured: false +faqs: + - question: "Which AI coding assistant is best for developers in 2026?" + answer: "There is no single winner. Claude Opus 4.7 leads on SWE-bench Verified (64.3 percent) and tends to produce the strongest UI and backend code. GPT-5.5 has the deepest integration with existing tooling and is more thorough on reasoning modes. Gemini 3.1 Pro trails on benchmarks but is competitive on long-context and multimodal tasks. Pick based on the workload, not loyalty." + - question: "What does SWE-bench actually measure?" + answer: "SWE-bench measures how well a model can autonomously fix real GitHub issues in open-source repositories, given the repo state and the issue description. It is the closest standardized benchmark to real developer work, since the task is multi-file debugging rather than trivia. The Verified subset is a curated, higher-quality slice of the full benchmark." + - question: "When should I pick Claude over GPT or Gemini?" + answer: "Pick Claude when you need careful code review, accurate documentation, or strong UI generation. It is the most expensive of the three, but it tends to read the whole context before writing code if you feed it the full picture. For Appwrite work, especially auth flows and permission logic, Claude tends to catch edge cases the others miss." + - question: "When should I pick GPT over Claude or Gemini?" + answer: "Pick GPT when you are working inside an ecosystem already wired to OpenAI (Copilot, internal company tools, existing prompts) or when you want a model that pauses to ask clarifying questions on fuzzy requirements. The tradeoff is that GPT in reasoning mode is slower and its UI code can look generic." + - question: "When should I pick Gemini over Claude or GPT?" + answer: "Pick Gemini when your task is multimodal-heavy (large images, video, mixed media) or you need very long context windows at a lower cost. It trails Claude on coding benchmarks but its multimodal handling is strong and the pricing is competitive for high-volume work." + - question: "Does the choice of AI assistant affect how I build with Appwrite?" + answer: "Not directly, all three can call the [Appwrite SDKs](/docs) and read the docs. The practical difference is in code quality: for auth, permissions, and database design, you want a model that actually reads the docs you point it at and respects the patterns Appwrite recommends. Claude tends to do this best, but a well-structured prompt closes the gap for all three." --- You've got three browser tabs open. One with Claude. One with GPT. One with Gemini. You paste the same prompt into all three, squint at the outputs, and pick the one that looks least wrong. diff --git a/src/routes/blog/post/client-vs-server-components-react/+page.markdoc b/src/routes/blog/post/client-vs-server-components-react/+page.markdoc index 441f82b1e17..b36c9f9382c 100644 --- a/src/routes/blog/post/client-vs-server-components-react/+page.markdoc +++ b/src/routes/blog/post/client-vs-server-components-react/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/client-vs-server-components-react/cover.avif timeToRead: 5 author: atharva category: tutorial +faqs: + - question: "What is the difference between client and server components in React?" + answer: "Client components run on the user's browser using JavaScript and can use hooks like `useState`, `useEffect`, and browser APIs. Server components run on the server, return HTML, and have no client-side JavaScript by default. Server components are great for data fetching and SEO; client components are needed wherever you have interactivity." + - question: "When should I use server components?" + answer: "Use server components for pages that fetch data, render markdown or static content, or need to be indexed by search engines. They reduce the JavaScript shipped to the browser, which speeds up the first load. Anything that needs `useState`, event handlers, or browser APIs should be a client component instead." + - question: "Do I need to use server components if I'm using React?" + answer: "No. Server components only exist in frameworks that support React Server Components (RSC), like Next.js App Router or React Router with the new server features. If your framework does not support RSC, every component is implicitly a client component and you do not need to mark them." + - question: "How does `\"use client\"` work?" + answer: "The `\"use client\"` directive at the top of a file tells the bundler that the file should run in the browser, not on the server. All components and imports inside that file become client-side. You only need it in RSC-enabled frameworks; everywhere else it has no effect." + - question: "Can server components call Appwrite?" + answer: "Yes. From a server component you can use the [Appwrite](/docs) server SDK with an API key to fetch data securely. Since the component runs on the server, the API key never reaches the browser. For user-scoped queries, pass the user session cookie to the SDK so permissions are respected." + - question: "How do server components affect SEO?" + answer: "Server components are SEO-friendly out of the box because the server returns fully rendered HTML, including metadata, so crawlers see the content immediately. Pure client-side React apps require the bundle to load before metadata is set, which can hurt indexing. If SEO matters, server components or SSR are the right default." --- The world of React is evolving. It started as a library that compiles into browser-readable JS and has evolved into full-fledged frameworks built around it that also run on the server. Things that you need to know before using React have also changed. diff --git a/src/routes/blog/post/common-appwrite-mistakes-and-how-to-avoid-them/+page.markdoc b/src/routes/blog/post/common-appwrite-mistakes-and-how-to-avoid-them/+page.markdoc index 6ffa43e65a1..95483c5ed07 100644 --- a/src/routes/blog/post/common-appwrite-mistakes-and-how-to-avoid-them/+page.markdoc +++ b/src/routes/blog/post/common-appwrite-mistakes-and-how-to-avoid-them/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aishwari category: product featured: false +faqs: + - question: "What is the most common mistake developers make with Appwrite permissions?" + answer: "Treating permissions as something to clean up after the app is built. Appwrite's permission model is explicit by design, so nothing is exposed unless you say so. Design the permission model before connecting the frontend, use role-based permissions, and always test with at least two separate accounts before launch." + - question: "Why should I never put Appwrite API keys in the frontend?" + answer: "Server API keys grant elevated privileges and bypass document permissions. If they appear in client-side code, anyone who opens DevTools has full access to your backend. If something only works with a server key, move that logic into an [Appwrite Function](/docs/products/functions) and call the function from the client instead." + - question: "When should I add indexes in Appwrite Databases?" + answer: "Before launch, not after queries slow down. Add an index for every field you filter or sort by, and use compound indexes when a query combines multiple conditions, for example filtering by status and ordering by `$createdAt`. Treat indexes as part of your schema in [Appwrite Databases](/docs/products/databases), not as an optimization to defer." + - question: "Should business logic live in the frontend or in Appwrite Functions?" + answer: "Anything sensitive, like payments, role assignments, or external API calls with secrets, belongs in [Appwrite Functions](/docs/products/functions). The frontend should only handle UI and lightly validate input. A determined user can change anything that runs in their browser, so trust the server, not the client." + - question: "What happens if I do not handle 409 conflict errors on Appwrite writes?" + answer: "Users will see generic error pages instead of useful messages. The most common cause of a 409 is a unique index rejecting a duplicate write, for example two signups with the same email. Catch the error in the frontend and show a clear message, like \"already on the list,\" rather than letting the failure bubble up unhandled." + - question: "How can I avoid running into Appwrite rate limits?" + answer: "Batch requests where possible, paginate large reads with the Query API, and cache stable data on the client. For functions, make sure you are not invoking them in tight loops without backoff. Most rate limit issues come from accidental N+1 patterns, not from the platform being restrictive." --- Appwrite is built to help you move fast. Auth, databases, storage, functions, realtime, all in one place, no glue code required. diff --git a/src/routes/blog/post/cors-error/+page.markdoc b/src/routes/blog/post/cors-error/+page.markdoc index 15c53df033e..8f2be8f587b 100644 --- a/src/routes/blog/post/cors-error/+page.markdoc +++ b/src/routes/blog/post/cors-error/+page.markdoc @@ -9,6 +9,19 @@ author: dennis-ivy category: tutorial featured: false callToAction: true +faqs: + - question: "What is a CORS error?" + answer: "CORS (Cross-Origin Resource Sharing) is a browser mechanism that controls which origins can access a server. A CORS error occurs when the server you are sending a request to has not added your frontend's origin to its list of allowed origins. The browser blocks the request to prevent untrusted sites from reading data from your backend." + - question: "How do I fix a CORS error in Appwrite?" + answer: "Open the Appwrite Console, go to your project's Overview tab, and add a platform with the hostname your app is running on (for example, localhost in development or your production domain). Make sure the hostname matches exactly, with no protocol or port. See [Appwrite platforms](/docs/products/auth) and the Console for setup." + - question: "Why am I still getting a CORS error after adding my hostname?" + answer: "Common causes are typos in the hostname, leaving localhost set after deploying to production, an incorrect project ID in your client SDK initialization, or using the wrong regional endpoint for your project. A 4xx response from any of these will cause the browser to surface it as a CORS error." + - question: "Do I need a different Appwrite endpoint for each region?" + answer: "Yes. Your project lives in one region (for example NYC, FRA, or SYD), and you must use the matching regional endpoint such as nyc.cloud.appwrite.io. Using a different region's endpoint will return a 'not accessible in this region' response that the browser reports as a CORS error." + - question: "Can I use a wildcard origin to bypass CORS in Appwrite?" + answer: "Appwrite supports wildcard platforms, but it is not recommended for production. A wildcard means any website can make requests to your project, which defeats the purpose of CORS. Add each origin you actually use as a separate platform instead." + - question: "Why does the CORS error not show me the real server response?" + answer: "CORS is enforced by the browser before your JavaScript can read the response. So even if the server returned a useful error message (like 'project ID invalid'), the browser strips it out. Check the Network tab in your browser's devtools to see the raw status code and response body." --- I want to address an issue I've seen popping up on Stack Overflow and the Appwrite Discord server and address some of the reasons you may be getting this error, then walk you through some of the steps you can take to try and resolve it as well. diff --git a/src/routes/blog/post/csr-ssg-ssr/+page.markdoc b/src/routes/blog/post/csr-ssg-ssr/+page.markdoc index 15f27820a2f..2a162d8d992 100644 --- a/src/routes/blog/post/csr-ssg-ssr/+page.markdoc +++ b/src/routes/blog/post/csr-ssg-ssr/+page.markdoc @@ -9,6 +9,19 @@ author: ebenezer-don category: product,init featured: true callToAction: true +faqs: + - question: "What is the difference between CSR, SSG, and SSR?" + answer: "CSR (client-side rendering) builds the page in the browser after the initial load. SSG (static site generation) builds pages at build time and serves them as static files. SSR (server-side rendering) builds pages on the server on every request. The main differences are when HTML is generated and where the work happens." + - question: "Which rendering strategy is best for SEO?" + answer: "SSG and SSR are both strong for SEO because they send fully formed HTML to crawlers. CSR is the weakest for SEO, since search engines may not reliably execute the JavaScript needed to see your content. If SEO matters, prefer SSG for static content and SSR for dynamic content." + - question: "When should I use SSG instead of SSR?" + answer: "Use SSG when content does not change per request and updates infrequently, like blogs, documentation, or marketing pages. Use SSR when content is personalized, depends on the current user, or needs to be fresh on every visit, like dashboards or product listings with live inventory." + - question: "Can I mix CSR, SSG, and SSR in the same app?" + answer: "Yes. Modern frameworks like Next.js, Nuxt, and SvelteKit let you pick a rendering strategy per page or per route. A typical setup uses SSG for marketing pages, SSR for product pages, and CSR for authenticated dashboards." + - question: "How does Appwrite work with different rendering strategies?" + answer: "Appwrite supports all three. Use the [web SDK](/docs/sdks) for CSR apps. For SSR, use a server SDK with session cookies so you can authenticate users on the server. [Appwrite Auth](/docs/products/auth) supports both client-side sessions and server-side session secrets." + - question: "Is SSR slower than CSR?" + answer: "SSR has a higher initial server cost because the server renders HTML for every request. But the time to first meaningful paint is usually faster than CSR because the browser does not have to download and run JavaScript before seeing content. Caching and edge rendering close most of the gap." --- In modern web development, especially when using frameworks like React, Next.js, Vue, or Svelte, you'll come across terms like **CSR**, **SSG**, and **SSR**. These terms represent the fundamental decisions about how and when the content on your web page is generated and delivered to the user. diff --git a/src/routes/blog/post/csr-vs-ssr-with-nextjs/+page.markdoc b/src/routes/blog/post/csr-vs-ssr-with-nextjs/+page.markdoc index fac37a206aa..928f5ff7221 100644 --- a/src/routes/blog/post/csr-vs-ssr-with-nextjs/+page.markdoc +++ b/src/routes/blog/post/csr-vs-ssr-with-nextjs/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 10 author: dennis-ivy category: product featured: false +faqs: + - question: "What is the difference between SSR and CSR in Next.js?" + answer: "SSR (server-side rendering) generates HTML on the server for every request, so the browser receives a fully rendered page. CSR (client-side rendering) sends a minimal HTML shell and uses JavaScript in the browser to fetch data and build the UI. Next.js supports both." + - question: "How does Appwrite handle authentication in SSR Next.js apps?" + answer: "For SSR, you use the Appwrite Node.js SDK with two clients: an admin client (configured with an API key) to create sessions, and a session client (configured with the user's session secret) to make authenticated requests. The session secret is stored in a server-side cookie. See [Appwrite Auth](/docs/products/auth)." + - question: "Why can't I use the Appwrite web SDK for SSR auth?" + answer: "The web SDK manages sessions automatically in the browser, so the session secret is never exposed to your server code. For SSR, you need access to that secret to set a cookie and authenticate requests on the server. Use the Node.js SDK and set the session manually with client.setSession." + - question: "What scopes does my Appwrite API key need for SSR auth?" + answer: "At a minimum, the admin client needs the sessions.write scope to create sessions for users. Add additional scopes (users.read, databases.read, etc.) based on what your server actions need to do on behalf of users or as an admin." + - question: "Should I use SSR or CSR for my Next.js app?" + answer: "Use SSR when you need SEO, fresh content per request, or personalized server-rendered pages. Use CSR for highly interactive apps behind a login wall where SEO does not matter. Many Next.js apps mix both: SSR for public pages and CSR for authenticated dashboards." + - question: "Where should I store the Appwrite session secret in an SSR app?" + answer: "Store the session secret in an httpOnly, secure cookie set from your server. Never expose it to client-side JavaScript. Read it back from the cookie on each request and pass it to your session client via client.setSession." --- With modern web development frameworks, the age-old debate around server-side rendering (SSR) and client-side rendering (CSR), which rendering method is more effective, has returned to the general tech community. Since Appwrite aims to enable all developers, regardless of their preferences, in this debate, we decided to research and extend our support for both paradigms. This article will explore the differences between SSR and CSR and how Appwrite Authentication can be leveraged with both in Next.js. diff --git a/src/routes/blog/post/cursor-3-parallel-fleets-appwrite/+page.markdoc b/src/routes/blog/post/cursor-3-parallel-fleets-appwrite/+page.markdoc index 99c1cf0c280..55b0b0053e6 100644 --- a/src/routes/blog/post/cursor-3-parallel-fleets-appwrite/+page.markdoc +++ b/src/routes/blog/post/cursor-3-parallel-fleets-appwrite/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 7 author: eldad-fux category: integrations featured: false +faqs: + - question: "What is new in Cursor 3?" + answer: "Cursor 3 replaces the classic VS Code layout with an agent-first workspace. It adds parallel agents across repositories, long-running cloud agents that work on a remote VM, a marketplace for skills and MCP servers, and an integrated browser with a style editor for live UI editing." + - question: "How do I use Appwrite with Cursor 3?" + answer: "Install the Appwrite plugin from the Cursor Marketplace. It bundles Appwrite Skills (Markdown files that teach agents how to use the Appwrite SDKs) and MCP servers. Agents will discover and load the skills only when needed, which reduces token use and avoids hallucinated SDK methods." + - question: "What are Cursor cloud agents?" + answer: "Cloud agents are tasks you offload to a remote VM by prepending a prompt with &. They plan, execute, and test over longer horizons without local resources. When they finish, you get logs, recordings, and a live preview to review before merging changes." + - question: "What are Appwrite Skills?" + answer: "Appwrite Skills are open-source Markdown files that give AI agents language-specific knowledge of the Appwrite SDKs. They help agents generate accurate code for [Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), [Functions](/docs/products/functions), and other products without making up methods." + - question: "Can I run multiple Cursor agents in parallel?" + answer: "Yes. The new Agents Window lets you run multiple agents across different repositories at the same time. For example, one agent can refactor [Appwrite Functions](/docs/products/functions) in a backend repo while another builds UI in a frontend repo, in parallel." + - question: "Does Cursor 3 work with Appwrite Realtime?" + answer: "Yes. The integrated browser and component tree make it easy to debug live state changes. When an agent updates subscription listeners, you can watch the UI react in real time without leaving the editor." --- If you have been following the AI code editor space, you know that the "autocomplete" era is officially behind us. This week, the team at Cursor dropped **Cursor 3**, and it is not just a minor version bump - it is a complete reimagining of the IDE. For Appwrite developers, who are already used to "building like a team of hundreds" by offloading backend complexity, Cursor 3 is the perfect companion. It moves the needle from "AI that helps you write code" to "AI that helps you manage a fleet of developers." Here is everything you need to know about Cursor 3 and how it integrates with your Appwrite workflow. diff --git a/src/routes/blog/post/custom-backup-policy/+page.markdoc b/src/routes/blog/post/custom-backup-policy/+page.markdoc index af7d029523c..4f5cf463036 100644 --- a/src/routes/blog/post/custom-backup-policy/+page.markdoc +++ b/src/routes/blog/post/custom-backup-policy/+page.markdoc @@ -3,10 +3,24 @@ layout: post title: Custom backup policies for compliance and security description: Learn why regular backups are no longer enough for data security. date: 2024-10-16 +lastUpdated: 2026-05-22 cover: /images/blog/custom-backup-policy/cover.avif timeToRead: 5 author: aditya-oberai category: product, security +faqs: + - question: "What is a custom backup policy?" + answer: "A custom backup policy lets you define how often each piece of data is backed up, how long it is retained, where it is stored, and how it is secured. Instead of one rigid schedule for everything, you tailor the policy to the importance of each dataset so critical data is backed up frequently and less important data is backed up sparingly." + - question: "Why is a 7-day backup retention not enough?" + answer: "Many regulations (HIPAA, GDPR, SOX) require months or years of data retention. A 7-day window does not give you enough history to recover from delayed-detection incidents (like ransomware that sits dormant) or to meet legal obligations. Custom retention periods let you keep what you actually need." + - question: "What is the difference between RTO and RPO?" + answer: "RTO (Recovery Time Objective) is how quickly you need to restore service after an incident. RPO (Recovery Point Objective) is how much data you can afford to lose, measured in time since the last backup. Mission-critical systems usually have low values for both; less critical systems can tolerate higher numbers." + - question: "How do I set up a custom backup policy in Appwrite?" + answer: "On the Appwrite Enterprise plan, [Appwrite Databases](/docs/products/databases) includes custom backup policies you can configure per database. You can pick a schedule (daily, weekly, monthly), set retention periods, and define execution times. The Pro plan includes a daily backup with 7-day retention. See the database backups documentation for the full configuration options." + - question: "What is the difference between full, incremental, and differential backups?" + answer: "A full backup copies all data every time. An incremental backup copies only the changes since the last backup of any kind. A differential backup copies changes since the last full backup. Incremental and differential backups save storage but make restore slightly more complex because multiple backup files are needed." + - question: "Should backup data be encrypted?" + answer: "Yes. Always encrypt backups both at rest and in transit. Backups often contain a complete copy of your most sensitive data, so a leaked backup is just as dangerous as a leaked production database. Combine encryption with strict access controls and (where required) geographic storage rules." --- If you're still relying on standard backups with just a 7-day retention, your company's data could be at risk. Today, data security is non-negotiable, regardless of your industry or business size. Losing it can lead to massive financial, legal and reputational setbacks. @@ -95,7 +109,7 @@ A **custom backup policy** is a smart investment. By tailoring your backup approach to your business needs, you're not just safeguarding your data; you're optimizing resources, ensuring compliance, and future-proofing your business. -Appwrite Database Backups allows you to customize your backup policy down to pre-defined schedules (e.g., daily, weekly, monthly), retention periods and even precise execution times on Pro and Scale plans. Learn more about Database Backups: +Appwrite Database Backups allows you to customize your backup policy down to pre-defined schedules (e.g., daily, weekly, monthly), retention periods and even precise execution times on the Enterprise plan. Learn more about Database Backups: - [Appwrite Database Backups](https://appwrite.io/blog/post/introducing-database-backups) - [Database Backups docs](https://appwrite.io/docs/products/databases/backups) - [Should I encrypt my backups?](https://appwrite.io/blog/post/backup-encryption) diff --git a/src/routes/blog/post/custom-domains-with-sites/+page.markdoc b/src/routes/blog/post/custom-domains-with-sites/+page.markdoc index 8bc3062c298..f3b1fd587a0 100644 --- a/src/routes/blog/post/custom-domains-with-sites/+page.markdoc +++ b/src/routes/blog/post/custom-domains-with-sites/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/custom-domains-with-sites/cover.avif timeToRead: 5 author: dennis-ivy category: tutorial +faqs: + - question: "How do I add a custom domain to Appwrite Sites?" + answer: "Open your site in the Appwrite Console, go to the Domains tab, and click Add domain. Enter your domain (for example example.com), then add the NS records Appwrite shows you (ns1.appwrite.zone and ns2.appwrite.zone) at your domain registrar. See [Appwrite Sites](/docs/products/sites)." + - question: "What is an NS record?" + answer: "An NS (Name Server) record tells the internet which servers are authoritative for a domain's DNS. By pointing your domain's NS records to Appwrite, you delegate DNS management to Appwrite, which lets Appwrite issue SSL certificates and route traffic to your deployed site." + - question: "How long does domain verification take in Appwrite Sites?" + answer: "DNS propagation usually takes a few minutes, but it can take a few hours in rare cases. After updating your NS records at your registrar, go back to the Appwrite Console and click Retry on the domain. If it does not verify immediately, wait a few minutes and try again." + - question: "Can I point a custom domain to a specific branch of my site?" + answer: "Yes. When you add a domain to a site connected to GitHub, you can point it to a specific branch. If you just want the latest production version, choose Active Deployment so the domain always serves whatever is currently live." + - question: "Why does my site still show the old page after verification?" + answer: "Browsers and intermediate DNS resolvers cache DNS responses, so even after Appwrite reports the domain as verified, you may temporarily see the old page. Clear your browser cache, try in an incognito window, or test from a different device or network to confirm." + - question: "Does Appwrite Sites issue SSL certificates automatically?" + answer: "Yes. Once your domain is verified, Appwrite Sites automatically provisions and renews SSL certificates so your site is served over HTTPS. You do not need to manage certificates manually." --- Appwrite Sites, the open-source Vercel alternative, is now available to all organizations. Of course, with hosting comes the next step of connecting custom domains. In this article, we’ll walk you through the steps to do just that. diff --git a/src/routes/blog/post/customer-stories-kcollect/+page.markdoc b/src/routes/blog/post/customer-stories-kcollect/+page.markdoc index 01f18b4ec7d..9dcc48ce815 100644 --- a/src/routes/blog/post/customer-stories-kcollect/+page.markdoc +++ b/src/routes/blog/post/customer-stories-kcollect/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/kcollect.avif timeToRead: 5 author: aditya-oberai category: customer-stories +faqs: + - question: "What is K-Collect?" + answer: "K-Collect is a SaaS web platform that helps K-pop fans track, manage, and share their collectible photo cards. It was founded by Ryan O'Connor and grew to over 50,000 users. The platform is built on Next.js with Appwrite handling the backend." + - question: "How did K-Collect reduce infrastructure costs with Appwrite?" + answer: "K-Collect's previous proprietary backend (with database replication and sharding) cost about £2000 per month and still hit bottlenecks. After switching to Appwrite, total infrastructure costs dropped to £200 to £300 per month, roughly a 700% decrease, while tripling concurrent load capacity." + - question: "Which Appwrite products does K-Collect use?" + answer: "K-Collect uses [Appwrite Auth](/docs/products/auth) for user identity, [Appwrite Databases](/docs/products/databases) for album, artist, and photo card metadata, [Appwrite Storage](/docs/products/storage) for the photo card images, and [Appwrite Functions](/docs/products/functions) for third-party integrations like sending emails." + - question: "Why did K-Collect move from native mobile apps to a web platform?" + answer: "The founder is a web developer by background. The native mobile stack created problems with state management, cache invalidation, and backend scaling. Moving to a Next.js web platform unified the codebase in JavaScript and aligned with his existing skills, which sped up shipping new features." + - question: "Why did K-Collect choose Appwrite over Firebase?" + answer: "Firebase's pricing scaled poorly for a pre-revenue product, and the lack of transparency in the underlying code was a concern. Appwrite is open source, has predictable pricing, and offers consistent SDKs across web and Node.js, which made the migration straightforward." + - question: "Can Appwrite handle high-traffic apps like K-Collect?" + answer: "Yes. K-Collect serves around 3.5TB of bandwidth and 28 million requests per month on Appwrite Cloud across more than 50,000 users. Appwrite handles authentication, storage, databases, and functions at that scale without the team needing to manage servers themselves." --- In 2019, Ryan O’Connor was a mere university student when he started exploring the world of Korean popular music, or K-pop. One of the areas within the K-pop fan ecosystem that caught his interest was the concept of photo cards. For those new to the K-pop community, K-pop photo cards are artist-specific collectible cards that are possessed and traded similarly to sports or Pokemon trading cards. These photo cards are produced and distributed by K-pop record labels and have developed a substantial interest and following over the last few years. diff --git a/src/routes/blog/post/customer-stories-langx/+page.markdoc b/src/routes/blog/post/customer-stories-langx/+page.markdoc index d12ba60f294..35b0e5a83e6 100644 --- a/src/routes/blog/post/customer-stories-langx/+page.markdoc +++ b/src/routes/blog/post/customer-stories-langx/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/case-study-langx/cover.avif timeToRead: 5 author: aditya-oberai category: customer-stories +faqs: + - question: "What is LangX?" + answer: "LangX is an open-source language exchange platform similar to Tandem. It pairs users who want to learn a language with native speakers who can teach it, with one-on-one chat using text, images, and audio. It has over 5000 registered users and is built with Ionic Angular and Appwrite." + - question: "How does LangX use Appwrite?" + answer: "LangX uses [Appwrite Databases](/docs/products/databases) for users, chat rooms, languages, messages, and reports, [Appwrite Realtime](/docs/products/databases) for synchronous chat and online status, [Appwrite Storage](/docs/products/storage) for images and audio, and [Appwrite Functions](/docs/products/functions) for streaks and push notifications." + - question: "Why did LangX choose Appwrite over Supabase?" + answer: "The LangX founder evaluated both. He preferred Appwrite's user experience, but the deciding factor was the active community. He posted a challenge on Appwrite's Discord and got a resolution within 24 hours, which gave him confidence that he would not be stuck on his own." + - question: "Can I build a real-time chat app with Appwrite?" + answer: "Yes. [Appwrite Realtime](/docs/products/databases) lets you subscribe to database events and broadcast changes to connected clients. Combined with [Appwrite Storage](/docs/products/storage) for media and [Appwrite Functions](/docs/products/functions) for notifications, you have the building blocks for a full chat app." + - question: "What is the benefit of using Appwrite for a cross-platform app?" + answer: "Appwrite ships SDKs for web, mobile (Flutter, React Native, iOS, Android), and server runtimes with consistent APIs. A team using Ionic Angular (like LangX) gets the same Appwrite API in their hybrid app that a web team would, so business logic stays portable." + - question: "Does Appwrite support push notifications?" + answer: "Yes. [Appwrite Messaging](/docs/products/messaging) supports push notifications, SMS, and email. LangX initially used Appwrite Functions to forward notifications to Firebase Cloud Messaging and plans to migrate to Appwrite Messaging for first-class delivery." --- Born in Istanbul, Turkey, Xue never needed to prioritize learning English as a language until he pursued further education at Boğaziçi University, where his Mechanical Engineering coursework was delivered in English. After graduating and working as an IT manager at a multinational import-export company, Xue moved to Canada and founded his own tech consulting firm. By now, he had started exploring various language exchange platforms such as Tandem as a learner; however, he soon realized there was no perfect platform for his needs. diff --git a/src/routes/blog/post/customer-stories-majik-kids/+page.markdoc b/src/routes/blog/post/customer-stories-majik-kids/+page.markdoc index 32769de75c2..f191daebe49 100644 --- a/src/routes/blog/post/customer-stories-majik-kids/+page.markdoc +++ b/src/routes/blog/post/customer-stories-majik-kids/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/majik-kids.avif timeToRead: 7 author: aditya-oberai category: customer-stories +faqs: + - question: "What is Majik Kids?" + answer: "Majik Kids is an audio-first content platform for children, featuring audio stories, kids' songs across 14 genres, and meditation. It has a Kid Mode (designed for minimal screen time and easy navigation) and a Grown Up Mode (pin-protected, with parental tools and a parents' podcast)." + - question: "How does Majik Kids use Appwrite?" + answer: "The Flutter app uses [Appwrite Storage](/docs/products/storage) for MP3 audio, cover art, and PDF activity books, [Appwrite Databases](/docs/products/databases) for story and artist metadata, [Appwrite Teams](/docs/products/auth) to separate artists from regular users, and [Appwrite Functions](/docs/products/functions) for revenue share calculations." + - question: "Can I build a mobile app with Appwrite?" + answer: "Yes. Appwrite ships SDKs for Flutter, React Native, Android (Kotlin and Java), and iOS (Swift). The Flutter SDK was the key reason Majik Kids chose Appwrite, since it let them ship both iOS and Android from a single codebase with the same backend." + - question: "How do I automate content uploads to Appwrite Storage?" + answer: "Use the [Appwrite server SDK](/docs/sdks) in your language of choice (for example, Python, Node.js, Go) to script uploads. Majik Kids built a Python script that pulls files from Google Drive, verifies and converts them, and uploads to Appwrite Storage automatically." + - question: "What is Appwrite Teams used for?" + answer: "[Appwrite Teams](/docs/products/auth) groups users together and assigns permissions at the team level. Majik Kids uses Teams to separate artists from regular users, which makes it easy to give artists free access to their own content while tracking metrics for both groups independently." + - question: "Can Appwrite handle revenue share or payouts logic?" + answer: "Appwrite does not handle payouts directly, but [Appwrite Functions](/docs/products/functions) can run any custom logic on a schedule or in response to events. Majik Kids uses Functions to calculate revenue share for each artist based on content consumption metrics stored in Appwrite Databases." --- # Ideating an alternative content platform for children diff --git a/src/routes/blog/post/customer-stories-myshoefitter/+page.markdoc b/src/routes/blog/post/customer-stories-myshoefitter/+page.markdoc index dcb1bcbfc36..b12506a1cec 100644 --- a/src/routes/blog/post/customer-stories-myshoefitter/+page.markdoc +++ b/src/routes/blog/post/customer-stories-myshoefitter/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/case-study-myshoefitter.avif timeToRead: 5 author: aditya-oberai category: customer-stories +faqs: + - question: "What is mySHOEFITTER?" + answer: "mySHOEFITTER is an AI tool that determines a person's shoe size from a photo of their foot placed on an A4 sheet. It captures foot length and width with millimeter precision, returning the correct size in under a minute. The technology was developed with the Fraunhofer Institute and used by over 12,000 customers." + - question: "How does mySHOEFITTER use Appwrite?" + answer: "mySHOEFITTER uses [Appwrite Auth](/docs/products/auth) for anonymous user accounts (which helps with GDPR compliance), [Appwrite Storage](/docs/products/storage) for foot images, [Appwrite Functions](/docs/products/functions) to call their AI and compute shoe size, and [Appwrite Databases](/docs/products/databases) for results." + - question: "Why does mySHOEFITTER use anonymous Appwrite accounts?" + answer: "Anonymous accounts let users start using the app without signing up, which keeps the experience frictionless and helps with GDPR compliance (no personal data is collected by default). Appwrite Auth supports creating anonymous sessions that can be upgraded to full accounts later if needed." + - question: "Can I use Appwrite with an AI or ML pipeline?" + answer: "Yes. [Appwrite Functions](/docs/products/functions) can call any external API, including custom ML model endpoints. Store inputs in [Appwrite Storage](/docs/products/storage), trigger a Function on upload, send the data to your model, and write the results back to [Appwrite Databases](/docs/products/databases)." + - question: "Why did mySHOEFITTER choose Appwrite over Directus or Strapi?" + answer: "Directus and Strapi worked well out of the box but were not easy to extend without instability. Appwrite Cloud gave the team a managed BaaS that they did not have to host themselves, plus Functions to extend the platform with custom logic for AI integration." + - question: "What kind of return rate reduction is possible with size-fitting tools?" + answer: "Over 30% of online shoe orders are returned, and about 75% of those returns are caused by wrong size selection. mySHOEFITTER reported a 98.8% success rate (correct sizes) in a Bayerische Landesbank pilot, meaning the right-size selection problem can be largely eliminated with accurate measurement." --- > “Appwrite has been a tremendous asset in implementing our IT infrastructure. Not only is the software an absolute game-changer, but the team is always there when you need them. The integrated user authentication and the ease of creating data structures have undoubtedly saved us several weeks' worth of time. For me, Appwrite is the perfect backend solution. All you have to do is sign up, and your backend is ready to go. I have never seen such an innovative and easy-to-understand backend solution before!” \ diff --git a/src/routes/blog/post/customer-stories-open-mind/+page.markdoc b/src/routes/blog/post/customer-stories-open-mind/+page.markdoc index ac9af868015..9b51f083b87 100644 --- a/src/routes/blog/post/customer-stories-open-mind/+page.markdoc +++ b/src/routes/blog/post/customer-stories-open-mind/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/case-study-open-mind/cover.avif timeToRead: 5 author: aditya-oberai category: customer-stories +faqs: + - question: "What is the Open Mind app?" + answer: "Open Mind is a harm-reduction app that educates users about psychoactive substances, lets them check risky combinations, log consumption, and access emergency instructions. It was built by App Innovators in collaboration with German YouTuber OpenMind3000 (540,000+ subscribers)." + - question: "How does Open Mind use Appwrite?" + answer: "Open Mind hosts JSON files containing substance data on [Appwrite Storage](/docs/products/storage), one file per language. The Flutter app downloads these files via the Appwrite Flutter SDK, which supports chunked downloads and file compression out of the box." + - question: "Why did Open Mind switch from Firebase to Appwrite?" + answer: "Firebase's storage and bandwidth costs grew quickly as their user base scaled. Appwrite Cloud had a more predictable, lower-cost pricing model that let them serve thousands of users without breaking the bank. The Flutter SDK also made the switch quick." + - question: "Can I use Appwrite to serve static content like JSON files?" + answer: "Yes. [Appwrite Storage](/docs/products/storage) can host any file type, including JSON, and serve it through a public URL. This is a common pattern for distributing localized content, config files, or precomputed data to a mobile or web app." + - question: "Does Appwrite work well for Flutter apps?" + answer: "Yes. Appwrite has a first-party Flutter SDK with idiomatic Dart APIs across [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), [Functions](/docs/products/functions), and Realtime. Flutter is a popular choice for Appwrite customers shipping cross-platform mobile apps." + - question: "How can a small team build a multi-platform app without managing a backend?" + answer: "Use Flutter (or another cross-platform framework) for the client and Appwrite for the backend. You get auth, databases, storage, functions, and messaging as managed services. App Innovators used this exact combination to ship Open Mind to 11,500+ Android downloads and 1000+ TestFlight users." --- While still at school, David Forster noticed a substantial increase in the usage of narcotic substances by his peers. He saw that the consumption of narcotic substances led to a decline in the mental and physical health of these folks. However, at that time, the only educational forums on this topic that were accessible to people were Wiki pages with information that was too complex to understand. A lack of simple educational tools prevented David from helping his peers break out of a substance habit. diff --git a/src/routes/blog/post/customer-stories-smartbee/+page.markdoc b/src/routes/blog/post/customer-stories-smartbee/+page.markdoc index 49f1973cdf3..9b29afe33bc 100644 --- a/src/routes/blog/post/customer-stories-smartbee/+page.markdoc +++ b/src/routes/blog/post/customer-stories-smartbee/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/smartbee.avif timeToRead: 5 author: aditya-oberai category: customer-stories +faqs: + - question: "What is Smartbee?" + answer: "Smartbee is a Colombian company that provides security and communication solutions for coal mines, including IoT-based gas monitoring. Their platform aggregates real-time data on oxygen, methane, and carbon monoxide from sensors across 7 mines, in compliance with Colombian regulations." + - question: "How does Smartbee use Appwrite?" + answer: "Each mine runs a local self-hosted Appwrite instance that collects sensor data into [Appwrite Databases](/docs/products/databases), generates CSV reports with [Appwrite Functions](/docs/products/functions), and stores them in [Appwrite Storage](/docs/products/storage). A central Appwrite instance aggregates data from all mines for reporting." + - question: "Can Appwrite handle IoT workloads?" + answer: "Yes. Smartbee writes around 35 million sensor documents to Appwrite Databases per month across 70 sensors, with 4 million Function executions for synchronization and report generation. The combination of [Databases](/docs/products/databases), [Functions](/docs/products/functions), and [Storage](/docs/products/storage) covers most IoT data pipelines." + - question: "Can I self-host Appwrite for offline or edge environments?" + answer: "Yes. Appwrite is open source and self-hostable. Smartbee runs Appwrite locally inside each coal mine because internet connectivity is unreliable underground. Local data is synced to a central Appwrite server when connectivity is available, using [Appwrite Functions](/docs/products/functions)." + - question: "How do I sync data between two Appwrite instances?" + answer: "Use [Appwrite Functions](/docs/products/functions) on a schedule (or triggered by database events) to read from one instance via the server SDK and write to another. Smartbee uses Python-based functions to push data from local mine servers to a central aggregation server every 10 seconds when online." + - question: "Why did Smartbee choose Appwrite over Firebase or Supabase?" + answer: "Firebase is not self-hostable, which made it unusable for environments with poor connectivity. Supabase was hard to self-host at the time. Appwrite was open source, easy to self-host, and had pre-built Functions, Storage, and Databases, which let the team replace their custom Flask stack quickly." --- In 2020, Sergio Ponguta and his brother started Smartbee, a company offering security and communications solutions for coal mining operations in Colombia. Both brothers, being formally educated in systems engineering, combined with a lack of fear of traversing down mines, felt comfortable launching this venture. diff --git a/src/routes/blog/post/customer-stories-undo/+page.markdoc b/src/routes/blog/post/customer-stories-undo/+page.markdoc index d98230dedee..c9dc33547f8 100644 --- a/src/routes/blog/post/customer-stories-undo/+page.markdoc +++ b/src/routes/blog/post/customer-stories-undo/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/case-study-undo/cover.avif timeToRead: 6 author: aditya-oberai category: customer-stories +faqs: + - question: "What is UNDO?" + answer: "UNDO is a low barrier-to-entry asset management platform for circular businesses (rental, resale, recycling models). It offers digital product passports via QR codes, asset tracking through lifecycle stages, and integrations with Odoo, WordPress, Shopify, SAP, and WooCommerce. It supports 5 customers with over 9000 tracked articles." + - question: "How does UNDO use Appwrite?" + answer: "UNDO uses [Appwrite Auth](/docs/products/auth) with Google OAuth for users, multiple [Appwrite Databases](/docs/products/databases) for data separation, [Appwrite Storage](/docs/products/storage) for QR code photos, [Appwrite Functions](/docs/products/functions) for scan analysis, Realtime for live scan updates, and [Appwrite Messaging](/docs/products/messaging) for anomaly alerts." + - question: "Can Appwrite be self-hosted on customer premises?" + answer: "Yes. UNDO self-hosts Appwrite on each customer's on-prem compute, which is required by their compliance policies. Appwrite is open source and runs in Docker, which makes it straightforward to deploy inside a customer's own infrastructure or air-gapped environment." + - question: "How long does it take to build an MVP with Appwrite?" + answer: "UNDO's solo developer shipped their MVP in 2 to 3 months. Because Appwrite handles auth, databases, storage, functions, realtime, and messaging out of the box, a small team can focus on product logic instead of building backend infrastructure from scratch." + - question: "What is a digital product passport?" + answer: "A digital product passport is a record that captures a product's materials, manufacturing process, care instructions, and recycling information, often accessed via a QR code on the item. EU regulations like Extended Producer Responsibility (EPR) are pushing companies to provide them for transparency." + - question: "Can Appwrite handle QR-code based asset tracking?" + answer: "Yes. Store QR codes (or their decoded payloads) in [Appwrite Databases](/docs/products/databases), upload scanned images to [Appwrite Storage](/docs/products/storage), and use [Appwrite Functions](/docs/products/functions) to update asset status on each scan. [Appwrite Realtime](/docs/products/databases) can push live updates to dashboards." --- Over the past decade, Jonas Janssen has seen the circular economy grow in Belgium, resulting in sustainable business models that focus on rental, resale, and recycling for consumer companies. At his previous job as a CTO, he interacted with several customers, often sustainability-focused small and medium-sized businesses (SMBs). However, many of these companies mentioned the lack of software solutions for managing logistics and supply chains in circular businesses. Major solutions providers like Microsoft and SAP would build software with extensive feature sets and large prices that these companies neither needed nor could afford. Simply put, there was no software solution in the market for circular businesses with a low barrier of entry and reasonable pricing. diff --git a/src/routes/blog/post/customer-story-radar/+page.markdoc b/src/routes/blog/post/customer-story-radar/+page.markdoc index 4b529677273..651d7fee70e 100644 --- a/src/routes/blog/post/customer-story-radar/+page.markdoc +++ b/src/routes/blog/post/customer-story-radar/+page.markdoc @@ -9,6 +9,19 @@ author: aditya-oberai category: customer-stories featured: false callToAction: true +faqs: + - question: "What is Radar?" + answer: "Radar is a social curation app for tracking media recommendations across five categories (movies, TV shows, books, audiobooks, video games). Built by Paradox as a native iOS app using SwiftUI, SwiftData, and Swift 6 concurrency, it features a personal library, discovery feed, and social following." + - question: "How does Radar use Appwrite?" + answer: "Radar uses [Appwrite Functions](/docs/products/functions) (mostly Deno 2.0, with one Node.js function for Sign in with Apple) to power offline-first syncing, [Appwrite Databases](/docs/products/databases) for library data, and [Appwrite Sites](/docs/products/sites) to host the Svelte 5 marketing website." + - question: "How much did Appwrite save Paradox compared to alternatives?" + answer: "Paradox estimates Appwrite saved them around 10,000 engineering hours and nearly $1,000,000 across engineering, testing, and operations. They estimate Supabase would have cost over 3x more with a more confusing developer experience." + - question: "How does Radar handle offline-first sync?" + answer: "Radar uses [Appwrite Functions](/docs/products/functions) (in Deno 2.0) to mediate sync between the iOS client and Appwrite Databases. Atomic increment/decrement operations on counts and bulk APIs make it possible to apply many local changes efficiently when a device reconnects." + - question: "Can I use Appwrite Functions with Deno?" + answer: "Yes. [Appwrite Functions](/docs/products/functions) supports multiple runtimes including Deno (Radar uses Deno 2.0), Node.js, Python, Go, PHP, Ruby, and more. You can pick the right runtime per function based on the libraries you need." + - question: "How do I implement Sign in with Apple in an Appwrite app?" + answer: "Use a server-side Function (Radar uses Node.js) to verify the Apple identity token, then create or retrieve a user in [Appwrite Auth](/docs/products/auth) and return a session. This keeps your Apple credentials and verification logic on the server instead of in the client." --- For any avid consumer of media, keeping track of every movie, book, or game recommended by friends can be a real challenge. Matt Martino, former Apple employee, experienced this frustration firsthand thanks to one simple shortcoming: **a bad memory**. diff --git a/src/routes/blog/post/customer-story-socialaize/+page.markdoc b/src/routes/blog/post/customer-story-socialaize/+page.markdoc index 39c3e7bc349..2655c081eb2 100644 --- a/src/routes/blog/post/customer-story-socialaize/+page.markdoc +++ b/src/routes/blog/post/customer-story-socialaize/+page.markdoc @@ -9,6 +9,19 @@ author: aditya-oberai category: customer-stories featured: false callToAction: true +faqs: + - question: "What is Socialaize?" + answer: "Socialaize is an all-in-one social media command center built by Black Leaf Digital. It connects to 9+ platforms (Threads, BlueSky, Instagram, LinkedIn, TikTok, YouTube, Mastodon, Facebook, Pinterest), offers AI content generation, automated cross-posting workflows, scheduling, analytics, and (soon) a unified social inbox." + - question: "How does Socialaize use Appwrite?" + answer: "Socialaize uses a dedicated [Appwrite Function](/docs/products/functions) per social network to isolate API logic, [Appwrite Databases](/docs/products/databases) as the central data store, [Appwrite Auth](/docs/products/auth) (with teams) for user OAuth and permissions, and [Appwrite Storage](/docs/products/storage) for the media library with permission-aware buckets per team." + - question: "How does Appwrite handle 600,000 daily function executions?" + answer: "Appwrite Cloud autoscales [Functions](/docs/products/functions) horizontally based on load. Socialaize runs 200,000 to 600,000 function executions per day for cron syncs, AI generation, permissions, payments, and analytics, with Appwrite handling the scaling so they do not have to manage infrastructure." + - question: "Why did Socialaize migrate from self-hosted Appwrite to Appwrite Cloud?" + answer: "Self-hosting worked initially but became unsustainable as usage grew. Migrating to Appwrite Cloud offloaded scaling, monitoring, and ops to Appwrite. The founder estimates Appwrite costs are around 300% less per year than alternative vendors for the same workload." + - question: "Can Appwrite Functions schedule recurring tasks?" + answer: "Yes. [Appwrite Functions](/docs/products/functions) supports cron schedules. Socialaize uses a sync-manager cron function that polls each social platform on a schedule and writes new content into [Appwrite Databases](/docs/products/databases) for processing." + - question: "Can multiple users share access to the same data in Appwrite?" + answer: "Yes. [Appwrite Teams](/docs/products/auth) let you group users and assign permissions to a team rather than individual users. Socialaize uses Teams so multiple users can share OAuth connections to the same social accounts, with the permission system enforced by Appwrite at the document and storage level." --- diff --git a/src/routes/blog/post/customer-story-storealert/+page.markdoc b/src/routes/blog/post/customer-story-storealert/+page.markdoc index bbe21049955..4af2b185854 100644 --- a/src/routes/blog/post/customer-story-storealert/+page.markdoc +++ b/src/routes/blog/post/customer-story-storealert/+page.markdoc @@ -9,6 +9,19 @@ author: aditya-oberai category: customer-stories featured: false callToAction: true +faqs: + - question: "What is StoreAlert?" + answer: "StoreAlert is a Shopify app built by Devkind that gives merchants real-time notifications and a complete event history for product, order, inventory, and price changes. It is live on the Shopify App Store and supports email, SMS, and push channels, with smart hourly digests to prevent notification overload." + - question: "How does StoreAlert use Appwrite?" + answer: "StoreAlert uses [Appwrite Functions](/docs/products/functions) for Shopify OAuth verification, event sync, and forwarding alerts to Gadget.dev. [Appwrite Databases](/docs/products/databases) store access tokens and event logs. CRON-scheduled functions handle recurring tasks like polling for new events and refreshing tokens." + - question: "Why did Devkind pick Appwrite over Firebase or Supabase?" + answer: "Appwrite's pricing model and the limits on Functions and Database operations fit their workload better than Firebase or Supabase. The combination of managed Functions, Databases, and Auth in one platform let them ship without stitching together separate services." + - question: "Can Appwrite be used as a Shopify app backend?" + answer: "Yes. Use [Appwrite Functions](/docs/products/functions) to handle Shopify OAuth, webhook ingestion, and API polling. Store access tokens and event data in [Appwrite Databases](/docs/products/databases). Schedule recurring polling with CRON triggers on Functions to fetch new events from the Shopify API." + - question: "How can I store Shopify access tokens securely?" + answer: "Store them in [Appwrite Databases](/docs/products/databases) with permissions set so only the relevant user (and your server-side functions via API key) can read them. Never expose access tokens to the client. Refresh tokens on a CRON schedule using [Appwrite Functions](/docs/products/functions)." + - question: "How much faster can I ship a SaaS using a BaaS like Appwrite?" + answer: "Devkind reported a 60% reduction in development time and 40% lower server costs after picking Appwrite for StoreAlert. The biggest wins come from skipping auth, database, storage, and scheduled-task infrastructure that you would otherwise have to build and operate yourself." --- In 2023, a client of [Devkind](https://www.devkind.com.au/), a software development and marketing agency from Melbourne, Australia, faced a major setback with several products disappearing from their Shopify store without any trace of when or how it happened. Without an event log, tracking the issue was impossible. This incident highlighted a glaring gap in e-commerce store management: the lack of real-time visibility into key store events. diff --git a/src/routes/blog/post/defying-the-laws-of-web-animations/+page.markdoc b/src/routes/blog/post/defying-the-laws-of-web-animations/+page.markdoc index 9e09c1830f3..73da7ba38b4 100644 --- a/src/routes/blog/post/defying-the-laws-of-web-animations/+page.markdoc +++ b/src/routes/blog/post/defying-the-laws-of-web-animations/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 10 author: thomas-g-lopes category: tutorial callToAction: true +faqs: + - question: "How do you trigger animations based on scroll position?" + answer: "Track how far the user has scrolled through a container (using getBoundingClientRect plus window.innerHeight), convert that to a percentage, and activate sections when the percentage crosses defined thresholds. For 5 equal sections, the triggers sit at 0%, 20%, 40%, 60%, and 80%." + - question: "What is the difference between scroll-triggered and scroll-progressed animations?" + answer: "Scroll-triggered animations start when a section enters the viewport and then play on their own timeline. Scroll-progressed (or scroll-linked) animations are tied directly to scroll position, so they advance and reverse as the user scrolls up and down. Both have valid use cases." + - question: "How do you keep an animation pinned to the center while scrolling?" + answer: "Wrap your animation in a tall container so there is room to scroll. Use position: sticky (or fixed) on the animation element so it stays centered while the outer container scrolls past it. Use the scroll percentage of the outer container to drive the animation state." + - question: "What is a Svelte action and why use one for scroll handling?" + answer: "A Svelte action is a function that runs when a DOM element is mounted and can attach listeners or behavior to it. Using an action for scroll handling keeps the logic reusable: any component can opt into the scroll events by adding use:scroll to its element." + - question: "How do I dispatch custom DOM events from a Svelte action?" + answer: "Inside the action, call node.dispatchEvent(new CustomEvent('event-name', { detail })). Consumers then listen with on:event-name. This is how the article dispatches web-scroll and web-resize events with scroll info in the detail payload." + - question: "Why split scroll math into a reusable helper instead of per-component code?" + answer: "Because scroll percentage logic is identical across multiple animated sections, a single helper avoids duplicating bounding-rect math. It also makes it easy to swap implementations later (for example, switching to the Intersection Observer or Scroll Timeline API) without changing every consumer." --- If you're a frontend developer, you know that one of the scariest tasks you can receive is coding a complex web animation. If you're not a frontend developer, I bet that sounds even harder. diff --git a/src/routes/blog/post/deno-2-appwrite-functions/+page.markdoc b/src/routes/blog/post/deno-2-appwrite-functions/+page.markdoc index df4c5313fb0..d428c9435a0 100644 --- a/src/routes/blog/post/deno-2-appwrite-functions/+page.markdoc +++ b/src/routes/blog/post/deno-2-appwrite-functions/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/deno-2-appwrite-functions/cover.avif timeToRead: 6 author: ebenezer-don category: product +faqs: + - question: "What is Deno 2.0?" + answer: "Deno 2.0 is the latest major release of the Deno runtime, created by Node.js author Ryan Dahl. It is a secure-by-default, modern JavaScript and TypeScript runtime with built-in tooling (linter, formatter, test runner), improved Node.js compatibility, and a refined permission model." + - question: "Can I use Deno 2.0 in Appwrite Functions?" + answer: "Yes. Deno 2.0 is supported as a runtime for [Appwrite Functions](/docs/products/functions). You can write your function handlers in TypeScript or JavaScript and rely on Deno's built-in tools rather than configuring Babel or ts-node." + - question: "How does Deno's permission model work?" + answer: "Deno requires explicit permission flags for file system access, network calls, environment variables, and other capabilities (--allow-net, --allow-read, --allow-write, etc.). Without the flag, the runtime throws a Deno.errors.NotCapable error. This protects you from malicious dependencies." + - question: "Does Deno work with npm packages?" + answer: "Yes. Deno 2.0 has full npm compatibility. You can import npm packages directly using the npm: specifier, and CommonJS modules are supported. This makes it easier to reuse existing Node.js libraries in your Deno code." + - question: "What is the difference between Deno and Node.js for serverless functions?" + answer: "Deno has native TypeScript, stricter security, and faster cold starts than Node.js, which makes it well suited for serverless environments. Node.js has a larger ecosystem and is the more familiar choice. [Appwrite Functions](/docs/products/functions) supports both, so you can pick per function." + - question: "Why doesn't Deno use node_modules?" + answer: "Deno uses URL-based imports (or npm: specifiers) and a global cache instead of a project-local node_modules directory. This avoids dependency duplication, reduces project size, and makes deployments smaller, which matters for cloud and serverless workloads." --- Deno 2.0 is the latest version of the secure, modern runtime created by Ryan Dahl, the same developer behind Node.js. For years, Node.js has been the go-to runtime for building server-side JavaScript applications. It's familiar, it's powerful, and it has a huge ecosystem of libraries. But like any technology, Node.js isn't without its flaws. diff --git a/src/routes/blog/post/deno-runtime-announcment/+page.markdoc b/src/routes/blog/post/deno-runtime-announcment/+page.markdoc index b68bfb45ad2..cacc877e252 100644 --- a/src/routes/blog/post/deno-runtime-announcment/+page.markdoc +++ b/src/routes/blog/post/deno-runtime-announcment/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/deno-runtime-announcment/cover.avif timeToRead: 3 author: laura-du-ry category: announcement +faqs: + - question: "Does Appwrite Cloud support Deno?" + answer: "Yes. Deno is a supported runtime for [Appwrite Functions](/docs/products/functions). You can create a new function using the Deno quick start, connect a GitHub repository, and deploy TypeScript or JavaScript code that runs on the Deno runtime." + - question: "Why use Deno on Appwrite Functions?" + answer: "Deno offers faster cold starts, native TypeScript, a strict permission model, and built-in tooling (linter, formatter, tester). For serverless functions where latency and security matter, those are meaningful gains over Node.js without changing how you write JavaScript." + - question: "How do I create a Deno function on Appwrite?" + answer: "In the Appwrite Console, create a new function and pick the Deno runtime. Connect a GitHub repository (or upload code directly) and visit your function's domain to invoke it. See the [Appwrite Functions quick start](/docs/products/functions) for details." + - question: "Can I use npm packages in Deno on Appwrite?" + answer: "Yes. Deno 2.0 supports npm packages via the npm: specifier and CommonJS modules. This means you can reuse most of the Node.js ecosystem in your Appwrite Functions running on the Deno runtime." + - question: "Is Deno faster than Node.js on Appwrite Functions?" + answer: "In general, Deno offers lower cold starts and higher HTTP throughput than Node.js, particularly for TypeScript-heavy workloads where Node.js requires transpilation. Actual numbers depend on your specific function, so benchmark with your own code." + - question: "What permissions do Deno functions need on Appwrite?" + answer: "When running locally with Deno you pass --allow-net, --allow-read, etc. On [Appwrite Functions](/docs/products/functions), the runtime handles permission setup based on what your function needs (network access, environment variables, etc.). You write standard Deno code and Appwrite handles the rest." --- diff --git a/src/routes/blog/post/deno-vs-bun-javascript-runtime/+page.markdoc b/src/routes/blog/post/deno-vs-bun-javascript-runtime/+page.markdoc index 1a5c87b4ad6..0c8d9aa9885 100644 --- a/src/routes/blog/post/deno-vs-bun-javascript-runtime/+page.markdoc +++ b/src/routes/blog/post/deno-vs-bun-javascript-runtime/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/deno-vs-bun-javascript-runtime/cover.avif timeToRead: 10 author: ebenezer-don category: tutorial +faqs: + - question: "What is the difference between Deno and Bun?" + answer: "Deno is a secure-by-default runtime built on V8 (in Rust) with native TypeScript and a strict permission model. Bun is a performance-focused runtime built on JavaScriptCore (in Zig) with a fast package manager and bundler. Deno emphasizes security and TypeScript, Bun emphasizes raw speed." + - question: "Is Bun faster than Deno?" + answer: "For cold starts, HTTP throughput, and package installation, Bun is generally faster. But Deno is fast enough for most production workloads, and its performance is predictable under long-running conditions. If raw startup speed is critical (CLIs, edge functions), Bun wins; otherwise the gap is smaller than benchmarks suggest." + - question: "Should I use Deno or Bun with Appwrite?" + answer: "[Appwrite Functions](/docs/products/functions) supports both. Pick Deno for TypeScript-heavy work, security-sensitive code, or when you want built-in linting, formatting, and testing. Pick Bun (where supported in your runtime list) when you want the fastest startup for short-lived functions." + - question: "Do Deno and Bun both support npm packages?" + answer: "Yes. Both runtimes have npm compatibility. Deno uses npm: specifiers and improved CommonJS support in 2.0. Bun reads node_modules and is a drop-in replacement for npm in most cases. Most existing Node.js libraries work in both with minimal changes." + - question: "Which runtime has better TypeScript support?" + answer: "Deno treats TypeScript as a first-class citizen with native execution and optional type-checking via --check. Bun transpiles TypeScript fast but does not type-check natively. For strict TypeScript projects, Deno is the safer choice; for quick scripts, Bun's lightweight handling is fine." + - question: "Can I replace Node.js with Deno or Bun?" + answer: "For most server-side workloads, yes. Both runtimes implement enough of the Node.js API surface that many projects run without changes. The main caveats are native modules and obscure Node-specific APIs. Test your specific dependencies before migrating production code." --- JavaScript runtimes are evolving beyond Node.js, and this gives developers access to new tools designed for modern workflows, performance, and security. Two of the most talked-about options today are **Deno 2** and **Bun**. diff --git a/src/routes/blog/post/deploy-a-pdf-generation-service-with-appwrite-functions/+page.markdoc b/src/routes/blog/post/deploy-a-pdf-generation-service-with-appwrite-functions/+page.markdoc index 2273a572050..e02f1f959b6 100644 --- a/src/routes/blog/post/deploy-a-pdf-generation-service-with-appwrite-functions/+page.markdoc +++ b/src/routes/blog/post/deploy-a-pdf-generation-service-with-appwrite-functions/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/pdf-generation/pdf.avif timeToRead: 5 author: luke-silver category: tutorial +faqs: + - question: "Why use Appwrite Functions to generate PDFs instead of running a separate service?" + answer: "Appwrite Functions give you scalability, reliability, and security without managing infrastructure. You write a small piece of backend code, point a domain at it, and the function handles HTTP traffic. There is no separate server to provision, monitor, or scale." + - question: "How do I deploy the PDF generation template?" + answer: "Open the Functions page in your Appwrite project, switch to the Templates tab, and pick the Generate PDF template. No environment variables are required, so connecting a new repository and accepting the defaults is enough to ship the function. Full details are in the [Appwrite Functions docs](/docs/products/functions)." + - question: "How do I let users download the generated PDF in a browser?" + answer: "Use a plain HTML anchor tag with the download attribute pointed at your function URL, like `Download invoice`. The function returns a PDF, so the browser handles the download natively. On Flutter, packages like `download` or `open_filex` give you similar behavior." + - question: "How do I generate a PDF with real order data instead of the demo invoice?" + answer: "Change the function to read an order ID from a query parameter, fetch the matching document from [Appwrite Databases](/docs/products/databases) (or any external source), check the request against the `x-appwrite-user-id` header, and populate the PDF template with the real values. Code recipes in the Functions docs walk through each step." + - question: "Can I use this approach for invoices, reports, and other documents?" + answer: "Yes, the template is a starting point you can shape to any document type. You control the HTML and styling that becomes the PDF, so reports, contracts, statements, and certificates all work with the same pattern. Swap the demo invoice template for your own layout and feed it real data." + - question: "Is the function URL secure enough to expose to a frontend?" + answer: "By default the URL is public, so for sensitive documents you need to authenticate the caller and authorize access inside the function. Compare the request user against the document owner before returning the PDF, and consider executing the function from your own backend instead of linking directly from the browser." --- Appwrite Functions allow you to extend Appwrite's functionality with just a few lines of backend code. Enabling you to build your applications as you imagined. You can start by cloning one of the quick start templates or using a template with pre-built integration to quickly implement features. Function templates are pre-built Appwrite Functions that can be integrated into your Appwrite project with just a few clicks. Using them, you can easily incorporate new features and integrations into your app without writing additional code or managing infrastructure. diff --git a/src/routes/blog/post/deploy-nextjs-app-to-appwrite-sites/+page.markdoc b/src/routes/blog/post/deploy-nextjs-app-to-appwrite-sites/+page.markdoc index c3b5713e37f..40452b1512a 100644 --- a/src/routes/blog/post/deploy-nextjs-app-to-appwrite-sites/+page.markdoc +++ b/src/routes/blog/post/deploy-nextjs-app-to-appwrite-sites/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/deploy-nextjs-app-to-appwrite-sites/cover.avif timeToRead: 5 author: atharva category: tutorial +faqs: + - question: "Does Appwrite Sites support Next.js SSR and React Server Components?" + answer: "Yes, [Appwrite Sites](/docs/products/sites) supports the full Next.js feature set, including SSR and React Server Components, not just static export. You can deploy Next.js apps the same way you would on any modern host, with build settings detected automatically." + - question: "What build and output settings does Next.js use on Appwrite Sites?" + answer: "The default install command is `npm install`, the build command is `npm run build`, and the output directory is `./.next`. Sites detects these automatically for most Next.js projects, so you only need to change them if you use a custom setup like pnpm, Yarn, or a non-default output folder." + - question: "How do I deploy a Next.js app from a monorepo?" + answer: "Appwrite Sites might not auto-detect the app, so you need to set the root directory manually to the folder containing your Next.js config. For a Turborepo project that might be `./apps/web`. Once the root is set, the rest of the build settings work as normal." + - question: "How do environment variables work in Next.js on Appwrite Sites?" + answer: "Add environment variables in the Environment variables section when creating or editing the site. Variables prefixed with `NEXT_PUBLIC_` are exposed to the browser, so keep secrets in unprefixed variables that only run server-side." + - question: "What if my Next.js build fails when I try to deploy?" + answer: "Appwrite Sites builds your app the same way `npm run build` does locally, so a failing local build will fail on deploy too. Run `npm run build` on your machine first, fix any errors, then push the changes. Build logs are streamed live in the Appwrite Console so you can debug in place." + - question: "Can I use a custom domain with my Next.js site?" + answer: "Yes. Start with the free Appwrite Network subdomain to verify everything works, then add a custom domain from the site settings. Walk through the steps in the [custom domains guide](/blog/post/custom-domains-with-sites)." --- You just built your Next.js app with all the killer features you wanted. Now you want to put it out for the world to see. But you’re confused: “how do I do that?”. If you’re that person, this article is for you. diff --git a/src/routes/blog/post/deploy-tanstack-start-app-to-appwrite-sites/+page.markdoc b/src/routes/blog/post/deploy-tanstack-start-app-to-appwrite-sites/+page.markdoc index 9ccfb8c51fb..8bd03d6eace 100644 --- a/src/routes/blog/post/deploy-tanstack-start-app-to-appwrite-sites/+page.markdoc +++ b/src/routes/blog/post/deploy-tanstack-start-app-to-appwrite-sites/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: atharva category: tutorial featured: false +faqs: + - question: "Does Appwrite Sites support TanStack Start with SSR?" + answer: "Yes, [Appwrite Sites](/docs/products/sites) officially supports TanStack Start with full server-side rendering. The framework is detected from your repository, so you can deploy directly from GitHub without custom build configuration." + - question: "How do I structure environment variables for TanStack Start?" + answer: "TanStack Start uses Vite, so any public environment variable must be prefixed with `VITE_` to be available in the browser. Keep API keys and secrets in unprefixed variables so they only live on the server side. Add them in the Environment variables section when creating your site." + - question: "How do I deploy a TanStack Start app from a monorepo?" + answer: "Set the root directory manually to the folder containing your TanStack Start config. For a Turborepo project the path is usually something like `./apps/web`. Once the root is correct, Sites picks up the rest of the build settings." + - question: "What is TanStack Start and how does it compare to Next.js or Remix?" + answer: "TanStack Start is a full-stack React framework built on top of TanStack Router, focused on type-safe routing, server functions, and SSR. Compared to Next.js or Remix, it leans harder on TanStack Query and Router primitives and gives you more direct control over server boundaries." + - question: "Can I add a custom domain to my deployed TanStack Start site?" + answer: "Yes. Deploy first using the Appwrite Network subdomain, then add a custom domain from the site settings. The full process is covered in the [custom domains guide](/blog/post/custom-domains-with-sites)." + - question: "Why does my build fail locally but succeed on Appwrite Sites (or vice versa)?" + answer: "The most common cause is a difference in Node.js version, environment variables, or lockfile state. Match the Node version Sites uses in the build logs, commit your lockfile, and double-check that every environment variable referenced in code is set on the site. If a local build fails, the deploy will fail too, so fix it locally first." --- TanStack Start is growing in popularity and developers are choosing to use it more over other alternatives. To empower these developers, we just announced support for TanStack Start in Appwrite Sites. diff --git a/src/routes/blog/post/designing-init-event-logo/+page.markdoc b/src/routes/blog/post/designing-init-event-logo/+page.markdoc index 168a90e2da7..ebab6f7dd01 100644 --- a/src/routes/blog/post/designing-init-event-logo/+page.markdoc +++ b/src/routes/blog/post/designing-init-event-logo/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jesse-winton category: design featured: false +faqs: + - question: "What is Appwrite Init?" + answer: "[Init](/init) is Appwrite's online launch event where the team announces new products, features, and updates across the platform. It runs across multiple days, with talks, demos, and a customizable event ticket that attendees can share on social media." + - question: "How does Appwrite approach event branding for Init?" + answer: "The visual design team starts with an empty FigJam board, gathers references, debates direction, and iterates on logos and animations together. For Init 2.0 the team landed on line art because it felt dynamic and matched the performance themes of the new feature set." + - question: "How was the Init 2.0 logo animation built in the browser?" + answer: "The animation uses SVG paths with CSS `stroke-dasharray` and `stroke-dashoffset`. Each letter path is rendered three times with staggered `animation-delay` values to create the impression of multiple strokes traveling along the same shape. No JavaScript animation library is needed." + - question: "Why use CSS instead of an animation library for SVG strokes?" + answer: "CSS animations on SVG strokes are lightweight, run on the GPU where possible, and avoid pulling in a full animation runtime for a simple line draw effect. The team initially explored gradient tracing approaches with JavaScript but found the CSS-only version both simpler and more performant." + - question: "Why is the marketing site built in SvelteKit?" + answer: "SvelteKit gives Appwrite a single framework for both static marketing pages and interactive components, with strong support for transitions and animations out of the box. The Init animation principles translate to any component-based framework, so the approach is not Svelte-specific." + - question: "Can I reuse the SVG stroke animation pattern on my own site?" + answer: "Yes. Store letter or shape paths in an array, render each one a few times with staggered `animation-delay`, and animate `stroke-dasharray` with CSS keyframes. The same approach works in React, Vue, Svelte, or vanilla JavaScript with no extra libraries." --- After the success of our first [Init](https://appwrite.io/init) event in Spring of 2024, we knew there would be more coming soon, and that, visually, we had set ourselves a high bar. Even though Init is a fully online, virtual event, Appwrite’s visual design team created something tangible and interactive with the fully customizable, and shareable [Init event tickets](https://appwrite.io/init/tickets). In early July, knowing that our next event was just around the corner, we gathered again and began to brainstorm the visual design style that we wanted to bring to Init 2.0. diff --git a/src/routes/blog/post/designing-the-new-appwrite-website/+page.markdoc b/src/routes/blog/post/designing-the-new-appwrite-website/+page.markdoc index fea217083df..a33c394fab9 100644 --- a/src/routes/blog/post/designing-the-new-appwrite-website/+page.markdoc +++ b/src/routes/blog/post/designing-the-new-appwrite-website/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/designing-the-new-appwrite-website/cover.avif timeToRead: 5 author: caio-arias category: design +faqs: + - question: "Why did Appwrite redesign its website?" + answer: "The site is the main entry point for developers learning about Appwrite, so the rebrand was a chance to rethink both structure and visuals. The team also wanted to fill content gaps and present products in a way that matched Appwrite's evolving identity." + - question: "What process did the team follow for the redesign?" + answer: "The team started with a content and sitemap audit, built wireframes to validate navigation, and only then layered in visual design. The goal was to lock the structure before letting the rebrand drive aesthetic choices, so content priorities did not get lost." + - question: "Why use the website to test new brand identity decisions?" + answer: "The website is the most visible touchpoint, so testing typography, color, and visual concepts there forces early decisions to hold up under real-world layout constraints. If a design idea did not work on the web, it usually was not strong enough to ship across other channels either." + - question: "How did Appwrite approach animations for the new site?" + answer: "Animations were hand-coded using [Svelte transitions](https://svelte.dev/docs/svelte-transition) and the native Web Animations API via [motion.dev](https://motion.dev/), instead of pulling in a heavy animation library. The goal was to balance interactivity with strong performance, so motion supports the product story without slowing pages down." + - question: "What technologies power the Appwrite website?" + answer: "The marketing site is built with SvelteKit, with custom animations driven by Svelte transitions and web animation APIs. The structure leans on a content-first approach where wireframes and information architecture are decided before visual polish." + - question: "How do brand and product design influence each other at Appwrite?" + answer: "Brand identity decisions are stress-tested through the product surfaces (the site, the console, illustrations) before being formalized. That keeps the visual language coherent across channels and avoids brand guidelines that look great in a deck but fail in production." --- # Our brand’s main front-facing asset diff --git a/src/routes/blog/post/developer-tools-appwrite/+page.markdoc b/src/routes/blog/post/developer-tools-appwrite/+page.markdoc index 32b178eb26a..1466cee2473 100644 --- a/src/routes/blog/post/developer-tools-appwrite/+page.markdoc +++ b/src/routes/blog/post/developer-tools-appwrite/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/developer-tools-appwrite/cover.avif timeToRead: 5 author: aditya-oberai category: open-source +faqs: + - question: "What developer tools does Appwrite provide out of the box?" + answer: "Appwrite ships with the [Appwrite CLI](/docs/tooling/command-line/installation) for managing projects from the terminal, the SDK Generator for creating SDKs in many languages, and the Appwrite Playgrounds with example projects in 15+ languages and frameworks. Together they cover most workflows from local setup to deployment." + - question: "Where can I find community-built libraries for Appwrite?" + answer: "The [Awesome Appwrite](https://github.com/appwrite/awesome-appwrite) GitHub repository is a curated list of community libraries, tools, and projects. You can also explore [Built with Appwrite](https://builtwith.appwrite.io/) to see real applications and the tools they use." + - question: "Can I generate TypeScript types from my Appwrite collections?" + answer: "Yes. Community tools like `fetch-appwrite-types` read your [Appwrite Databases](/docs/products/databases) schema and emit TypeScript definitions, so your client code stays in sync with your collections. This cuts down on runtime mistakes and gives you autocomplete on document fields." + - question: "How do I manage Appwrite database schema changes across environments?" + answer: "Community tools like Appwrite Utils (Node.js CLI) and AppwriteMigrator (.NET CLI) let you treat your schema as code and sync it between local, staging, and production projects. For most teams this is more reliable than recreating collections by hand in the Console." + - question: "Can I deploy a SvelteKit app as an Appwrite Function?" + answer: "Yes, with the community-built `adapter-appwrite` you can build a SvelteKit app and ship it as an [Appwrite Function](/docs/products/functions). For full sites with SSR, [Appwrite Sites](/docs/products/sites) is usually the better fit, but the adapter is handy for embedding SvelteKit logic inside a function." + - question: "Is there an Express-like framework for Appwrite Functions?" + answer: "Yes, AppExpress is a community library inspired by Express.js that adds routing and middleware on top of Appwrite Functions. It keeps the function lightweight while giving you familiar patterns for HTTP routing, middleware chaining, and caching." --- Any developer-focused product is only as good as the ecosystem of developer tools surrounding it. Fortunately, over the years, we have seen several outstanding tools developed by our community, as well as a few we have developed in-house to make development with Appwrite far more productive. diff --git a/src/routes/blog/post/did-claude-design-kill-lovable/+page.markdoc b/src/routes/blog/post/did-claude-design-kill-lovable/+page.markdoc index 1ed80e2ea2b..31e7dd1547f 100644 --- a/src/routes/blog/post/did-claude-design-kill-lovable/+page.markdoc +++ b/src/routes/blog/post/did-claude-design-kill-lovable/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/did-claude-design-kill-lovable/cover.avif timeToRead: 8 author: aditya-oberai category: ai +faqs: + - question: "What is Claude Design?" + answer: "Claude Design is Anthropic's visual canvas built on Claude Opus 4.7. You describe what you want and Claude drafts code-powered prototypes you can refine through chat, inline comments, direct edits, or sliders. Outputs can be handed straight to Claude Code for implementation." + - question: "Does Claude Design replace Lovable?" + answer: "Not today. Lovable produces deployed full-stack apps with built-in hosting, auth, and a backend, while Claude Design stops at the handoff to Claude Code. For non-technical founders, Lovable is still the faster path to a live URL. For developers already using Claude Code, the Claude Design plus Claude Code loop is tighter." + - question: "What is vibe coding?" + answer: "Vibe coding means building software by describing intent to a model instead of writing the code yourself. The term went mainstream in 2025 and now describes the default workflow for tools like Lovable, Bolt, v0, Replit Agent, and Claude Code. The whole category optimizes for iteration speed with natural language." + - question: "Why does being the model provider matter for AI coding tools?" + answer: "Wrappers around third-party models pay retail API prices, get new capabilities on someone else's schedule, and cannot tune the model itself. Providers like Anthropic ship Claude Design on day-one access to new models, can afford richer outputs, and tune the model with the product in mind. That gap widens with every model release." + - question: "How do I use Claude Design with a real backend like Appwrite?" + answer: "Claude Design generates the frontend, hands the bundle to Claude Code, and Claude Code can wire up backend services through MCP integrations. Pointing it at Appwrite for [auth](/docs/products/auth), [databases](/docs/products/databases), [storage](/docs/products/storage), and [functions](/docs/products/functions) gives you a production backend behind the generated UI." + - question: "Is Claude Design available now?" + answer: "Yes, in research preview for Pro, Max, Team, and Enterprise Claude plans. If you already pay for Claude, you already have access. It runs on Claude Opus 4.7 and ships exports to URLs, folders, Canva, PDF, PPTX, or standalone HTML." --- On April 17, 2026, Anthropic shipped **Claude Design**: a visual canvas built on Claude Opus 4.7 that turns prompts into code-powered prototypes and hands them straight to Claude Code. diff --git a/src/routes/blog/post/document-vs-relational-databases-vibecoding/+page.markdoc b/src/routes/blog/post/document-vs-relational-databases-vibecoding/+page.markdoc index dab3b958124..d5e27b8ed47 100644 --- a/src/routes/blog/post/document-vs-relational-databases-vibecoding/+page.markdoc +++ b/src/routes/blog/post/document-vs-relational-databases-vibecoding/+page.markdoc @@ -9,6 +9,19 @@ author: ebenezer-don category: tutorial featured: false callToAction: true +faqs: + - question: "Should I pick a SQL or NoSQL database for my next project?" + answer: "Pick SQL if your data is highly relational, your structure is stable, and you need ACID guarantees for things like payments or analytics. Pick a document database if you need schema flexibility, hierarchical data, horizontal scale, or you are iterating quickly alongside AI agents that emit JSON natively." + - question: "Why are document databases a better fit for AI-driven workflows?" + answer: "LLMs emit JSON natively, and document databases store JSON natively, so there is no translation layer between what an agent generates and what gets persisted. Schema flexibility also lets agents add fields without forcing a migration, which keeps the build loop fast during early experimentation." + - question: "What is the difference between SQL and a document database?" + answer: "SQL databases store data in tables with strict rows and columns enforced by a schema, with strong support for JOINs and ACID transactions. Document databases store data as JSON documents with flexible structure, designed for horizontal scaling and rapid iteration. The trade-off is rigor versus flexibility." + - question: "What kind of database does Appwrite use?" + answer: "[Appwrite Databases](/docs/products/databases) is a document database that stores data in collections of JSON-like documents. It pairs the flexibility of the document model with built-in permissions, queries, and realtime updates, which fits the rapid iteration style of modern app and AI development." + - question: "Can document databases handle relationships between data?" + answer: "Yes. Document databases support references between documents, and Appwrite Databases adds first-class relationship attributes so you can model one-to-many and many-to-many links. For very deep multi-table JOINs across normalized data, a relational database is still a stronger fit, but most apps do not need that." + - question: "Are document databases suitable for production-scale applications?" + answer: "Yes, document databases like Appwrite Databases and MongoDB are designed for high-volume workloads and horizontal scaling. They power content platforms, social apps, IoT data, and many AI products at scale. The question is usually about query shape and consistency needs, not raw scale." --- If you're building an application in 2026, the choice of database is one of the most critical technical decisions you'll make. The debate typically centers on two primary options: **SQL (Relational)** and **NoSQL (Document)**. diff --git a/src/routes/blog/post/dont-blame-the-readers-write-the-docs-they-need/+page.markdoc b/src/routes/blog/post/dont-blame-the-readers-write-the-docs-they-need/+page.markdoc index bc4d91aad22..199b3718789 100644 --- a/src/routes/blog/post/dont-blame-the-readers-write-the-docs-they-need/+page.markdoc +++ b/src/routes/blog/post/dont-blame-the-readers-write-the-docs-they-need/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/dont-blame-the-readers-write-the-docs-they-need/cover.avif timeToRead: 10 author: vincent-ge category: design, brand +faqs: + - question: "Why did Appwrite redesign its documentation?" + answer: "The old docs were minimal and worked well for early open-source adopters, but newer learners needed more guidance and Appwrite's surface area kept growing. The team rebuilt the docs around the full developer journey: discover, evaluate, learn, build, scale, while keeping the original quick-start brevity for experienced developers." + - question: "What feedback drove the documentation changes?" + answer: "Input came from the State of Appwrite survey, the [Discord community](/discord), GitHub issues on the docs repo, Office Hours, developer interviews, and UX research sessions. The team also took notes at events like DevRelCon and Refactor DX to evaluate the design against current industry practice." + - question: "How are the new Appwrite docs structured?" + answer: "Each product section starts with a one-page quick start for veterans, followed by deeper conceptual docs, step-by-step tutorials, and reference material further down the navigation. The structure mirrors a typical developer journey from first read to scaling in production." + - question: "What tools power the Appwrite docs?" + answer: "The docs are written in an extended Markdown flavor powered by Markdoc and SvelteKit (via [svelte-markdoc-preprocess](https://github.com/TorstenDittmann/svelte-markdoc-preprocess)). Custom syntax like the multi-code selector is implemented as Markdoc tags, which keeps contributions easy while supporting rich features." + - question: "How can the community contribute to Appwrite's documentation?" + answer: "Docs are open source on the [Appwrite docs repo](https://github.com/appwrite/docs), written in extended Markdown. You can open issues, suggest changes, or submit pull requests. Markdown lowers the contribution bar so domain experts and product users can edit content without learning a custom DSL." + - question: "What makes good developer documentation?" + answer: "Good docs cover the entire developer journey rather than just API reference: helping readers discover, evaluate, learn, build, and scale with the product. They balance brevity for experts with step-by-step tutorials for newcomers, support fast search, and treat the docs themselves as a product that responds to feedback." --- You’ve seen this exact conversation in support threads if you're active in any developer community. diff --git a/src/routes/blog/post/email-otp-auth-sveltekit/+page.markdoc b/src/routes/blog/post/email-otp-auth-sveltekit/+page.markdoc index ffa9be2bf2e..bfc6b597847 100644 --- a/src/routes/blog/post/email-otp-auth-sveltekit/+page.markdoc +++ b/src/routes/blog/post/email-otp-auth-sveltekit/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/email-otp-auth-sveltekit/cover.avif timeToRead: 6 author: aditya-oberai category: authentication +faqs: + - question: "What is email OTP authentication?" + answer: "Email OTP authentication lets users sign in with a 6-digit one-time code sent to their email instead of a password. It is a passwordless flow that pairs well with magic URLs and other modern auth methods, and it is part of [Appwrite Auth](/docs/products/auth)." + - question: "How is email OTP different from magic URL login?" + answer: "Magic URL sends a clickable link to the inbox, while email OTP sends a numeric code the user enters in the app. OTPs are better when users may not be signed into their email on the same device, when you want to avoid redirect flows, or when deep linking on mobile is awkward. The trade-off is more typing and a shorter expiry window." + - question: "How do I implement email OTP in a SvelteKit app with Appwrite?" + answer: "Use the Appwrite Web SDK in your SvelteKit app, call `createEmailToken` with a user ID and email to send the code, then call `createSession` with the user ID and the entered code to log the user in. The full flow uses two screens: one for the email and one for the OTP." + - question: "Do I need Appwrite Cloud or can I self-host for email OTP?" + answer: "Both work. On [Appwrite Cloud](https://cloud.appwrite.io) the feature is ready out of the box. On a self-hosted instance, configure SMTP credentials in your `.env` file so Appwrite can actually deliver the code, then restart with `docker compose up -d`." + - question: "Is email OTP secure enough for production apps?" + answer: "Email OTP is more secure than passwords for most users because it removes password reuse and weak passwords from the equation. The trade-off is dependency on email delivery and inbox security. For higher-assurance use cases, pair email OTP with multi-factor authentication using TOTP." + - question: "What other passwordless options does Appwrite support?" + answer: "Appwrite Auth supports email OTP, phone OTP via SMS, magic URLs, OAuth providers, passkeys, and anonymous sessions. You can combine them with MFA factors like TOTP or email codes for a layered auth strategy. See the [Appwrite Auth docs](/docs/products/auth) for the full list." --- To discover a balance between security and user convenience, one growing trend we have seen recently is the implementation of passwordless authentication. Today, both small and large companies are transitioning to using passwordless authentication methods over traditional password-based ones, such as Expensify (whose transition was also covered in a Forbes [article](https://www.forbes.com/sites/quickerbettertech/2023/05/29/on-technology-expensify-forces-passwordless-on-its-users-and-good-for-them/?sh=397a7b017cac) in 2023). Appwrite has always maintained support for both types of authentication, featuring phone-based OTPs (one-time passwords) and magic URLs in our list of authentication methods. diff --git a/src/routes/blog/post/encrypted-attributes-for-sensitive-fields/+page.markdoc b/src/routes/blog/post/encrypted-attributes-for-sensitive-fields/+page.markdoc index 57c2dde7247..97a1ec1c355 100644 --- a/src/routes/blog/post/encrypted-attributes-for-sensitive-fields/+page.markdoc +++ b/src/routes/blog/post/encrypted-attributes-for-sensitive-fields/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/encrypted-attributes-for-sensitive-fields/cover.avif timeToRead: 5 author: ebenezer-don category: tutorial +faqs: + - question: "What are encrypted string attributes in Appwrite?" + answer: "Encrypted string attributes are a field type in [Appwrite Databases](/docs/products/databases) that store values encrypted at rest using AES-128 in Galois/Counter Mode (GCM). The data is decrypted transparently when read by authorized clients, so application code does not need any special encryption logic." + - question: "How do I create an encrypted attribute in Appwrite?" + answer: "In the Appwrite Console, open a collection, go to the Attributes tab, click Create attribute, pick String, and enable the Encrypted checkbox. Encrypted string attributes must have a minimum size of 150 characters. The feature is available on Pro plans and higher." + - question: "Can I query or filter on encrypted attributes?" + answer: "No. Encrypted attributes cannot be filtered, searched, or sorted because Appwrite never sees the plaintext index. If you later need to query a field, you have to delete and recreate it as unencrypted. A common pattern is to store a queryable label alongside a separate encrypted field for sensitive content." + - question: "Is this end-to-end encryption?" + answer: "No. Encrypted attributes protect data at rest from infrastructure-level access, but project owners and team members with database access can still read the plaintext through the Console. For zero-knowledge use cases like secure messaging, you still need client-side encryption where the server never sees the unencrypted data." + - question: "When should I use encrypted attributes?" + answer: "Use them for sensitive values that you store but rarely query: government IDs, full legal names, birth dates, admin notes, internal moderation logs, IP addresses, complaint text, and free-form user input. Pair them with role-based access controls to limit who can read the plaintext." + - question: "Does encryption alone make my app GDPR or HIPAA compliant?" + answer: "No. Encryption at rest is often a foundational requirement under GDPR, HIPAA, and similar frameworks, but compliance also depends on access controls, audit logging, data retention policies, and breach procedures. Encrypted attributes make it easier to meet the storage requirement without restructuring your app." --- Modern applications often rely on personal, identifying, or internal data to function. Whether it is a user's name, a support message, or a private note added by an administrator, certain fields carry weight beyond their technical type. diff --git a/src/routes/blog/post/enhancing-type-safety/+page.markdoc b/src/routes/blog/post/enhancing-type-safety/+page.markdoc index 28a49092503..fa42cce58ac 100644 --- a/src/routes/blog/post/enhancing-type-safety/+page.markdoc +++ b/src/routes/blog/post/enhancing-type-safety/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 7 author: aditya-oberai category: engineering featured: false +faqs: + - question: "What is an enum in programming?" + answer: "An enum, short for enumeration, is a data type that lets a variable hold one of a predefined set of named constants. Instead of using raw strings or numbers like `\"active\"` or `1`, you reference a named value like `Status.ACTIVE`. The grouping makes intent clear and the constraint catches bad values at compile time." + - question: "How do enums improve type safety?" + answer: "Enums limit a variable or parameter to a fixed set of valid values, so the compiler or runtime can reject anything outside that set. That eliminates a large class of bugs caused by typos, magic numbers, or mismatched string literals, and makes refactors safer because adding or removing values is a centralized change." + - question: "When should I use enums versus string constants?" + answer: "Use enums when you have a small, stable set of related values like statuses, roles, or modes. Use plain strings when values are user-generated, frequently changing, or unbounded. Picking the wrong tool either creates noise (an enum with hundreds of values) or pushes runtime errors deeper into the system (untyped strings)." + - question: "Do all programming languages support enums?" + answer: "Most modern languages do, including TypeScript, Java, Swift, Kotlin, C#, Rust, and Dart. Implementation details vary. Some are backed by integers, others by strings, and some support associated values or methods. JavaScript itself does not have native enums, which is one reason TypeScript adds them." + - question: "How does Appwrite use enums in its SDKs?" + answer: "Appwrite SDKs use enums in place of magic literals, for example `OAuthProvider.Google` instead of the string `\"google\"`. This makes calls to APIs like [Appwrite Auth](/docs/products/auth) safer because invalid values fail to compile rather than at runtime, and editors can autocomplete the available options." + - question: "What are the common pitfalls when using enums?" + answer: "Overusing them for dynamic values (anything that should live in a database), polluting the global namespace, breaking backward compatibility by renaming or removing values, and forgetting to keep enums in sync with external systems like APIs or columns in a database. Treat enums as part of your API contract once they ship." --- We, as software developers, constantly tackle the challenge of writing robust and maintainable code. As we make ensuring type safety a goal in this process, enums stand out as a significant contributor. This blog delves into enums, exploring their fundamentals, practical advantages, and their impact on code maintenance and readability. diff --git a/src/routes/blog/post/ensuring-security-amidst-xz-concern/+page.markdoc b/src/routes/blog/post/ensuring-security-amidst-xz-concern/+page.markdoc index 58610f918f7..b6671ec6e11 100644 --- a/src/routes/blog/post/ensuring-security-amidst-xz-concern/+page.markdoc +++ b/src/routes/blog/post/ensuring-security-amidst-xz-concern/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 7 author: jake-barnby category: security featured: false +faqs: + - question: "What was the XZ Utils backdoor?" + answer: "In early 2024, a malicious backdoor was found in XZ Utils versions 5.6.0 and 5.6.1, a compression tool shipped with many Linux distributions. The backdoor could be used to compromise encrypted SSH sessions on systems running affected beta and test versions of distros like Red Hat and Debian, putting any server using SSH at risk." + - question: "Is Appwrite affected by the XZ Utils backdoor?" + answer: "No, Appwrite's services are not affected. The vulnerable versions of XZ Utils shipped only in beta and test versions of certain Linux distributions, and Appwrite does not use those. Appwrite Cloud infrastructure has also been audited and locked down to confirm there is no exposure." + - question: "What should I do if I self-host Appwrite on a Linux server?" + answer: "Check whether your operating system has XZ Utils versions 5.6.0 or 5.6.1 installed. If so, downgrade to a safe version or remove the tool. Then audit your system logs for unusual activity, tighten firewall rules to limit inbound and outbound traffic, and apply security patches from your OS vendor as soon as they ship." + - question: "Do Appwrite Cloud users need to do anything?" + answer: "No actions are required from Appwrite Cloud users. The Appwrite team verified that no containers in the cloud environment carried the affected XZ Utils versions, and SSH access to the infrastructure was further restricted to reduce attack surface." + - question: "How can I keep my self-hosted Appwrite instance secure in general?" + answer: "Keep your host OS patched, apply Appwrite updates promptly, restrict SSH access with key-based auth and firewalls, rotate API keys, enable monitoring on your servers, and audit who has access to the project Console. The same hardening practices that protect any production server apply to a self-hosted Appwrite instance." + - question: "Where can I report security concerns to Appwrite?" + answer: "Reach out via the [contact page](/contact-us) or the [Appwrite Discord](/discord) for security questions. For responsible disclosure of suspected vulnerabilities, follow the security policy published in the Appwrite GitHub repository so the team can triage and respond appropriately." --- In the light of recent unsettling revelations regarding a backdoor discovered in the widely-used XZ Utils, diff --git a/src/routes/blog/post/enums-api-design/+page.markdoc b/src/routes/blog/post/enums-api-design/+page.markdoc index e4e7ca7f979..ca0eeddc32d 100644 --- a/src/routes/blog/post/enums-api-design/+page.markdoc +++ b/src/routes/blog/post/enums-api-design/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 6 author: aditya-oberai category: engineering featured: false +faqs: + - question: "Why use enums in API design?" + answer: "Enums constrain a field to a known set of values, which makes APIs easier to consume, harder to misuse, and self-documenting. They also reduce runtime errors because invalid values are caught at the SDK or schema layer rather than failing deep inside business logic." + - question: "Should I use string enums or numeric enums in REST APIs?" + answer: "Prefer string enums in REST APIs. They show up readable in JSON, are easier to log and debug, and survive API versioning better than numbers (which lose meaning the moment the mapping changes). Numeric enums make more sense in tight binary protocols where every byte counts." + - question: "How do I handle backward compatibility when changing an enum?" + answer: "Treat enums as part of your API contract. Add new values freely, but never rename or remove existing ones in a published API. If a value really needs to go, deprecate it first and use API versioning to clean up later. Clients written against the old value should keep working without changes." + - question: "What are common pitfalls of using enums in APIs?" + answer: "Overusing them for dynamic data, breaking compatibility by renaming values, picking inconsistent naming conventions, missing them in documentation, and failing to surface clear errors when invalid values are sent. Each one creates friction for the developers consuming your API." + - question: "How does Appwrite use enums in its SDKs?" + answer: "Appwrite SDKs replaced magic literals with enums, so things like OAuth providers are referenced as `OAuthProvider.Google` instead of the raw string `\"google\"`. This gives editors autocomplete, catches typos at compile time, and keeps SDK code stable across [Appwrite Auth](/docs/products/auth) updates." + - question: "Are enums supported by API documentation tools like OpenAPI?" + answer: "Yes. OpenAPI, Swagger, and most schema-driven documentation tools support enums natively. Listing acceptable values in the schema means consumers can generate clients with strong typing and see all valid options in the rendered docs without extra work." --- Any developer who has ever had to design APIs will validate that clear and error-free communication is paramount to ensure the APIs are usable. One key tool that assists this process is enums. This article delves into the purpose and significance of enums in API design, illustrating how they enable effective and robust communication between different software. diff --git a/src/routes/blog/post/everyone-can-do-devrel-but-should-they/+page.markdoc b/src/routes/blog/post/everyone-can-do-devrel-but-should-they/+page.markdoc index dfaf9a1c307..2615b046f2e 100644 --- a/src/routes/blog/post/everyone-can-do-devrel-but-should-they/+page.markdoc +++ b/src/routes/blog/post/everyone-can-do-devrel-but-should-they/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/everyone-can-do-devrel-but-should-they/cover.avif timeToRead: 5 author: aditya-oberai category: devrel +faqs: + - question: "What does Developer Relations (DevRel) actually do?" + answer: "DevRel is the bridge between a product and the developers who build on it. The job spans technical work like writing code and demos, content like blogs and videos, and community work like running events, supporting users, and feeding insights back to product and engineering teams." + - question: "What skills do you need for a DevRel role?" + answer: "DevRel sits at the intersection of code, content, and community. You do not need to be a master of all three on day one, but you need real experience in each. Hands-on engineering grounds your empathy for users, content skills let you communicate at scale, and community work teaches you how to plan, listen, and measure impact." + - question: "Is DevRel a good entry point into tech?" + answer: "Not really. It is often pitched as an easier path than software engineering, but the bar for DevRel is high because you need to write code well enough to teach it, ship content people actually want to read, and contribute to business outcomes. Most successful DevRel folks come in with a few years of engineering, content, or community experience already." + - question: "How is DevRel different from marketing or developer marketing?" + answer: "DevRel is closer to the product than marketing usually is. DevRel teams ship technical content, contribute to docs and SDKs, run office hours, support developers in communities, and influence the product roadmap based on what they hear. Marketing focuses on positioning, demand, and brand. The work overlaps, but the skill mix and incentives differ." + - question: "How can I tell if DevRel is the right career for me?" + answer: "Spend time in each of the three areas (code, content, community) before committing. Contribute to an open-source project, run a community event, write tutorials. If you enjoy all three and can point to impact in each, you have the foundation. If you only love one, pursue that single craft instead. It is usually a more sustainable path." + - question: "What does a DevRel role at Appwrite look like?" + answer: "At [Appwrite](/), DevRel work spans developer advocacy, content production, community management, product feedback, and contributions back to the product. The team builds with Appwrite, ships sample apps, writes for the blog and docs, and runs initiatives like office hours and the [Discord community](/discord)." --- One thing that I can say, having spent five years in communities and over two years as a Developer Advocate at Appwrite, is that Developer Relations (or DevRel) isn’t just a job but a philosophy. DevRel is something we can do by helping developers in our communities, sharing knowledge through our content, or writing code and building projects. That being said, should everyone be rushing towards a job in Developer Relations? Recently, I have observed a bubble developing around this space. I want to take this blog as an opportunity to share my opinion on whether everyone should chase DevRel as a career. diff --git a/src/routes/blog/post/everything-new-in-nextjs16/+page.markdoc b/src/routes/blog/post/everything-new-in-nextjs16/+page.markdoc index 6cab33d6280..e09fa2dc2e5 100644 --- a/src/routes/blog/post/everything-new-in-nextjs16/+page.markdoc +++ b/src/routes/blog/post/everything-new-in-nextjs16/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/everything-new-in-nextjs16/cover.avif timeToRead: 5 author: matej-baco category: tutorial +faqs: + - question: "What is new in Next.js 16?" + answer: "Next.js 16 ships Cache Components for explicit caching, Turbopack as the default bundler, a renamed `proxy.ts` (previously `middleware.ts`), better build and dev logs, stable React Compiler support, smarter routing and prefetching, refined caching APIs, React 19.2, and the new Next.js DevTools MCP. The release focuses on fundamentals over big rewrites." + - question: "Does Appwrite Sites support Next.js 16?" + answer: "Yes, Next.js 16 is fully supported on [Appwrite Sites](/docs/products/sites) from day one. You can build, test, and host Next.js 16 projects with SSR, RSC, and the new Cache Components without extra configuration." + - question: "What are Cache Components in Next.js 16?" + answer: "Cache Components introduce an explicit caching model that replaces the framework's implicit guesses about what to cache. You decide which parts of your render tree are cached and when to revalidate them. Combined with Partial Pre-rendering, this makes static and dynamic boundaries predictable inside the same page." + - question: "Why is middleware now called proxy in Next.js 16?" + answer: "Middleware in Next.js was never really middleware in the Express sense. It runs at the edge and blocks the initial response, so heavy network calls inside it can stall page loads. The rename to `proxy.ts` clarifies the intent: lightweight request handling like redirects, header rewrites, and auth cookie checks, not arbitrary business logic." + - question: "Should I switch to Turbopack now?" + answer: "Yes, especially for new projects. Turbopack is now the default bundler in Next.js 16, with 2 to 5 times faster builds and up to 10 times faster Fast Refresh. Filesystem caching is still in beta but already cuts startup times significantly on large projects. For existing apps, test the migration before flipping the switch in production." + - question: "What are the new system requirements for Next.js 16?" + answer: "Next.js 16 requires Node.js 20.9 or higher, TypeScript 5.1 or higher, and modern browsers. AMP support and the `next lint` command are removed, so projects depending on those need to migrate before upgrading." --- Next.js 16 is here, and it brings one of the most polished releases the framework has seen in a while. Instead of chasing big rewrites, this version focuses on the fundamentals, faster builds, predictable caching, smarter routing, and better developer visibility. diff --git a/src/routes/blog/post/everything-new-with-appwrite-1.5/+page.markdoc b/src/routes/blog/post/everything-new-with-appwrite-1.5/+page.markdoc index d0f3db291d0..a56f10c8e14 100644 --- a/src/routes/blog/post/everything-new-with-appwrite-1.5/+page.markdoc +++ b/src/routes/blog/post/everything-new-with-appwrite-1.5/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 6 author: dennis-ivy category: product featured: false +faqs: + - question: "What is new in Appwrite 1.5?" + answer: "Appwrite 1.5 introduced [Appwrite Messaging](/docs/products/messaging) for SMS, email, and push notifications, improved server-side rendering (SSR) authentication patterns, two-factor authentication (2FA) with TOTP and OTP factors, new database query operators (`contains` and `or`), Enum SDK support, and refreshed function runtimes." + - question: "What does the new SSR auth support do?" + answer: "Before 1.5, Appwrite was optimized for client-side rendering. With 1.5, you can generate and access sessions server-side, set session cookies from your server, and authorize future requests using those cookies. This unlocks patterns for Next.js, SvelteKit, Nuxt, and similar frameworks where most data fetching happens on the server." + - question: "How do I enable two-factor authentication in Appwrite 1.5?" + answer: "Use [Appwrite Auth](/docs/products/auth) to create a multi-factor challenge with `createMFAChallenge`, choosing a factor like email, phone, or TOTP. Submit the user's one-time code to `updateMFAChallenge` to complete the challenge. The flow lets you layer 2FA on top of any existing login method." + - question: "What are the contains and or query operators?" + answer: "The `contains` operator does partial text matches on string attributes or element matches inside array attributes. The `or` operator lets you combine queries with logical OR, instead of only AND. Together they unlock searches like \"name contains ivy OR age greater than 30\" in a single call to [Appwrite Databases](/docs/products/databases)." + - question: "Does Appwrite Messaging support push notifications?" + answer: "Yes. [Appwrite Messaging](/docs/products/messaging) supports SMS, email, and push notifications through a unified API. Providers include Twilio, Vonage, SendGrid, Mailgun, APNs, and Firebase Cloud Messaging, so you can configure delivery channels without writing separate integrations for each." + - question: "What is Init at Appwrite?" + answer: "Init is Appwrite's release event where the team unveils new products and features over several days. Appwrite 1.5 was announced during one such Init, with each day dedicated to a different launch: Messaging, SSR, 2FA, and the new database operators." --- Appwrite just finished its release announcements for version 1.5 with a week of celebration called Init_, so here's the TLDR on all the announcements we made last week. diff --git a/src/routes/blog/post/february-and-march-product-update-realtime-queries-appwrite-skills-and-new-database-features/+page.markdoc b/src/routes/blog/post/february-and-march-product-update-realtime-queries-appwrite-skills-and-new-database-features/+page.markdoc index 70d4e9a2ca6..625d51e82a3 100644 --- a/src/routes/blog/post/february-and-march-product-update-realtime-queries-appwrite-skills-and-new-database-features/+page.markdoc +++ b/src/routes/blog/post/february-and-march-product-update-realtime-queries-appwrite-skills-and-new-database-features/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aishwari category: product featured: false +faqs: + - question: "What is new in Appwrite for February and March 2026?" + answer: "Major updates across Databases, Realtime, and AI tooling: relationship queries with dot notation, new string column types (`varchar`, `text`, `mediumtext`, `longtext`), Realtime channel helpers, Realtime queries with server-side filtering, Appwrite Skills for AI coding agents, and Appwrite Arena, an open-source benchmark for AI model performance on Appwrite." + - question: "How do relationship queries work in Appwrite Databases?" + answer: "[Appwrite Databases](/docs/products/databases) now lets you filter directly on relationship columns using dot notation, instead of fetching documents and filtering client-side. All comparison operators work across the relationship, and the underlying engine was rewritten to be 12 to 18 times faster on relationship-heavy queries. It is available on both Cloud and self-hosted." + - question: "What are the new string column types in Appwrite Databases?" + answer: "Appwrite Databases supports four string column types: `varchar`, `text`, `mediumtext`, and `longtext`. Each comes with different storage characteristics, so you can match the column type to actual data size. Existing string columns continue to work without changes." + - question: "What are Realtime queries in Appwrite?" + answer: "Realtime queries let you attach query filters when subscribing to a channel, so the server only sends events that match your conditions. You can combine filters with `Query.and()` and `Query.or()`, and subscribe to the same channel multiple times with different filters. It works across Web, Flutter, React Native, Apple, and Android SDKs." + - question: "What are Appwrite Skills?" + answer: "Appwrite Skills are open-source Markdown files that teach AI coding agents like Claude Code, Cursor, and Windsurf how to use Appwrite's SDKs and CLI accurately. Instead of pasting docs into every prompt, you point the agent at the Skills repository and it generates code that actually compiles." + - question: "What is Appwrite Arena?" + answer: "Appwrite Arena is an open-source benchmark that scores how well AI models understand Appwrite's products, SDKs, and APIs across 191 questions in 9 service categories. All results are transparent and open source. Recent runs showed GPT-4.1 leading with Skills enabled, Claude Opus 4.6 leading without, and DeepSeek and MiniMax offering strong cost-to-intelligence ratios." --- Welcome back to the product update. This time, we have not one, but two months to update you on. February and March were packed, we shipped improvements across Databases, Realtime, the CLI, the Console, and Sites, and introduced new tools built for the AI coding era. diff --git a/src/routes/blog/post/fixing-oauth2-issues-in-appwrite-cloud/+page.markdoc b/src/routes/blog/post/fixing-oauth2-issues-in-appwrite-cloud/+page.markdoc index 692959185aa..cee793b3d95 100644 --- a/src/routes/blog/post/fixing-oauth2-issues-in-appwrite-cloud/+page.markdoc +++ b/src/routes/blog/post/fixing-oauth2-issues-in-appwrite-cloud/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/fixing-oauth2-issues-in-appwrite-cloud/cover.avif timeToRead: 5 author: ebenezer-don category: tutorial +faqs: + - question: "Why does my OAuth2 login in Appwrite work in some browsers but not others?" + answer: "It is a third-party cookie issue. When your app domain differs from Appwrite's domain, the browser treats Appwrite's session cookie as third-party. Browsers like Brave and Safari block these by default, and Chrome is moving in the same direction. The OAuth redirect succeeds, but the session cookie never gets stored." + - question: "How do I fix the OAuth2 session issue with Appwrite?" + answer: "Switch from `createOAuth2Session` to `createOAuth2Token`. The token-based flow returns a `userId` and `secret` after the provider consent screen, and you exchange them for a session with `createSession`. The browser never has to accept a cross-origin cookie, so the flow works everywhere." + - question: "What is the difference between createOAuth2Session and createOAuth2Token?" + answer: "`createOAuth2Session` relies on Appwrite setting a session cookie on its own domain, which fails when third-party cookies are blocked. `createOAuth2Token` returns a one-time `userId` and `secret` that your app exchanges for a session on your own domain. The token approach is more compatible with modern browsers and follows current OAuth2 best practices." + - question: "Can I use a custom domain instead of switching auth flows?" + answer: "Yes. If you configure a custom domain for [Appwrite Auth](/docs/products/auth) so the session cookie and your app share the same root domain, the browser no longer treats it as third-party. The token-based flow is usually simpler, but custom domains are a valid option, especially if you want a unified domain across your stack." + - question: "Do I need to change my OAuth provider settings?" + answer: "Update the callback URL in your provider (Google, GitHub, etc.) to match the new redirect target. Beyond that, the OAuth provider config does not change. The shift from session-based to token-based auth happens entirely between your app and Appwrite." + - question: "Is the token-based OAuth flow secure?" + answer: "Yes. It follows OAuth2 best practices: the secret is single-use, short-lived, and exchanged for a session immediately. Because the flow does not rely on third-party cookies, it actually has fewer cross-site security pitfalls than the older session-based flow." --- # Fixing OAuth2 authentication issues in Appwrite diff --git a/src/routes/blog/post/flutter-starter-sites/+page.markdoc b/src/routes/blog/post/flutter-starter-sites/+page.markdoc index 28fa024c09b..e9d1e999999 100644 --- a/src/routes/blog/post/flutter-starter-sites/+page.markdoc +++ b/src/routes/blog/post/flutter-starter-sites/+page.markdoc @@ -9,6 +9,19 @@ author: aditya-oberai category: tutorial featured: false callToAction: true +faqs: + - question: "Can I host Flutter Web on Appwrite Sites?" + answer: "Yes, [Appwrite Sites](/docs/products/sites) supports Flutter Web natively, no custom configuration needed. The Flutter framework is detected automatically when you connect a Flutter repo, and Sites handles building and serving the compiled web bundle." + - question: "What is the Flutter starter template for Appwrite Sites?" + answer: "It is a ready-to-deploy Flutter Web project that ships with the Appwrite Dart SDK integrated and pre-configured build settings for Static rendering on Sites. Use it as a starting point and replace the demo UI with your own pages, routes, and Appwrite calls." + - question: "How do I deploy the Flutter starter template?" + answer: "In the Appwrite Console, go to Sites, click Create site, pick Clone a template, search for `Flutter starter`, and select it. You can optionally connect a GitHub repository, then review the environment variables, choose a domain, and click Deploy. The deployment logs stream live as the site builds." + - question: "Can I deploy Flutter sites from the Appwrite CLI?" + answer: "Yes. Run `appwrite init sites`, pick Flutter as the framework, and configure the resource specification. Then run `appwrite push sites` to deploy. The CLI route is useful for automation or when you do not want to leave the terminal. See the [CLI docs](/docs/products/sites/deploy-manually#cli) for full details." + - question: "What other frameworks does Appwrite Sites support?" + answer: "Appwrite Sites supports Next.js, React, Vue, Nuxt, Angular, SvelteKit, TanStack Start, Astro, Flutter Web, and more, with both static and SSR rendering strategies. The full quick-start list lives in the [Sites docs](/docs/products/sites/quick-start)." + - question: "Do I need an Appwrite Cloud account to use Sites?" + answer: "You can use Sites on [Appwrite Cloud](https://cloud.appwrite.io) for the easiest setup, or self-host Appwrite 1.7 or later and run Sites on your own infrastructure. Both routes give you the same templates, CLI tooling, and deployment workflow." --- Most web hosting platforms don't support Flutter Web out of the box, often forcing developers to jump through hoops just to get their apps online. This lack of native support can make deploying Flutter Web projects unnecessarily complex and time-consuming. diff --git a/src/routes/blog/post/flutter-vs-react-native/+page.markdoc b/src/routes/blog/post/flutter-vs-react-native/+page.markdoc index f7000321ec9..adf13fe5ebc 100644 --- a/src/routes/blog/post/flutter-vs-react-native/+page.markdoc +++ b/src/routes/blog/post/flutter-vs-react-native/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/flutter-vs-react-native/cover.avif timeToRead: 8 author: ebenezer-don category: product +faqs: + - question: "Is Flutter or React Native better for performance?" + answer: "Flutter typically has the edge because it compiles to native ARM code and renders through its own Skia engine, avoiding the JavaScript bridge that React Native traditionally relied on. React Native's new architecture with JSI and Fabric closes much of the gap, but Flutter still wins on consistent frame rates for animation-heavy UIs. For most CRUD apps, the difference is negligible." + - question: "Which framework has a larger developer ecosystem?" + answer: "React Native has a larger ecosystem because it builds on JavaScript and React, which are already dominant in web development. Flutter's ecosystem is smaller but growing fast, with strong first-party support from Google and a curated package registry at pub.dev." + - question: "Should I pick Flutter or React Native if I already know JavaScript?" + answer: "React Native is the obvious choice if your team already writes JavaScript or React, since you can reuse most of your existing skills and tooling. Flutter requires learning Dart, which is straightforward but adds onboarding time. Pick Flutter only if performance or UI consistency outweighs the language switching cost." + - question: "Can I use Appwrite as a backend for both Flutter and React Native?" + answer: "Yes. Appwrite provides official SDKs for both Flutter and React Native, so you can use the same [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) APIs regardless of which framework you choose. This is useful if you want to prototype in one framework and switch later, or run both in parallel." + - question: "Do Flutter and React Native support the same native platform features?" + answer: "Both frameworks support core platform features like camera, geolocation, push notifications, and Bluetooth through plugins. React Native sometimes has earlier community packages for niche APIs, while Flutter's plugin ecosystem is more centralized and consistent in quality. For deep native integration, both let you write platform channels or bridge code." + - question: "Which framework is easier to maintain over time?" + answer: "Flutter tends to be more predictable to maintain because the UI and behavior are controlled by the framework rather than the underlying platform. React Native apps can break across OS updates if you rely on third party native modules. Both require regular dependency updates, so neither is maintenance free." --- Choosing between **Flutter** and **React Native** for mobile app development is more than just comparing features. Each framework comes with its own strengths, limitations, and unique use cases, making the decision impactful in several ways. This choice affects: diff --git a/src/routes/blog/post/free-angular-hosting/+page.markdoc b/src/routes/blog/post/free-angular-hosting/+page.markdoc index dbaed46b017..47a28c1444a 100644 --- a/src/routes/blog/post/free-angular-hosting/+page.markdoc +++ b/src/routes/blog/post/free-angular-hosting/+page.markdoc @@ -8,7 +8,19 @@ timeToRead: 6 author: eldad-fux category: tutorial unlisted: true - +faqs: + - question: "Can I host an Angular app for free on Appwrite Sites?" + answer: "Yes. [Appwrite Sites](/docs/products/sites) offers a free tier that supports Angular deployments without upfront cost. You get a global CDN, automatic SSL, and DDoS protection on the free plan, which is enough for most personal projects and early stage apps." + - question: "Does Appwrite Sites support Angular SSR?" + answer: "Yes. Appwrite Sites supports both static Angular builds and server-side rendering through Angular Universal, with SSR handled via [Appwrite Functions](/docs/products/functions). This means you can ship the same project as a SPA, prerendered static site, or fully dynamic SSR app." + - question: "How do I deploy an Angular app to Appwrite Sites?" + answer: "You can deploy through Git integration, the Appwrite CLI, or by uploading your build folder directly in the console. The most common workflow is connecting your repo so every push to your main branch triggers a new deployment automatically. See the [deploy from Git docs](/docs/products/sites/deploy-from-git) for setup." + - question: "Can I use a custom domain with Appwrite Sites?" + answer: "Yes. Appwrite Sites supports custom domains with automatic SSL certificates, so you only need to point your DNS at the platform. There is no extra configuration to enable HTTPS." + - question: "How does Appwrite Sites compare to Vercel or Netlify for Angular?" + answer: "All three offer free tiers, global CDNs, and Git based deploys for Angular. Appwrite Sites is open source and bundles backend services like Auth, Databases, and Functions in the same project, which removes the need to wire up a separate backend provider. If you want a single platform for hosting and backend, Appwrite is the simpler choice." + - question: "Do I need a separate backend if I use Appwrite Sites for Angular?" + answer: "No. Appwrite includes [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) alongside Sites, so you can build a full stack Angular app in one platform. You can also keep using your existing backend if you prefer, since Appwrite Sites is framework agnostic." --- Angular remains a top choice for building scalable and dynamic web applications, offering a robust framework with powerful tooling for both client-side and server-side rendering. While deploying Angular applications can be straightforward, finding a hosting solution that combines affordability, security, and developer-centric features can be challenging. diff --git a/src/routes/blog/post/free-astro-hosting/+page.markdoc b/src/routes/blog/post/free-astro-hosting/+page.markdoc index 2e83531152a..37c0d8fd5f1 100644 --- a/src/routes/blog/post/free-astro-hosting/+page.markdoc +++ b/src/routes/blog/post/free-astro-hosting/+page.markdoc @@ -8,7 +8,19 @@ timeToRead: 6 author: eldad-fux category: tutorial unlisted: true - +faqs: + - question: "Can I host an Astro site for free on Appwrite Sites?" + answer: "Yes. [Appwrite Sites](/docs/products/sites) has a free tier that covers Astro deployments including a global CDN, automatic SSL, and DDoS protection. This is enough for most blogs, marketing sites, and documentation projects." + - question: "Does Appwrite Sites support Astro's hybrid rendering?" + answer: "Yes. Appwrite Sites supports both static Astro builds and hybrid rendering, where dynamic routes can be handled by [Appwrite Functions](/docs/products/functions). You can use island architecture for partial hydration without changing how you deploy." + - question: "How do I deploy an Astro project to Appwrite Sites?" + answer: "Connect your Git repository for automatic deploys on every push, use `appwrite deploy site` from the CLI, or upload your `dist` folder manually in the console. Git based deploys are the recommended workflow for most teams. See [deploy from Git](/docs/products/sites/deploy-from-git) for details." + - question: "Can I use Appwrite as a backend for an Astro app?" + answer: "Yes. Astro pages can call [Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), and [Storage](/docs/products/storage) directly through the web SDK, or you can wrap them in API routes. This is a common pattern for adding logins, content management, or file uploads to an Astro site." + - question: "Does Appwrite Sites support custom domains for Astro?" + answer: "Yes. You can attach your own domain to any Appwrite Site, and SSL certificates are provisioned automatically. There is no manual certificate management required." + - question: "How does Appwrite Sites compare to Netlify or Vercel for Astro?" + answer: "Netlify, Vercel, and Appwrite Sites all offer Git based deploys, free tiers, and CDN backed hosting for Astro. Appwrite Sites is open source and includes backend products in the same platform, so you do not need to integrate a separate auth or database provider. Pick Appwrite if you want hosting and backend under one roof." --- Astro has emerged as a powerful framework for building ultra-fast, content-driven websites by leveraging its hybrid rendering approach and optimized build process. While deploying Astro applications is straightforward, finding a hosting platform that balances cost, scalability, and developer-friendly features can be challenging. diff --git a/src/routes/blog/post/free-flutter-web-hosting/+page.markdoc b/src/routes/blog/post/free-flutter-web-hosting/+page.markdoc index 8fb3d47cc74..4280ba9408d 100644 --- a/src/routes/blog/post/free-flutter-web-hosting/+page.markdoc +++ b/src/routes/blog/post/free-flutter-web-hosting/+page.markdoc @@ -8,7 +8,19 @@ timeToRead: 6 author: eldad-fux category: tutorial unlisted: true - +faqs: + - question: "Can I host a Flutter Web app for free on Appwrite Sites?" + answer: "Yes. [Appwrite Sites](/docs/products/sites) has a free tier that supports Flutter Web deployments along with a global CDN, automatic SSL, and DDoS protection. The free plan covers most personal and early stage Flutter Web projects." + - question: "How do I deploy a Flutter Web build to Appwrite Sites?" + answer: "Run `flutter build web` to produce a build folder, then deploy through Git, the Appwrite CLI with `appwrite deploy site`, or by uploading the build directory manually. Git based deploys give you automatic builds on every push. See [deploy from Git](/docs/products/sites/deploy-from-git) for setup." + - question: "Does Appwrite Sites support Flutter Web's CanvasKit renderer?" + answer: "Yes. Appwrite Sites serves the static HTML, CSS, JavaScript, and WASM assets that Flutter Web produces, including the CanvasKit renderer. You can also choose the HTML renderer at build time, since the hosting platform does not constrain the renderer choice." + - question: "Can I use Appwrite as a backend for both my Flutter mobile app and Flutter Web app?" + answer: "Yes. The Appwrite Flutter SDK works across mobile and web targets, so the same [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) code runs on both. You only need to register a web platform in your Appwrite project alongside your mobile platforms." + - question: "Does Appwrite Sites support custom domains for Flutter Web?" + answer: "Yes. You can attach a custom domain to any Appwrite Site and SSL is configured automatically. There is no extra setup needed to enable HTTPS." + - question: "How does Appwrite Sites compare to Firebase Hosting for Flutter Web?" + answer: "Both offer free hosting, CDN delivery, and SSL for Flutter Web. Appwrite Sites is open source and not tied to Google, which matters if you want to avoid vendor lock in. Appwrite also bundles backend products in the same project, similar to Firebase but without the proprietary platform." --- Flutter for Web allows developers to build rich, interactive web applications using the same Dart codebase as their mobile apps. However, finding a hosting platform that supports Flutter's web-optimized build while providing a cost-effective, scalable, and developer-friendly solution can be a challenge. diff --git a/src/routes/blog/post/free-hosting-platform/+page.markdoc b/src/routes/blog/post/free-hosting-platform/+page.markdoc index ed238f668f3..1489c7068c4 100644 --- a/src/routes/blog/post/free-hosting-platform/+page.markdoc +++ b/src/routes/blog/post/free-hosting-platform/+page.markdoc @@ -3,6 +3,7 @@ layout: post title: "Best free hosting platforms in 2026" description: "These are the best free hosting platforms for developers to deploy their frontend in 2026." date: 2025-09-04 +lastUpdated: 2026-05-22 cover: /images/blog/free-hosting-2025.avif timeToRead: 6 author: laura-du-ry @@ -195,7 +196,7 @@ When comparing free hosting platforms, look beyond just “is it free.” Critic | Platform | Free Tier Limits | Best For | Custom Domains | Backend/API Support | Upgrade Path | | ------------------ | ------------------------------- | ------------------ | -------------- | ------------------- | ----------------- | -| **Appwrite** | Generous full stack hosting | Full-stack apps | Yes | Yes | Scale plan | +| **Appwrite** | Generous full stack hosting | Full-stack apps | Yes | Yes | Pro & Enterprise | | **Vercel** | 125 GB bandwidth/month | React/Next.js | Yes | Limited (functions) | Pro & Enterprise | | **Netlify** | 125k requests, 100 GB bandwidth | Jamstack sites | Yes | Functions | Business tier | | **Firebase** | 1 GB storage, 10 GB transfer | SPAs/PWAs | Yes | Yes | Blaze plan | diff --git a/src/routes/blog/post/free-nextjs-hosting/+page.markdoc b/src/routes/blog/post/free-nextjs-hosting/+page.markdoc index 434a6526295..ff9807d4665 100644 --- a/src/routes/blog/post/free-nextjs-hosting/+page.markdoc +++ b/src/routes/blog/post/free-nextjs-hosting/+page.markdoc @@ -8,7 +8,19 @@ timeToRead: 6 author: eldad-fux category: tutorial unlisted: true - +faqs: + - question: "Can I host a Next.js app for free on Appwrite Sites?" + answer: "Yes. [Appwrite Sites](/docs/products/sites) has a free tier that supports Next.js deployments with a global CDN, automatic SSL, and DDoS protection included. This is sufficient for most personal projects, side projects, and early stage products." + - question: "Does Appwrite Sites support Next.js SSR and ISR?" + answer: "Appwrite Sites supports both static Next.js builds and server rendered routes by combining the site with [Appwrite Functions](/docs/products/functions) for dynamic logic. Static generation and prerendered pages are served directly from the CDN, and API routes can be deployed as functions for full backend integration." + - question: "How do I deploy a Next.js project to Appwrite Sites?" + answer: "Connect your Git repository for automatic deploys on every push, run `appwrite deploy site` from the CLI, or upload your build folder manually in the console. The Git workflow is the most common because it builds and deploys on every commit. See [deploy from Git](/docs/products/sites/deploy-from-git) for details." + - question: "Can I use Appwrite as the backend for my Next.js app?" + answer: "Yes. Next.js apps can call [Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) from both client components and server components. This lets you replace bespoke API routes with hosted Appwrite endpoints when it makes sense." + - question: "How does Appwrite Sites compare to Vercel for Next.js?" + answer: "Vercel is the original Next.js host with deep framework integration, but it can get expensive as traffic grows. Appwrite Sites offers a free tier, open source platform, and bundled backend services in one project, which can simplify your stack. Pick Appwrite if you want hosting plus backend without two separate vendors." + - question: "Does Appwrite Sites support custom domains and SSL for Next.js?" + answer: "Yes. You can attach a custom domain to any Appwrite Site and SSL certificates are issued automatically. There is no manual certificate setup." --- Next.js is widely adopted for building modern web applications due to its ability to handle server-side rendering (SSR), static site generation (SSG), and API routes efficiently. While deploying Next.js applications can be straightforward, finding a reliable and cost-effective hosting solution with built-in scalability and developer-friendly features can be challenging. diff --git a/src/routes/blog/post/free-nuxt-hosting/+page.markdoc b/src/routes/blog/post/free-nuxt-hosting/+page.markdoc index b690caf18c1..fbedd28d0c9 100644 --- a/src/routes/blog/post/free-nuxt-hosting/+page.markdoc +++ b/src/routes/blog/post/free-nuxt-hosting/+page.markdoc @@ -8,7 +8,19 @@ timeToRead: 6 author: eldad-fux category: tutorial unlisted: true - +faqs: + - question: "Can I host a Nuxt app for free on Appwrite Sites?" + answer: "Yes. [Appwrite Sites](/docs/products/sites) has a free tier that supports Nuxt with a global CDN, automatic SSL, and DDoS protection. The free plan covers most personal sites, marketing pages, and small SaaS dashboards." + - question: "Does Appwrite Sites support Nuxt SSR and SSG?" + answer: "Yes. Appwrite Sites serves prerendered Nuxt pages from the CDN and supports SSR routes via [Appwrite Functions](/docs/products/functions) for dynamic content. You can mix and match within the same project depending on which routes need real time data." + - question: "How do I deploy a Nuxt project to Appwrite Sites?" + answer: "You can connect your Git repository for auto deploys, run `appwrite deploy site` from the CLI, or upload your build output manually in the console. Git based deploys are recommended so every push builds and ships automatically. See [deploy from Git](/docs/products/sites/deploy-from-git) for setup." + - question: "Can I use Appwrite as the backend for a Nuxt app?" + answer: "Yes. Nuxt server routes and client components can both call [Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), and [Storage](/docs/products/storage) through the official SDK. This lets you replace custom backend code with managed Appwrite endpoints where it makes sense." + - question: "Does Appwrite Sites support custom domains for Nuxt?" + answer: "Yes. You can attach a custom domain to any Appwrite Site and SSL is provisioned automatically. No manual certificate management is required." + - question: "How does Appwrite Sites compare to Netlify or Vercel for Nuxt?" + answer: "All three offer Git based deploys, CDN backed hosting, and free tiers for Nuxt. Appwrite Sites is open source and bundles backend services like Auth, Databases, and Functions in the same project, so you do not need a separate backend provider. Pick Appwrite if you want hosting and backend under one platform." --- Nuxt.js is a powerful framework built on Vue.js that simplifies the development of modern web applications with features like server-side rendering (SSR), static site generation (SSG), and API integrations. While deploying Nuxt applications can be straightforward, selecting the right hosting provider that balances cost, performance, and ease of use can be challenging. diff --git a/src/routes/blog/post/free-react-hosting/+page.markdoc b/src/routes/blog/post/free-react-hosting/+page.markdoc index 7e56ac391c6..48484c434d4 100644 --- a/src/routes/blog/post/free-react-hosting/+page.markdoc +++ b/src/routes/blog/post/free-react-hosting/+page.markdoc @@ -8,7 +8,19 @@ timeToRead: 6 author: eldad-fux category: tutorial unlisted: true - +faqs: + - question: "Can I host a React app for free on Appwrite Sites?" + answer: "Yes. [Appwrite Sites](/docs/products/sites) has a free tier that supports React deployments with a global CDN, automatic SSL, and DDoS protection. The free plan is enough for most personal projects, portfolios, and small apps." + - question: "Does Appwrite Sites work with Vite, Create React App, and other React build tools?" + answer: "Yes. Appwrite Sites is build tool agnostic for React. As long as your project produces a static build output (Vite, Create React App, custom webpack, etc), the platform can host it. You just point Sites at your build command and output directory." + - question: "How do I deploy a React app to Appwrite Sites?" + answer: "You can connect a Git repository for automatic deploys on every push, run `appwrite deploy site` from the CLI, or upload your build folder manually. Git based deploys are the most common workflow because they trigger builds on every commit. See [deploy from Git](/docs/products/sites/deploy-from-git) for setup." + - question: "Can I use Appwrite as the backend for a React app?" + answer: "Yes. React apps can call [Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) directly through the web SDK. This is a typical setup for building a full stack React app without managing your own server." + - question: "Does Appwrite Sites support custom domains for React?" + answer: "Yes. You can attach a custom domain to any Appwrite Site and SSL certificates are provisioned automatically. There is no extra setup required to enable HTTPS." + - question: "How does Appwrite Sites compare to Vercel or Netlify for React?" + answer: "Vercel, Netlify, and Appwrite Sites all offer free tiers, CDN backed hosting, and Git based deploys for React. Appwrite is open source and includes Auth, Databases, Storage, and Functions in the same project, which removes the need for a separate backend provider. Pick Appwrite if you want hosting and backend under one platform." --- React is one of the most popular JavaScript libraries for building dynamic, interactive web applications. While deploying React apps is generally straightforward, choosing the right hosting platform that balances cost, performance, and developer-friendly features can be a challenge. diff --git a/src/routes/blog/post/free-react-native-hosting/+page.markdoc b/src/routes/blog/post/free-react-native-hosting/+page.markdoc index 5e9c7442c10..674e3390fac 100644 --- a/src/routes/blog/post/free-react-native-hosting/+page.markdoc +++ b/src/routes/blog/post/free-react-native-hosting/+page.markdoc @@ -8,7 +8,19 @@ timeToRead: 6 author: eldad-fux category: tutorial unlisted: true - +faqs: + - question: "Can I host a React Native for Web app for free on Appwrite Sites?" + answer: "Yes. [Appwrite Sites](/docs/products/sites) has a free tier that supports React Native for Web builds with a global CDN, automatic SSL, and DDoS protection included. The free plan is enough for most personal projects and early stage apps." + - question: "What is React Native for Web?" + answer: "React Native for Web is a library that maps React Native components like View, Text, and ScrollView to standard DOM elements. This lets you reuse the same component code across iOS, Android, and the web instead of maintaining a separate web codebase." + - question: "How do I deploy a React Native for Web build to Appwrite Sites?" + answer: "Run your web build (typically via Expo's `expo export:web` or a custom webpack config) to produce static files, then deploy via Git integration, the Appwrite CLI, or by uploading the build folder manually. See [deploy from Git](/docs/products/sites/deploy-from-git) for the recommended Git workflow." + - question: "Can I share an Appwrite backend across my mobile and web React Native apps?" + answer: "Yes. The Appwrite React Native and web SDKs target the same project, so you can use one set of [Auth](/docs/products/auth), [Databases](/docs/products/databases), and [Storage](/docs/products/storage) resources across all platforms. Just register a web platform in your Appwrite project alongside your mobile platforms." + - question: "Does Appwrite Sites support custom domains for React Native for Web?" + answer: "Yes. You can attach a custom domain to any Appwrite Site and SSL certificates are issued automatically. No manual configuration is required to enable HTTPS." + - question: "How does React Native for Web compare to writing a separate React app?" + answer: "React Native for Web gives you code reuse across mobile and web, which is useful for teams that want one codebase. A standalone React app is usually leaner and more optimized for browsers, with access to the full DOM and web APIs. Pick React Native for Web only if mobile parity is a real requirement, otherwise plain React is simpler." --- React Native for Web enables developers to build cross-platform applications using a single codebase, allowing React Native apps to run seamlessly on web browsers. While this provides a powerful way to extend mobile applications to the web, finding a hosting solution that is cost-effective, scalable, and optimized for React Native for Web can be challenging. diff --git a/src/routes/blog/post/free-remix-hosting/+page.markdoc b/src/routes/blog/post/free-remix-hosting/+page.markdoc index 7f4be4bb277..597c71198af 100644 --- a/src/routes/blog/post/free-remix-hosting/+page.markdoc +++ b/src/routes/blog/post/free-remix-hosting/+page.markdoc @@ -8,7 +8,19 @@ timeToRead: 6 author: eldad-fux category: tutorial unlisted: true - +faqs: + - question: "Can I host a Remix app for free on Appwrite Sites?" + answer: "Yes. [Appwrite Sites](/docs/products/sites) has a free tier that supports Remix deployments with a global CDN, automatic SSL, and DDoS protection. The free plan covers most personal projects and small production apps." + - question: "Does Appwrite Sites support Remix SSR?" + answer: "Yes. Remix SSR is handled by combining the static build with [Appwrite Functions](/docs/products/functions) for server logic. Static assets are served from the CDN while loaders and actions run in functions, giving you the full Remix runtime." + - question: "How do I deploy a Remix project to Appwrite Sites?" + answer: "You can connect your Git repository for automatic deploys, run `appwrite deploy site` from the CLI, or upload your build manually in the console. Git based deploys are recommended so each commit builds and ships automatically. See [deploy from Git](/docs/products/sites/deploy-from-git) for setup." + - question: "Can I use Appwrite as the backend for a Remix app?" + answer: "Yes. Remix loaders and actions can call [Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) directly. This lets you replace bespoke server code with managed Appwrite APIs for common backend tasks." + - question: "Does Appwrite Sites support custom domains for Remix?" + answer: "Yes. You can attach a custom domain to any Appwrite Site and SSL certificates are issued automatically. No manual certificate setup is required." + - question: "How does Appwrite Sites compare to other Remix hosts?" + answer: "Most Remix hosts focus only on hosting and leave backend services to you. Appwrite Sites is open source and bundles Auth, Databases, Storage, and Functions in the same project, so you can build the full app in one place. Pick Appwrite if you want hosting and backend without a separate provider." --- Remix is a modern full-stack web framework designed to optimize user experience through server-side rendering (SSR), progressive enhancement, and efficient data loading. While deploying Remix applications is straightforward, finding a hosting platform that balances cost, performance, and developer-friendly features can be challenging. diff --git a/src/routes/blog/post/free-svelte-and-sveltekit-hosting/+page.markdoc b/src/routes/blog/post/free-svelte-and-sveltekit-hosting/+page.markdoc index d535653cbd7..fe3209400e2 100644 --- a/src/routes/blog/post/free-svelte-and-sveltekit-hosting/+page.markdoc +++ b/src/routes/blog/post/free-svelte-and-sveltekit-hosting/+page.markdoc @@ -8,7 +8,19 @@ timeToRead: 6 author: eldad-fux category: tutorial unlisted: true - +faqs: + - question: "Can I host a Svelte or SvelteKit app for free on Appwrite Sites?" + answer: "Yes. [Appwrite Sites](/docs/products/sites) has a free tier that supports both Svelte and SvelteKit deployments with a global CDN, automatic SSL, and DDoS protection. The free plan covers most personal sites and early stage apps." + - question: "Does Appwrite Sites support SvelteKit SSR and SSG?" + answer: "Yes. Static SvelteKit builds are served directly from the CDN, and SSR routes can be handled by [Appwrite Functions](/docs/products/functions). You can mix prerendered and server rendered routes within the same project." + - question: "What is the difference between Svelte and SvelteKit?" + answer: "Svelte is the underlying component framework that compiles your code to vanilla JavaScript. SvelteKit is the full application framework built on top of Svelte, with file based routing, server endpoints, and build adapters. Most production apps use SvelteKit, while plain Svelte is suited to widgets or embedded components." + - question: "How do I deploy a SvelteKit project to Appwrite Sites?" + answer: "Connect your Git repository for automatic deploys on every push, run `appwrite deploy site` from the CLI, or upload your build folder manually. The Git workflow is the simplest because it builds and ships on every commit. See [deploy from Git](/docs/products/sites/deploy-from-git) for setup." + - question: "Can I use Appwrite as a backend for SvelteKit?" + answer: "Yes. SvelteKit load functions, server endpoints, and client components can all call [Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) through the official SDK. This is a common pattern for full stack SvelteKit apps." + - question: "Does Appwrite Sites support custom domains for SvelteKit?" + answer: "Yes. You can attach a custom domain to any Appwrite Site and SSL is provisioned automatically. No manual certificate management is required." --- Svelte and SvelteKit have gained traction among developers due to their efficient compilation, minimal runtime overhead, and built-in support for server-side rendering (SSR) and static site generation (SSG). While deploying Svelte applications is straightforward, choosing a hosting solution that balances affordability, scalability, and developer-friendly features can be a challenge. diff --git a/src/routes/blog/post/free-vuejs-hosting/+page.markdoc b/src/routes/blog/post/free-vuejs-hosting/+page.markdoc index 626fb60e833..d32c9c83535 100644 --- a/src/routes/blog/post/free-vuejs-hosting/+page.markdoc +++ b/src/routes/blog/post/free-vuejs-hosting/+page.markdoc @@ -8,7 +8,19 @@ timeToRead: 6 author: eldad-fux category: tutorial unlisted: true - +faqs: + - question: "Can I host a Vue.js app for free on Appwrite Sites?" + answer: "Yes. [Appwrite Sites](/docs/products/sites) has a free tier that supports Vue.js deployments with a global CDN, automatic SSL, and DDoS protection. The free plan covers most personal projects, portfolios, and early stage products." + - question: "Does Appwrite Sites support both Vue SPAs and SSR?" + answer: "Yes. Static Vue SPAs are served directly from the CDN, and SSR setups (typically with Nuxt or a custom Node server) can be handled via [Appwrite Functions](/docs/products/functions). This means both rendering models are supported within the same platform." + - question: "How do I deploy a Vue.js project to Appwrite Sites?" + answer: "You can connect your Git repository for automatic deploys on every push, use `appwrite deploy site` from the CLI, or upload your build folder manually. Git based deploys are recommended because they trigger builds on every commit. See [deploy from Git](/docs/products/sites/deploy-from-git) for setup." + - question: "Can I use Appwrite as a backend for a Vue.js app?" + answer: "Yes. Vue apps can call [Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) through the web SDK. This is the standard pattern for adding logins, data, file uploads, and serverless logic to a Vue app." + - question: "Does Appwrite Sites support custom domains and SSL for Vue?" + answer: "Yes. You can attach a custom domain to any Appwrite Site and SSL certificates are provisioned automatically. There is no extra setup required to enable HTTPS." + - question: "How does Appwrite Sites compare to Vercel or Netlify for Vue?" + answer: "Vercel, Netlify, and Appwrite Sites all offer free tiers, Git deploys, and CDN backed hosting for Vue. Appwrite is open source and includes Auth, Databases, Storage, and Functions in the same project, which removes the need for a separate backend provider. Pick Appwrite if you want hosting and backend under one platform." --- Vue.js is a popular JavaScript framework for building interactive and scalable web applications, offering a balance of simplicity and performance. While deploying Vue applications is straightforward, choosing the right hosting platform that offers cost-effective scalability, security, and developer-friendly features can be a challenge. diff --git a/src/routes/blog/post/from-prototype-to-production-why-ai-teams-prefer-nosql-databases/+page.markdoc b/src/routes/blog/post/from-prototype-to-production-why-ai-teams-prefer-nosql-databases/+page.markdoc index e67f3336f86..44a328380d9 100644 --- a/src/routes/blog/post/from-prototype-to-production-why-ai-teams-prefer-nosql-databases/+page.markdoc +++ b/src/routes/blog/post/from-prototype-to-production-why-ai-teams-prefer-nosql-databases/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aditya-oberai category: product featured: false +faqs: + - question: "Why do AI teams prefer NoSQL databases over relational ones?" + answer: "AI data structures change constantly as models, prompts, and pipelines evolve. NoSQL document stores let teams add new fields and store nested data without schema migrations, which keeps iteration fast. Relational databases can handle JSON columns, but they were not designed for the level of schema churn that AI products generate." + - question: "Is NoSQL faster than SQL for AI workloads?" + answer: "NoSQL is not inherently faster, but it is better suited to the patterns AI workloads create: high write throughput, semi-structured logs, and horizontal scaling. For relational, transactional data, well tuned SQL is often faster. The right answer is usually both, used for different layers of the stack." + - question: "When should I still use a relational database in an AI system?" + answer: "Use SQL for billing, payments, audit logs, compliance reporting, and any data that is strictly relational and transactional. ACID guarantees, mature tooling, and predictable query performance still make relational databases the right tool for those layers. Most production AI systems run SQL and NoSQL together." + - question: "Can I use MongoDB with Appwrite?" + answer: "Yes. Appwrite's self hosted, open source version supports MongoDB as a database backend. During installation you can choose MongoDB and Appwrite will configure and manage it automatically, with no changes to the API or SDKs you already use." + - question: "What kinds of AI data fit document databases best?" + answer: "Prompts and responses, tool call traces, model outputs, embeddings metadata, user feedback, and observability logs all fit document storage well. They are nested, variable in shape, and frequently change as the product evolves, which is exactly what document databases optimize for." + - question: "How do NoSQL databases handle horizontal scaling?" + answer: "Most NoSQL systems shard data across multiple nodes so writes and reads can scale out as load grows. This avoids the hard limits of vertically scaled relational databases, where you eventually run out of CPU, memory, or IO on a single machine. For AI workloads with spiky traffic and high write volume, horizontal scaling is the difference between scaling smoothly and rewriting your infrastructure." --- AI prototypes move fast. A working demo usually needs just three things: a model, a basic UI, and somewhere to store data. At that stage, teams care about speed more than structure, they ship quickly, iterate constantly, and change direction without warning. Almost any database will hold up fine. diff --git a/src/routes/blog/post/from-student-to-developer-how-open-source-can-launch-your-career/+page.markdoc b/src/routes/blog/post/from-student-to-developer-how-open-source-can-launch-your-career/+page.markdoc index e5a5add4035..deb13d00208 100644 --- a/src/routes/blog/post/from-student-to-developer-how-open-source-can-launch-your-career/+page.markdoc +++ b/src/routes/blog/post/from-student-to-developer-how-open-source-can-launch-your-career/+page.markdoc @@ -8,6 +8,19 @@ date: 2025-11-01 author: tessa category: open-source featured: false +faqs: + - question: "How do I start contributing to open source as a student?" + answer: "Pick a project you already use, read the contributing guide, and start with documentation fixes or small bugs labeled good first issue. Avoid trying to ship a feature on day one. The goal of your first contribution is learning the workflow (forking, branching, opening a PR, responding to review), not writing perfect code." + - question: "Do open source contributions really help when applying for jobs?" + answer: "Yes, but quality matters more than quantity. One thoughtful PR with clear context and good review interaction tells a hiring manager more than fifty trivial typo fixes. Recruiters and engineers also use your GitHub as a public record of how you work, so curate it like a portfolio." + - question: "What is Hacktoberfest and is it worth joining?" + answer: "Hacktoberfest is an annual month long event in October where developers contribute to open source projects. It is worth joining as a beginner because it lowers the social barrier to opening your first PR, with many projects offering mentorship and beginner friendly issues. The key is to keep contributing after October." + - question: "How do I find open source projects to contribute to?" + answer: "Search GitHub for the good first issue or help wanted labels in projects you use, or browse maintained lists like the Appwrite issues page. The best projects for beginners have clear contributing guides, active maintainers, and recent commits. Avoid abandoned repos." + - question: "Can I contribute to Appwrite as a beginner?" + answer: "Yes. [Appwrite](https://github.com/appwrite/appwrite) is open source on GitHub, with regular good first issues across its core platform, SDKs, and docs. You can also contribute to [Appwrite Functions templates](https://github.com/appwrite/templates), which is a friendlier entry point if you are new to large codebases." + - question: "Is AI generated code acceptable in open source contributions?" + answer: "Most projects accept AI assisted code as long as you understand what it does, follow the contribution guidelines, and disclose AI use when the project asks for it. The risk is submitting code you cannot explain in review, which damages your reputation more than slow contributions would. Use AI to learn faster, not to skip learning." --- You might still be a student, still learning, or still wondering where you belong in tech. diff --git a/src/routes/blog/post/function-chat-fictional-character/+page.markdoc b/src/routes/blog/post/function-chat-fictional-character/+page.markdoc index e1b98050b92..2e9b988f9cb 100644 --- a/src/routes/blog/post/function-chat-fictional-character/+page.markdoc +++ b/src/routes/blog/post/function-chat-fictional-character/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/function-chat-fictional-character/cover.avif timeToRead: 6 author: aditya-oberai category: tutorial +faqs: + - question: "What is an Appwrite Function?" + answer: "An Appwrite Function is a serverless function that runs on Appwrite's infrastructure, triggered by HTTP requests, events, schedules, or the SDKs. They are useful for backend logic you do not want in your client app, like calling external APIs with secrets. See [Appwrite Functions](/docs/products/functions) for details." + - question: "Do I need an OpenAI API key for this tutorial?" + answer: "Yes. The function calls OpenAI's GPT-4 API, so you need a paid OpenAI account with an API key. To access GPT-4 specifically you also need to reach Usage tier 1, which OpenAI grants after a small amount of paid usage." + - question: "How do I keep my OpenAI API key secret?" + answer: "Store it as an environment variable on the Appwrite Function and never bake it into client code. Appwrite encrypts function environment variables at rest, and they are only injected into the function runtime, so the key stays off the client. See the [Functions environment variables docs](/docs/products/functions) for details." + - question: "Can I swap GPT-4 for a different model or provider?" + answer: "Yes. The function just calls a chat completion API, so you can switch to GPT-3.5, Claude, Gemini, or a self hosted model with minimal changes. You only need to update the SDK and the prompt format. The Appwrite Function wrapper itself does not care which model you use." + - question: "How do I prevent the AI from breaking character?" + answer: "Add explicit constraints in the additionalPrompt field, similar to a system prompt. For example, tell the model never to acknowledge that it is an AI and to stay in character even if asked directly. Combine this with low temperature settings for more consistent behavior." + - question: "Can I trigger this function from a mobile or web app?" + answer: "Yes. Appwrite Functions can be called directly from any client SDK, including Flutter, React Native, web, iOS, and Android. You can also expose them through a public domain for HTTP requests. This makes it straightforward to wire the chat function up to a UI in any framework." --- Have you ever wondered what it would feel like to interact with your favorite fictional characters, such as Superman, Hermione Granger, Gandalf, or Snow White? As a part of an internal hackathon at Appwrite recently, my team developed an Appwrite Function that you can use to chat with any popular fictional character you like (we really wanted to talk to Batman!) diff --git a/src/routes/blog/post/function-template-prompt-chatgpt/+page.markdoc b/src/routes/blog/post/function-template-prompt-chatgpt/+page.markdoc index 709f1455bbe..e1c46015398 100644 --- a/src/routes/blog/post/function-template-prompt-chatgpt/+page.markdoc +++ b/src/routes/blog/post/function-template-prompt-chatgpt/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/function-template-prompt-chatgpt/cover.avif timeToRead: 5 author: aditya-oberai category: tutorial +faqs: + - question: "What is an Appwrite Function template?" + answer: "Function templates are prebuilt Appwrite Functions you can install in your project with a few clicks. They cover common integrations like ChatGPT, Discord notifications, and Stripe webhooks, so you do not have to write the boilerplate yourself. See [Appwrite Functions](/docs/products/functions) for the product overview." + - question: "Do I need to write any code to use the Prompt ChatGPT template?" + answer: "No code is required to get the template running. You configure the OpenAI API key as an environment variable, connect a GitHub repo, and Appwrite handles the rest. You only need to write code if you want to customize the prompt logic or response format." + - question: "Which OpenAI model does this template use?" + answer: "The template in this tutorial uses GPT-3.5 by default for cost and latency reasons. You can switch the model name in the code to GPT-4 or any other model you have access to. The Appwrite Function wrapper does not depend on the specific model." + - question: "How do I call the function from my app?" + answer: "After deploying, copy the function domain URL from the Domains tab and send it a POST request with a JSON body containing your prompt. You can call it from any frontend framework, mobile app, or server using HTTP, or use the Appwrite SDK for a typed integration." + - question: "How do I keep my OpenAI API key secure?" + answer: "Store it only as an Appwrite Function environment variable, never in client code. Appwrite encrypts these variables at rest and only injects them into the function runtime, so the key never leaves the server. Avoid logging the key in your function output." + - question: "Can I customize the system prompt or response format?" + answer: "Yes. The template is fully open source, so you can fork the generated GitHub repository and modify the prompt construction or the JSON response shape. Push your changes and Appwrite redeploys the function automatically." --- Function templates are pre-built Appwrite Functions that can be integrated into your Appwrite project with just a few clicks. Using them, you can easily incorporate new features and integrations into your app without writing additional code or managing infrastructure. diff --git a/src/routes/blog/post/function-template-whatsapp-vonage/+page.markdoc b/src/routes/blog/post/function-template-whatsapp-vonage/+page.markdoc index c299be038be..78deb886cf9 100644 --- a/src/routes/blog/post/function-template-whatsapp-vonage/+page.markdoc +++ b/src/routes/blog/post/function-template-whatsapp-vonage/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/function-template-whatsapp-vonage/cover.avif timeToRead: 5 author: aditya-oberai category: integrations +faqs: + - question: "What is an Appwrite Function template?" + answer: "Function templates are prebuilt Appwrite Functions you can install in your project with a few clicks. They cover common integrations like WhatsApp via Vonage, Discord notifications, and Stripe webhooks, so you do not have to write the boilerplate yourself. See [Appwrite Functions](/docs/products/functions) for the product overview." + - question: "Do I need a paid Vonage account to use this template?" + answer: "Not for testing. The Vonage Messages API Sandbox lets you send and receive WhatsApp messages on a test number for free. You only need a paid Vonage plan once you go to production with your own approved WhatsApp Business number." + - question: "How does the function receive incoming WhatsApp messages?" + answer: "Vonage forwards every inbound WhatsApp message to a webhook URL you configure. After deploying the function, you copy the domain from the Appwrite Function's Domains tab and paste it as the Inbound Webhook in Vonage's Messages API Sandbox. The function is then called every time a user sends a WhatsApp message." + - question: "How do I store WhatsApp environment variables securely?" + answer: "Configure the Vonage API key, secret, signature secret, and WhatsApp number as Appwrite Function environment variables. Appwrite encrypts them at rest and only injects them into the function runtime, so they never leak to the client. Never hardcode them in your function source." + - question: "Can I customize the auto reply behavior?" + answer: "Yes. The template is open source, so you can fork the generated GitHub repository and change the reply logic to call OpenAI, look up data in [Appwrite Databases](/docs/products/databases), or route messages to your support team. Push your changes and Appwrite redeploys automatically." + - question: "Can I use this approach for other messaging providers?" + answer: "Yes. The pattern of webhook in, function processes, response out works the same with Twilio, MessageBird, or any other SMS/WhatsApp provider. You only need to swap the SDK and webhook format. Appwrite also has [Messaging](/docs/products/messaging) for sending push, SMS, and email, which can complement an inbound function like this." --- Function templates are pre-built Appwrite Functions that can be integrated into your Appwrite project with just a few clicks. Using them, you can easily incorporate new features and integrations into your app without writing additional code or managing infrastructure. diff --git a/src/routes/blog/post/functions-local-development-guide/+page.markdoc b/src/routes/blog/post/functions-local-development-guide/+page.markdoc index ac6b1d72e85..7f7d22dddf9 100644 --- a/src/routes/blog/post/functions-local-development-guide/+page.markdoc +++ b/src/routes/blog/post/functions-local-development-guide/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: ebenezer-don category: product featured: false +faqs: + - question: "Can I develop Appwrite Functions locally without deploying first?" + answer: "Yes. The Appwrite CLI supports local development for functions, so you can write, run, and debug them on your machine before deploying. This avoids the slow cycle of pushing to the cloud just to see if a small change works. See [Appwrite Functions](/docs/products/functions) for the product overview." + - question: "What do I need installed to run Appwrite Functions locally?" + answer: "You need the latest Appwrite CLI and Docker. The CLI uses Docker to run the function in the same runtime that Appwrite Cloud uses, so behavior matches production. Without Docker the `appwrite run function` command will not work." + - question: "How do I install the Appwrite CLI?" + answer: "Run `npm install -g appwrite-cli@latest`. After installation, log in with `appwrite login` and verify with `appwrite whoami`. You only need to do this once per machine." + - question: "Which runtimes does the Appwrite CLI support for local development?" + answer: "The CLI supports Node.js, Python, PHP, Ruby, Dart, and others. When you run `appwrite init functions`, the CLI prompts you to choose a runtime from the list of supported options. Local execution mirrors the same Docker images used in production." + - question: "How do I deploy a function after testing it locally?" + answer: "Run `appwrite push functions` from your project directory to push the function to your Appwrite project. The CLI reads your `appwrite.config.json` to know which function to deploy and where to send it. You can also use Git based deploys if your function lives in a connected repository." + - question: "Can I use environment variables when developing functions locally?" + answer: "Yes. The CLI reads variables from your `appwrite.config.json` and any `.env` files you configure, then injects them when the function runs. This lets you use the same variable names locally as in production without code changes." --- What if you could develop serverless functions quickly and effectively without the need for constant cloud deployment? If you've been stuck waiting for deployments or struggling with limited offline capabilities, there's good news. The new Appwrite CLI provides a seamless local development experience for serverless functions, enabling you to develop, test, and iterate rapidly on your functions directly from your local machine. diff --git a/src/routes/blog/post/gdpr-compliance-mobile-apps-alternative-firebase/+page.markdoc b/src/routes/blog/post/gdpr-compliance-mobile-apps-alternative-firebase/+page.markdoc index f8889148800..94bc6393f6c 100644 --- a/src/routes/blog/post/gdpr-compliance-mobile-apps-alternative-firebase/+page.markdoc +++ b/src/routes/blog/post/gdpr-compliance-mobile-apps-alternative-firebase/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aditya-oberai category: security featured: false +faqs: + - question: "Does GDPR apply to my mobile app if I am not based in the EU?" + answer: "Yes, if your app processes personal data from anyone in the EU. GDPR applies based on where the user is, not where your company is registered. Even a small US based indie app with European users falls under the regulation." + - question: "What counts as personal data under GDPR?" + answer: "Any data that can identify a natural person directly or indirectly. This includes obvious identifiers like names and emails, but also things like IP addresses, device IDs, location data, and even pseudonymous user IDs when combined with other data. Treat anything that could be tied back to a person as personal data." + - question: "What is the difference between a data controller and a data processor?" + answer: "The data controller decides why and how personal data is processed (usually you, the app owner). The data processor handles data on the controller's behalf (your BaaS, analytics, or hosting provider). Both must comply with GDPR, but the controller carries the heavier responsibility." + - question: "How does Appwrite help with GDPR compliance?" + answer: "Appwrite acts as a data processor when you use it as your backend, and Appwrite Cloud's EU region keeps data within the EU. Features like granular permissions, account deletion via [Appwrite Auth](/docs/products/auth), and per document access control help you implement user data rights like access and erasure without writing custom infrastructure." + - question: "What are the penalties for GDPR non-compliance?" + answer: "Fines can reach up to €20 million or 4% of global annual revenue, whichever is higher. Beyond fines, you face reputation damage, mandatory breach disclosures, and potential lawsuits from affected users. The financial risk alone justifies taking compliance seriously from day one." + - question: "Do I need a privacy policy if my app does not sell user data?" + answer: "Yes. GDPR requires a clear privacy policy whenever you collect personal data, even if you only use it internally for the app's core features. The policy must explain what data you collect, why, how long you keep it, and how users can exercise their rights. App stores also require a privacy policy for any app that collects user data." --- If you're developing a mobile app for European users or collecting any data from EU residents, the General Data Protection Regulation (GDPR) is something you need to understand and follow closely. diff --git a/src/routes/blog/post/go-function-benchmarks/+page.markdoc b/src/routes/blog/post/go-function-benchmarks/+page.markdoc index 94cc5395498..3769f790526 100644 --- a/src/routes/blog/post/go-function-benchmarks/+page.markdoc +++ b/src/routes/blog/post/go-function-benchmarks/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/go-function-benchmarks/cover.avif timeToRead: 8 author: matej-baco category: product +faqs: + - question: "Does Appwrite Functions support Go?" + answer: "Yes. [Appwrite Functions](/docs/products/functions) added a Go runtime, so you can write serverless functions in Go alongside Node.js, Python, PHP, Ruby, Dart, and other supported languages. The runtime is built on Open Runtimes, the same open source project that powers all Appwrite Functions runtimes." + - question: "How does the Go runtime perform compared to other Appwrite Function runtimes?" + answer: "In the benchmarks here, Go is among the fastest runtimes for both cold start and concurrent CPU heavy workloads, thanks to compiled binaries and goroutines. Interpreted runtimes (Python, Node.js, PHP) trade some raw performance for ecosystem and rapid iteration. Pick Go for compute heavy or latency sensitive functions." + - question: "What is Open Runtimes?" + answer: "[Open Runtimes](https://github.com/open-runtimes/open-runtimes) is an open source project from Appwrite that defines a standard way to run serverless functions across many languages. Appwrite Functions uses Open Runtimes under the hood, but you can use Open Runtimes independently in your own infrastructure." + - question: "When should I use Go for a function instead of Node.js or Python?" + answer: "Use Go when cold start time, CPU performance, or memory efficiency matter, such as image processing, parsing large payloads, or running concurrent jobs. Use Node.js or Python when you need quick iteration, rich ecosystems, or are calling APIs where the runtime speed barely matters. Most apps mix both." + - question: "How were these benchmarks structured?" + answer: "Three function types were tested: a Hello World endpoint for cold start and minimal overhead, a recursive Fibonacci function for CPU and concurrency, and a Scraper function with multiple dependencies for build time and warm performance. Each function was implemented in several Open Runtimes languages and run under identical conditions to isolate runtime behavior." + - question: "Can I deploy the benchmark functions to my own Appwrite project?" + answer: "Yes. The function code shown in this post runs on Appwrite Functions without modification. You can copy the Go handler into a function, deploy it via the [Appwrite CLI](/docs/tooling/command-line) or Git, and run your own benchmarks against your project." --- It is undeniable that Go has grown to become one of the most popular programming languages among developers worldwide. Recently, during Init, we announced the [new Golang (or Go) runtime](https://appwrite.io/blog/post/announcing-go-support) for Appwrite Functions. However, it is one thing for us to claim that our Go functions runtime is performant, it is a whole other thing for us to justify the same. To do so, we planned a benchmark to test the performance of our Go runtime in comparison with other Appwrite Functions runtimes. diff --git a/src/routes/blog/post/goodbye-plaintext-passwords/+page.markdoc b/src/routes/blog/post/goodbye-plaintext-passwords/+page.markdoc index 8d8fcb0f58f..f4e2a20b882 100644 --- a/src/routes/blog/post/goodbye-plaintext-passwords/+page.markdoc +++ b/src/routes/blog/post/goodbye-plaintext-passwords/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/goodbye-plaintext-passwords/cover.avif timeToRead: 6 author: aditya-oberai category: security +faqs: + - question: "Why is storing passwords in plaintext dangerous?" + answer: "If anyone gains access to your database, they immediately have every user's password. Because most people reuse passwords across services, a single plaintext leak compromises accounts on other sites too. Plaintext storage also violates GDPR, PCI DSS, HIPAA, and most modern security frameworks, exposing your company to fines and lawsuits." + - question: "What is password hashing and how is it different from encryption?" + answer: "Hashing is a one way transformation that converts a password to a fixed length string that cannot be reversed back to the original. Encryption is two way, meaning anyone with the key can decrypt the value. Passwords should always be hashed, never encrypted, because your system never needs the original password back, only a way to verify a login attempt matches." + - question: "Which password hashing algorithm should I use?" + answer: "Use a modern memory hard algorithm like Argon2id, bcrypt, or scrypt. Avoid MD5, SHA-1, and plain SHA-256 since they are too fast and trivial to brute force on modern GPUs. Argon2id is the current recommendation from OWASP and is what Appwrite Authentication uses by default." + - question: "What is passwordless authentication?" + answer: "Passwordless authentication verifies users without a stored password, typically through magic links, one time codes, biometrics, or hardware tokens. It eliminates entire classes of attacks (phishing, credential stuffing, password reuse) and usually improves user experience. The trade off is dependency on email, SMS, or device security for the auth factor." + - question: "How does Appwrite handle password security?" + answer: "[Appwrite Authentication](/docs/products/auth) hashes passwords with Argon2id by default, supports passwordless flows like magic URLs and OTPs, integrates 30+ OAuth providers, and offers two factor authentication. You never store plaintext passwords yourself, and Appwrite's permissions system prevents accidental data exposure even if your client code has bugs." + - question: "What should I do if I am currently storing passwords in plaintext?" + answer: "Stop new plaintext storage immediately, then migrate existing passwords on next login by hashing each one as users sign in. Force a password reset for accounts that have not logged in within a reasonable window. Disclose the situation if any plaintext data was exposed publicly, since GDPR and similar laws require breach notifications." --- Recently, we came across a report by [BleepingComputer](https://www.bleepingcomputer.com/news/security/misconfigured-firebase-instances-leaked-19-million-plaintext-passwords/), which shared how misconfigured Firebase projects led to the leakage of 19 million plaintext passwords on the public internet. This was primarily caused by missing or incorrectly configured security rules on Firebase instances that consequently permitted read access to databases, resulting in a massive data leak that exposed: diff --git a/src/routes/blog/post/google-oauth-expo/+page.markdoc b/src/routes/blog/post/google-oauth-expo/+page.markdoc index cc327fadad2..d7d62b715c3 100644 --- a/src/routes/blog/post/google-oauth-expo/+page.markdoc +++ b/src/routes/blog/post/google-oauth-expo/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/google-oauth-expo/cover.avif timeToRead: 7 author: atharva category: tutorial +faqs: + - question: "Why do I need a bundle ID and package name for Google OAuth in Expo?" + answer: "Google OAuth uses the bundle ID (iOS) and package name (Android) to verify the deep link back to your app after the user authenticates. Without them, Google cannot route the callback to your native app, so the sign-in flow fails after the browser step. You also need to register these IDs as platforms inside your Appwrite project." + - question: "Does this work in Expo Go or do I need a development build?" + answer: "Expo Go uses its own bundle ID, so OAuth redirects from Google will not return to your app in production mode. For testing native deep links and OAuth flows reliably, use a development build or a production build with your real bundle ID configured." + - question: "Which Appwrite SDK should I use for Expo apps?" + answer: "Use the `react-native-appwrite` SDK rather than the web SDK. It handles native session storage, deep linking, and platform-specific concerns that the web SDK does not. Install it with `npm install react-native-appwrite`." + - question: "How do I configure Google OAuth in the Appwrite Console?" + answer: "Enable the Google provider under [Appwrite Auth](/docs/products/auth) and paste in the OAuth client ID and secret from your Google Cloud Console project. You also need to add Android and iOS platforms in your Appwrite project with the matching package names. The OAuth callback URL from Appwrite must be added to your Google OAuth client." + - question: "What does the AppwriteProvider pattern give me over calling the SDK directly?" + answer: "Wrapping the SDK in a React Context provider lets every screen read the current session, trigger login or logout, and react to auth changes without duplicating client setup. It centralizes session checks so route guards and conditional UI stay consistent across the app." + - question: "Why use Expo Router instead of plain React Navigation?" + answer: "Expo Router uses file-based routing similar to Next.js, which makes deep linking and OAuth callbacks simpler to wire up. Each route maps to a URL, so the redirect from Google lands directly on a screen you control without manually configuring navigators." --- In this article, you will learn how to implement Google authentication in your React Native apps that use Expo Router. We will go through the following steps in the article. diff --git a/src/routes/blog/post/gpt-5-5-launch/+page.markdoc b/src/routes/blog/post/gpt-5-5-launch/+page.markdoc index 58c46cc2a88..1bce231148f 100644 --- a/src/routes/blog/post/gpt-5-5-launch/+page.markdoc +++ b/src/routes/blog/post/gpt-5-5-launch/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 8 author: atharva category: ai featured: false +faqs: + - question: "When did OpenAI release GPT-5.5?" + answer: "OpenAI released GPT-5.5 on April 23, 2026. It ships in two variants, gpt-5.5 (the base model) and gpt-5.5-pro (a higher-accuracy variant that uses parallel test-time compute)." + - question: "How does GPT-5.5 pricing compare to GPT-5.4 and Claude Opus 4.7?" + answer: "GPT-5.5 is priced at 2x GPT-5.4 on both input and output (\\$5/M input, \\$30/M output). GPT-5.5 Pro is roughly 7x the output cost of Claude Opus 4.7. Input pricing matches Opus 4.7, but output is \\$5/M more expensive." + - question: "What context window does GPT-5.5 support?" + answer: "In Codex, GPT-5.5 ships with a 400K context window. In the API, both gpt-5.5 and gpt-5.5-pro run with a 1M context window. OpenAI also introduced a Fast mode in Codex that generates tokens 1.5x faster for 2.5x the cost." + - question: "Where does GPT-5.5 outperform Claude Opus 4.7?" + answer: "Per OpenAI's own benchmarks, GPT-5.5 leads on Terminal-Bench 2.0 (by 13.3 points), FrontierMath Tier 4 (35.4% vs 22.9%), and Tau2-Bench Telecom. Claude Opus 4.7 still leads on SWE-Bench Pro (64.3% vs 58.6%) and Humanity's Last Exam without tools." + - question: "Should I switch my production app from GPT-5.4 to GPT-5.5?" + answer: "It depends on workload. OpenAI claims GPT-5.5 uses fewer tokens to complete the same Codex tasks at matched per-token latency, which can offset some of the 2x price increase. For SWE-Bench Pro style work, Claude Opus 4.7 remains stronger and cheaper on output." + - question: "Are the published GPT-5.5 benchmarks independently verified?" + answer: "No. The numbers in the launch post are self-reported by OpenAI using their own methodology. Treat them as the vendor's own claims until third parties like Artificial Analysis or independent labs publish their own evaluations." --- OpenAI released [GPT-5.5](https://openai.com/index/introducing-gpt-5-5/) on April 23, 2026. The company is pitching it as "a new class of intelligence for real work", with the biggest gains in agentic coding, computer use, knowledge work, and early scientific research. diff --git a/src/routes/blog/post/hacktoberfest-2023/+page.markdoc b/src/routes/blog/post/hacktoberfest-2023/+page.markdoc index 89ac299e600..2eac03ef1bd 100644 --- a/src/routes/blog/post/hacktoberfest-2023/+page.markdoc +++ b/src/routes/blog/post/hacktoberfest-2023/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/hacktoberfest-2023.avif timeToRead: 3 author: eldad-fux category: hackathon +faqs: + - question: "How do I find Appwrite Hacktoberfest issues to work on?" + answer: "Check the Appwrite repository on GitHub and filter for issues labeled `hacktoberfest`. New issues are added throughout October. If you can't find one that fits, you can open your own issue with a proposed contribution and ask a maintainer to add the label." + - question: "What counts as a quality contribution during Hacktoberfest?" + answer: "Hacktoberfest emphasizes quality over quantity. Spam PRs, typo fixes with no context, and low-effort changes are usually rejected. Aim for substantive fixes, feature work, documentation improvements, or tests that solve a real problem in the codebase." + - question: "How long does Appwrite take to review Hacktoberfest PRs?" + answer: "Appwrite confirms PRs within 7 days. If accepted, the PR is labeled `hacktoberfest-accepted`. You're expected to follow up on your assigned issue within 3 days so maintainers know you're still working on it." + - question: "What swag did Appwrite offer for Hacktoberfest 2023?" + answer: "Contributors earned an Appwrite hoodie and stickers for one accepted and merged PR. DigitalOcean also offered a Digital Swag Bag for contributing 4 or more PRs across any participating Hacktoberfest project." + - question: "Can I contribute to Appwrite outside of Hacktoberfest?" + answer: "Yes. The Appwrite repos have open issues year-round, and the team welcomes PRs at any time. Join the [Appwrite Discord](https://appwrite.io/discord) to get help from maintainers, find issues, or pitch your own ideas." + - question: "What is Hacktoberfest and who runs it?" + answer: "Hacktoberfest is an annual open-source celebration run by DigitalOcean throughout October. Contributors submit pull requests to participating projects and earn rewards from sponsoring companies. 2023 marked the 10th anniversary of the event." --- Hacktoberfest is back, celebrating a decade of open source! Appwrite is proud to support open-source developers for the fifth consecutive year of [Hacktoberfest 2023](https://hacktoberfest.com), partnered with DigitalOcean. Here is how you can get involved and grab some cool Appwrite swag! diff --git a/src/routes/blog/post/hacktoberfest-ideas-2024/+page.markdoc b/src/routes/blog/post/hacktoberfest-ideas-2024/+page.markdoc index 8bf32eb97cf..6aff6b151ab 100644 --- a/src/routes/blog/post/hacktoberfest-ideas-2024/+page.markdoc +++ b/src/routes/blog/post/hacktoberfest-ideas-2024/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/get-inspired-for-hackathon/cover.avif timeToRead: 4 author: snezhanna category: hackathon +faqs: + - question: "How should I pick a hackathon project idea?" + answer: "Start with a problem you personally relate to so motivation stays high. Research how many other people face the same issue to gauge impact. Brainstorm multiple solutions before committing to one, and pick something self-sustaining that does not depend on fragile external resources." + - question: "What Appwrite features are most useful in a Hacktoberfest project?" + answer: "The example projects in this post used [Appwrite Auth](/docs/products/auth) for OAuth, [Appwrite Databases](/docs/products/databases) for storing app data, [Appwrite Functions](/docs/products/functions) (including the Go runtime) for backend logic, and [Appwrite Messaging](/docs/products/messaging) for emails. Mix and match based on what your project actually needs." + - question: "Do I need to build something Appwrite-specific to participate?" + answer: "No. Hacktoberfest itself accepts contributions to any participating open-source repo. Appwrite hackathons typically reward projects built with Appwrite, but the wider Hacktoberfest program is framework agnostic." + - question: "How do I scope a project so I can actually finish it?" + answer: "Cut scope aggressively. Pick one core feature that demonstrates the idea, build that to a working state, and only add extras if you have time. Most hackathon projects fail because the team tried to ship five features instead of one polished one." + - question: "Should I work solo or in a team for a hackathon?" + answer: "Teams move faster but coordination overhead is real. Solo lets you make decisions instantly but limits scope. If you team up, divide work along clean boundaries (frontend, backend, design) so people are not blocked on each other." + - question: "What kind of projects perform well in Appwrite hackathons?" + answer: "Projects that solve a concrete problem and use Appwrite features meaningfully tend to do well. The Terrazone, MailMemo, and Cord examples each address a specific remote-work pain point and use Appwrite for the parts where it actually saves time." --- Appwrite has just announced our very own **Hacktoberfest 2024 Hackathon**, and if we know the open source community, you're probably buzzing with ideas! Hacktoberfest is the perfect chance to collaborate, build, and showcase your creativity, whether you’re an experienced developer or just getting started. But with so many possibilities, where do you start? diff --git a/src/routes/blog/post/handle-cors-in-serverless-functions/+page.markdoc b/src/routes/blog/post/handle-cors-in-serverless-functions/+page.markdoc index bae051d24ff..c5a7c641302 100644 --- a/src/routes/blog/post/handle-cors-in-serverless-functions/+page.markdoc +++ b/src/routes/blog/post/handle-cors-in-serverless-functions/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 3 author: ebenezer-don category: product featured: false +faqs: + - question: "Why do I get a CORS error when calling my Appwrite Function from the browser?" + answer: "By default, your function returns the response without the CORS headers the browser expects. The browser blocks the response unless `Access-Control-Allow-Origin` (and related headers) match the origin making the request. The fix is to add these headers to the function's response directly." + - question: "Why doesn't `res.setHeader()` work in Appwrite Functions?" + answer: "Appwrite Functions use a different response model than Express. Headers must be passed as the third argument to response methods like `res.send()` or `res.json()` instead of being set on a mutable response object. Calling `res.setHeader()` will not attach the header to the outgoing response." + - question: "How do I handle CORS preflight requests in [Appwrite Functions](/docs/products/functions)?" + answer: "Check if `req.method === 'OPTIONS'` at the top of your function and return an empty response with the allowed origin, methods, and headers. Browsers send this preflight before any non-simple cross-origin request to verify it's allowed." + - question: "Is it safe to use `Access-Control-Allow-Origin: *` in production?" + answer: "No. The wildcard lets any origin call your function, which exposes it to abuse and CSRF-style attacks. Use it only during local development, and pin the header to your specific domain(s) before deploying." + - question: "Which CORS headers do I need to set besides `Access-Control-Allow-Origin`?" + answer: "For preflight requests, also set `Access-Control-Allow-Methods` (the HTTP verbs you accept) and `Access-Control-Allow-Headers` (custom headers like `Content-Type` or `Authorization` that your client sends). For the actual response, `Access-Control-Allow-Origin` is usually enough." + - question: "Do I need CORS headers if I call my function from the Appwrite SDK?" + answer: "If you call the function through the Appwrite client SDK using `functions.createExecution()`, the request goes through the Appwrite API, which handles CORS for you. CORS only becomes an issue when the browser fetches the function URL directly across origins." --- Cross-Origin Resource Sharing (CORS) is a security feature that allows web applications to interact securely with resources from different origins and denies unwanted communication. You might be reading this because your browser has blocked access to your Appwrite serverless function. This guide will help you "unblock" that access. diff --git a/src/routes/blog/post/hf-2023-journey/+page.markdoc b/src/routes/blog/post/hf-2023-journey/+page.markdoc index 01d2a666b0d..407765671ce 100644 --- a/src/routes/blog/post/hf-2023-journey/+page.markdoc +++ b/src/routes/blog/post/hf-2023-journey/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/hf-2023-journey/cover.avif timeToRead: 5 author: aditya-oberai category: hackathon +faqs: + - question: "What did Appwrite achieve during Hacktoberfest 2023?" + answer: "Appwrite tracked 135+ Hacktoberfest issues, accepted 65+ pull requests, onboarded 30+ new GitHub contributors, and hosted 8 PR Review Parties. Notable contributions included a Postmark messaging adapter, an IBM Cloud Object Storage adapter, and SDK unit tests." + - question: "What is a PR Review Party?" + answer: "A PR Review Party is a livestream where Appwrite engineers review community pull requests on camera, explain feedback in real time, and walk through their review workflow. It helps new contributors learn what maintainers look for and demystifies the open-source review process." + - question: "Why does Appwrite participate in Hacktoberfest each year?" + answer: "Hacktoberfest 2019, the same month Appwrite launched, brought 200+ contributions and doubled the project's GitHub stars. The team treats it as the inflection point that turned Appwrite from a side project into a community, and they sponsor it annually to give back." + - question: "How can I contribute to Appwrite outside of Hacktoberfest?" + answer: "Open issues are available year-round across the Appwrite repos. You can also write articles, build demo apps, or add projects to the Awesome Appwrite repo and Built With Appwrite site. Join the [Appwrite Discord](https://appwrite.io/discord) if you want help picking something to work on." + - question: "What are good first contributions to Appwrite?" + answer: "Look for `good first issue` labels in the Appwrite GitHub org. Docs fixes, function templates, and SDK improvements are typically more approachable than core platform changes. Discussing your approach in the issue before coding saves rework during review." + - question: "Did Appwrite host in-person events for Hacktoberfest 2023?" + answer: "Yes. Appwrite ran an in-person Hacktoberfest Kickoff meetup in Bengaluru, India, in collaboration with DigitalOcean. The team also appeared on livestreams with GitHub, GitHub Education, and MLH to discuss contribution practices and demo Appwrite Functions." --- **October** is our favorite month of the year because it brings with it **Hacktoberfest**, the largest celebration of open source in the world! And this year, we returned to support DigitalOcean and **Hacktoberfest 2023** as a sponsor to invest in the upliftment of the open-source world and to rejoice the 10th anniversary of this wonderful initiative. Hacktoberfest brought moments of nostalgia seeing developers from different walks of life join in to take their first steps in the open-source world. diff --git a/src/routes/blog/post/hipaa-compliance-for-web-apps-a-practical-guide/+page.markdoc b/src/routes/blog/post/hipaa-compliance-for-web-apps-a-practical-guide/+page.markdoc index 697378c9b96..84b13820ec9 100644 --- a/src/routes/blog/post/hipaa-compliance-for-web-apps-a-practical-guide/+page.markdoc +++ b/src/routes/blog/post/hipaa-compliance-for-web-apps-a-practical-guide/+page.markdoc @@ -9,6 +9,19 @@ author: aishwari category: security featured: false unlisted: true +faqs: + - question: "What is PHI and when does HIPAA apply to my app?" + answer: "PHI (Protected Health Information) is individually identifiable health information about a person's health status, care, or payment for care. HIPAA applies when your organization is a covered entity or a business associate handling PHI in that context. Not every health-adjacent app falls under HIPAA, the legal relationship and how data is handled matter." + - question: "What are the three core HIPAA rules developers need to understand?" + answer: "The Security Rule covers technical, administrative, and physical safeguards for electronic PHI. The Privacy Rule governs how PHI may be used and disclosed. The Breach Notification Rule defines when and how you must report breaches to affected individuals, HHS, and sometimes the media." + - question: "Do I need a Business Associate Agreement (BAA) with my cloud or backend provider?" + answer: "Yes, if that provider stores, processes, or transmits PHI on your behalf, you need a signed BAA before sending any PHI through their systems. Without a BAA in place, using the vendor for PHI is itself a violation, even if their infrastructure is technically capable of meeting HIPAA requirements." + - question: "Is encryption alone enough for HIPAA compliance?" + answer: "No. Encryption (in transit and at rest) is a baseline expectation, but compliance also requires access controls, audit logging, least-privilege role assignments, key management, breach response procedures, and signed BAAs with any vendors that touch PHI. Encryption only addresses confidentiality, not the full Security Rule." + - question: "How does the principle of least privilege apply to HIPAA web apps?" + answer: "Each user and service should only have access to the minimum PHI required for their role. Enforce permissions at the backend (not just the UI), scope access to specific records or actions, and audit access regularly. Frontend-only access controls are trivially bypassed and do not satisfy HIPAA expectations." + - question: "How does Appwrite help with HIPAA-aligned architectures?" + answer: "[Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), and [Storage](/docs/products/storage) centralize authentication, permissions, and audit-friendly logging at the backend, which reduces the ad-hoc security code where mistakes typically happen. HIPAA compliance still requires organizational processes, BAAs, and risk analysis on top of any platform." --- Modern healthcare software moves fast. Patient portals, telehealth platforms, clinical dashboards, and AI-powered tools are now built with the same technologies used across the broader web. But when an application handles protected health information (PHI), speed alone is not enough. Trust, safety, and responsibility become part of the product itself. diff --git a/src/routes/blog/post/hooks-appwrite-databases/+page.markdoc b/src/routes/blog/post/hooks-appwrite-databases/+page.markdoc index af4f54909f2..3d890ce7219 100644 --- a/src/routes/blog/post/hooks-appwrite-databases/+page.markdoc +++ b/src/routes/blog/post/hooks-appwrite-databases/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/hooks-appwrite-databases/cover.avif timeToRead: 10 author: aditya-oberai category: tutorial +faqs: + - question: "What is a hook in software engineering?" + answer: "A hook is a point in an application's execution where developers can inject custom code without modifying the core. Hooks let you intercept and transform data, trigger side effects, or extend behavior at well-defined moments like before a database write or after authentication." + - question: "How does Appwrite use hooks in its Databases service?" + answer: "Appwrite's Databases service uses hooks as custom filters in the Utopia PHP Databases library. Each filter has a name, an encode function (run on writes), and a decode function (run on reads). This is how Appwrite handles password hashing, encryption of secrets, and DateTime conversions transparently." + - question: "What's the difference between an encode and decode filter?" + answer: "An encode function runs when data is written to the database, transforming the value before storage (for example, encrypting it). A decode function runs when data is read, reversing the transformation so callers see the original shape (for example, decrypting it). Together they let storage and application representations differ cleanly." + - question: "Where should I add a hook in my own application?" + answer: "Pick hook points that correspond to clear lifecycle events: pre-write validation, post-read transformation, pre-request authentication, post-response logging. Avoid spreading hooks across arbitrary call sites, since that makes the execution order hard to reason about and easy to break later." + - question: "Are hooks the same thing as middleware?" + answer: "They overlap but are not identical. Middleware typically wraps an entire request/response cycle, while hooks fire at specific named points inside a library or framework. Middleware is one common implementation of hooks for the HTTP layer, but hooks exist at many other layers including database, ORM, and UI rendering." + - question: "Does [Appwrite Functions](/docs/products/functions) let me hook into database events?" + answer: "Yes. You can configure an Appwrite Function to run on database events like document creation, updates, or deletes. This gives you an event-driven hook outside the database layer, useful for sending notifications, syncing third-party services, or running async business logic after a write." --- Software engineering is complex, especially when you aim to build robust applications. For example, you may want to handle type conversions and clean your data before storing it in your database, add external loggers and observability tools, or add additional user authentication factors for specific functionalities. At some point, the need for extensibility will inevitably arise in your software. diff --git a/src/routes/blog/post/host-ssr-web-apps-sites/+page.markdoc b/src/routes/blog/post/host-ssr-web-apps-sites/+page.markdoc index 5d7b47763d9..b7dc80cbc65 100644 --- a/src/routes/blog/post/host-ssr-web-apps-sites/+page.markdoc +++ b/src/routes/blog/post/host-ssr-web-apps-sites/+page.markdoc @@ -9,6 +9,19 @@ author: ebenezer-don category: tutorial featured: false callToAction: true +faqs: + - question: "What is SSR and when should I use it instead of static rendering?" + answer: "Server-Side Rendering generates pages on the server at request time, so each user gets dynamic content based on their session, location, or live data. Use it when pages depend on per-request state (auth, personalization, real-time data) or need SEO-friendly dynamic content. For pages that don't change between users, static generation is faster and cheaper." + - question: "Does [Appwrite Sites](/docs/products/sites) support SSR?" + answer: "Yes. Appwrite Sites supports SSR alongside Client-Side Rendering and Static Site Generation. It runs your app on a Node.js server runtime where SSR is needed, and you configure the build settings to match your framework." + - question: "I'm migrating from Vercel. What do I need to change?" + answer: "Most frameworks ship Vercel-specific adapters that won't run on Appwrite's Node.js runtime. For SvelteKit, switch from `@sveltejs/adapter-vercel` to `@sveltejs/adapter-node`. For Next.js, remove the `output` field from `next.config.js` so Next.js uses its default behavior. Nuxt usually works without changes." + - question: "What output directory should I use for Next.js on Appwrite Sites?" + answer: "Keep the output directory as `./.next`, which is the default Next.js build location. Do not set the `output` field in `next.config.js`, since that's a Vercel-specific setting and interferes with how Appwrite handles the build." + - question: "Can I import environment variables from an existing .env file?" + answer: "Yes. In the deployment configuration page, you can define environment variables manually or import them from an existing .env file. These are made available at both build time and runtime depending on framework conventions." + - question: "Does Appwrite Sites auto-deploy on every Git push?" + answer: "Yes. Once you connect a GitHub repository and pick a production branch, Appwrite pulls new commits, rebuilds, and deploys automatically. You can enable silent mode if you don't want it to add comments on GitHub PRs." --- When you're building a modern web app, how you serve your content matters. Some pages need to be pre-rendered ahead of time for speed. Others need to be generated dynamically on the server for personalization or real-time data. This process is called Server-Side Rendering (SSR), and Appwrite Sites supports SSR, just like it supports Client-Side Rendering (CSR) and Static Site Generation (SSG). diff --git a/src/routes/blog/post/hosting-flutter-web/+page.markdoc b/src/routes/blog/post/hosting-flutter-web/+page.markdoc index a74c929ba32..1d0b33609b6 100644 --- a/src/routes/blog/post/hosting-flutter-web/+page.markdoc +++ b/src/routes/blog/post/hosting-flutter-web/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: steven category: product, init featured: false +faqs: + - question: "Can I deploy a Flutter web app on [Appwrite Sites](/docs/products/sites)?" + answer: "Yes. Appwrite Sites natively supports Flutter web as a framework. It auto-detects Flutter projects, applies sensible defaults for the install and build commands, and serves the static output from `./build/web`. No manual platform-specific configuration is required." + - question: "What are the default build settings for a Flutter web site on Appwrite?" + answer: "Leave the install command empty, set the build command to `flutter build web`, and use `./build/web` as the output directory. Connect your GitHub repo and Appwrite handles the rest, including redeploys on every push." + - question: "Why deploy a Flutter web app instead of an Android or iOS app?" + answer: "Web deployment skips the store approval process, the \\$25 Android and \\$99/year Apple developer accounts, and platform-specific review delays. Users can access the app from any browser on any device the moment you push, and you keep the same Dart codebase." + - question: "Can I use Flutter web for auth callbacks and email verification pages?" + answer: "Yes, and this is a common pattern even when your primary app is mobile. You can build the email verification, password reset, or payment confirmation pages as a small Flutter web app and host them on Sites, keeping everything in one Dart codebase instead of stitching together separate HTML pages." + - question: "Does Flutter web hosting work on self-hosted Appwrite?" + answer: "Yes. Sites for Flutter works on both Appwrite Cloud and self-hosted Appwrite. The same auto-detection, GitHub integration, and build pipeline are available regardless of where Appwrite is running." + - question: "How does Flutter web compare to mobile Flutter for performance?" + answer: "Flutter web ships a larger initial bundle than a native mobile app because it includes the rendering engine, so first-load times can be slower on poor connections. Once loaded, runtime performance is usually fine for most apps. If first-load matters (marketing sites, etc.), a native web framework may still be a better fit." --- Appwrite has long been a powerful backend platform for Flutter developers building mobile applications. Today, we’re bringing that same seamless experience to the web. With full support for Flutter in [Appwrite Sites](/products/sites), you can now deploy Flutter web apps directly from your Appwrite project. No extra configuration, no added complexity. diff --git a/src/routes/blog/post/how-appwrite-makes-auth-easy-for-ecommerce/+page.markdoc b/src/routes/blog/post/how-appwrite-makes-auth-easy-for-ecommerce/+page.markdoc index feea491e9d0..76d7e2cec44 100644 --- a/src/routes/blog/post/how-appwrite-makes-auth-easy-for-ecommerce/+page.markdoc +++ b/src/routes/blog/post/how-appwrite-makes-auth-easy-for-ecommerce/+page.markdoc @@ -9,6 +9,19 @@ author: laura-du-ry callToAction: true unlisted: true category: product +faqs: + - question: "What sign-in methods does Appwrite support for an e-commerce store?" + answer: "[Appwrite Auth](/docs/products/auth) supports email/password, anonymous login (useful for guest checkout), OAuth providers like Google, Apple, GitHub, and Discord, and Magic URL passwordless sign-in. You can combine them so users pick whichever flow suits them." + - question: "How does anonymous login work for guest checkout?" + answer: "Anonymous login creates a temporary session without requiring email or password. The user can browse, add items to the cart, and complete checkout. You can later convert that anonymous session into a permanent account by attaching credentials, so their order history follows them after sign-up." + - question: "Does Appwrite support two-factor authentication?" + answer: "Yes. Appwrite has built-in support for TOTP-based multi-factor authentication compatible with apps like Google Authenticator and 1Password. See the [MFA docs](/docs/products/auth/mfa) for setup. No extra backend work is required to enable it." + - question: "How can I reduce checkout friction with authentication?" + answer: "Magic URL sign-in sends the user a one-time login link by email so they skip passwords entirely. Anonymous sessions let users start checkout without signing up first. OAuth (Google, Apple) lets returning customers log in with one tap. Combining these typically lifts conversion versus password-only flows." + - question: "Is Appwrite Auth GDPR and privacy compliant?" + answer: "Appwrite Cloud is GDPR compliant, with encrypted credential storage and fine-grained permissions for user data. You're still responsible for your overall data handling, retention policies, and consent flows, but the authentication layer itself is built with privacy regulations in mind." + - question: "Which SDKs can I use to integrate Appwrite Auth?" + answer: "Appwrite ships official client SDKs for Web, Flutter, iOS (Swift), Android (Kotlin), and React Native, plus server SDKs for Node.js, Python, Dart, PHP, Ruby, .NET, and Go. The auth API is identical across SDKs, so you can use the same flow on web and mobile." --- Building an e-commerce platform today is more than just creating a catalog and checkout flow. Security, user experience, and scalability are critical, and authentication sits right at the heart of it all. Whether you're launching a small boutique or scaling a global marketplace, handling authentication correctly can make or break your app. diff --git a/src/routes/blog/post/how-nosql-databases-handle-unstructured-ai-data-text-images-embeddings/+page.markdoc b/src/routes/blog/post/how-nosql-databases-handle-unstructured-ai-data-text-images-embeddings/+page.markdoc index 1211cf37282..7c1c221bcbd 100644 --- a/src/routes/blog/post/how-nosql-databases-handle-unstructured-ai-data-text-images-embeddings/+page.markdoc +++ b/src/routes/blog/post/how-nosql-databases-handle-unstructured-ai-data-text-images-embeddings/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: atharva category: product featured: false +faqs: + - question: "Why are NoSQL databases better for AI applications than relational ones?" + answer: "AI workloads produce nested, variable-shape data: prompts, responses, embeddings, token counts, tool calls, and metadata that all evolve as the model and product change. Document-based NoSQL stores this as-is without schema changes, while relational databases require migrations every time the shape shifts." + - question: "Where should image and file binaries actually live?" + answer: "Store the binaries themselves in object storage (like [Appwrite Storage](/docs/products/storage) or S3) and keep the metadata, processing status, AI-generated descriptions, and references in the database. NoSQL handles the variable metadata shape cleanly while object storage handles the bulk bytes efficiently." + - question: "Can NoSQL databases store vector embeddings?" + answer: "Yes. NoSQL document databases can store embeddings alongside the metadata they need to be useful (source document, permissions, content type, timestamps). Keeping them in the same document avoids joins at retrieval time and keeps filters fast as the embedding count grows." + - question: "Does Appwrite support MongoDB?" + answer: "Yes, Appwrite's self-hosted version supports MongoDB natively. You can configure your self-hosted Appwrite instance to use MongoDB instead of the default database. See the [self-hosted MongoDB integration guide](/integrations/self-hosted-mongodb) for setup steps." + - question: "Do I lose anything by choosing NoSQL over a relational database?" + answer: "You lose strict referential integrity, traditional foreign-key joins, and some kinds of multi-table transactions. For AI pipelines this trade is usually worth it, since the data is naturally denormalized and most reads are single-document fetches. For heavily relational domains (accounting, inventory), a relational database is often the better fit." + - question: "What does an AI backend need beyond a database?" + answer: "Production AI apps also need file storage for documents and images, auth and access control for permissioned data, and functions or webhooks for asynchronous pipelines. Bundling these together (as Appwrite does) saves the work of assembling separate auth, storage, and compute services around the database." --- Most AI systems have a data problem that isn't about the model. It's about everything the model touches, the prompts going in, the outputs coming out, the embeddings powering retrieval, and the metadata tying it all together. None of this fits neatly into rows and columns. That's the core reason NoSQL for unstructured data is growingly becoming the standard in production AI systems. diff --git a/src/routes/blog/post/how-to-attract-users-to-open-source-project/+page.markdoc b/src/routes/blog/post/how-to-attract-users-to-open-source-project/+page.markdoc index 06b6404f08d..3aefb5d2b18 100644 --- a/src/routes/blog/post/how-to-attract-users-to-open-source-project/+page.markdoc +++ b/src/routes/blog/post/how-to-attract-users-to-open-source-project/+page.markdoc @@ -7,6 +7,19 @@ timeToRead: 7 date: 2024-07-05 author: aditya-oberai category: open-source +faqs: + - question: "How do I get the first contributors to my open-source project?" + answer: "Solve a real problem you faced yourself, then publish clear documentation and a getting-started guide. Most early contributors find projects through Hacker News, Reddit, or word of mouth, so a viral launch moment helps. After that, focus on responding fast to issues and PRs so initial contributors stick around." + - question: "Why is documentation so important for open-source growth?" + answer: "Developers test new tools for roughly 3 seconds before deciding whether to look for help. If your docs do not get them to a working setup quickly, they bounce. Documentation is also the first thing potential contributors read to decide whether your project is worth their time." + - question: "How does Appwrite engage its open-source community?" + answer: "Appwrite runs a public Discord server with dedicated support channels staffed by maintainers and community Heroes. The team hosts regular Office Hours, ships swag to top contributors, and participates in events like Hacktoberfest. Recognition and consistent responsiveness do most of the work." + - question: "Do I need a budget for swag to reward contributors?" + answer: "No. Public shoutouts on social media, contributor highlights in release notes, and Discord roles all signal appreciation without costing anything. Swag is nice when you can afford it, but it's the recognition itself that matters most to contributors." + - question: "How do I tell my project's story without sounding like marketing?" + answer: "Write in your own voice and talk about the actual problem you're solving, the trade-offs you made, and what you learned. Developers respond to honesty about what your tool does and doesn't do. Avoid superlatives and feature lists, lead with concrete use cases instead." + - question: "Should I publish a code of conduct and contribution guidelines?" + answer: "Yes. A code of conduct sets community expectations and signals safety for new contributors. Contribution guidelines reduce review friction by telling people how to format PRs, write commit messages, and run tests. Both are table stakes for any serious open-source project." --- The open-source community is a remarkable space. In this unique corner of the Internet, developers come together to collaborate, help out, and build solutions without expecting anything in return. This generosity makes it an excellent environment for developers trying to build the next big thing with limited resources. diff --git a/src/routes/blog/post/how-to-build-a-remote-tech-stack/+page.markdoc b/src/routes/blog/post/how-to-build-a-remote-tech-stack/+page.markdoc index 5f835e00fa6..4abbfce9225 100644 --- a/src/routes/blog/post/how-to-build-a-remote-tech-stack/+page.markdoc +++ b/src/routes/blog/post/how-to-build-a-remote-tech-stack/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/how-to-build-remote-tech-stack/cover.avif timeToRead: 5 author: snezhanna category: product +faqs: + - question: "What tools does Appwrite use for remote team communication?" + answer: "Appwrite uses Discord for real-time team chat, including a lobby channel that mimics a virtual water cooler. Each team has its own channels for focused work and there are cross-team channels for shared topics. Discord doubles as both internal communication and the home of the public Appwrite community server." + - question: "Why use Linear instead of Jira or GitHub Issues for project management?" + answer: "Linear is built around 2-week cycles and a developer-friendly UX. It enforces clear ownership, due dates, and progress states without the configuration overhead Jira tends to grow. The constrained cycle model helps remote teams ship instead of letting work expand to fill unlimited time." + - question: "How do you handle async work across time zones?" + answer: "Default to written updates, decisions, and documentation. Use Loom for walkthroughs instead of meetings. Reserve synchronous calls for high-bandwidth discussions and use written tools (Notion, Linear, Slack/Discord) for everything else. Distinct working hours and clear expectations on response times also matter." + - question: "What is a privacy-friendly remote tech stack?" + answer: "It's a stack of tools that minimize tracking and respect user data, often favoring open-source options. Appwrite uses Plausible instead of Google Analytics, Notion or open-source alternatives for docs, and avoids marketing pixels and trackers on its sites. The goal is to treat your team and users the way you'd want a vendor to treat you." + - question: "Do I need expensive enterprise tools to run a remote startup?" + answer: "No. Many of the tools in this stack have generous free tiers. Discord, Figma (free for small teams), Linear, Notion, and Loom all let small teams get started without a budget. Pay for the ones that become load-bearing and skip the rest until you actually need them." + - question: "How do you build culture in a fully remote company?" + answer: "Culture emerges from rituals, not org charts. Regular all-hands, lightweight social channels, in-person offsites when possible, and consistent recognition of good work all help. Hiring people who already thrive async (and writing down decisions so they're discoverable) is more important than any specific tool." --- Building a remote company? Awesome! You've probably read many great stories about the benefits of work-life balance, working from anywhere, and hiring global talent. Or you might come from a 9 to 5 office job and think: never again! Either way, you're here because you now might be wondering, how do I actually communicate, organize, hire, and work fully remotely? diff --git a/src/routes/blog/post/how-to-build-your-digital-event-tickets/+page.markdoc b/src/routes/blog/post/how-to-build-your-digital-event-tickets/+page.markdoc index 44a04f5409c..4c3d8c49fb2 100644 --- a/src/routes/blog/post/how-to-build-your-digital-event-tickets/+page.markdoc +++ b/src/routes/blog/post/how-to-build-your-digital-event-tickets/+page.markdoc @@ -7,6 +7,20 @@ cover: /images/blog/tickets-cover.avif timeToRead: 12 author: laura-du-ry category: init +faqs: + - question: "How did Appwrite build the Init tickets?" + answer: "Appwrite used GitHub OAuth (through [Appwrite Auth](/docs/products/auth)) to connect users' accounts, then scraped the GitHub contributions graph server-side using `node-html-parser`. The team converted the HTML grid into a matrix of contribution levels and rendered that as the side panel of each ticket." + - question: "Why scrape GitHub's contribution graph instead of using the API?" + answer: "The GitHub GraphQL API returns the raw contribution counts but not the level (0 to 4) shown on the profile graph. GitHub does not expose the algorithm that maps counts to levels, so the team fetched the rendered HTML and parsed it to match the public chart exactly." + - question: "What framework is the Appwrite site built with?" + answer: "The Appwrite website (including the Init ticket flow) is built with SvelteKit. SvelteKit gives the team full-stack control, so they can run server-side HTML scraping in the same project as the client-side ticket UI without a separate backend." + - question: "How do I add GitHub OAuth to my own app with Appwrite?" + answer: "Create a GitHub OAuth app in your GitHub developer settings, then add the client ID and secret to the GitHub provider in [Appwrite Auth](/docs/products/auth). Use `account.createOAuth2Session('github', success, failure)` from the client SDK to start the flow. The OAuth callback URL must match the one Appwrite gives you." + - question: "Where do the ticket designs come from?" + answer: "The Appwrite team was inspired by physical event badges from GitHub Universe 2023, which featured a contributions grid on the side. They adapted that into three ticket variants: a default Init celebration ticket, a pink Appwrite developer ticket, and a platinum ticket for Appwrite contributors." + - question: "Can I build similar collectible cards for my own product launch?" + answer: "Yes, the pattern is straightforward: an OAuth login to identify the user, a server-side fetch to pull personalized data, and a renderer (SVG, Canvas, or styled HTML) that produces a unique card per user. The hardest part is usually the design, not the engineering." +--- --- Do you remember the Appwrite [Cloud cards](https://dev.to/appwrite/how-we-implemented-the-card-animation-in-appwrite-cloud-public-beta-4npb)? They were an absolute hit and filled our entire timeline for days. For Init, we wanted to create a new card, or better yet, a ticket to celebrate in style. So, we created three types of tickets that are unique to you with the help of your GitHub contributions and the tribe customization. diff --git a/src/routes/blog/post/how-to-execute-database-migration-with-appwrite-cli/+page.markdoc b/src/routes/blog/post/how-to-execute-database-migration-with-appwrite-cli/+page.markdoc index 9bab39221c9..7d222851cfa 100644 --- a/src/routes/blog/post/how-to-execute-database-migration-with-appwrite-cli/+page.markdoc +++ b/src/routes/blog/post/how-to-execute-database-migration-with-appwrite-cli/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/how-to-migrate-database-with-cli/cover.avif timeToRead: 5 author: ebenezer-don category: product +faqs: + - question: "What does `appwrite.config.json` do in the Appwrite CLI?" + answer: "`appwrite.config.json` is the source of truth for your project's collections, functions, and other resources. You commit it to Git, edit it like any other config, and use `appwrite push` to apply changes. This lets you track schema history, code-review migrations, and replicate projects across environments." + - question: "How do I pull my existing database schema into the CLI?" + answer: "Run `appwrite pull collections --all` to download the current schema from your Appwrite project into `appwrite.config.json`. This gives you a baseline you can version, modify, and push back. It's the recommended first step before making schema changes." + - question: "How does GitOps work with [Appwrite Databases](/docs/products/databases)?" + answer: "You keep `appwrite.config.json` in a Git repo, treat schema changes as PRs, and run `appwrite push collections` from CI to apply approved changes. This gives you review, rollback (via Git history), and consistent deploys across staging and production without manual console clicks." + - question: "Can I rename a collection or attribute safely?" + answer: "Renaming an attribute is essentially a delete and create, so any existing data on the old name will not move automatically. For schema changes that need data migration, plan a two-step approach: add the new field, backfill data with a script or function, then remove the old field once everything is migrated." + - question: "How do I replicate a project to a new environment?" + answer: "Copy `appwrite.config.json` to the new project, switch the CLI's project context (`appwrite client --projectId `), and run `appwrite push collections`. This creates the same schema in the target project without manual setup, which is useful for staging, demo, or per-customer environments." + - question: "What happens if `appwrite push` fails partway through?" + answer: "The CLI applies changes attribute by attribute, so a failure can leave you in a partial state. Check the error output, fix the underlying issue (often a constraint conflict or invalid type), and rerun the push. Avoid running migrations directly against production without first testing them in a staging project." --- Database migration is a critical task in the lifecycle of any application. It involves making schema changes while ensuring that data remains intact, often to accommodate new features, improve performance, or ensure scalability. With the release of the new Appwrite CLI, the process of planning and executing database migrations has become significantly easier. The new CLI features allow you to manage your database schemas more efficiently, ensuring smooth transitions and minimal downtime. diff --git a/src/routes/blog/post/how-to-leverage-dynamic-api-keys-for-better-security/+page.markdoc b/src/routes/blog/post/how-to-leverage-dynamic-api-keys-for-better-security/+page.markdoc index ece132b96a1..2f184040140 100644 --- a/src/routes/blog/post/how-to-leverage-dynamic-api-keys-for-better-security/+page.markdoc +++ b/src/routes/blog/post/how-to-leverage-dynamic-api-keys-for-better-security/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: ebenezer-don category: product featured: false +faqs: + - question: "What are dynamic API keys in Appwrite?" + answer: "Dynamic keys (also called ephemeral keys) are short-lived API keys that Appwrite generates automatically for each [Function](/docs/products/functions) execution. They're scoped to the function's configured permissions and expire when the execution finishes, which reduces the blast radius of a leaked key." + - question: "How do I access a dynamic API key inside my function?" + answer: "Read it from `req.headers['x-appwrite-key']`. Pass that value to `.setKey()` on your Appwrite client, along with the project ID from `APPWRITE_FUNCTION_PROJECT_ID` and the endpoint from `APPWRITE_FUNCTION_API_ENDPOINT`. No manual key creation or rotation required." + - question: "What's the difference between dynamic and standard API keys?" + answer: "Standard keys are manually created, long-lived, and require you to rotate them periodically. Dynamic keys are auto-generated per execution, expire when the function ends, and respect the scopes you set on the function. Dynamic keys are the recommended default; use standard keys only when a third-party service needs a stable long-lived key." + - question: "How do I configure scopes for a dynamic key?" + answer: "In the Appwrite Console, open your function's settings and scroll to the Scopes section. Pick the minimum scopes the function actually needs (for example, `databases.read`, `users.write`). Dynamic keys inherit these scopes, so over-scoping a function over-scopes every execution." + - question: "Do dynamic keys work in local development?" + answer: "Yes. When you run functions locally with the Appwrite CLI, the dynamic key still respects the scopes defined in `appwrite.config.json`. This keeps local and production behavior consistent so you can catch permission errors before deploying." + - question: "Should I still set an `APPWRITE_API_KEY` environment variable?" + answer: "Not for the function itself. The endpoint and project ID come from `APPWRITE_FUNCTION_API_ENDPOINT` and `APPWRITE_FUNCTION_PROJECT_ID`, and the key comes from the request header. Only set a static `APPWRITE_API_KEY` if your function calls an external service that requires one." --- Appwrite now features dynamic keys, significantly improving how you manage API keys within your projects. These keys (also known as ephemeral keys) are designed to enhance security and facilitate easier local development and environment setup. As part of the Appwrite Functions ecosystem, they reduce the need for manual key management and rotation, making your applications (and functions!) easier to maintain. diff --git a/src/routes/blog/post/how-to-reduce-cloud-latency/+page.markdoc b/src/routes/blog/post/how-to-reduce-cloud-latency/+page.markdoc index ce2ca8f5fc1..d50ee2429d7 100644 --- a/src/routes/blog/post/how-to-reduce-cloud-latency/+page.markdoc +++ b/src/routes/blog/post/how-to-reduce-cloud-latency/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 9 author: christy-jacob category: Tutorial callToAction: true +faqs: + - question: "What is cloud latency and why does it matter?" + answer: "Cloud latency is the time it takes for data to travel between a user's device and the cloud server, plus the server's response time. High latency causes slow page loads, video buffering, and poor real-time experiences. Lower latency directly affects conversion, engagement, and search rankings." + - question: "How does a CDN reduce latency?" + answer: "A Content Delivery Network caches your static content on edge servers distributed globally. When a user requests a file, they receive it from the nearest edge instead of your origin server, shortening the network round trip. CDNs are most effective for media-heavy sites and global audiences." + - question: "Why does choosing a cloud region matter?" + answer: "Physical distance still bounds latency. Hosting your backend in a region close to your users cuts round-trip time meaningfully (often 50 to 200ms for transcontinental hops). The [Appwrite Network](/docs/products/network) offers multiple regions so you can deploy close to your user base." + - question: "What regions does the Appwrite Network support?" + answer: "The Appwrite Network has expanded beyond the original Frankfurt region to include New York and Sydney, with more regions on the roadmap. See the [Appwrite Network docs](/docs/products/network) for the current list and details on how to pick a region for your project." + - question: "How much does latency actually affect user behavior?" + answer: "Studies show that nearly half of users abandon a page that takes more than 3 seconds to load. In e-commerce, every additional second of delay measurably drops conversion. Search engines like Google also factor page load times into rankings, so latency affects acquisition as well as retention." + - question: "Besides CDNs and region choice, what else reduces latency?" + answer: "Cache aggressively at every layer (browser, edge, application, database), batch and deduplicate requests, use HTTP/2 or HTTP/3, optimize asset sizes (compression, image formats), and avoid unnecessary round trips. Backend optimizations like indexing slow queries and using connection pooling also matter once network latency is minimized." --- Whether users are streaming a video, loading a webpage, or interacting with an app, they expect things to work fast. One key factor that affects the speed of cloud services is *cloud latency*: the delay between a user's request and the cloud's response. But why does this matter, and how can reducing latency make your apps and services faster and more efficient? diff --git a/src/routes/blog/post/image-classification/+page.markdoc b/src/routes/blog/post/image-classification/+page.markdoc index 88aa2b2ccfc..702cfc0a7cc 100644 --- a/src/routes/blog/post/image-classification/+page.markdoc +++ b/src/routes/blog/post/image-classification/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/image-classification.avif timeToRead: 9 author: bradley-schofield category: product +faqs: + - question: "What is image classification?" + answer: "Image classification is a computer vision task where a model takes an image and assigns it one or more labels describing what's in it. Use cases include moderating user uploads, categorizing product photos, organizing media libraries, and tagging content for search. It's distinct from object detection, which also locates objects within the image." + - question: "Which architectures lead image classification benchmarks today?" + answer: "Vision Transformers (ViT, Swin Transformer) currently top most major benchmarks including ImageNet, CIFAR-10, and STL-10. Convolutional Neural Networks (CNNs) like EfficientNet still hold their ground on datasets with many classes (CIFAR-100) and remain more data-efficient than transformers." + - question: "What datasets should I train on?" + answer: "ImageNet is the standard for general-purpose classification with 14 million labeled images across thousands of categories. CIFAR-10 and CIFAR-100 are smaller (60K images at 32x32) and useful for fast iteration. MNIST handles handwritten digits. For domain-specific apps, you'll usually need to collect or fine-tune on your own labeled data." + - question: "How do I deploy an image classification model with Appwrite?" + answer: "Train your model with TensorFlow or PyTorch on your own machine, export it, and ship the inference code as an [Appwrite Function](/docs/products/functions). The function receives the image (from [Appwrite Storage](/docs/products/storage) or as an upload), runs inference, and returns the prediction. Functions support Python out of the box." + - question: "Should I use a pre-trained model or train from scratch?" + answer: "For most apps, fine-tune a pre-trained model. Models like ResNet, EfficientNet, or a ViT pretrained on ImageNet already have strong visual features baked in, and fine-tuning on a few hundred to few thousand domain images often outperforms training from scratch and takes a fraction of the compute." + - question: "How does a CNN actually classify an image?" + answer: "A CNN runs the image through a stack of convolutional layers that detect progressively higher-level features (edges, textures, then object parts), pooling layers that downsample, and finally fully connected layers that map the extracted features to class probabilities. Training adjusts the filter weights via backpropagation to minimize classification error." --- Image classification is an exciting field of computer vision that tries to understand and label images in their entirety. It has many applications: you can integrate it into your app to automatically categorize photos, filter inappropriate content from social media feeds, or even organize your online store's product catalog. diff --git a/src/routes/blog/post/image-transformation-with-appwrite-storage/+page.markdoc b/src/routes/blog/post/image-transformation-with-appwrite-storage/+page.markdoc index 767d703191d..74348eccee4 100644 --- a/src/routes/blog/post/image-transformation-with-appwrite-storage/+page.markdoc +++ b/src/routes/blog/post/image-transformation-with-appwrite-storage/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/image-transformation-with-appwrite-storage/cover.avif timeToRead: 6 author: ebenezer-don category: tutorial +faqs: + - question: "How does Appwrite transform images on the fly?" + answer: "Appwrite uses the Storage preview endpoint to apply transformations dynamically when retrieving an image. The original file stays untouched, and Appwrite generates and caches the modified version on demand. See [Appwrite Storage](/docs/products/storage) for the full list of supported parameters." + - question: "What image transformations does Appwrite support?" + answer: "Appwrite supports resizing, cropping, compression, format conversion, borders, rounded corners, opacity changes, rotation, and background colors. You can also chain multiple transformations in a single request to the preview endpoint." + - question: "Which output formats can I convert images to?" + answer: "Appwrite Storage previews can output JPG, PNG, WebP, AVIF, and GIF. WebP and AVIF give the best compression for the web and are typically the right default for new projects." + - question: "Does Appwrite cache transformed images?" + answer: "Yes, transformed images are cached automatically. Repeat requests for the same transformation are served from cache, so you don't pay the processing cost on every page load." + - question: "Should I store pre-resized images or transform on the fly?" + answer: "Transforming on the fly avoids maintaining multiple file variants and keeps your storage layer simple. Pre-resizing only makes sense if you have a fixed set of dimensions and want to skip the first request's processing latency." + - question: "What is the difference between image transformation and a media CDN?" + answer: "Image transformation handles resizing, cropping, and format conversion at request time. A media CDN handles global delivery and caching. Appwrite Storage previews give you both since the responses are cached and served from Appwrite's network." --- Images are a core part of any modern web or mobile application. Whether you're displaying user avatars, product thumbnails, or full-screen backgrounds, images need to be optimized for performance, aesthetics, and consistency. Loading large, uncompressed images can slow down your app, and mismatched styles can break your UI. This is why dynamic image transformation should be a part of your app. diff --git a/src/routes/blog/post/implement-sign-in-with-github/+page.markdoc b/src/routes/blog/post/implement-sign-in-with-github/+page.markdoc index 09879446254..3cd11d6eed3 100644 --- a/src/routes/blog/post/implement-sign-in-with-github/+page.markdoc +++ b/src/routes/blog/post/implement-sign-in-with-github/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/implement-sign-in-with-github/cover.avif timeToRead: 10 author: ebenezer-don category: tutorial +faqs: + - question: "How does GitHub OAuth work with Appwrite?" + answer: "You register an OAuth app on GitHub, paste the client ID and secret into the GitHub provider in [Appwrite Auth](/docs/products/auth), and call the OAuth2 session endpoint from your client. Appwrite handles the token exchange and creates a session for the user." + - question: "What callback URL should I use for GitHub OAuth?" + answer: "Use the callback URL that Appwrite generates when you enable the GitHub provider, not a URL from your own app. Appwrite handles the token exchange and then redirects the user back to a success URL that you specify." + - question: "Can I access the user's GitHub profile data after login?" + answer: "Yes. Once the session is created, you can call account.get() to read the user's identity. To access GitHub APIs directly, request the provider access token via the account identities endpoint." + - question: "Do I need a backend to implement Sign in with GitHub?" + answer: "No. The flow described in the post uses only the client SDK, since Appwrite handles the OAuth exchange server side on your behalf. You only need a backend if you want to call GitHub APIs from a trusted environment." + - question: "How do I add more OAuth providers later?" + answer: "Each provider is a separate entry in the Auth settings of your Appwrite project. The client side flow is identical, so you can wire up Google, Apple, or Discord with only minimal changes to your code." + - question: "What scopes does Appwrite request from GitHub by default?" + answer: "By default, Appwrite requests the user's basic profile and email. You can pass additional scopes (for example, repo or read:org) when initiating the OAuth2 session if your app needs broader access." --- If you're building an app that developers will use, adding GitHub login makes things easier for your users. In this tutorial, you'll learn how to create a GitHub login system using Vanilla JavaScript and Appwrite. By the end, your users will be able to log in with their GitHub accounts, see personalized details, and log out. diff --git a/src/routes/blog/post/improve-devex-dev-keys/+page.markdoc b/src/routes/blog/post/improve-devex-dev-keys/+page.markdoc index 68bba785d83..32aea9a82d7 100644 --- a/src/routes/blog/post/improve-devex-dev-keys/+page.markdoc +++ b/src/routes/blog/post/improve-devex-dev-keys/+page.markdoc @@ -9,6 +9,19 @@ author: aditya-oberai category: tutorial featured: false callToAction: true +faqs: + - question: "What are Appwrite dev keys?" + answer: "Dev keys are secrets used by Appwrite's client SDKs that bypass rate limits and suppress CORS errors caused by unconfigured hostnames. They are designed for local development, automated tests, and CI/CD workflows where strict client limits get in the way." + - question: "How is a dev key different from an API key?" + answer: "API keys are server side credentials with scoped permissions and are used by the server SDKs. Dev keys are tied to client SDKs and only relax rate limiting and hostname checks. They do not grant elevated permissions to bypass collection or storage rules." + - question: "Are dev keys safe to use in production?" + answer: "No. Dev keys disable protections that exist specifically to prevent abuse, so shipping one in a production app exposes you to floods of requests and denial of service. Use them only in development, testing, and CI environments." + - question: "How long does a dev key last?" + answer: "When you create a dev key, you pick an expiration of 1 day, 7 days, or 30 days. The key stops working after that window, which limits the blast radius if it ever leaks." + - question: "Can I use dev keys in CI/CD pipelines?" + answer: "Yes, that is one of the primary use cases. A dev key lets your test suite hit Appwrite endpoints without being throttled, so end to end tests stay reliable even when they run hundreds of requests in a short window." + - question: "Where do I create a dev key for my project?" + answer: "Open your project in the Appwrite Console, go to the Overview page, and use the Dev Keys section. You can generate, copy, and rotate keys from there without affecting your existing API keys." --- When building applications with Appwrite, developers often need a way to test and debug services repeatedly over short periods. Sometimes, this can become a hassle, as Appwrite enforces strict rate limits on client apps to prevent abuse. Developers needed a way to bypass these rate limits in their test environments and CI/CD workflows to ensure the robustness of their app functionalities. diff --git a/src/routes/blog/post/improve-ux-passwordless-auth/+page.markdoc b/src/routes/blog/post/improve-ux-passwordless-auth/+page.markdoc index 9b70ee73a5a..9942c5ae552 100644 --- a/src/routes/blog/post/improve-ux-passwordless-auth/+page.markdoc +++ b/src/routes/blog/post/improve-ux-passwordless-auth/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/improve-ux-passwordless-auth/cover.avif timeToRead: 6 author: aditya-oberai category: authentication +faqs: + - question: "What is passwordless authentication?" + answer: "Passwordless authentication verifies a user without asking them to type a password. Common methods include passkeys, magic links sent over email, and one time passcodes delivered by email or SMS." + - question: "Is passwordless authentication actually more secure than passwords?" + answer: "Yes, in most cases. Passwords get reused, phished, and leaked in breaches, while passkeys and one time codes do not have a long lived secret a user can spill. The remaining attack surface shifts to the delivery channel (email, SMS) or the device itself." + - question: "Which passwordless methods does Appwrite support?" + answer: "Appwrite supports magic URLs, email OTPs, and phone (SMS) authentication out of the box. They are all available through [Appwrite Auth](/docs/products/auth) and can be combined with OAuth providers in the same project." + - question: "Should I still offer email and password if I use passwordless?" + answer: "Not necessarily. Many products go fully passwordless to reduce support load from password resets. If your users are not all on modern devices, keeping a fallback (like email OTPs) avoids leaving anyone locked out." + - question: "How do magic links work behind the scenes?" + answer: "The server generates a one time token, embeds it in a URL, and emails it to the user. When the user clicks the link, the token is verified and a session is created. Tokens are single use and expire quickly to limit replay attacks." + - question: "Are passkeys the same as magic links?" + answer: "No. Passkeys are cryptographic credentials stored on a device and verified with biometrics or a PIN. Magic links rely on email delivery and a one time URL. Passkeys are stronger against phishing but require browser and device support." --- Today, as concerns about security and user convenience only grow with digital activity, traditional password-based authentication systems are becoming a relic of the past. In recent times, we have seen a rise in passwordless systems, which are increasingly seeing adoption in both small and big companies alike, such as Expensify (whose transition was also covered in a [Forbes article](https://www.forbes.com/sites/quickerbettertech/2023/05/29/on-technology-expensify-forces-passwordless-on-its-users-and-good-for-them/?sh=397a7b017cac) in 2023. A [survey from Enterprise Strategy Group](https://research.esg-global.com/reportaction/SecuringTheIdentityPerimeterReport/Toc), a division of TechTarget, in 2022 also revealed that: diff --git a/src/routes/blog/post/incident-report-feb-24/+page.markdoc b/src/routes/blog/post/incident-report-feb-24/+page.markdoc index eecbf827426..e2e6099ea90 100644 --- a/src/routes/blog/post/incident-report-feb-24/+page.markdoc +++ b/src/routes/blog/post/incident-report-feb-24/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 3 author: christy-jacob category: cloud featured: false +faqs: + - question: "What is an incident report?" + answer: "An incident report is a public write up of an outage or degradation, what caused it, who was affected, and how it was resolved. Mature cloud platforms publish them to keep customers informed and to document the lessons learned." + - question: "Why does Appwrite publish monthly incident reports?" + answer: "Transparency builds trust with developers who run production workloads on Appwrite Cloud. Sharing incidents, root causes, and mitigations gives customers the information they need to plan around any disruptions and to evaluate Appwrite's reliability over time." + - question: "How can I check the current status of Appwrite Cloud?" + answer: "Real time uptime and active incidents are published on the Appwrite status page. Each incident is updated as engineers investigate, mitigate, and resolve it." + - question: "What is a gateway timeout and why does it happen?" + answer: "A gateway timeout means a request reached the load balancer but the upstream service did not respond in time. It is usually caused by routing issues, an overloaded service, or a slow database query, not by the load balancer itself." + - question: "How does Appwrite reduce the chance of similar incidents?" + answer: "Each incident is followed by a postmortem that produces concrete action items, for example reverting a problematic config change, tightening alerts, or hardening deployment automation. Those items are tracked through to completion." + - question: "Does Appwrite Cloud offer a Service Level Agreement (SLA)?" + answer: "Appwrite Cloud offers SLAs on paid plans. The Cloud pricing page lists the current uptime commitments and how credits are handled if those targets are missed." --- As Appwrite Cloud continues to grow and scale, it is inevitable that we face challenges and obstacles that test the resilience of our systems and our team's ability to respond swiftly. February 2024 was no exception, as we encountered a series of incidents that put our protocols to the test. While these moments are opportunities for growth, they also remind us of the importance of transparency and communication with our community. This blog post aims to provide a detailed overview of the incidents we experienced throughout the month, including the causes, our responses, and the lessons learned. Our commitment to continuous improvement drives us to share these insights openly, reinforcing our dedication to reliability and trust. diff --git a/src/routes/blog/post/init-may-2025/+page.markdoc b/src/routes/blog/post/init-may-2025/+page.markdoc index e1e0782fd9c..16bce977f8f 100644 --- a/src/routes/blog/post/init-may-2025/+page.markdoc +++ b/src/routes/blog/post/init-may-2025/+page.markdoc @@ -9,6 +9,19 @@ author: eldad-fux category: init featured: false callToAction: true +faqs: + - question: "What is Appwrite Init?" + answer: "Init is Appwrite's week long launch event where new products and features are announced every day. It's the main moment each year for major Appwrite releases and community activity." + - question: "When did the May 2025 Init event take place?" + answer: "Init May 2025 ran from 19 to 23 May 2025, with announcements landing on each day of the week. The kickoff coincided with the Product Hunt launch on 19 May." + - question: "How can I follow new Appwrite launches?" + answer: "Grab a ticket on the Init page, follow Appwrite on social media, and join the Appwrite Discord server. Each day of Init has a livestream on the Appwrite YouTube channel covering the day's release." + - question: "Do I need to attend Init events to get access to new features?" + answer: "No. Anything announced during Init is rolled out to Appwrite Cloud and Appwrite Self Hosted on the same schedule shared during the event. The livestreams and blog posts cover the same content for anyone who joins later." + - question: "What kind of swag does Appwrite give away during Init?" + answer: "Each Init has a limited edition design with stickers, apparel, and other items. Tickets enter you into the giveaway, and winners are announced through Discord and email during the event." + - question: "Where do previous Init announcements live?" + answer: "Every Init release has a recap blog post on the Appwrite blog. Search for posts tagged with the init category to find the launches from previous events." --- We are about to blow your socks off with what comes next for Appwrite. diff --git a/src/routes/blog/post/integrate-custom-auth-sveltekit/+page.markdoc b/src/routes/blog/post/integrate-custom-auth-sveltekit/+page.markdoc index bf0af29aad9..048c918af96 100644 --- a/src/routes/blog/post/integrate-custom-auth-sveltekit/+page.markdoc +++ b/src/routes/blog/post/integrate-custom-auth-sveltekit/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 6 author: aditya-oberai category: product featured: false +faqs: + - question: "What is custom token authentication in Appwrite?" + answer: "Custom token authentication lets you use a Server SDK to generate a short lived token that the client SDK can exchange for a session. This way, you can code your own login flow (or wrap an external provider) while still issuing real Appwrite sessions. See [Appwrite Auth](/docs/products/auth) for details." + - question: "When should I use custom tokens instead of built in providers?" + answer: "Use custom tokens when you need to integrate a system Appwrite doesn't ship a first party provider for, like an internal SSO, a legacy database of users, or a specialized provider. For standard email, OAuth, or OTP flows the built in providers are simpler." + - question: "Can I run the token generation inside an Appwrite Function?" + answer: "Yes. [Appwrite Functions](/docs/products/functions) can host your custom auth logic and call the Server SDK to create the token. The client then exchanges that token for a session, which keeps your API key out of the browser." + - question: "How long is a custom auth token valid for?" + answer: "Custom tokens are short lived and intended to be exchanged for a session immediately after they are issued. Once exchanged, the session follows your project's normal session lifetime." + - question: "Why does this tutorial use SvelteKit?" + answer: "SvelteKit has built in server routes, so you can run the privileged token generation server side without spinning up a separate backend. The same pattern works in Next.js, Nuxt, Remix, or any framework with server side code." + - question: "Is custom token auth secure if I expose my API key to the client?" + answer: "Your API key must never reach the client. Token generation runs on a server (a SvelteKit endpoint, an Appwrite Function, or your own backend), and only the resulting token secret is returned to the browser to exchange for a session." --- Whether we contribute to any existing software or build new one, user authentication is a fundamental feature our users need. Between email-password authentication, magic URLs, phone and email OTPs, and 30+ OAuth providers, Appwrite offers a variety of 1st-party offerings for your apps. However, every now and then, you will need an authentication solution beyond this list. Fortunately, Appwrite now offers a solution that allows developers to integrate any external authentication method with their Appwrite project. diff --git a/src/routes/blog/post/integrate-resend-smtp/+page.markdoc b/src/routes/blog/post/integrate-resend-smtp/+page.markdoc index 906a2391a3a..acd546979b9 100644 --- a/src/routes/blog/post/integrate-resend-smtp/+page.markdoc +++ b/src/routes/blog/post/integrate-resend-smtp/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: aditya-oberai category: integrations callToAction: true +faqs: + - question: "What is Resend?" + answer: "Resend is an email API provider built for developers, with a clean REST API, custom domain support, and SDKs for popular languages. It also exposes SMTP credentials, which makes it easy to plug into existing email tooling." + - question: "How does Appwrite Messaging integrate with Resend?" + answer: "Appwrite Messaging supports a generic SMTP provider, which you point at Resend's SMTP host using your Resend API key as the password. After that, [Appwrite Messaging](/docs/products/messaging) handles delivery, scheduling, and per user targeting on top of Resend." + - question: "What SMTP settings should I use for Resend?" + answer: "Use smtp.resend.com on port 587 with the username 'resend' and your Resend API key as the password. Enable TLS, and set the sender email to an address on a domain you have verified in Resend." + - question: "Do I need to verify a domain before sending email?" + answer: "Yes. Resend requires you to verify a domain by adding DKIM and SPF DNS records. DMARC is optional but recommended for deliverability. Without verification, your emails will be rejected by most inbox providers." + - question: "Can I use Resend for transactional and marketing emails?" + answer: "Resend supports both, but you should split them by domain or subdomain so that promotional sends don't damage the reputation of transactional traffic. Configure separate SMTP providers in Appwrite if you want to keep the topics isolated." + - question: "What other SMTP providers does Appwrite Messaging work with?" + answer: "The SMTP provider is generic, so any host that exposes SMTP credentials works. Common options include Mailgun, SendGrid, Postmark, Amazon SES, and your own self hosted Postfix or Exim server." --- Pretty much every app we develop or consume requires a medium of communication with its users, whether that is to send notifications and reminders, execute marketing campaigns and newsletters, or share security-related information like one-time passwords. Such messages are often sent by apps via email. Lately, we have noticed that **Resend** has become one of the most popular email API providers among the developer community. diff --git a/src/routes/blog/post/integrate-sql-nosql-vector-graph-or-any-database-into-your-appwrite-project/+page.markdoc b/src/routes/blog/post/integrate-sql-nosql-vector-graph-or-any-database-into-your-appwrite-project/+page.markdoc index 8a3e28c989c..96a881bd127 100644 --- a/src/routes/blog/post/integrate-sql-nosql-vector-graph-or-any-database-into-your-appwrite-project/+page.markdoc +++ b/src/routes/blog/post/integrate-sql-nosql-vector-graph-or-any-database-into-your-appwrite-project/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 9 author: matej-baco category: product featured: false +faqs: + - question: "Can I use an external database with Appwrite?" + answer: "Yes. The pattern in this post connects to an external database (SQL, NoSQL, vector, or graph) from inside an [Appwrite Function](/docs/products/functions). Your client app talks to the function, and the function talks to the external database, which keeps credentials and connection pooling on the server." + - question: "When should I pick Appwrite Databases over an external database?" + answer: "Use [Appwrite Databases](/docs/products/databases) when you want tight integration with Appwrite Auth permissions, real time updates, and zero extra setup. Reach for an external database when you need a specialty engine (vector, graph, time series, full text search) or you already have data living elsewhere." + - question: "What is a vector database?" + answer: "A vector database stores high dimensional embeddings and supports nearest neighbor search. It's the backbone of semantic search, retrieval augmented generation, and recommendation systems where you compare items by similarity instead of exact matches." + - question: "What is a graph database?" + answer: "A graph database models data as nodes and relationships, with edges as first class citizens. It is the right choice when the questions you ask are mostly about traversals (friends of friends, fraud rings, dependency chains) rather than row by row reads." + - question: "How do I connect to a database from an Appwrite Function?" + answer: "Add the database client as a dependency in your function, read the connection details from environment variables, and open the connection once at the top of the file so it survives between executions. The function code then exposes a simple HTTP interface to your client app." + - question: "Is it safe to expose database connection strings to client apps?" + answer: "No. Connection strings and credentials should only live on the server. Use an Appwrite Function or your own backend as a proxy, and let the client only see the typed responses your API returns." --- # Integrate any database type into your Appwrite project diff --git a/src/routes/blog/post/introducing-appwrite-react-native-sdk/+page.markdoc b/src/routes/blog/post/introducing-appwrite-react-native-sdk/+page.markdoc index 44f088cfdd0..d44655140b3 100644 --- a/src/routes/blog/post/introducing-appwrite-react-native-sdk/+page.markdoc +++ b/src/routes/blog/post/introducing-appwrite-react-native-sdk/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/introducing-appwrite-react-native-sdk/cover.avif timeToRead: 4 author: vincent-ge category: product, announcement +faqs: + - question: "Why does Appwrite have a separate React Native SDK?" + answer: "React Native needs access to device APIs like the camera, file system, and storage. The dedicated SDK uses Expo modules under the hood so features like file uploads and OAuth work correctly on iOS and Android, which the Web SDK can't do." + - question: "Can I use Expo with the Appwrite React Native SDK?" + answer: "Yes. The SDK is designed to be installed with `npx expo install` and works in both Expo managed and bare React Native projects. You also need the `react-native-url-polyfill` peer dependency." + - question: "Does the React Native SDK support all Appwrite services?" + answer: "Yes. You can call [Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), [Functions](/docs/products/functions), and [Messaging](/docs/products/messaging) from React Native, including push notifications on mobile devices." + - question: "How do I set up an Appwrite project for a React Native app?" + answer: "Create an Appwrite project, then add an Android platform with your app's package name and an Apple platform with your bundle identifier. Call setPlatform with that identifier on the client so requests are accepted." + - question: "Is Appwrite a good Firebase alternative for React Native?" + answer: "Yes. Appwrite covers the same core feature set (auth, database, storage, push, realtime) and is open source, so you can self host it if you want full control of your data. The React Native SDK gives you the same API surface as Firebase's modules." + - question: "What does open beta mean for this SDK?" + answer: "Open beta means the SDK is feature complete and safe to use in real projects, but the API may still get small adjustments based on community feedback. Pin the SDK version in your project and watch the release notes for breaking changes." --- If you’re a mobile developer who doesn’t (want to) use Flutter, we have great news for you. Appwrite now has a React Native SDK in open beta. This will allow more mobile developers to benefit from Appwrite, giving everything you need to build your mobile applications backend, without the hassle of building it yourself. diff --git a/src/routes/blog/post/introducing-database-backups/+page.markdoc b/src/routes/blog/post/introducing-database-backups/+page.markdoc index 34f8eeb196e..b0a7c2243d6 100644 --- a/src/routes/blog/post/introducing-database-backups/+page.markdoc +++ b/src/routes/blog/post/introducing-database-backups/+page.markdoc @@ -3,11 +3,25 @@ layout: post title: Introducing Database Backups description: A new feature that will help ensure your database's safety and security. date: 2024-10-15 +lastUpdated: 2026-05-22 cover: /images/blog/introducing-database-backups/cover.avif timeToRead: 3 author: jake-barnby category: product, announcement featured: false +faqs: + - question: "What are Appwrite Database Backups?" + answer: "Database Backups capture point in time copies of your project's databases without taking the service offline. They are encrypted, stored in a separate region from your production data, and can be triggered manually or on a schedule. See [Appwrite Databases](/docs/products/databases) for setup." + - question: "Are backups available on the Free plan?" + answer: "Database Backups are available on all paid Cloud plans. The Pro plan includes a daily backup retained for 7 days, while the Enterprise plan supports custom schedules and retention windows." + - question: "Do backups cause downtime?" + answer: "No. Appwrite uses hot backups, which run in the background while your application keeps serving traffic. There is no interruption to reads, writes, or realtime subscriptions during the backup window." + - question: "Where are backup files stored?" + answer: "Backups are written to a geographically separate location from the primary data center. The remote destination is what makes them useful for disaster recovery, since a regional incident doesn't take both your data and its backup down at the same time." + - question: "Can I trigger a manual backup before a risky deployment?" + answer: "Yes. Manual backups can be started any time from the Appwrite Console alongside any policy schedules you have configured. Pre deployment snapshots are one of the most common reasons developers reach for manual backups." + - question: "How do I restore from a backup?" + answer: "Restores are initiated from the Appwrite Console on the backup you want to use. Restoring writes the backup data back into your project's database; check the Database Backups docs for the current options around in place restores versus restoring to a new database." --- Database integrity is critical for any data heavy application. That's why we're happy to introduce Database Backups on Appwrite, a feature designed to give you full control over the safety and recoverability of your data without any downtime. This is also a crucial milestone for Appwrite Cloud to get closer to the much anticipated GA release. @@ -40,9 +54,9 @@ Backups are stored in a geographically separate location, isolated from our prim You can enable automated backup policies to run in the background. This will ensure you have a daily backup that is stored for 7 days as part of the Pro plan. For added flexibility, manual backups can be initiated at any time. This is particularly useful for pre-deployment snapshots or in cases where immediate backup and restoration are required, giving you complete control over your data integrity with minimal downtime. -## Scale and Enterprise plan +## Enterprise plan -We offer more customization for the [Scale and Enterprise plans](https://appwrite.io/pricing) using backup policies that offer granular control over your backup strategy, allowing you to: +We offer more customization for the [Enterprise plan](https://appwrite.io/pricing) using backup policies that offer granular control over your backup strategy, allowing you to: - Schedule backups at custom intervals or predefined schedules (e.g., daily, weekly, monthly) to match your operational requirements. - Set retention periods, ensuring backups are kept as long as necessary without accumulating unnecessary storage. diff --git a/src/routes/blog/post/introducing-enum-sdk-support/+page.markdoc b/src/routes/blog/post/introducing-enum-sdk-support/+page.markdoc index 7bfe6db3b60..2fed4ab5bbf 100644 --- a/src/routes/blog/post/introducing-enum-sdk-support/+page.markdoc +++ b/src/routes/blog/post/introducing-enum-sdk-support/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: jake-barnby category: product, announcement featured: false +faqs: + - question: "What are enums in the Appwrite SDKs?" + answer: "Enums are named constants that the Appwrite SDKs expose for parameters with a fixed set of valid values, like OAuth providers, runtimes, and image formats. Instead of typing the raw string, you reference a typed value such as OAuthProvider.Apple." + - question: "Why use enums instead of strings?" + answer: "Enums give you autocomplete in your editor, compile time errors when you pass an invalid value, and self documenting code. They eliminate a class of typos that the old string based parameters used to hide." + - question: "Which SDKs got enum support?" + answer: "Enum support landed across all client and server SDKs as part of Appwrite 1.5. That includes Web, React Native, Flutter, Android, Apple, Node.js, Python, PHP, Ruby, Deno, Dart, .NET, Kotlin, Swift, and Go." + - question: "Do I have to migrate my existing code to use enums?" + answer: "No. The string values still work, so existing code keeps running. Enums are a quality of life improvement you can adopt gradually, starting with the parameters where you have hit typos in the past." + - question: "Will using enums break older Appwrite servers?" + answer: "No. Enums are a client side convenience that resolve to the same strings the API has always accepted. A 1.5 SDK still sends the same wire format to an Appwrite instance that understands those values." + - question: "Where can I see the full list of supported enums?" + answer: "Each SDK reference lists the enums it exposes. The SDKs page in the [Appwrite docs](/docs) has the per language references, and the changelog for each SDK release calls out new enum additions." --- We are excited to announce a significant enhancement to the development experience across all Appwrite client and server-side SDKs, Enums SDK Support. diff --git a/src/routes/blog/post/introducing-functions-ecosystem/+page.markdoc b/src/routes/blog/post/introducing-functions-ecosystem/+page.markdoc index 828a03b6c7e..e35fb16fd16 100644 --- a/src/routes/blog/post/introducing-functions-ecosystem/+page.markdoc +++ b/src/routes/blog/post/introducing-functions-ecosystem/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: luke-silver category: product, announcement featured: false +faqs: + - question: "What is a cold start in Appwrite Functions?" + answer: "A cold start is the extra latency you see the first time a function runs (or after it has been idle), because the runtime has to provision a container and load your code. Subsequent invocations reuse the warm runtime, so they respond much faster." + - question: "What are dynamic API keys in Appwrite Functions?" + answer: "Dynamic API keys are short lived keys that Appwrite generates for each function execution and passes through the `x-appwrite-key` header. You no longer need to create, rotate, and store long lived API keys for server side function code. See [Appwrite Functions](/docs/products/functions)." + - question: "How do I schedule a function to run later?" + answer: "Pass a `scheduledAt` value (an ISO timestamp) when calling createExecution. Appwrite queues the execution and runs it at that time, which is convenient for invoice runs, reminders, and other time delayed work." + - question: "Can Appwrite Functions call other Appwrite services?" + answer: "Yes. Inside a function, you can construct a Server SDK client using the auto provided endpoint, project ID, and dynamic API key, then call any Appwrite service the function has permission to use." + - question: "Are old Appwrite Functions automatically faster after this release?" + answer: "Yes. Cold start improvements apply to all functions regardless of when they were created, with no code or configuration changes required." + - question: "When should I use Functions instead of my own backend?" + answer: "Functions are great when you want event driven logic, scheduled jobs, or an API endpoint without operating servers. Pick a dedicated backend when you need long lived processes, large dependency sets, or workloads that exceed function execution limits." --- We're excited to bring you major improvements to Appwrite Functions, making them more versatile and powerful than ever before. diff --git a/src/routes/blog/post/introducing-imagine/+page.markdoc b/src/routes/blog/post/introducing-imagine/+page.markdoc index ed1ad109c2a..8c491f947e6 100644 --- a/src/routes/blog/post/introducing-imagine/+page.markdoc +++ b/src/routes/blog/post/introducing-imagine/+page.markdoc @@ -5,10 +5,23 @@ description: We're introducing Imagine, a platform that uses AI to translate ide date: 2025-12-16 cover: /images/blog/introducing-imagine/cover.avif timeToRead: 5 -author: +author: - eldad-fux - ariel-weinberger category: announcement +faqs: + - question: "What is Imagine?" + answer: "Imagine is an AI powered platform from the Appwrite team that turns natural language prompts into real, production ready applications backed by Appwrite Cloud. Unlike disposable prototype tools, the output is a full project with database schemas, auth, storage, and deployable code." + - question: "How is Imagine different from other AI app builders?" + answer: "Imagine is built and operated by the team behind Appwrite, so it has a first party understanding of Appwrite's data model, permissions, and runtime. Instead of generating throwaway code, it provisions real Appwrite Cloud resources you can extend manually as the product evolves." + - question: "What can I build with Imagine today?" + answer: "You can build internal tools, dashboards, web applications, and marketing sites. Mobile applications aren't supported yet, but the team is actively working on adding that." + - question: "What backend services does Imagine wire up automatically?" + answer: "Every Imagine project ships with [Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), [Functions](/docs/products/functions), realtime subscriptions, and [Sites](/docs/products/sites) hosting. You don't have to provision any of it separately." + - question: "Can I edit the code Imagine generates?" + answer: "Yes. There is a built in code editor, and all output is transparent and readable. You can inspect, modify, and take full ownership of the project as it grows beyond what the AI builder produces." + - question: "What frontend stack does Imagine use?" + answer: "Imagine uses [TanStack Start](https://tanstack.com/) for the frontend. The patterns it chooses (typed routing, explicit data fetching) make the generated code easier to read and extend for both humans and AI agents." --- When we started Appwrite, our mission was clear: reduce the operational and infrastructural burden of building software so developers could focus on what actually matters - product, logic, and user experience. We set out to remove unnecessary complexity, give teams real control over their backend, and make production-grade infrastructure accessible without forcing developers to fight it. That principle has guided every major decision we have made. diff --git a/src/routes/blog/post/introducing-new-appwrite-cli/+page.markdoc b/src/routes/blog/post/introducing-new-appwrite-cli/+page.markdoc index 193ea745eda..e70b235977b 100644 --- a/src/routes/blog/post/introducing-new-appwrite-cli/+page.markdoc +++ b/src/routes/blog/post/introducing-new-appwrite-cli/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: binyamin-yawitz category: product, announcement featured: false +faqs: + - question: "What's new in the latest Appwrite CLI?" + answer: "The big additions are local function execution, non destructive push and pull commands for syncing resources, and headless login for CI/CD. The command surface is also reorganized around `init`, `push`, and `pull`, mirroring Git's terminology." + - question: "How do I test an Appwrite Function locally?" + answer: "Install Docker, run `appwrite run` against your function, and the CLI will spin up the runtime container on your machine. You can iterate without redeploying after every change. See [Appwrite Functions](/docs/products/functions)." + - question: "Does the CLI overwrite my database when I push?" + answer: "No. The new push command syncs changes in a non destructive way, which is a big improvement over the previous CLI behaviour where deploying collections wiped existing data." + - question: "Can I use the Appwrite CLI in CI/CD?" + answer: "Yes. Headless login lets you authenticate non interactively using an API key, so the CLI works inside GitHub Actions, GitLab CI, or any other automation system without prompting for input." + - question: "What is `appwrite.config.json`?" + answer: "It's the file the CLI creates when you initialize a project. It stores the project ID, organization, and resource definitions. Commit it to your repo so the CLI and your teammates have the same view of the project." + - question: "Can I work with multiple Appwrite accounts from one CLI?" + answer: "Yes. Running `appwrite login` again adds a second account, and you can switch between them as needed. This is useful when you have separate accounts for personal projects and work." --- We're excited to announce the new Appwrite CLI. This iteration focuses on local development and an enhanced CI/CD experience. Now, you can test changes to your functions locally, and easily apply changes to your Appwrite collection. diff --git a/src/routes/blog/post/introducing-new-compute-capabilities-appwrite-functions/+page.markdoc b/src/routes/blog/post/introducing-new-compute-capabilities-appwrite-functions/+page.markdoc index 06959239612..091b3e2a509 100644 --- a/src/routes/blog/post/introducing-new-compute-capabilities-appwrite-functions/+page.markdoc +++ b/src/routes/blog/post/introducing-new-compute-capabilities-appwrite-functions/+page.markdoc @@ -3,17 +3,31 @@ layout: post title: Introducing new compute capabilities for Appwrite Functions description: Learn more about the new compute capabilities for Appwrite Functions. date: 2025-01-07 +lastUpdated: 2026-05-22 cover: /images/blog/gb-hours.avif timeToRead: 6 author: eldad-fux category: product, announcement featured: true callToAction: true +faqs: + - question: "What CPU and memory configurations are available for Appwrite Functions?" + answer: "The Pro and Enterprise plans can pick from 0.5 CPU/512MB, 1 CPU/512MB, 1 CPU/1GB, 1 CPU/2GB, 2 CPU/4GB, and 4 CPU/4GB. Free plan functions use the standard 0.5 CPU and 512MB configuration. See [Appwrite Functions](/docs/products/functions)." + - question: "What is a GB hour?" + answer: "A GB hour is the product of CPU cores, memory in GB, and time in hours. A 1 CPU function with 1GB of RAM running for 2 hours uses 2 GB hours. Appwrite uses it as the unit for both execution and build time." + - question: "How much execution time do the Free and Pro plans include?" + answer: "Free plan accounts get up to 100 GB hours per month. Pro accounts get 1,000 GB hours per month, with additional usage charged at $0.06 per GB hour. Enterprise has custom limits." + - question: "How do I avoid surprise bills when my functions get popular?" + answer: "Set a budget cap on your organization. When you hit it, Appwrite pauses additional usage so you can decide whether to raise the limit or optimize before more charges accrue." + - question: "When should I increase memory or CPU for a function?" + answer: "Increase memory when you're hitting out of memory errors or processing large payloads. Increase CPU when execution time is bottlenecking on computation rather than network I/O. Profile your function first so you only pay for resources you actually need." + - question: "Can I customize compute specs per function?" + answer: "Yes. Each function has its own specification, so a lightweight webhook handler can stay at 0.5 CPU/512MB while a video transcoder runs at 4 CPU/4GB in the same project." --- At Appwrite, we're always working to make our serverless platform better for developers like you. Our latest update to Appwrite Functions brings some exciting improvements, especially when it comes to customizing CPU and memory settings for your runtimes. This means better performance, more flexibility, and the chance to explore new and innovative use cases. We've also updated our pricing model to keep things sustainable and fair for everyone. Keep reading to learn more about these updates and how they can benefit your projects. -Starting today, Appwrite developers have the ability to customize runtime specifications, allowing for tailored performance and resource allocation. Previously, all functions operated with a standard configuration of 0.5 CPU and 512MB memory. Now, Pro and Scale users can select from a range of configurations to suit their application needs better: +Starting today, Appwrite developers have the ability to customize runtime specifications, allowing for tailored performance and resource allocation. Previously, all functions operated with a standard configuration of 0.5 CPU and 512MB memory. Now, Pro and Enterprise users can select from a range of configurations to suit their application needs better: - 0.5 CPU & 512MB RAM - 1 CPU & 512MB RAM @@ -39,9 +53,9 @@ GB-hours is calculated by multiplying the build and execution time of your funct ## Allocation and pricing plans - Free plan users will have up to 100GB of execution and build time per month. -- Pro, and Scale users will have up to 1,000GB of execution and build time per month. Additional usage is available at a rate of $0.09 per GB-hour. +- Pro users will have up to 1,000GB of execution and build time per month. Additional usage is available at a rate of $0.06 per GB-hour. Enterprise has custom limits. -Once the monthly GB-hours limit is reached, additional usage will automatically apply add-ons to your Pro or Scale account. To prevent unexpected charges, we strongly recommend setting a **budget cap**. The budget cap is designed to safeguard your organization by pausing services once the budget is reached for additional usage, allowing you to adjust your usage or modify your budget as needed. +Once the monthly GB-hours limit is reached, additional usage will automatically apply add-ons to your Pro account. To prevent unexpected charges, we strongly recommend setting a **budget cap**. The budget cap is designed to safeguard your organization by pausing services once the budget is reached for additional usage, allowing you to adjust your usage or modify your budget as needed. If you or your organization expect to use these new features extensively, you can contact our [sales team](https://appwrite.io/contact-us/enterprise) to learn more about the custom offerings available for our enterprise customers. diff --git a/src/routes/blog/post/introducing-new-database-operators/+page.markdoc b/src/routes/blog/post/introducing-new-database-operators/+page.markdoc index 4f116be1cff..aee6ee8eda9 100644 --- a/src/routes/blog/post/introducing-new-database-operators/+page.markdoc +++ b/src/routes/blog/post/introducing-new-database-operators/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: dennis-ivy category: product, announcement featured: false +faqs: + - question: "What does the contains query do?" + answer: "`Query.contains` matches a substring inside a string attribute or an element inside an array attribute. It complements `startsWith` and `endsWith` and is the right choice when you don't know where in the value the match will appear. See [Appwrite Databases](/docs/products/databases)." + - question: "How does the OR operator work in Appwrite queries?" + answer: "Pass two or more queries inside `Query.or([...])` and any document that satisfies at least one of them is returned. You can nest it with other queries to build expressions like 'category equals X AND (name contains Y OR rating greater than 4)'." + - question: "Can I combine contains and OR in the same request?" + answer: "Yes. Both operators are regular query expressions, so you can pass several of them in the same queries array, or nest `Query.contains` calls inside a `Query.or` block." + - question: "Does contains do a full text search?" + answer: "No. Contains is a substring match, not a tokenized full text search. If you need ranking, stemming, or fuzzy matching, pair Appwrite Databases with a dedicated search engine like Meilisearch or Typesense." + - question: "When did these operators ship?" + answer: "Both `contains` and `or` shipped as part of the Appwrite 1.5 release on Appwrite Cloud and self hosted Appwrite in March 2024. They are available across every SDK." + - question: "Are there performance implications when using contains?" + answer: "Substring matches can't always use an index, so very large collections will be slower than equality queries. Where possible, narrow the result set first with indexed attributes (equality, ranges) and then apply contains to filter further." --- We've added two new query methods, `or` and `contains`, to Appwrite Databases. By adding array element matches, partial text matches, as well as logical OR queries, we allow for more flexibility in managing your data. diff --git a/src/routes/blog/post/introducing-python-machine-learning-runtime/+page.markdoc b/src/routes/blog/post/introducing-python-machine-learning-runtime/+page.markdoc index 56c83cd1044..95348007dc6 100644 --- a/src/routes/blog/post/introducing-python-machine-learning-runtime/+page.markdoc +++ b/src/routes/blog/post/introducing-python-machine-learning-runtime/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: luke-silver category: product, announcement featured: false +faqs: + - question: "What is the Python ML runtime in Appwrite Functions?" + answer: "Python ML is a dedicated function runtime built on a Debian based image (instead of Alpine) so that machine learning libraries like NumPy, PyTorch, TensorFlow, and scikit learn can install correctly. Select it as `Python (ML) 3.11` when creating a function. See [Appwrite Functions](/docs/products/functions)." + - question: "Why not just install ML libraries in the regular Python runtime?" + answer: "The standard Python runtime is based on Alpine Linux, which keeps the image small but lacks the glibc and build toolchain that wheels for libraries like NumPy and TensorFlow expect. Python ML uses a different base image so those installations actually work." + - question: "Does the Python ML runtime support GPU acceleration?" + answer: "Not yet. The runtime is CPU only during beta. If your model needs a GPU, run training on a GPU host and use Python ML for inference of smaller models or for preprocessing pipelines." + - question: "What libraries should I install for AI workloads?" + answer: "Common picks include TensorFlow, PyTorch, scikit learn, Keras, and NLTK. Add them to your function's requirements.txt and Appwrite will install them at build time. For inference, lightweight options like ONNX Runtime or scikit learn pipelines work best within function execution limits." + - question: "Can I run an LLM inside a Python ML function?" + answer: "You can run small models locally, but large language models are usually too big to load into a CPU function within memory and time limits. The common pattern is to call a hosted inference API (OpenAI, Hugging Face Inference, Together) from the function and just orchestrate the call." + - question: "How do I keep Python ML cold starts manageable?" + answer: "Move heavy initialization (loading models, downloading weights) outside the handler so it runs once per warm container instead of on every request. Cache models in the function's filesystem when possible to avoid downloading them again." --- # Introducing Python ML diff --git a/src/routes/blog/post/introducing-support-for-server-side-rendering/+page.markdoc b/src/routes/blog/post/introducing-support-for-server-side-rendering/+page.markdoc index cafb0b1626c..51bb3f9e910 100644 --- a/src/routes/blog/post/introducing-support-for-server-side-rendering/+page.markdoc +++ b/src/routes/blog/post/introducing-support-for-server-side-rendering/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 7 author: dennis-ivy category: product, announcement featured: false +faqs: + - question: "What is server side rendering (SSR)?" + answer: "SSR is rendering pages on the server and sending HTML to the browser, rather than letting the client fetch data and assemble the page. Frameworks like Next.js, Nuxt, SvelteKit, Astro, and Remix all support SSR for better SEO, faster first paint, and easier protection of private routes." + - question: "How does Appwrite support SSR authentication?" + answer: "The server SDK methods that create a session (createEmailPasswordSession, createAnonymousSession, createSession) now return a `secret`. You store that secret in a server side cookie and reuse it with `client.setSession(secret)` on subsequent requests. See [Appwrite Auth](/docs/products/auth)." + - question: "What's the difference between an admin client and a session client?" + answer: "An admin client uses an API key and bypasses rate limits, used for server side admin tasks. A session client uses an end user's session secret and acts on behalf of that user. You construct both from the same `node-appwrite` SDK, just with different credentials." + - question: "Should I instantiate a new Appwrite client for every request?" + answer: "Yes. Reusing a single client across requests can leak the previous user's session into a different user's request. Create a fresh client per request inside your route handler or middleware to keep them isolated." + - question: "Which SDK do I use on the server?" + answer: "Use a Server SDK, for example `node-appwrite` in Node.js based frameworks. Avoid installing the client SDK alongside it in the same project to prevent mixing client only and server only methods." + - question: "How do I protect API routes with SSR?" + answer: "Read the session cookie inside your route, call `client.setSession(cookie)`, then use `account.get()` to verify the user. If it throws, redirect to login. This pattern works across Next.js route handlers, SvelteKit endpoints, and Nuxt server routes." --- We're excited to introduce support for server-side rendering (SSR) authentication patterns. This change enhances the developer experience when building with popular frameworks that provide SSR as an option, such as Next.js, SvelteKit, Nuxt, Astro, Remix, and more. diff --git a/src/routes/blog/post/introducing-terraform-provider-for-appwrite/+page.markdoc b/src/routes/blog/post/introducing-terraform-provider-for-appwrite/+page.markdoc index 62bf91ede99..b7264ed3289 100644 --- a/src/routes/blog/post/introducing-terraform-provider-for-appwrite/+page.markdoc +++ b/src/routes/blog/post/introducing-terraform-provider-for-appwrite/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 10 author: levi-van-noort category: product, announcement featured: false +faqs: + - question: "What is the Appwrite Terraform provider?" + answer: "It's the official `appwrite/appwrite` provider on the HashiCorp Terraform Registry. It lets you manage project resources (TablesDB, Storage, Functions, Sites, Auth, Messaging, webhooks, and backup policies) declaratively in HCL through the Appwrite API." + - question: "Does the provider install or operate an Appwrite instance?" + answer: "No. It only manages resources inside an existing Appwrite project. You still install and operate self hosted Appwrite using your usual deployment process. The provider talks to Appwrite Cloud or your self hosted instance over the API." + - question: "What credentials does the Terraform provider need?" + answer: "An Appwrite API endpoint, a project ID, and an API key with the scopes for the resources you want to manage. The same model your CI scripts already use. For self hosted setups with custom certificates, you can also set `self_signed`." + - question: "Can I import an existing Appwrite project into Terraform?" + answer: "Yes. Standard `terraform import` commands map existing resources by ID into your state file, so you can adopt Terraform on a project without recreating anything. The provider's docs cover the per resource import format." + - question: "What problem does Terraform solve compared to appwrite.json?" + answer: "`appwrite.json` is great for a single project. Terraform shines when you need consistent baselines across staging, production, and multiple regions, with `plan` / `apply` running in CI and a shared state file tracking real world drift." + - question: "Which Appwrite features can I manage with the provider?" + answer: "[Databases](/docs/products/databases), [Storage](/docs/products/storage) buckets and files, [Functions](/docs/products/functions), [Sites](/docs/products/sites), [Auth](/docs/products/auth) users and teams, [Messaging](/docs/products/messaging) providers and topics, webhooks, and backup policies are all in scope." --- If you already treat infrastructure as code elsewhere, Appwrite project configuration was the odd layer out: databases, tables, storage buckets, functions, and sites were easy to tweak in the Console, with the CLI, or in `appwrite.json`, and hard to keep identical across staging, production, and extra regions. That is operational drift with a familiar fix: declare the same resources in HashiCorp Configuration Language (HCL), store the Terraform **state** next to your other tooling, and let `plan` / `apply` (or your CI wrapper) do the talking. diff --git a/src/routes/blog/post/its-the-contributors-in-open-source-who-make-the-community-great/+page.markdoc b/src/routes/blog/post/its-the-contributors-in-open-source-who-make-the-community-great/+page.markdoc index dd6ed561d3f..1f5e1b6dc5b 100644 --- a/src/routes/blog/post/its-the-contributors-in-open-source-who-make-the-community-great/+page.markdoc +++ b/src/routes/blog/post/its-the-contributors-in-open-source-who-make-the-community-great/+page.markdoc @@ -8,6 +8,17 @@ timeToRead: 4 author: haimantika-mitra category: hackathon, contributors, open-source featured: false +faqs: + - question: "What is Hacktoberfest and how does it work?" + answer: "Hacktoberfest is an annual open source celebration held every October by DigitalOcean. Participants submit pull requests to participating open source projects throughout the month, and those who complete the required number of accepted PRs earn rewards. It is a low pressure way for first time contributors to get started in open source." + - question: "Is Appwrite open source?" + answer: "Yes, Appwrite is fully open source and has been since launching in 2019. The code is available on GitHub for developers to use, fork, and contribute to. Over 700 contributors have shaped Appwrite into what it is today." + - question: "How can I contribute to Appwrite?" + answer: "You can contribute by picking up open issues on the Appwrite GitHub repositories, improving documentation, translating content, or fixing bugs. The team welcomes contributors of all experience levels, especially during events like Hacktoberfest. Start by reading the contributing guide in the main appwrite/appwrite repository." + - question: "Do I need to be an experienced developer to contribute to open source?" + answer: "No, open source projects need help across code, documentation, translations, design, and community moderation. Many maintainers actively label issues as good first issues to help newcomers ramp up. Starting small builds confidence and teaches you how real teams collaborate." + - question: "What kinds of contributions are valued in open source?" + answer: "Bug fixes, documentation improvements, translations, test coverage, and feature work are all valued. The best contributions solve real problems for users rather than chasing PR counts. Quality over quantity matters more to maintainers than the number of pull requests submitted." --- Open source (OSS) seems to be the buzzword in tech these days. A lot of companies claim to be it, and even more, companies seem to be the open source version of their corporate counterpart. Maybe it's true, maybe it isn't, either way, open source is here to stay. But only because of the developers who maintain it. In this post, we want to celebrate the OSS community who has built Appwrite, with a special shout-out to the contributors in our latest release and the best open source event there is, Hacktoberfest. diff --git a/src/routes/blog/post/leveraging-baas-tools-to-scale-faster/+page.markdoc b/src/routes/blog/post/leveraging-baas-tools-to-scale-faster/+page.markdoc index 402d6c8cd7e..9176ec54d90 100644 --- a/src/routes/blog/post/leveraging-baas-tools-to-scale-faster/+page.markdoc +++ b/src/routes/blog/post/leveraging-baas-tools-to-scale-faster/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 6 author: dennis-ivy category: product featured: false +faqs: + - question: "What is a Backend as a Service (BaaS)?" + answer: "A Backend as a Service is a third party platform that handles backend infrastructure like databases, authentication, file storage, and APIs. Developers connect to these services through SDKs or REST APIs instead of building and operating servers themselves. This shortens time to market and removes much of the backend boilerplate from each new project." + - question: "When should you use a BaaS instead of a custom backend?" + answer: "Use a BaaS when your app needs common backend features (auth, storage, databases, realtime) but those features are not your differentiator. It also makes sense for prototypes, MVPs, and teams without dedicated backend engineers. If you have specialized infrastructure needs, you can still use a BaaS for the common parts and run custom services alongside." + - question: "How does Appwrite compare to Firebase?" + answer: "Appwrite is open source and self hostable, while Firebase is a managed Google product. Appwrite gives you full control over your data and avoids vendor lock-in, since you can move your deployment anywhere. Both offer auth, databases, storage, and functions, but Appwrite's pricing scales more predictably for larger workloads." + - question: "Can I avoid vendor lock-in with a BaaS?" + answer: "Yes, but only if the BaaS is open source or built on portable standards. Appwrite is open source, so you can self host on your own infrastructure if your needs change. Closed source platforms like Firebase make migration significantly harder once your data and code depend on proprietary APIs." + - question: "Do real companies use BaaS platforms in production?" + answer: "Yes, organizations including Twitch, Instacart, Square, Trustpilot, and Zendesk have used BaaS platforms in production. They typically adopt specific services like authentication or realtime messaging rather than the entire stack. The approach scales well when the BaaS provider has a strong track record of reliability." + - question: "What features does a typical BaaS provide?" + answer: "Most BaaS platforms provide databases, authentication, file storage, serverless functions, and realtime APIs. Appwrite covers all of these through products like [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), [Functions](/docs/products/functions), and [Messaging](/docs/products/messaging). You can adopt them individually or as a complete stack." --- There are many tools that developers use every day to abstract away complexity, but many are seriously underutilizing the benefits of "Backend As A Service" tools for developing the entire backend of an app, or at least the key components. diff --git a/src/routes/blog/post/make-best-use-appwrite-mcp/+page.markdoc b/src/routes/blog/post/make-best-use-appwrite-mcp/+page.markdoc index 1f3d7482191..e1df80d6f5a 100644 --- a/src/routes/blog/post/make-best-use-appwrite-mcp/+page.markdoc +++ b/src/routes/blog/post/make-best-use-appwrite-mcp/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/make-best-use-appwrite-mcp/cover.avif timeToRead: 5 author: atharva category: tutorial +faqs: + - question: "What is the Appwrite MCP server?" + answer: "The Appwrite MCP server is a Model Context Protocol implementation that lets AI agents interact with your Appwrite project resources. Agents can read your database schemas, create tables, query records, and run other actions through the protocol. It connects tools like Claude Desktop and Cursor directly to your Appwrite backend." + - question: "How do I install the Appwrite MCP server?" + answer: "Installation steps are documented in the [Appwrite MCP guide](/docs/tooling/mcp). You configure your AI client (Claude Desktop, Cursor, etc.) to launch the MCP server with your project credentials. After setup, the agent can access your Appwrite resources within the permissions you grant." + - question: "What is MCP and why does it matter?" + answer: "MCP (Model Context Protocol) is an open standard for connecting AI models to external systems and data sources. It replaces ad hoc plugin systems with a uniform protocol that any compatible client can use. This means one MCP server works across many AI tools without per platform integrations." + - question: "Can the MCP server modify my production database?" + answer: "Yes, if you give it credentials with write access, the AI agent can create, modify, or delete resources in your Appwrite project. Treat MCP credentials like any other API key and use a scoped project or service for experimentation. For production work, restrict permissions to the minimum the agent needs." + - question: "What can I do with the Appwrite MCP server beyond creating tables?" + answer: "You can generate documentation from your schema, export selective CSV data based on natural language queries, replicate database schemas between projects, and let agents prototype features by spinning up the supporting backend. Any operation exposed by the Appwrite API can be invoked through the MCP server." + - question: "Is the Appwrite MCP server suitable for vibe coding workflows?" + answer: "Yes, it works well during rapid prototyping when you want the AI agent to set up backend resources as it generates application code. The agent can create tables, columns, and indexes on demand without you switching to the Appwrite Console. This keeps the build loop tight while you iterate on a prototype." --- MCP servers are the next big thing in the AI space. Everyone is talking about them. An MCP server allows your AI agents to interact with external services. The use cases are legit, so we launched our own Appwrite MCP server that allows your AI agents to interact with your Appwrite projects. This MCP server unlocks some handy use cases, which we will look at in this article. diff --git a/src/routes/blog/post/make-open-source-healthier/+page.markdoc b/src/routes/blog/post/make-open-source-healthier/+page.markdoc index 78c135d120e..c4210ecbae3 100644 --- a/src/routes/blog/post/make-open-source-healthier/+page.markdoc +++ b/src/routes/blog/post/make-open-source-healthier/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/make-open-source-healthier.avif timeToRead: 5 author: aditya-oberai category: open-source +faqs: + - question: "What does community health mean in open source?" + answer: "Community health refers to how welcoming, sustainable, and effective an open source project's community is. It covers active participation, inclusive behavior, clear communication, transparent decisions, strong leadership, a code of conduct, good documentation, and recognition of contributors. Healthy communities tend to retain contributors and produce better software." + - question: "Should I wait to be assigned an issue before starting work?" + answer: "Yes, most projects expect contributors to comment on an issue and wait for assignment before opening a pull request. This prevents duplicate work and lets maintainers coordinate priorities. Skipping this step often leads to wasted effort when someone else is already working on the same thing." + - question: "How long should I wait before asking for an issue to be reassigned?" + answer: "Wait at least a few days, ideally a week, before asking maintainers to reassign an issue. Most open source contributors work on projects outside of full time jobs and personal commitments. A little patience keeps the community welcoming for everyone involved." + - question: "What makes a good first contribution?" + answer: "Good first contributions are small, objectively useful, and easy to review. Fixing typos in docs, adding missing tests, or closing a clearly scoped bug are good options. Avoid sweeping refactors or stylistic rewrites on your first PR, since those are subjective and harder for maintainers to evaluate." + - question: "How can I contribute to Appwrite specifically?" + answer: "Browse the appwrite/appwrite GitHub repository for issues labeled good first issue, read the contributing guide, and join the Appwrite Discord to ask questions. Contributions can be code, documentation, translations, or community support. The team is active in reviewing PRs and welcomes contributors of any experience level." + - question: "Why does quality matter more than quantity in open source?" + answer: "Maintainers spend time reviewing every PR, so low quality submissions add maintenance debt without adding value. A small number of well crafted contributions teaches you the project's standards and earns trust over time. This usually leads to deeper involvement and recognition within the community." --- For the last few years, every single time Hacktoberfest comes, one challenge that has constantly been discussed is how to make open source healthier for everyone. This isn’t to say that open source is an unhealthy space; rather, it has a much larger positive impact than most people can imagine. However, Hacktoberfest sees the entry of a flurry of new contributors trying their hands at getting in their first Pull Requests. This period is a particularly impressionable phase for new contributors to open source, and gaining a better understanding of how contributors should participate in a healthy manner only makes for a better, more welcoming community. Therefore, in this blog, we will explore what community health means in the context of open-source communities and the role contributors play in making it better. diff --git a/src/routes/blog/post/manage-user-permissions-with-labels-and-teams/+page.markdoc b/src/routes/blog/post/manage-user-permissions-with-labels-and-teams/+page.markdoc index 1017257fa07..b72f9795092 100644 --- a/src/routes/blog/post/manage-user-permissions-with-labels-and-teams/+page.markdoc +++ b/src/routes/blog/post/manage-user-permissions-with-labels-and-teams/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 8 author: dennis-ivy category: tutorial featured: false +faqs: + - question: "What is the difference between Teams and Labels in Appwrite?" + answer: "Teams group users together for shared access and support roles within the group, so you can assign permissions to specific roles like admin or moderator. Labels are custom tags attached to individual users and act as a lightweight way to grant permissions based on user attributes. Teams are best for collaborative spaces, while Labels suit per user access like paywalled content." + - question: "Can I create and modify Labels from the client SDK?" + answer: "No, Labels can only be created or modified from the Appwrite Console or a Server SDK. Teams, on the other hand, can be created and modified from both Client and Server SDKs. This is a deliberate restriction to prevent users from granting themselves additional permissions from the client." + - question: "How do permissions work with Teams in Appwrite?" + answer: "You assign permissions to a Team (or specific roles within a Team) on any resource like a document, file, or function. Every user added to that Team inherits those permissions automatically. If a user has a role inside the Team, they also inherit any permissions granted to that role. Learn more in the [Appwrite Auth docs](/docs/products/auth)." + - question: "When should I use a Label instead of a Team?" + answer: "Use a Label when you need to flag individual users with an attribute that controls access, like a subscription tier or paid course access. Removing the Label revokes access without removing the user from any group. Labels are ideal for per user gating, while Teams shine when multiple users collaborate on shared resources." + - question: "Can a user belong to multiple Teams and have multiple Labels?" + answer: "Yes, a user can be a member of many Teams (with different roles in each) and can carry multiple Labels at the same time. Appwrite combines permissions from all their Teams, roles, and Labels when checking access on a resource. This lets you compose access rules without writing custom permission logic." + - question: "How do I assign Team or Label permissions on a document or file?" + answer: "In the Appwrite Console, open the resource's settings and add a permission row, then choose a Team or Label as the role. You can also do this from any [Appwrite SDK](/docs/sdks) by setting the permissions array when creating or updating the resource. Use role helpers like Role.team(id) or Role.label(name) for clarity." --- diff --git a/src/routes/blog/post/managing-website-assets-repo-cold-start/+page.markdoc b/src/routes/blog/post/managing-website-assets-repo-cold-start/+page.markdoc index aaf8b3fb46a..e0ce143ee86 100644 --- a/src/routes/blog/post/managing-website-assets-repo-cold-start/+page.markdoc +++ b/src/routes/blog/post/managing-website-assets-repo-cold-start/+page.markdoc @@ -10,6 +10,19 @@ category: product featured: false draft: false callToAction: true +faqs: + - question: "Should I store website assets in my Git repository?" + answer: "Small, code coupled assets like icons and component images are fine in the repo, since they version with the code that references them. Large, frequently updated, or shared assets are usually better stored separately. The right split depends on asset volume, deploy frequency, and how often the assets change relative to your code." + - question: "What is a cold start and how do assets affect it?" + answer: "A cold start is the time it takes for a fresh instance to spin up, install dependencies, build, and serve the first request. Large asset trees inflate the build artifact and stretch every step of that path. The more static files you ship from the repo, the longer cold starts get on every new deploy or environment." + - question: "How does asset storage save on CI time?" + answer: "Every CI run clones the repo, so a smaller repo means faster clones, smaller caches, and faster build steps that process static files. Moving heavy assets out of version control trims clone size and reduces the per file work the build has to do. The cumulative savings add up across many branches and parallel jobs." + - question: "When should I move assets to Appwrite Storage?" + answer: "Move assets to [Appwrite Storage](/docs/products/storage) when they are large, numerous, change independently from code, or are shared across many deployments. Storage gives you buckets, permissions, CDN-backed URLs, and image transformation, so you can serve and optimize files without touching the repo. Start with the heaviest or most duplicated assets first." + - question: "What is image transformation in Appwrite Storage?" + answer: "Image transformation lets you store one source image and request different sizes or formats per response, like resizing, cropping, or converting to WebP or AVIF on the fly. This avoids storing multiple variants and removes the need for build time image processing. See the [image transformation docs](/docs/products/storage/images) for parameters and examples." + - question: "Does duplicated asset storage across deployments cost more?" + answer: "Yes, if every deployment ships a full copy of the built assets, you pay for the same bytes many times over. Production, staging, preview, and regional deployments each store the same files. Centralizing shared assets in a storage layer and linking by URL reduces total storage and simplifies updates." --- Keeping website assets in your repository feels right. Images, fonts, and static files live next to your code. You get versioning, a single source of truth, and a simple deploy story: push to Git, and your site builds with everything it needs. For many projects, that workflow is exactly what you want. For others, especially as asset volume and deployment footprint grow, the same approach has a cost. That cost often shows up first as cold start, then in CI and storage. This article walks through where the pain comes from and when to consider moving assets to a dedicated storage layer. diff --git a/src/routes/blog/post/master-prompt-engineering-tools/+page.markdoc b/src/routes/blog/post/master-prompt-engineering-tools/+page.markdoc index bb1f6ecc36e..0054bb7b892 100644 --- a/src/routes/blog/post/master-prompt-engineering-tools/+page.markdoc +++ b/src/routes/blog/post/master-prompt-engineering-tools/+page.markdoc @@ -8,7 +8,19 @@ timeToRead: 10 author: laura-du-ry unlisted: true category: startup - +faqs: + - question: "What is prompt engineering?" + answer: "Prompt engineering is the practice of designing inputs to large language models so they produce the outputs you want. It covers things like instruction phrasing, examples, role context, and structured response formats. Good prompts make AI responses more predictable, accurate, and useful for specific tasks." + - question: "Why is prompt engineering important for AI applications?" + answer: "LLMs are sensitive to how you ask. Well crafted prompts reduce hallucinations, improve task accuracy, and let you steer behavior without retraining the model. For production AI apps, prompt engineering often has more day to day impact than picking a different model." + - question: "What skills do prompt engineers need?" + answer: "A working understanding of natural language processing, familiarity with common LLM APIs, and clear written communication are the basics. Beyond that, problem solving and the ability to iterate based on model outputs matter most. Prompt engineering is partly experimental, so you need patience to refine prompts against real test cases." + - question: "What tools help with prompt engineering?" + answer: "Popular tools include LangChain, PromptAppGPT, OpenPrompt, and various playgrounds offered by model providers. They help you build chains, manage variations, and evaluate responses. Picking the right tool depends on whether you are doing exploration, building production pipelines, or testing variations at scale." + - question: "How can I build AI features into my Appwrite app?" + answer: "Use [Appwrite Functions](/docs/products/functions) to call LLM APIs from a secure backend, and store inputs or outputs in [Appwrite Databases](/docs/products/databases). For agents that need to interact with your project resources, the [Appwrite MCP server](/docs/tooling/mcp) connects models like Claude directly to your data. This keeps secrets server side and lets you scope what the model can access." + - question: "How do I get started with prompt engineering as a beginner?" + answer: "Start by reading the prompting guides from major model providers (Anthropic, OpenAI). Practice on real tasks like summarization, classification, or code generation, and compare how small wording changes affect output. Joining AI communities and reviewing prompts shared by others speeds up the learning curve." --- Prompt engineering is changing how we [build with AI](/docs/tooling/mcp). It's no longer just about the model, it’s also about the inputs given to the AI models. diff --git a/src/routes/blog/post/mcp-startup-ideas/+page.markdoc b/src/routes/blog/post/mcp-startup-ideas/+page.markdoc index f01d7dc086c..0754226c9bb 100644 --- a/src/routes/blog/post/mcp-startup-ideas/+page.markdoc +++ b/src/routes/blog/post/mcp-startup-ideas/+page.markdoc @@ -10,6 +10,19 @@ callToAction: true unlisted: true category: startup call_to_action: true +faqs: + - question: "What is MCP in plain terms?" + answer: "MCP (Model Context Protocol) is an open standard for connecting AI assistants to real world tools and data sources, like databases, file systems, or APIs. Instead of building a custom integration for every tool, you implement MCP once and any compatible AI client can use it. Anthropic released MCP as an open standard in November 2024." + - question: "Are MCP startup ideas viable in 2026?" + answer: "Yes, MCP adoption is growing fast across AI tools, and many useful agent based products require access to external systems. Anything that requires an AI to act on live business data (incident response, founder assistants, dev onboarding) is a strong candidate. Smaller teams can ship MCP based products quickly because the protocol handles the wiring." + - question: "Does Appwrite have an MCP server?" + answer: "Yes, Appwrite provides an official MCP server that lets AI agents interact with your Appwrite projects. You can connect tools like Claude Desktop or Cursor and have them query databases, create resources, or run actions in your project. See the [Appwrite MCP docs](/docs/tooling/mcp) for setup instructions." + - question: "Do I need to be an AI expert to build an MCP product?" + answer: "No, you mostly need product sense and competence with APIs and backend services. The AI client (Claude, Cursor, etc.) handles the model side, while your MCP server exposes the actions and data. Most of the engineering work looks like building a typical API server, not training models." + - question: "What backend should I use for an MCP based startup?" + answer: "You need somewhere to store data, run logic, and handle auth. [Appwrite](/docs/products/databases) gives you databases, auth, storage, and functions in one platform, so you can ship faster instead of stitching services together. The [Appwrite Startups Program](https://appwrite.io/startups) offers cloud credits and support for early stage teams building on the platform." + - question: "What kinds of MCP startups have the highest chance of success?" + answer: "Vertical applications that bring AI into a specific workflow tend to do well, like incident tracing, dev onboarding, or AI changelogs that log every agent action. Generic agents face stiff competition from big platforms, so a sharp niche and access to proprietary data sources are good differentiators. Pick a workflow where the cost of the current manual process is high and visible." --- This has to be the best time in history to start a business. With so many advancements in AI tools and agents, it has never been this easy to build and scale your startup. The next breed of billion-dollar companies will be tiny teams backed by AI agents and workflows. diff --git a/src/routes/blog/post/meet-the-new-appwrite/+page.markdoc b/src/routes/blog/post/meet-the-new-appwrite/+page.markdoc index 80d7d6bb961..a3417685536 100644 --- a/src/routes/blog/post/meet-the-new-appwrite/+page.markdoc +++ b/src/routes/blog/post/meet-the-new-appwrite/+page.markdoc @@ -8,6 +8,17 @@ timeToRead: 5 author: sara-kaandorp category: design, brand featured: false +faqs: + - question: "What changed in the Appwrite rebrand?" + answer: "Appwrite refreshed its logo, color palette, website, and documentation experience. The new logo features a globe and code lines forming the letter 'a' to reflect the global open source community. The visual identity introduces warmer tones and a glass element that ties back to Appwrite's transparency and open source values." + - question: "Why did Appwrite rebrand?" + answer: "As the team and product matured, the original 2019 visual identity no longer matched the polish of the platform. The rebrand aligns the brand with the broader Appwrite experience across console, docs, and website. It also gives the community a more inclusive set of visuals to rally around." + - question: "Is Appwrite still open source after the rebrand?" + answer: "Yes, Appwrite is still fully open source and the rebrand does not affect product licensing or availability. The visual refresh applies to brand assets, the website, and the documentation experience. The codebase, contribution model, and self hosting options remain unchanged." + - question: "Did the rebrand change anything in the documentation?" + answer: "Yes, the docs were revamped alongside the website with updated design and improved content structure. New step by step tutorials were added to guide developers through project setup and feature implementation. The goal was to make documentation more useful at every stage of the developer journey." + - question: "Where can I find the new Appwrite brand assets?" + answer: "Brand assets are available through the Appwrite website footer under the brand or press section. The team also publishes guidance on logo usage, color palette, and visual elements. If you are referencing Appwrite in a project, use the latest assets for consistency." --- At Appwrite, we are constantly collaborating with the Appwrite community to improve Appwrite's products, services, and content. All for the sake of improving your developer experience, as well as staying true to the open-source values. diff --git a/src/routes/blog/post/memberships-privacy-announcement/+page.markdoc b/src/routes/blog/post/memberships-privacy-announcement/+page.markdoc index 79604f1ce17..79e0de537e7 100644 --- a/src/routes/blog/post/memberships-privacy-announcement/+page.markdoc +++ b/src/routes/blog/post/memberships-privacy-announcement/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/memberships-privacy-announcement/cover.avif timeToRead: 4 author: ebenezer-don category: product, announcement +faqs: + - question: "What is memberships privacy in Appwrite?" + answer: "Memberships privacy lets you mark specific membership details as private so they are not exposed to other users or team members. You can configure the userName, userEmail, and mfa fields to remain hidden in collaborative workflows. This protects sensitive information without changing how the rest of the app behaves." + - question: "Which plans support memberships privacy?" + answer: "Memberships privacy is available on all Appwrite plans, including free and self hosted deployments. You do not need to upgrade to a specific tier to use it. The feature is configured per project from the Appwrite Console." + - question: "How do I enable memberships privacy on my project?" + answer: "Open the Appwrite Console, go to Auth, then Security, then Memberships privacy. Select which fields (userName, userEmail, or mfa) should be private and save the configuration. The changes apply to subsequent membership reads within the project." + - question: "Why hide team member details?" + answer: "In many apps, team members do not need to see each other's email addresses or MFA status. Exposing those details can leak personal information and create unnecessary attack surface for social engineering. Hiding them keeps collaboration features working while reducing what gets shared across users." + - question: "Does memberships privacy affect existing membership API calls?" + answer: "The API still works the same way, but private fields are returned as empty for users without permission to see them. Backend code that needs the full data can still access it through a server API key. Frontend code should handle the redacted values gracefully." + - question: "Where can I learn more about Appwrite Auth security?" + answer: "See the [Appwrite Auth documentation](/docs/products/auth) for an overview of authentication, sessions, and security features. The memberships privacy section walks through the specific settings and behavior. You can also ask questions on the Appwrite Discord if you run into edge cases." --- Protecting user data is fundamental to building secure and reliable applications. We're excited to announce that memberships privacy is now available on all Appwrite plans, enabling you to safeguard your members' personal information effectively. diff --git a/src/routes/blog/post/messaging-explained/+page.markdoc b/src/routes/blog/post/messaging-explained/+page.markdoc index e0a62927258..b6070c21bee 100644 --- a/src/routes/blog/post/messaging-explained/+page.markdoc +++ b/src/routes/blog/post/messaging-explained/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/messaging-explained/cover.avif timeToRead: 5 author: aditya-oberai category: product +faqs: + - question: "What is Appwrite Messaging?" + answer: "[Appwrite Messaging](/docs/products/messaging) is an open source product that sends push notifications, emails, and SMS from your Appwrite project through one unified API. It connects with third party providers like Vonage, Twilio, and Mailgun to handle the actual delivery. You get one consistent interface across channels without managing each provider's SDK separately." + - question: "What is the difference between topics and targets in Appwrite Messaging?" + answer: "Targets are individual delivery destinations such as a specific email address, phone number, or device. Topics group many targets together so you can broadcast to all subscribers in one call. Use targets for one off transactional messages and topics for newsletters, announcements, or any broadcast pattern." + - question: "Which providers does Appwrite Messaging support?" + answer: "Appwrite Messaging integrates with Twilio and Vonage for SMS, Mailgun and others for email, and FCM and APNs for push notifications. The full list of supported providers is in the [Messaging documentation](/docs/products/messaging). You can also configure multiple providers per channel and pick which one to use per message." + - question: "Can I schedule messages with Appwrite Messaging?" + answer: "Yes, when you create a message you can include a scheduled at timestamp. An internal scheduler checks for due messages every minute and queues them for delivery. This works for emails, SMS, and push notifications across topics and direct targets." + - question: "How does Appwrite send messages under the hood?" + answer: "When you call the API, Appwrite validates the input, creates a message document, and creates a schedule document for delivery timing. A worker picks up due messages, resolves topic targets, selects the right provider for each target, and dispatches the message. Failures are logged so you can debug delivery issues from the Console." + - question: "What are common use cases for Appwrite Messaging?" + answer: "Common use cases include transactional notifications (payment receipts, password resets), marketing campaigns through topics, real time alerts to drive engagement, and custom security flows like OTP delivery. Combining Messaging with [Appwrite Functions](/docs/products/functions) lets you trigger messages from app events without managing extra infrastructure." --- Recently, Appwrite launched its newest product, [Appwrite Messaging](https://appwrite.io/products/messaging), an open-source messaging solution that allows you to send push notifications, emails, and SMS directly to your users. In this blog, we will discuss all the fundamental features of the Messaging product and how a message is actually sent through the internal service. diff --git a/src/routes/blog/post/migrate-firebase-projects-to-appwrite/+page.markdoc b/src/routes/blog/post/migrate-firebase-projects-to-appwrite/+page.markdoc index 5249c23d02c..63aba59da41 100644 --- a/src/routes/blog/post/migrate-firebase-projects-to-appwrite/+page.markdoc +++ b/src/routes/blog/post/migrate-firebase-projects-to-appwrite/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/migrate-firebase-projects-to-appwrite/migrate-firebase-proje timeToRead: 10 author: vincent-ge category: migration +faqs: + - question: "How do I migrate from Firebase to Appwrite?" + answer: "Use Appwrite Migrations from the Console. Create a new project, open the Migrations tab in Project Settings, select Firebase as the source, paste your Firebase Admin SDK service account JSON, choose which resources to import, and start the migration. The process runs in the background and handles users and files automatically." + - question: "What gets migrated automatically from Firebase to Appwrite?" + answer: "Appwrite Migrations automatically moves user accounts and files from Firebase. Documents and cloud functions need extra work because their data models and runtimes differ. Nested documents need to be transformed into Appwrite relationships, usually with a small migration script." + - question: "Do I need to rewrite my Firebase Cloud Functions?" + answer: "Yes, [Appwrite Functions](/docs/products/functions) use different syntax, runtimes, and deployment methods, so most Firebase Cloud Functions need partial rewrites. The pattern is similar to standard HTTP controllers, so the lift is manageable. Appwrite supports more runtimes and flexible execution triggers than Firebase." + - question: "How does Appwrite handle nested data compared to Firebase?" + answer: "Firebase stores nested documents directly, while Appwrite uses [database relationships](/docs/products/databases) (one to one, one to many, many to many) to model linked data. You typically restructure nested Firebase data into separate Appwrite collections connected by relationships. This makes querying more predictable and easier to optimize." + - question: "Is Appwrite Migrations free?" + answer: "Yes, the Migrations tool is included with every Appwrite project and there is no extra fee for running migrations. You pay for the storage and usage of the resulting resources just like any other project. Self hosted Appwrite users get the same Migrations functionality at no cost." + - question: "What do I do after the migration finishes?" + answer: "Register your existing web, mobile, or native apps as platforms in the Appwrite Console using the [quick starts](/docs/quick-starts). Then migrate any nested data with a Server SDK and database relationships, and rewrite Firebase Cloud Functions as [Appwrite Functions](/docs/products/functions). Finally, test all flows end to end before pointing production traffic at the new project." --- If you’re ready to move from Firebase to Appwrite, or you just want to explore your BaaS options (see [backend as a service (BaaS)](/blog/post/backend-as-a-service)), we can give you a jump start with Appwrite Migrations. diff --git a/src/routes/blog/post/migrate-from-vercel-to-appwrite-sites/+page.markdoc b/src/routes/blog/post/migrate-from-vercel-to-appwrite-sites/+page.markdoc index 3339a953460..e0ed97b269d 100644 --- a/src/routes/blog/post/migrate-from-vercel-to-appwrite-sites/+page.markdoc +++ b/src/routes/blog/post/migrate-from-vercel-to-appwrite-sites/+page.markdoc @@ -9,6 +9,19 @@ author: eldad-fux category: product featured: false callToAction: true +faqs: + - question: "How do I migrate from Vercel to Appwrite Sites?" + answer: "Point your project at [Appwrite Sites](/docs/products/sites) and push to Git, the workflow stays the same. You do not need to refactor your application, change build commands, or rewire CI. Most teams go live within a day, and the [Vercel migration guide](/docs/products/sites/migrations/vercel) walks through the steps." + - question: "Does Appwrite Sites support Next.js fully?" + answer: "Yes, Appwrite Sites runs on containers rather than constrained serverless runtimes, so Next.js works without workarounds. Static rendering, SSR, middleware, and API routes all behave as designed. You do not need open next patches or custom build steps to make a Next.js app run." + - question: "How does Appwrite Sites compare to Vercel on cost?" + answer: "Appwrite Sites includes 2TB of bandwidth in the base plan and offers volume discounts for teams migrating from Vercel. The pricing model is designed to be predictable as traffic grows, so you avoid surprise bandwidth overages. Larger workloads typically end up cheaper on Appwrite Sites than on Vercel." + - question: "Does Appwrite Sites use a CDN?" + answer: "Yes, Appwrite Sites is backed by a [multi-CDN](/docs/products/network/cdn) network that combines several top tier CDN providers into one global edge layer. Requests are routed through the fastest available path for each user. This gives you low latency and high availability without configuring CDN infrastructure yourself." + - question: "Can I self host Appwrite Sites?" + answer: "Yes, Appwrite is fully open source and you can [self host](/docs/advanced/self-hosting) the entire platform, including Sites. This gives you the option to move workloads on-prem or to your own cloud if requirements change. The same product runs whether you use Appwrite Cloud or self host." + - question: "What does the rest of Appwrite Cloud add beyond Sites?" + answer: "On top of Sites for hosting, you get [Functions](/docs/products/functions) for backend logic, [Databases](/docs/products/databases) for data, [Storage](/docs/products/storage) for files, [Auth](/docs/products/auth) for users, and [Messaging](/docs/products/messaging) for notifications. They are integrated, so you can build full stack apps in one place. This removes the need to stitch together several third party services." --- If you’ve been hosting on Vercel, you’ve probably grown used to a deployment workflow that feels effortless. Git push, automatic builds, instant previews, and a global network behind you. Migrating away from that level of convenience can feel like a step backwards, but with Appwrite Sites, it’s the exact opposite. You get the same smooth developer experience, with more power, more flexibility, and a better cost structure behind it. diff --git a/src/routes/blog/post/mock-numbers-best-practices/+page.markdoc b/src/routes/blog/post/mock-numbers-best-practices/+page.markdoc index 4fb9ead308b..7669136f499 100644 --- a/src/routes/blog/post/mock-numbers-best-practices/+page.markdoc +++ b/src/routes/blog/post/mock-numbers-best-practices/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: ebenezer-don category: product featured: false +faqs: + - question: "What are mock phone numbers in Appwrite?" + answer: "Mock phone numbers are predefined phone and verification code pairs you configure in your project to simulate phone authentication. When you use a mock number in a phone sign in flow, Appwrite accepts the matching mock code instead of sending a real SMS. This makes testing phone auth fast and free." + - question: "Why use mock numbers instead of real SMS in testing?" + answer: "Real SMS costs money per message and can be delayed by carrier networks, which slows development and QA. Mock numbers remove cost and delay so you can iterate on auth flows quickly. They also let app store reviewers test phone sign in without sharing personal numbers." + - question: "How do I set up mock phone numbers in Appwrite?" + answer: "In the Appwrite Console, go to your project, then Auth, then Security, and scroll to Mock phone numbers. Click Generate number to create a mock phone and verification code, then Update to save. You can add multiple mock numbers or edit existing ones from the same screen. See [Appwrite Auth docs](/docs/products/auth) for more details." + - question: "Are mock numbers safe to use in production?" + answer: "Mock numbers are intended for development and testing, not for production traffic. They live in your project configuration and bypass real SMS delivery, which is fine for testing but inappropriate for real users. Disable or rotate mock numbers when moving to production so they cannot be misused." + - question: "Can mock numbers help with App Store review?" + answer: "Yes, App Store and Play Store reviewers often need to test authentication flows that include phone sign in. Providing mock credentials in your review notes lets them complete sign in without using their own phone numbers. This avoids review delays caused by unreachable phone verification." + - question: "Do mock numbers work with all phone auth flows?" + answer: "Yes, mock numbers integrate with the standard Appwrite phone auth flow using createPhoneToken followed by createSession. You pass the mock number and matching mock verification code as you would with a real number. This means your client side code does not need any special handling for tests." --- If you've ever struggled with testing phone sign-in flows without incurring the cost of real SMS messages or waiting for delivery delays, you'll appreciate the convenience of mock numbers. In Appwrite, mock numbers are predefined phone numbers and verification codes that you can use to simulate phone sign-in scenarios during development and testing. diff --git a/src/routes/blog/post/new-image-formats-avif-heic/+page.markdoc b/src/routes/blog/post/new-image-formats-avif-heic/+page.markdoc index 11d7204e293..3d364e8551c 100644 --- a/src/routes/blog/post/new-image-formats-avif-heic/+page.markdoc +++ b/src/routes/blog/post/new-image-formats-avif-heic/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 6 author: damodar-lohani category: product, announcement featured: false +faqs: + - question: "What is HEIC and why does it matter?" + answer: "HEIC is Apple's default image format on iOS, designed to deliver high quality images at significantly smaller file sizes than JPEG. It is widely used in iPhone photo libraries and apps that need to handle native iOS image capture. Supporting HEIC means images stay smaller without losing quality on Apple devices." + - question: "What is AVIF and how does it compare to other formats?" + answer: "AVIF is a modern open image format with excellent compression ratios, often producing files smaller than WebP at similar quality. It is supported by modern browsers like Chrome, Firefox, and Safari (recent versions). For media heavy sites, switching to AVIF can cut bandwidth and improve load times noticeably." + - question: "How do I use HEIC or AVIF with Appwrite Storage?" + answer: "Call the image preview endpoint with the output parameter set to ImageFormat.Heic or ImageFormat.Avif using the [Appwrite SDK](/docs/sdks). The source image can be in any supported format, Appwrite converts on the fly. See the [image transformation docs](/docs/products/storage/images) for the full parameter list." + - question: "Do I need to upload images in HEIC or AVIF to serve them in those formats?" + answer: "No, you can upload images in any common format and request the preview in HEIC or AVIF at serve time. Appwrite handles the conversion as part of the [Storage](/docs/products/storage) preview pipeline. This means you keep one source file per image and deliver the right format per client." + - question: "Is HEIC or AVIF support available on self hosted Appwrite?" + answer: "Yes, HEIC and AVIF output formats are available on both Appwrite Cloud and self hosted installations. Update to a version that includes the feature and you can request previews in either format. No additional external services are required." + - question: "When should I use AVIF over WebP or JPEG?" + answer: "Use AVIF when you need the smallest file sizes and your audience uses modern browsers and devices. WebP remains a safe middle ground for broader compatibility, and JPEG still serves legacy clients. For mixed audiences, request AVIF with a JPEG fallback by detecting client support." --- We’re excited to share we have added support for two new image formats in Appwrite Storage: **HEIC** and **AVIF.** This will give you more tools to manage, manipulate, and serve images the way you need. diff --git a/src/routes/blog/post/new-string-types/+page.markdoc b/src/routes/blog/post/new-string-types/+page.markdoc index 186e6259e73..a5ac49411c9 100644 --- a/src/routes/blog/post/new-string-types/+page.markdoc +++ b/src/routes/blog/post/new-string-types/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: eldad-fux category: announcement featured: false +faqs: + - question: "What new string types does Appwrite Databases support?" + answer: "[Appwrite Databases](/docs/products/databases) now supports four explicit string column types: varchar, text, mediumtext, and longtext. Each has a defined maximum size and indexing behavior, so you can pick the right one based on how the data is used. The legacy string type is deprecated but still supported." + - question: "What is the difference between varchar and text columns?" + answer: "varchar is stored inline in the row and counts toward the 64KB row size budget, but it can be fully indexed if the size is under 768 characters. text is stored off page with just a 20 byte pointer in the row, so it doesn't consume row space, but it only supports prefix indexing. Use varchar for short queryable fields and text for longer content." + - question: "When should I use mediumtext or longtext?" + answer: "Use mediumtext for content up to about 4 million characters, like article bodies or longer notes. Use longtext for content up to about 1 billion characters, like full logs or serialized payloads. Both are stored off page and support prefix indexing only." + - question: "Is the old string column type still supported?" + answer: "Yes, the string type is deprecated but Appwrite will continue to maintain full backward support for it. Existing string columns will keep working without changes. For new columns, use the explicit varchar, text, mediumtext, or longtext types to make storage and indexing intentions clear." + - question: "Why did Appwrite introduce explicit string types?" + answer: "The single string type hid important storage details, including how large values were stored and which row width limits applied. This made it hard for developers and AI agents to make informed schema decisions. Explicit types expose those tradeoffs so the right choice is visible at design time." + - question: "Can I migrate existing string columns to the new types?" + answer: "Existing string columns continue to work, and you can add new columns using the explicit types alongside them. There is no forced migration path. If you need to switch, plan a data migration by creating new columns with the desired type and copying data over with a script." --- Until now, Appwrite offered a single `string` column type that abstracted away four different storage types, based on the size you specified. This meant you had no visibility into how your data was actually stored, how it could be indexed, or why certain size limits existed. diff --git a/src/routes/blog/post/nextjs-output-modes/+page.markdoc b/src/routes/blog/post/nextjs-output-modes/+page.markdoc index dfe7332f946..20e72a3c38f 100644 --- a/src/routes/blog/post/nextjs-output-modes/+page.markdoc +++ b/src/routes/blog/post/nextjs-output-modes/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: atharva category: tutorial featured: false +faqs: + - question: "What are Next.js output modes?" + answer: "Next.js output modes control how your app is bundled and served. The main options are default (relies on node_modules and .next at runtime), standalone (bundles only required files into a self contained output), and export (produces a static site). Each mode has different tradeoffs around size, performance, and compatibility." + - question: "What is Next.js standalone mode?" + answer: "Standalone mode produces a self contained build under .next/standalone that includes only the dependencies your app actually uses. It does not require node_modules at runtime, which makes deployments smaller and cold starts faster. You opt in by setting output: 'standalone' in next.config.js." + - question: "When should I use standalone mode over default?" + answer: "Use standalone mode when build size and cold start time matter, which is most production deployments. It is especially useful when shipping containers or running on platforms that bill by deployment size. Stick with default mode if you rely on dynamic imports or monorepo patterns that the tracer cannot resolve." + - question: "Does Appwrite Sites support Next.js standalone mode?" + answer: "Yes, [Appwrite Sites](/docs/products/sites) fully supports Next.js standalone mode. Add output: 'standalone' to next.config.js and deploy as usual. Appwrite Sites detects the standalone build automatically, no extra configuration required." + - question: "What is the difference between standalone and export modes?" + answer: "Standalone mode produces a self contained server bundle that still runs Node.js at runtime, so SSR, API routes, and middleware all work. Export mode produces purely static HTML and assets with no server logic, suitable for sites without dynamic features. Pick standalone for full Next.js capabilities and export for fully static sites." + - question: "Why is standalone mode not the Next.js default?" + answer: "Standalone relies on static analysis to trace which files are needed, so dynamic imports, monorepo packages, or unusual runtime patterns can break the build. These edge cases mean Vercel and the Next.js team keep default mode as the safest option. Try standalone first and fall back to default if you hit a tracing issue." --- Next.js is a very popular React framework. People choose it because it blends in with the server very well, using both client-side and server-side capabilities to provide a better user experience. Next.js is packed with cutting-edge React features like RSC. However, such features also bring complexity when deploying your app. diff --git a/src/routes/blog/post/nextjs-standalone-support-in-appwrite-sites/+page.markdoc b/src/routes/blog/post/nextjs-standalone-support-in-appwrite-sites/+page.markdoc index fd8e34dfc40..ca9b17daadd 100644 --- a/src/routes/blog/post/nextjs-standalone-support-in-appwrite-sites/+page.markdoc +++ b/src/routes/blog/post/nextjs-standalone-support-in-appwrite-sites/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/nextjs-standalone-builds/cover.avif timeToRead: 4 author: ebenezer-don category: announcement +faqs: + - question: "How do I enable Next.js standalone mode on Appwrite Sites?" + answer: "Add output: 'standalone' to your next.config.js and build the project as usual. [Appwrite Sites](/docs/products/sites) detects the standalone output automatically, so no further configuration is required. You can then deploy with git push or the Appwrite CLI." + - question: "What benefits does standalone mode bring?" + answer: "In Appwrite's benchmarks, standalone builds were about 6x smaller and started about 2x faster than default builds. The reduced size also means quicker deployments and lower storage usage per build. This translates to faster iteration and a better user experience after deploys." + - question: "Does standalone mode work with Next.js 16?" + answer: "Yes, Appwrite Sites supports Next.js 16 with standalone builds. The work that enabled standalone support came out of community feedback on Next.js 16 build behavior. If you are upgrading to Next.js 16, standalone mode is a strong default to consider." + - question: "Do I need to change my deployment workflow to use standalone mode?" + answer: "No, the workflow is the same. You push to your Git repo or use the Appwrite CLI, and Appwrite Sites detects the standalone output. Only your next.config.js needs the output: 'standalone' line." + - question: "Does standalone mode affect SSR, API routes, or middleware?" + answer: "No, standalone mode preserves full Next.js functionality including SSR, API routes, middleware, and server actions. It is just a different bundling strategy for the same app. You keep all the features of Next.js while shipping a smaller artifact." + - question: "Is Appwrite Sites a good alternative to Vercel for Next.js?" + answer: "Yes, [Appwrite Sites](/docs/products/sites) runs Next.js on containers without serverless constraints, so most apps work without workarounds. It also integrates with the rest of Appwrite Cloud for backend features like databases, auth, and storage. See the [Vercel migration guide](/docs/products/sites/migrations/vercel) for a walkthrough." --- You can now deploy Next.js apps built in [standalone mode](https://nextjs.org/docs/app/api-reference/config/next-config-js/output) on Appwrite Sites, with full support for Next.js 16. In standalone mode, the build process creates a smaller package that includes only the files your app needs to run in production, leaving out development tools and unused parts of the framework. diff --git a/src/routes/blog/post/nextjs-starter-sites/+page.markdoc b/src/routes/blog/post/nextjs-starter-sites/+page.markdoc index 9ab0f1558d3..7972e517455 100644 --- a/src/routes/blog/post/nextjs-starter-sites/+page.markdoc +++ b/src/routes/blog/post/nextjs-starter-sites/+page.markdoc @@ -9,6 +9,19 @@ author: aditya-oberai category: tutorial featured: false callToAction: true +faqs: + - question: "How do I deploy a Next.js app to Appwrite Sites?" + answer: "Create a project in Appwrite Cloud, open the Sites page, click Create site, and choose Clone a template. Search for the Next.js starter, connect your GitHub repository if you want continuous deployment, and click Deploy. See the [Appwrite Sites docs](/docs/products/sites) for additional deployment options." + - question: "What does the Appwrite Next.js starter template include?" + answer: "The starter ships with a clean single page UI, an integration with the Appwrite SDK, and preset deployment settings tuned for SSR on Appwrite Sites. It is intended as a baseline you can extend for your own app. You get a working deployment in minutes without writing configuration files." + - question: "Can I deploy Appwrite Sites from the CLI?" + answer: "Yes, run appwrite init sites to scaffold a new site interactively, picking Next.js as the framework. Then run appwrite push sites to deploy. The [CLI deploy docs](/docs/products/sites/quick-start/nextjs) explain the available flags and configuration options." + - question: "What frameworks have Appwrite Sites starter templates?" + answer: "Appwrite Sites offers starter templates for Next.js, React, Vue, Nuxt, Angular, SvelteKit, and Flutter. You can browse and clone any of them from the templates section in the Sites Console. New templates are added over time, so check the listing for the latest options." + - question: "Do I need to self host Appwrite to use Sites?" + answer: "No, [Appwrite Sites](/docs/products/sites) is available on Appwrite Cloud. You can also self host Appwrite 1.7 or later if you prefer to run the entire platform yourself. Both options support the same site deployment workflow." + - question: "How do I connect a custom domain to my Appwrite Site?" + answer: "From the deployed site dashboard, open the Domains tab and add your domain. Appwrite gives you DNS records to point your domain to the platform. Once DNS propagates, your site serves traffic on the custom domain alongside the default Appwrite subdomain." --- Building web applications requires both front-end expertise and back-end infrastructure. Appwrite Sites simplifies this process by providing a platform for deploying, hosting, and scaling web applications. diff --git a/src/routes/blog/post/nodejs-v25-whats-new/+page.markdoc b/src/routes/blog/post/nodejs-v25-whats-new/+page.markdoc index 9332aa49be3..7081026228b 100644 --- a/src/routes/blog/post/nodejs-v25-whats-new/+page.markdoc +++ b/src/routes/blog/post/nodejs-v25-whats-new/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 9 author: ebenezer-don category: news featured: false +faqs: + - question: "What is new in Node.js v25?" + answer: "Node.js v25 ships with the V8 14.1 engine, experimental Web Storage API support, a --allow-net flag for network permissions, and ongoing performance improvements. JSON.stringify is more than twice as fast in JetStream2 benchmarks. The release is non LTS, so use it for testing rather than production critical systems." + - question: "Is Node.js v25 an LTS release?" + answer: "No, v25 is an odd numbered release and does not receive long term support. It acts as a testing ground for features that may stabilize in future LTS versions like v26. Stick with the latest LTS for production unless you specifically need a v25 feature." + - question: "What is the --allow-net flag in Node.js?" + answer: "The --allow-net flag is part of the Node.js permission model and lets you restrict which hosts your application can reach over the network. Combined with --permission, you can require explicit allowlists for network access. It is similar in spirit to Deno's permission system." + - question: "Does Node.js v25 really have localStorage?" + answer: "Yes, Node.js v25 exposes the experimental Web Storage API, including localStorage and sessionStorage. This makes it easier to share utility code between browser and server in frameworks like Next.js. The API is still experimental and stricter behavior is planned for v26.0.0." + - question: "What broke in Node.js v25.2.0?" + answer: "v25.2.0 started throwing SecurityError when accessing localStorage without a configured storage path, which broke Jest, Vite, and other ecosystem tools. v25.2.1 reverted the change and pushed the stricter behavior to v26.0.0. Upgrade past v25.2.0 to avoid the regression." + - question: "Does Appwrite Functions support Node.js v25?" + answer: "Appwrite Functions tracks Node.js runtimes for [Functions](/docs/products/functions). Node.js LTS versions are the typical recommendation for production workloads. Check the [Functions runtime docs](/docs/products/functions) for the current list of supported Node.js versions." --- Node.js v25.2.1, the current release as of November 17, 2025, represents the latest evolution in the v25 series. This release brings performance improvements, security features, and web standards alignment, though it also demonstrates how the Node.js team handles breaking changes. diff --git a/src/routes/blog/post/nuxt-starter-sites/+page.markdoc b/src/routes/blog/post/nuxt-starter-sites/+page.markdoc index b61c03a9396..24c4c4ff4d2 100644 --- a/src/routes/blog/post/nuxt-starter-sites/+page.markdoc +++ b/src/routes/blog/post/nuxt-starter-sites/+page.markdoc @@ -9,6 +9,19 @@ author: aditya-oberai category: tutorial featured: false callToAction: true +faqs: + - question: "What is the Nuxt starter template for Appwrite Sites?" + answer: "The Nuxt starter template is a pre-configured Nuxt project that already includes the Appwrite SDK and deployment settings for [Appwrite Sites](/docs/products/sites). It gives you a working SSR Nuxt app in a few clicks, so you can focus on your features instead of wiring up boilerplate." + - question: "Does Appwrite Sites support SSR for Nuxt?" + answer: "Yes. Appwrite Sites supports both static and SSR rendering for Nuxt apps. The starter template is configured for SSR by default, but you can switch to static if your app does not need server rendering." + - question: "Can I deploy the Nuxt starter without using the console?" + answer: "Yes. You can deploy with the Appwrite CLI using `appwrite init sites` and `appwrite push sites`. The CLI is the option to use if you prefer scripted workflows or want to integrate deploys into CI/CD." + - question: "Do I need to connect a GitHub repository to deploy?" + answer: "No, connecting a Git repository is optional. You can skip it during template setup and deploy manually, or connect a repo later to get automatic deployments on every push to your production branch." + - question: "Can I self-host Appwrite to use Sites?" + answer: "Yes. Appwrite Sites is available on Appwrite Cloud and on self-hosted Appwrite 1.7 and above. Both routes give you the same template catalog and deployment workflows." + - question: "What other starter templates does Appwrite Sites offer?" + answer: "Appwrite Sites includes starter templates for Next.js, React, Vue, Nuxt, Angular, SvelteKit, and Flutter. You can browse the full list from the Create site flow inside your Appwrite project." --- Building web applications requires both front-end expertise and back-end infrastructure. [Appwrite Sites](/products/sites) simplifies this process by providing a platform for deploying, hosting, and scaling web applications. diff --git a/src/routes/blog/post/oauth-openid/+page.markdoc b/src/routes/blog/post/oauth-openid/+page.markdoc index 569a840a42c..fb8fc5b4330 100644 --- a/src/routes/blog/post/oauth-openid/+page.markdoc +++ b/src/routes/blog/post/oauth-openid/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/oauth-openid.avif timeToRead: 6 author: aditya-oberai category: authentication, security +faqs: + - question: "What is the difference between OAuth and OpenID Connect?" + answer: "OAuth 2.0 is an authorization framework that lets an app access resources on another service on behalf of a user. OpenID Connect (OIDC) is an identity layer built on top of OAuth 2.0 that adds authentication, returning an ID token with verified user information. Use OAuth when you need access to APIs, and OIDC when you need to know who the user is." + - question: "Why should I use PKCE with OAuth?" + answer: "PKCE (Proof Key for Code Exchange) protects the authorization code flow from interception attacks, especially in mobile and single page apps that cannot safely store a client secret. It is now considered a best practice for any OAuth client, including confidential ones." + - question: "What is an ID token in OpenID Connect?" + answer: "An ID token is a signed JWT that contains claims about the authenticated user, such as their subject ID, email, and the issuer. Your app validates the signature and claims to confirm the user's identity instead of making a separate API call." + - question: "Does Appwrite support OAuth and OpenID Connect?" + answer: "Yes. [Appwrite Authentication](/docs/products/auth) supports over 30 OAuth 2.0 providers out of the box, plus a generic OIDC adapter for any standards compliant identity provider. You configure the client ID, secret, and endpoints, then trigger the flow with a few SDK calls." + - question: "How do I add a custom OpenID Connect provider to Appwrite?" + answer: "Use the generic OIDC adapter in Appwrite Authentication. You provide the client ID, client secret, well known endpoint, authorization endpoint, token endpoint, and user info endpoint, and Appwrite handles the redirects and token exchange for you." + - question: "Is OAuth secure enough for production apps?" + answer: "Yes, when implemented correctly. Always use HTTPS, validate redirect URIs, use the state parameter to prevent CSRF, use PKCE for public clients, validate ID tokens, and request the minimum scopes you need. Skipping these steps is what makes OAuth implementations insecure." --- When it comes to web security, **OAuth** and **OpenID Connect (OIDC)** have revolutionized how we manage and secure user authentication and authorization. OAuth, primarily a protocol for authorization, enables third-party access to user data without exposing their credentials. On the other hand, OIDC, built on top of OAuth 2.0, extends this protocol by adding user authentication. These technologies provide a secure, efficient way for users to log in and share information across different services without compromising their privacy or security. diff --git a/src/routes/blog/post/offline-first-journal/+page.markdoc b/src/routes/blog/post/offline-first-journal/+page.markdoc index ebef1f7a597..22a49356594 100644 --- a/src/routes/blog/post/offline-first-journal/+page.markdoc +++ b/src/routes/blog/post/offline-first-journal/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 14 author: aditya-oberai category: integrations callToAction: true +faqs: + - question: "What is RxDB and why use it with Appwrite?" + answer: "RxDB is a local-first, reactive NoSQL database for JavaScript apps. Pairing it with [Appwrite Databases](/docs/products/databases) gives you local storage with automatic two way sync, so your app keeps working offline and pushes changes to the server when connectivity returns." + - question: "Does RxDB officially support Appwrite?" + answer: "Yes. RxDB ships a replication plugin specifically for Appwrite Databases. It handles the push and pull replication loop, so you only need to configure the database, collection, and a few schema fields." + - question: "Why does the entries collection need a `deleted` boolean field?" + answer: "RxDB does not hard delete records. It uses soft deletes via a `deleted` flag so the deletion can replicate to other clients without losing data in offline scenarios. Without this field, sync will not work correctly." + - question: "Can I use a framework other than SvelteKit for this pattern?" + answer: "Yes. RxDB runs in any JavaScript environment, including React, Vue, Angular, React Native, and Electron. The replication plugin for Appwrite is framework agnostic, so the same sync logic carries over." + - question: "How does real-time sync work between clients?" + answer: "RxDB watches local changes and pushes them to Appwrite. Appwrite's [Realtime API](/docs/products/databases) then broadcasts those updates, and RxDB pulls them down on other clients. The result is near instant sync across devices when they are online." + - question: "What storage engine should I pick for the browser?" + answer: "IndexedDB is the default choice for browsers and PWAs because it is persistent and supports the data sizes a journal app would need. RxDB also supports SQLite and filesystem storage for mobile and desktop targets." --- Ever found yourself staring at a loading spinner in a no-network zone, wishing your app could just work offline? Whether you're building a journal, a field notes app, or anything in between, offline data synchronization is no longer a luxury but a necessity. There is some good news, though. If you’re building with JavaScript, Appwrite Databases now features a direct integration with RxDB, making it easier than ever to build real-world apps that stay in sync online and offline. diff --git a/src/routes/blog/post/open-source-contributors-16/+page.markdoc b/src/routes/blog/post/open-source-contributors-16/+page.markdoc index ba7bac88206..bec9f102a1a 100644 --- a/src/routes/blog/post/open-source-contributors-16/+page.markdoc +++ b/src/routes/blog/post/open-source-contributors-16/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aditya-oberai category: open-source featured: false +faqs: + - question: "What major changes shipped in Appwrite 1.6?" + answer: "Appwrite 1.6 focused on the Functions ecosystem with local development, a rewritten CLI, support for Go as a runtime, and a long list of community contributed fixes across the console, server, SDKs, and templates." + - question: "How can I contribute to Appwrite?" + answer: "You can open issues, send pull requests, join GitHub Discussions, share feedback in the Appwrite [Discord](https://appwrite.io/discord), or contribute templates and translations. Every Appwrite repository on GitHub has a contributing guide that explains the setup and conventions." + - question: "Does Appwrite hire from its open source community?" + answer: "Yes. Many of Appwrite's engineers, including some of the founding team, started as open source contributors. Active contributors are often the first people considered when new roles open up." + - question: "Where do I find the list of repositories I can contribute to?" + answer: "Most projects live under the [appwrite GitHub organization](https://github.com/appwrite), including the server, console, SDKs, templates, and SDK generator. Look for issues labeled `good first issue` or `help wanted` if you are new." + - question: "Do contributions to templates and SDKs count?" + answer: "Yes. Templates, SDK generator changes, documentation, translations, and bug fixes are all valuable. Many contributors in this release worked on templates and the SDK generator rather than the core server." + - question: "Why does Appwrite stay open source as it grows?" + answer: "Open source is part of how Appwrite was built and how it ships. Keeping the core open means developers can self-host, audit the code, contribute back, and avoid lock-in, which the team treats as a core promise to the community." --- This week, we announced the brand new 1.6 version, which features major updates to the Functions ecosystem, including local development, an updated CLI, support for Go, and more. And, just like every major release before that, Appwrite 1.6 is a testament to the power of open-source collaboration. With over 40 developers contributing, we've been able to push for a faster, better, smoother product for everyone in the community. diff --git a/src/routes/blog/post/open-source-firebase-alternative-messaging-fcm/+page.markdoc b/src/routes/blog/post/open-source-firebase-alternative-messaging-fcm/+page.markdoc index d92511d4a18..837fbd9997d 100644 --- a/src/routes/blog/post/open-source-firebase-alternative-messaging-fcm/+page.markdoc +++ b/src/routes/blog/post/open-source-firebase-alternative-messaging-fcm/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 7 author: aditya-oberai category: product unlisted: true +faqs: + - question: "Is Appwrite Messaging a drop-in replacement for FCM?" + answer: "Not quite. [Appwrite Messaging](/docs/products/messaging) covers push, email, and SMS in one product, but on Android it still relies on FCM under the hood for the actual push delivery. Where it differs is that you keep control of your data, scheduling, targeting, and message content." + - question: "What channels does Appwrite Messaging support?" + answer: "Appwrite Messaging supports push notifications for iOS and Android, email, and SMS. You can connect providers like Sendgrid, Mailgun, Twilio, or Vonage for the underlying delivery." + - question: "Does Appwrite support topic-based messaging?" + answer: "Yes. You can create topics, subscribe users to them, and broadcast messages to a topic instead of managing individual recipient lists. This mirrors the topic pattern from FCM." + - question: "Is Appwrite Messaging compliant with privacy regulations?" + answer: "Yes. Appwrite is GDPR, CCPA, and HIPAA compliant, and Messaging benefits from the same security posture as the rest of the platform. Self-hosting gives you even more control if you have strict data residency requirements." + - question: "Can I schedule messages in advance?" + answer: "Yes. You can draft, preview, and schedule messages from the Appwrite console or via the API. This is useful for product launches, reminders, and timezone-aware campaigns." + - question: "Do I have to migrate off FCM right now?" + answer: "FCM legacy HTTP and XMPP APIs were deprecated in June 2024 and turned off in mid 2024. If you still use the legacy API you need to migrate to FCM HTTP v1 or switch to a platform like Appwrite Messaging that handles the v1 API for you." --- With Firebase Cloud Messaging (FCM) officially deprecated in June 2024, developers are now faced with a crucial decision: migrate to FCM’s newer API or explore open-source alternatives. diff --git a/src/routes/blog/post/open-source-firebase-alternative/+page.markdoc b/src/routes/blog/post/open-source-firebase-alternative/+page.markdoc index 43c41fff7f5..c13d473a974 100644 --- a/src/routes/blog/post/open-source-firebase-alternative/+page.markdoc +++ b/src/routes/blog/post/open-source-firebase-alternative/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 7 author: aditya-oberai category: product callToAction: true +faqs: + - question: "Is Appwrite a true open source alternative to Firebase?" + answer: "Yes. Appwrite is fully open source under the BSD-3-Clause license and the source code is on GitHub. Firebase is a proprietary Google product, so the main difference is that you can self-host Appwrite, audit it, and avoid vendor lock-in." + - question: "What database does Appwrite use under the hood?" + answer: "Appwrite uses MariaDB with an abstraction layer that lets you define schema, indexes, and relationships through APIs and the console. You do not need SQL knowledge to use it, though the underlying engine is relational rather than document oriented like Firestore." + - question: "Can Appwrite replace Firebase Authentication?" + answer: "Yes. [Appwrite Authentication](/docs/products/auth) supports email/password, OAuth (30+ providers), magic links, OTP, phone, anonymous, JWT, and custom tokens. It also adds extras like password history, password dictionary, session limits, and personal data checks." + - question: "What languages do Appwrite Functions support?" + answer: "Appwrite [Functions](/docs/products/functions) supports over 10 runtimes including Node.js, Python, PHP, Ruby, Dart, Bun, Deno, Kotlin, Swift, Java, and Go. Firebase Cloud Functions is limited to JavaScript, TypeScript, and Python." + - question: "Does Appwrite offer real-time updates like Firebase?" + answer: "Yes. Appwrite includes a Realtime API across Databases, Storage, Functions, and Authentication, so your client can subscribe to changes over a WebSocket connection. The pattern is similar to Firestore listeners." + - question: "Can I self-host Appwrite for free?" + answer: "Yes. You can self-host Appwrite on your own infrastructure with Docker for free, with no usage limits. Appwrite Cloud also offers a free tier if you prefer a managed option." --- Updated on October 6, 2025 diff --git a/src/routes/blog/post/open-source-netlify-alternative/+page.markdoc b/src/routes/blog/post/open-source-netlify-alternative/+page.markdoc index 8dfe4f7968d..15e8e35eb04 100644 --- a/src/routes/blog/post/open-source-netlify-alternative/+page.markdoc +++ b/src/routes/blog/post/open-source-netlify-alternative/+page.markdoc @@ -9,6 +9,19 @@ author: ebenezer-don category: product,init featured: false callToAction: true +faqs: + - question: "How is Appwrite Sites different from Netlify?" + answer: "[Appwrite Sites](/docs/products/sites) hosts your frontend inside the same project as your database, auth, storage, and functions. Netlify is a great hosting platform but it leaves you to bring your own backend, which means more wiring between services. Sites cuts that wiring out." + - question: "Does Appwrite Sites support server side rendering?" + answer: "Yes. Sites runs SSR apps in containers with runtime access to environment variables and the Appwrite SDKs. It supports Next.js, Nuxt, SvelteKit, Angular, Astro, and Remix in SSR mode." + - question: "Can I deploy without Git?" + answer: "Yes. Sites supports drag and drop deploys and `.tar.gz` uploads from the console, plus the Appwrite CLI for scripted deploys. Netlify also supports CLI deploys but does not have a drag and drop option in the UI." + - question: "Does Appwrite Sites generate preview URLs for branches?" + answer: "Yes. Every commit, branch, and pull request gets its own unique preview URL when you connect a Git repository. Rollbacks are one click from the deployments page." + - question: "What about custom domains and TLS?" + answer: "You can attach custom domains to your site and Appwrite provisions TLS certificates automatically. The flow is similar to Netlify, with DNS records you add at your registrar." + - question: "Can I use Appwrite Sites if I am already on Appwrite Cloud?" + answer: "Yes. Sites is part of Appwrite Cloud and shows up alongside Databases, Functions, Storage, and Auth in your project. There is nothing extra to install or connect." --- Deploying frontend applications has gotten easier over the past decade, but also more complex behind the scenes. Most apps today need more than just HTML, CSS, and a CDN. They need authentication, secure APIs, environment configs, storage access, and sometimes server-side rendering. diff --git a/src/routes/blog/post/open-source-startup-tools/+page.markdoc b/src/routes/blog/post/open-source-startup-tools/+page.markdoc index 518b47b9d4d..af9f9e753f1 100644 --- a/src/routes/blog/post/open-source-startup-tools/+page.markdoc +++ b/src/routes/blog/post/open-source-startup-tools/+page.markdoc @@ -9,6 +9,19 @@ author: veeresh-mulge callToAction: true unlisted: true category: startup +faqs: + - question: "Why should startups care about open source software?" + answer: "Open source gives you control over your stack, lets you self-host to avoid surprise pricing, and protects you if a vendor shuts down or pivots. For a startup, that flexibility can be the difference between pivoting and rebuilding from scratch." + - question: "Is open source software actually free?" + answer: "The code is free to use and modify, but running it is not always free. You still pay for infrastructure, time to operate it, and sometimes for managed hosting or premium tiers. The trade off is that you control where you spend." + - question: "What is the open source alternative to Firebase?" + answer: "[Appwrite](/) is a common open source alternative to Firebase. It bundles authentication, databases, storage, functions, and messaging in a self-hostable platform with a managed cloud option." + - question: "How do I evaluate open source tools for production use?" + answer: "Look at the license (permissive vs copyleft), release cadence, community size, security disclosure process, and whether a company backs the project. Also check that self-hosting is documented and that the managed version, if any, does not diverge from the open source release." + - question: "Can I mix open source and closed source tools?" + answer: "Yes, most startups do. A common pattern is open source for the core stack (backend, database, observability) and managed SaaS for things like email delivery, billing, and CRM. The goal is to keep your most critical pieces portable." + - question: "What licenses should I watch out for?" + answer: "Permissive licenses like MIT, Apache 2.0, and BSD are safe defaults for most startups. Copyleft licenses like AGPL can require you to open source derived work, which matters if you plan to fork and self-host with custom changes. Always read the license before you build on top of a project." --- Time and time again, we've seen that startups that change and adapt to market needs are the ones who win big. However, with startups using traditional software products, it becomes increasingly difficult to pivot. High costs, vendor lock-in, limited control, and flexibility can hold them back to do so. diff --git a/src/routes/blog/post/oss-journey-blog/+page.markdoc b/src/routes/blog/post/oss-journey-blog/+page.markdoc index 75c0bc147e3..8cd98219368 100644 --- a/src/routes/blog/post/oss-journey-blog/+page.markdoc +++ b/src/routes/blog/post/oss-journey-blog/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/Blog-cover-oss-journey.avif timeToRead: 10 author: laura-du-ry category: open-source +faqs: + - question: "When did Appwrite become open source?" + answer: "Appwrite started as an open source project in 2019, with the first pull request opened in August of that year. It went public soon after with a viral Hacker News launch and has been open source ever since." + - question: "What is the Appwrite OSS Program?" + answer: "The OSS Program lets verified open source maintainers use Appwrite Pro resources free of charge. It is Appwrite's way of giving back to the community that helped the project grow." + - question: "How can I apply for the Appwrite OSS Program?" + answer: "Eligible maintainers can apply through the [Appwrite Discord](https://appwrite.io/discord) and announcement blog. The team reviews each application to make sure the project is genuinely open source and actively maintained." + - question: "Did Appwrite hire from the open source community?" + answer: "Yes. Many of Appwrite's earliest engineers, including the founding engineering team, started as open source contributors. The company still actively hires from the community today." + - question: "Is Appwrite still open source after launching paid plans?" + answer: "Yes. The core Appwrite server is open source under the BSD-3-Clause license and remains free to self-host. Appwrite Cloud and Pro are commercial offerings that fund continued development of the open source project." + - question: "How can I contribute to Appwrite as a developer?" + answer: "You can contribute code, documentation, translations, or templates through the [Appwrite GitHub organization](https://github.com/appwrite). You can also help by participating in Discord, sharing tutorials, or featuring your project on Built With Appwrite." --- With the release of [Appwrite Pro](https://appwrite.io/blog/post/announcing-appwrite-pro), we reached another milestone. A new development in our product offering that allows you to build with more confidence. diff --git a/src/routes/blog/post/password-hashing-algorithms/+page.markdoc b/src/routes/blog/post/password-hashing-algorithms/+page.markdoc index fbcf4cdca1a..9cf994ac70c 100644 --- a/src/routes/blog/post/password-hashing-algorithms/+page.markdoc +++ b/src/routes/blog/post/password-hashing-algorithms/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/password-hashing-algorithms.avif timeToRead: 7 author: aditya-oberai category: security +faqs: + - question: "What is the difference between hashing and encryption?" + answer: "Hashing is a one way function that turns input into a fixed size output you cannot reverse. Encryption is two way: you can decrypt the data back to its original form with the right key. Passwords should always be hashed, never encrypted." + - question: "Which password hashing algorithm should I use today?" + answer: "Argon2id is the current recommendation for new applications. Bcrypt and scrypt are still acceptable if Argon2 is not available. Avoid plain SHA-256 or MD5 since they are far too fast for password use." + - question: "Why is a salt important when hashing passwords?" + answer: "A salt is a random value added to each password before hashing, so two users with the same password get different hashes. This blocks rainbow table attacks and forces attackers to crack every hash individually." + - question: "What hashing algorithm does Appwrite use?" + answer: "[Appwrite Authentication](/docs/products/auth) uses Argon2id by default when a user signs up from a client app. If you create a user from a server SDK with a pre hashed password, Appwrite accepts Argon2, Bcrypt, MD5, Scrypt, and a few other formats so you can migrate existing users." + - question: "Can I migrate users from another auth system to Appwrite?" + answer: "Yes. The server side Users API lets you import users with their existing password hashes if they use a supported algorithm. Your users keep their existing passwords and rehash on next login if needed." + - question: "What is memory hardness in a password hash?" + answer: "Memory hardness means the algorithm requires a lot of RAM to compute, not just CPU time. This makes it expensive to attack with GPUs or ASICs in parallel. Argon2 and scrypt are memory hard, while bcrypt and PBKDF2 are not." --- In today's digital world, keeping sensitive information like passwords secure is extremely important. Password hashing algorithms are essential for protecting user credentials and ensuring authentication systems are reliable. diff --git a/src/routes/blog/post/password-protection/+page.markdoc b/src/routes/blog/post/password-protection/+page.markdoc index 94f540d8a36..44760ba70c1 100644 --- a/src/routes/blog/post/password-protection/+page.markdoc +++ b/src/routes/blog/post/password-protection/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/password-protection.avif timeToRead: 6 author: aditya-oberai category: security +faqs: + - question: "What makes a password strong in 2026?" + answer: "Length matters more than character variety. Aim for at least 12 to 16 characters, no personal information, and ideally a passphrase generated by a password manager. The shift from complexity rules to length is now reflected in NIST guidance and OWASP recommendations." + - question: "Should I force users to change passwords regularly?" + answer: "Only when there is evidence of compromise. NIST no longer recommends arbitrary periodic password rotation because it pushes users toward weaker, predictable patterns. Combine that with breach monitoring and MFA instead." + - question: "Does Appwrite enforce password rules out of the box?" + answer: "Yes. [Appwrite Authentication](/docs/products/auth) supports password history, a password dictionary to block common passwords, personal data checks, and session limits. You can configure these from the Auth security settings in your project." + - question: "What is the role of two-factor authentication?" + answer: "Two-factor authentication adds a second proof of identity, usually a TOTP code or a security key. Even if a password leaks, the attacker still needs the second factor. Appwrite supports TOTP, email, and SMS as second factors." + - question: "Should I store passwords encrypted or hashed?" + answer: "Always hashed with a slow, salted algorithm like Argon2id or bcrypt. Encryption is reversible, which means anyone with the key can read every password. Hashing is one way and is the only acceptable choice for password storage." + - question: "How do I protect against credential stuffing attacks?" + answer: "Use rate limiting, account lockouts after repeated failed attempts, breach password lists to block known leaked passwords, and require MFA on sensitive accounts. Monitoring login patterns and unusual locations also helps detect attacks early." --- Today, we're more connected online than ever before. The internet has made things like shopping, banking, and communicating much easier. This convenience does come at a cost, however. Every important activity we perform on the internet is associated with a digital identity, and this identity is only as secure as we make it. diff --git a/src/routes/blog/post/personal-chatbot-gpt-4o/+page.markdoc b/src/routes/blog/post/personal-chatbot-gpt-4o/+page.markdoc index da1bdf81da3..c6ec52c0456 100644 --- a/src/routes/blog/post/personal-chatbot-gpt-4o/+page.markdoc +++ b/src/routes/blog/post/personal-chatbot-gpt-4o/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/personal-chatbot-gpt-4o/cover.avif timeToRead: 5 author: aditya-oberai category: tutorial +faqs: + - question: "Why use Appwrite Functions for a GPT-4o chatbot?" + answer: "[Appwrite Functions](/docs/products/functions) runs your server side code without you managing infrastructure, and it lets you store secrets like the OpenAI API key as environment variables. You also get a built-in HTTP endpoint and static asset support, which is enough to host the chatbot UI and the API in one place." + - question: "Where do I store my OpenAI API key?" + answer: "Add it as an environment variable on the function (for example `OPENAI_API_KEY`). Never put it in client side code or check it into Git. Appwrite passes environment variables to your function at runtime." + - question: "Can I use a different OpenAI model with this setup?" + answer: "Yes. The code calls the OpenAI Chat Completions API, so you can swap the model name to `gpt-4o-mini`, `gpt-4.1`, or any other supported model. Token limits and pricing differ across models, so adjust `OPENAI_MAX_TOKENS` accordingly." + - question: "How do I limit who can call the chatbot function?" + answer: "Set the function execute permission to a specific user role or team in the Appwrite console. You can also require authentication and read the user from `req.headers['x-appwrite-user-id']` to limit usage per account." + - question: "Can the function serve the HTML UI as well?" + answer: "Yes. Place static files in a `static` folder at the root of your function and they are served alongside the function's main endpoint. The tutorial uses this to host the chat UI from the same function that calls OpenAI." + - question: "What runtime should I pick for an OpenAI chatbot?" + answer: "Node.js is the easiest choice because the official `openai` package has the most up to date features. Python is also supported. Both work with the same Functions setup, so pick whichever stack you are most comfortable with." --- Recently, at the OpenAI Spring Update, OpenAI CTO Mira Murati announced the launch of their new flagship model, **GPT-4o**. GPT-4o happens to be OpenAI's fastest and most affordable model so far, which led us to wonder if we could use it to build our very own chatbot. diff --git a/src/routes/blog/post/planetscale-databases-alternative/+page.markdoc b/src/routes/blog/post/planetscale-databases-alternative/+page.markdoc index cf1d401c0a3..0b58d97c825 100644 --- a/src/routes/blog/post/planetscale-databases-alternative/+page.markdoc +++ b/src/routes/blog/post/planetscale-databases-alternative/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/planetscale-databases-alternative/cover.avif timeToRead: 7 author: aditya-oberai category: product +faqs: + - question: "Is Appwrite a like for like replacement for PlanetScale?" + answer: "Not exactly. PlanetScale is a managed MySQL database that you query directly with SQL. [Appwrite Databases](/docs/products/databases) wraps a MariaDB engine in an API and SDKs, plus bundles auth, storage, functions, and messaging. It is a backend platform with a database, not a pure database service." + - question: "Can I run raw SQL queries on Appwrite Databases?" + answer: "No. Appwrite exposes a query API and SDKs instead of direct SQL access. You can model tables, indexes, and relationships, and run filtered, paginated queries, but the underlying SQL layer is not exposed to users." + - question: "How do permissions work in Appwrite Databases?" + answer: "You set permissions at the database, collection, and document level using roles like `any`, `users`, `team`, or specific user IDs. This means access control lives next to the data rather than in a separate rules engine." + - question: "Does Appwrite handle backups automatically?" + answer: "Yes. Appwrite Cloud takes automated backups, and there is a manual database backup feature for on demand snapshots. You can restore from backups without downtime, including on the free plan." + - question: "Can I self-host Appwrite Databases?" + answer: "Yes. The whole Appwrite stack, Databases included, runs as a Docker Compose deployment on your own infrastructure for free. The self-hosted version uses the same APIs and SDKs as Appwrite Cloud." + - question: "Is there a free tier?" + answer: "Yes. Appwrite Cloud has a free plan that includes Databases, Auth, Storage, Functions, and Messaging within usage limits. Self-hosting is free with no usage caps beyond what your hardware can handle." --- On March 6th, 2024, PlanetScale announced their plan to sunset their free tier, impacting developers and their projects worldwide. Many devs are now forced to migrate away and find a new database solution. As an open-source backend-as-a-service platform, Appwrite can be the solution to finding a PlanetScale alternative. In this article, we compare PlanetScale Databases to Appwrite Databases so you can understand whether Appwrite’s free-tier Databases are a feasible option. diff --git a/src/routes/blog/post/preventing-password-sharing/+page.markdoc b/src/routes/blog/post/preventing-password-sharing/+page.markdoc index cb3099ba55c..9a84573cf63 100644 --- a/src/routes/blog/post/preventing-password-sharing/+page.markdoc +++ b/src/routes/blog/post/preventing-password-sharing/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/preventing-password-sharing.avif timeToRead: 6 author: aditya-oberai category: security +faqs: + - question: "Why is password sharing a security problem?" + answer: "Shared passwords break individual accountability, expand the attack surface, and make it nearly impossible to investigate incidents. If a password leaks from one user, every account using it is compromised at once." + - question: "What is the difference between MFA and passwordless authentication?" + answer: "MFA adds a second factor on top of a password, such as a TOTP code or SMS. Passwordless removes the password entirely and relies on factors like passkeys or magic links. Both reduce the value of a leaked or shared password, but passwordless is the stronger long term direction." + - question: "Does Appwrite support multi-factor authentication?" + answer: "Yes. [Appwrite Authentication](/docs/products/auth) supports TOTP, email, and SMS as second factors. You can enable it for users and require it on sensitive operations from your app code." + - question: "How can I detect shared accounts in my app?" + answer: "Watch for concurrent sessions from different IP ranges, sudden geographic jumps, or many devices on a single account. Behavioral analytics tools can flag these patterns. Appwrite also lets you cap sessions per user with [session limits](/docs/products/auth)." + - question: "Can session limits stop password sharing?" + answer: "They make it harder. By capping how many active sessions a user can have at once, you force someone sharing credentials to log others out, which surfaces the behavior. Combine session limits with MFA and device tracking for stronger protection." + - question: "Should I make users change their password if I suspect sharing?" + answer: "Forcing a reset removes the shared credential from circulation, but it does not solve the root cause. Combine the reset with MFA enrollment, a clear acceptable use reminder, and a review of access policies so the behavior does not start again." --- Over the last few years, password sharing has emerged as a notable challenge for developers and companies, intertwining concerns of security, privacy, and revenue. Although seemingly benign, this practice has significant implications, especially for platforms with seat-based pricing models. Netflix made waves in 2023 with its [ban on account sharing](https://www.techradar.com/news/netflix-password-sharing), spotlighting the potential revenue loss businesses face when users circumvent subscription models designed to reflect actual usage. Beyond financial repercussions, the critical importance of addressing password sharing simply cannot go unaddressed today. diff --git a/src/routes/blog/post/product-update-april-2025/+page.markdoc b/src/routes/blog/post/product-update-april-2025/+page.markdoc index 8dd4b78166a..a689494ee36 100644 --- a/src/routes/blog/post/product-update-april-2025/+page.markdoc +++ b/src/routes/blog/post/product-update-april-2025/+page.markdoc @@ -9,6 +9,19 @@ author: dennis-ivy category: product featured: false callToAction: true +faqs: + - question: "What is the Appwrite Network?" + answer: "The Appwrite Network is a globally distributed set of cloud regions and edge locations. It lets you choose where your project's data lives so you can reduce latency for your users and meet data residency requirements." + - question: "Which cloud regions are available?" + answer: "As of April 2025, you can create projects in Frankfurt (FRA), New York City (NYC), and Sydney (SYD), with more regions rolling out. Each region operates independently, and you choose the region when creating a project." + - question: "What does the FlutterFlow auth kit do?" + answer: "The kit is a pre-built FlutterFlow library that wires up Appwrite Authentication so you do not have to build login, signup, and session handling from scratch. You drop it into your FlutterFlow app and configure it with your Appwrite project details." + - question: "What is the RxDB integration?" + answer: "RxDB is a local-first JavaScript database, and the integration adds a replication plugin that syncs data between RxDB and [Appwrite Databases](/docs/products/databases). Your app keeps working offline and syncs in the background when connectivity returns." + - question: "How do I migrate an existing project to a new region?" + answer: "Use Appwrite Cloud migrations to move a project to another region. The migration tool copies your data, schema, and settings to the new region so you can switch without rewriting your app." + - question: "Will more regions come to the Appwrite Network?" + answer: "Yes. Frankfurt, New York, and Sydney are the first launches, and the roadmap includes additional regions. Check the [Appwrite Network announcement](/blog/post/the-appwrite-network) and changelog for the latest list." --- Welcome back to the April product update. Last month, we dropped some big updates: diff --git a/src/routes/blog/post/product-update-august-2025/+page.markdoc b/src/routes/blog/post/product-update-august-2025/+page.markdoc index e3208ea6ca9..7afcf0ea5fc 100644 --- a/src/routes/blog/post/product-update-august-2025/+page.markdoc +++ b/src/routes/blog/post/product-update-august-2025/+page.markdoc @@ -3,12 +3,26 @@ layout: post title: "August product update: Cloud GA, new TablesDB UI & Sites Hackathon" description: Get a full recap of products, features and programs we released in the month of August. date: 2025-09-03 +lastUpdated: 2026-05-22 cover: /images/blog/product-update-august-2025/cover.avif timeToRead: 6 author: dennis-ivy category: product featured: false callToAction: true +faqs: + - question: "What does Appwrite Cloud GA mean for existing users?" + answer: "GA means the beta tag is gone and Appwrite Cloud is now a generally available product backed by formal availability and support commitments. Nothing changes for existing projects, but you get the assurance that the platform is production stable." + - question: "What is TablesDB?" + answer: "TablesDB is a new API layer for [Appwrite Databases](/docs/products/databases) that uses relational terminology: tables, rows, and columns instead of collections, documents, and attributes. It also ships with a spreadsheet style console UI for inline editing and bulk actions." + - question: "Do I need to migrate from the document API to TablesDB?" + answer: "No. The document based methods continue to work and remain backwards compatible. They are deprecated for major upgrades, but they still receive security patches. New projects should adopt TablesDB to access future improvements." + - question: "Where is the new San Francisco cloud region available?" + answer: "San Francisco (SFO) is available on all Free, Pro, and Enterprise plans. You can create new projects there or migrate existing projects using Appwrite Cloud migrations." + - question: "What are atomic numeric operations?" + answer: "Atomic numeric operations let you increment or decrement a column directly on the server, without reading the value first. This is useful for counters, inventory, and any state where two clients might update the same field at once." + - question: "What was the Appwrite Sites Hackathon?" + answer: "The Appwrite Sites Hackathon ran in August 2025 and invited the community to build and ship sites using [Appwrite Sites](/docs/products/sites). Participants competed for prizes including the Appwriter Keyboard." --- Welcome back to the August Product Update. This month, we’ve got some significant updates, from Appwrite Cloud, which is now generally available, and a brand new look for Appwrite Databases. On top of it, Appwrite’s very first Sites Hackathon is also now live. @@ -48,7 +62,7 @@ You have until **September 12** to showcase your creativity and compete for grea ![New Cloud region](/images/blog/product-update-august-2025/new-region.avif) -We’re happy to share that the new cloud region, San Francisco (SFO), is now available on all Free, Pro, Scale, and Enterprise plans. +We’re happy to share that the new cloud region, San Francisco (SFO), is now available on all Free, Pro, and Enterprise plans. You can create a new project or migrate your existing project to the SFO region. diff --git a/src/routes/blog/post/product-update-august/+page.markdoc b/src/routes/blog/post/product-update-august/+page.markdoc index f52a43cb8e0..e78e7311011 100644 --- a/src/routes/blog/post/product-update-august/+page.markdoc +++ b/src/routes/blog/post/product-update-august/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 7 author: dennis-ivy category: product featured: false +faqs: + - question: "What is new in Appwrite 1.6?" + answer: "Appwrite 1.6 shipped local development for Functions, a rewritten CLI, Go as a runtime and SDK, faster cold starts, dynamic API keys, delayed and binary executions, mock phone numbers for testing, and session alerts. It is one of the larger releases in the project's history." + - question: "What is local development for Functions?" + answer: "Local development lets you run and test Appwrite [Functions](/docs/products/functions) on your machine before deploying. You get a faster feedback loop and can debug without pushing every change to the cloud." + - question: "What does the new Appwrite CLI do differently?" + answer: "The new CLI adds local function testing, non-destructive data sync between your machine and Appwrite, and headless login for CI/CD pipelines. The previous CLI overwrote remote data on every push, which the new one fixes." + - question: "Does Appwrite Functions support Go?" + answer: "Yes. Go is supported as both a Functions runtime and an SDK. The Go runtime offers up to 3x faster cold starts and sub-millisecond base execution times, which makes it a good choice for CPU bound work." + - question: "What are mock phone numbers used for?" + answer: "Mock numbers let you set up a list of phone numbers with predefined verification codes. This is helpful when submitting apps for store review or running automated tests on phone authentication flows, without sending real SMS." + - question: "What do session alerts notify users about?" + answer: "Session alerts email your users when a new session starts on their account. It is a low effort way to give users visibility into suspicious activity and is enabled per project from the Auth settings." --- Great news for all of you who cannot wait to get started with all the newly announced products and features: 1.6 is now available on Cloud and Self-hosted. Go to the Init page to find all relevant content and documentation. Or keep reading to learn more about what has been released. diff --git a/src/routes/blog/post/product-update-december-2024/+page.markdoc b/src/routes/blog/post/product-update-december-2024/+page.markdoc index bddae200a82..ab54b921285 100644 --- a/src/routes/blog/post/product-update-december-2024/+page.markdoc +++ b/src/routes/blog/post/product-update-december-2024/+page.markdoc @@ -9,6 +9,19 @@ author: dennis-ivy category: product featured: false callToAction: true +faqs: + - question: "What was the biggest product launch from Appwrite in 2024?" + answer: "[Appwrite Messaging](/docs/products/messaging) was the year's flagship launch. It added push notifications, SMS, and email in one product, making Appwrite the only open source BaaS with a built-in messaging service." + - question: "What multi-factor authentication methods does Appwrite support?" + answer: "Appwrite supports TOTP, email, and SMS as second factors. You can enable MFA per user and require it for sensitive operations. The Appwrite Console itself supports MFA so your team can secure their admin access." + - question: "Which runtimes were added or updated in 2024?" + answer: "Appwrite Functions added or updated support for Bun 1.0.29, Node 22, Ruby 3.3, Deno 2.0, PHP 8.3, Python 3.12, Kotlin 1.9, Java 18, Swift 5.9, and Dart 3.3. Go was also added as a brand new runtime during Init." + - question: "What is the Integrations Catalog?" + answer: "The Integrations Catalog is a curated directory of services that connect with Appwrite, including Stripe, OpenAI, HuggingFace, GitHub, and many more. It is the easiest place to discover plug and play templates for common backend needs." + - question: "What are Roles in Appwrite?" + answer: "Roles let you manage team access with predefined permission sets like Owner, Developer, Editor, Analyst, and Billing. They make it easier for larger teams to collaborate on the same Appwrite project without giving everyone full access." + - question: "How do database backups work in Appwrite?" + answer: "Appwrite Cloud takes hot, encrypted backups of your databases without downtime. You can restore from a backup, which is helpful for recovering from accidental deletions or testing schema changes." --- 2024 has come to an end, and we want to thank all of you for making it an amazing year for Appwrite! We have seen hundreds of thousands of you join the platform, and even more projects are being ignited every day. In this product update, we take a moment to look back at everything we’ve released to make building with Appwrite accessible and enjoyable for all of you. diff --git a/src/routes/blog/post/product-update-feb-2025/+page.markdoc b/src/routes/blog/post/product-update-feb-2025/+page.markdoc index 394002dd09b..94330452a11 100644 --- a/src/routes/blog/post/product-update-feb-2025/+page.markdoc +++ b/src/routes/blog/post/product-update-feb-2025/+page.markdoc @@ -9,6 +9,19 @@ author: dennis-ivy category: product featured: false callToAction: true +faqs: + - question: "What is included in Appwrite 1.6.1?" + answer: "Appwrite 1.6.1 ships improved webp compatibility, additional function runtime versions like Node 22, Dart 3.5, and Bun 1.1, and a real-time heartbeat to keep WebSocket connections alive. It is a stability and performance focused release." + - question: "What changed in the usage metrics system?" + answer: "Usage metrics now include OPTIONS requests and 4XX responses, which were previously omitted. You get a clearer view of all traffic hitting your project, which makes it easier to spot errors and optimize performance." + - question: "How do I upgrade my self-hosted Appwrite to 1.6.1?" + answer: "Run the standard self-hosting upgrade flow with Docker Compose, pulling the new image tag and restarting the stack. The Appwrite [self-hosting docs](/docs/advanced/self-hosting) walk through the exact commands and any required migrations." + - question: "Where can I see resource usage for my project?" + answer: "Open your project in the Appwrite Console and go to Usage. You will see request counts, response codes, bandwidth, storage, and function execution metrics for your selected time range." + - question: "What is the real-time heartbeat?" + answer: "The heartbeat is a periodic ping that keeps long lived Realtime connections open through proxies and load balancers that would otherwise drop idle WebSockets. It reduces dropped connections without any client code changes." + - question: "How do I check the latest Appwrite changes?" + answer: "The [Appwrite changelog](/changelog) lists every release with the products and features it touches. It is the best place to find concrete details on bug fixes, version bumps, and new APIs." --- Welcome back to the February product update. From shipping Appwrite 1.6.1 to upgrading our usage metrics system, we have some interesting things to share with you. Let’s dive in! diff --git a/src/routes/blog/post/product-update-jan-2025/+page.markdoc b/src/routes/blog/post/product-update-jan-2025/+page.markdoc index 987a7c64d08..e770e0e15cc 100644 --- a/src/routes/blog/post/product-update-jan-2025/+page.markdoc +++ b/src/routes/blog/post/product-update-jan-2025/+page.markdoc @@ -3,12 +3,26 @@ layout: post title: "Product update January 2025: Partners program, Scale plan and more" description: Get a full recap of products, features and programs we released in January. date: 2025-02-06 +lastUpdated: 2026-05-22 cover: /images/blog/product-update-jan-2025/cover-image.avif timeToRead: 10 author: dennis-ivy category: product featured: false callToAction: true +faqs: + - question: "What is the Appwrite Partners program?" + answer: "The Appwrite Partners program is for agencies, dev studios, system integrators, and freelancers who build solutions on Appwrite for clients. Partners get co-marketing opportunities, engineering support, training, and a listing in the partner catalog." + - question: "Who is the Appwrite Enterprise plan for?" + answer: "The Enterprise plan is built for organizations that need priority support, higher resource limits, advanced compliance (BAA, SOC-2, HIPAA), SSO, custom backup policies, and bring-your-own-cloud. See the [pricing page](/pricing) for the current breakdown." + - question: "What new compute options are available for Functions?" + answer: "Appwrite Cloud now offers premium compute tiers with up to 4 CPU cores and 4 GB of memory per function. You can pick the spec per function, so you only pay for the heavier resources where you need them." + - question: "What changed in push notifications?" + answer: "[Appwrite Messaging](/docs/products/messaging) added new delivery options, including silent background updates and critical alerts that bypass Do Not Disturb. This gives you more control over how time sensitive your notifications are." + - question: "Which new function runtimes were added in January 2025?" + answer: "Appwrite Functions added PHP 8.3, Ruby 3.3, and Python 3.12. The team also resolved GitHub identity conflicts that were affecting deployments from connected repositories." + - question: "How do I apply to be an Appwrite partner?" + answer: "Visit the [partners page](/partners) and submit an application with information about your agency or freelance practice. The Appwrite team reviews each application and follows up with next steps if you qualify." --- diff --git a/src/routes/blog/post/product-update-july-2025/+page.markdoc b/src/routes/blog/post/product-update-july-2025/+page.markdoc index 2c9c5560dd1..d3d67814683 100644 --- a/src/routes/blog/post/product-update-july-2025/+page.markdoc +++ b/src/routes/blog/post/product-update-july-2025/+page.markdoc @@ -9,6 +9,19 @@ author: dennis-ivy category: product featured: false callToAction: true +faqs: + - question: "What major features did Appwrite ship in July 2025?" + answer: "July included the general availability of [Appwrite Sites](/docs/products/sites), CSV import for Databases, the Bulk API, Database Upsert, encrypted string attribute support, and auto-increment columns. The release also included Console and deployment improvements plus richer OTP email previews." + - question: "What is the Bulk API in Appwrite Databases?" + answer: "The Bulk API lets you create, update, delete, or upsert many documents in a single request instead of looping through individual calls. It is useful for migrations, seeding, and syncing data between systems." + - question: "What is a database upsert and when should I use it?" + answer: "Upsert is a single operation that creates a document if it does not exist or updates it if it does. It removes the need to do a read followed by a conditional write, which simplifies idempotent sync flows and reduces round trips." + - question: "What does CSV import do in [Appwrite Databases](/docs/products/databases)?" + answer: "CSV import lets you bring a CSV file directly into an Appwrite collection through the migration APIs. It is built for seeding collections, onboarding legacy data, and bulk loading without writing a custom script." + - question: "How does encrypted string attribute support work?" + answer: "Appwrite can encrypt string attributes at rest in [Databases](/docs/products/databases) and [Storage](/docs/products/storage), so you do not have to implement encryption logic in your application code. You enable it on the attribute from the Console." + - question: "What changed with OTP email previews?" + answer: "Appwrite now surfaces the OTP code in the email preview, so end users can read the code from the notification without opening the message. This reduces friction on phones and improves login completion rates." --- Welcome back to the July Product Update. This month, we have made many, many great releases! diff --git a/src/routes/blog/post/product-update-june/+page.markdoc b/src/routes/blog/post/product-update-june/+page.markdoc index d580d57cd3a..83d5bc4b488 100644 --- a/src/routes/blog/post/product-update-june/+page.markdoc +++ b/src/routes/blog/post/product-update-june/+page.markdoc @@ -7,6 +7,17 @@ cover: /images/blog/product-update-june/product-update-june-2024.avif timeToRead: 5 author: dennis-ivy category: product +faqs: + - question: "Why did Appwrite publish a public roadmap?" + answer: "The public roadmap on GitHub gives the community visibility into what is being built, when it is planned, and how to influence priorities. It is meant to align expectations and make it easier to report bugs and request features." + - question: "What does Appwrite Messaging do?" + answer: "[Appwrite Messaging](/docs/products/messaging) lets you send email, SMS, and push notifications to your users from a single API. You configure providers once and target users, topics, or segments without writing a separate notification service." + - question: "What is the Appwriter?" + answer: "The Appwriter is a custom mechanical keyboard built by the Appwrite team for the community. It is sold through the Appwrite store as a community product, separate from the platform itself." + - question: "How do I contribute or request features through the public roadmap?" + answer: "Open an issue on the relevant Appwrite GitHub repository with a clear description and steps to reproduce, then upvote or comment on existing issues to help the team prioritize. The roadmap pulls from these issues directly." + - question: "Is Appwrite still open source after launching Cloud?" + answer: "Yes. Appwrite remains open source, and major features ship to the self-hosted edition. The Cloud offering is a managed deployment of the same platform you can run yourself." --- It’s the first week of a new month, which means it’s time to reflect on all the wonderful things that happened in June. Read on to learn more about our public roadmap, Appwriters out in the wild, and dev tools to boost your productivity. diff --git a/src/routes/blog/post/product-update-march-2025/+page.markdoc b/src/routes/blog/post/product-update-march-2025/+page.markdoc index e009c8ebcaa..2c7f49dfb73 100644 --- a/src/routes/blog/post/product-update-march-2025/+page.markdoc +++ b/src/routes/blog/post/product-update-march-2025/+page.markdoc @@ -9,6 +9,17 @@ author: dennis-ivy category: product featured: false callToAction: true +faqs: + - question: "What is the Appwrite MCP server?" + answer: "The Appwrite MCP server lets AI assistants like Cursor and Claude interact with your Appwrite project through the Model Context Protocol. They can read database records, work with users, and perform actions against your project without you writing custom glue code." + - question: "What changed with Appwrite Cloud backups in March 2025?" + answer: "Backups got infrastructure optimizations that cut backup times by up to 7x. The change improves recovery speed and reliability without requiring any action from you on existing projects." + - question: "How do the new budget limits in Appwrite Cloud behave?" + answer: "Setting the budget to 0 means your organization will not exceed allocated resources, while setting it to null explicitly disables the budget. This separates a hard cap from no cap at all and makes scaling behavior predictable." + - question: "What is MCP and why is it useful for backend platforms?" + answer: "MCP (Model Context Protocol) is an open protocol that lets language models talk to external systems through a structured tool interface. For a backend like Appwrite, it means an agent can query your data or trigger actions through the same APIs your app uses, with permissions enforced server side." + - question: "Where can I see what is coming next in Appwrite?" + answer: "Track the [Appwrite changelog](/changelog) for shipped updates and the public roadmap on GitHub for what is in flight. Major launches are also covered on the [Appwrite blog](/blog)." --- Welcome back to the March product update. Here’s what happened the past month: diff --git a/src/routes/blog/post/product-update-november-2025/+page.markdoc b/src/routes/blog/post/product-update-november-2025/+page.markdoc index 6b7311390ac..8b802a63022 100644 --- a/src/routes/blog/post/product-update-november-2025/+page.markdoc +++ b/src/routes/blog/post/product-update-november-2025/+page.markdoc @@ -9,6 +9,19 @@ author: dennis-ivy category: product featured: false callToAction: true +faqs: + - question: "What are DB operators in Appwrite?" + answer: "DB operators are inline, atomic instructions you can send inside an update or upsert call, like incrementing a counter or appending to an array. They run server side, so you avoid race conditions and skip the read-then-write pattern that normally requires fetching the row first." + - question: "What do Database AI suggestions do?" + answer: "When you create a new table in [Appwrite Databases](/docs/products/databases), the Console can suggest columns and indexes based on the table name. You can accept, edit, or skip the suggestions, which is faster than designing the schema from scratch." + - question: "How does skipping total counts speed up list queries?" + answer: "List endpoints normally compute the total number of matching rows alongside the page. Passing `total=false` tells Appwrite to skip that count, which removes an extra database operation and returns the page faster, especially on large tables." + - question: "What is Next.js standalone mode and why does it matter on [Appwrite Sites](/docs/products/sites)?" + answer: "Standalone mode produces a slimmer Next.js build that only includes the files needed to run in production. Deploying in standalone mode on Appwrite Sites reduces artifact size and improves cold starts compared to shipping the full project." + - question: "Why would I disable image transformations on a bucket?" + answer: "If a bucket only stores raw assets or files that should never be resized or re-encoded, turning transformations off prevents accidental processing and the associated cost. It is a defensive setting for buckets that do not need the feature." + - question: "Where can I read the Appwrite open letter on the developers' cloud?" + answer: "The letter is published on the [Appwrite blog](/blog/post/the-developers-cloud) under the title \"the developers' cloud.\" It explains how Appwrite is evolving from a backend platform into a full cloud that covers build, deploy, observe, and protect." --- Welcome back to the November product update. This month is different. If you caught our Open Letter, you already know where we're heading: Appwrite is no longer just a backend. With Appwrite Sites, we're taking a real step toward the most complete cloud platform to date. diff --git a/src/routes/blog/post/product-update-october-2025/+page.markdoc b/src/routes/blog/post/product-update-october-2025/+page.markdoc index 989c54ddc15..2a521818d3f 100644 --- a/src/routes/blog/post/product-update-october-2025/+page.markdoc +++ b/src/routes/blog/post/product-update-october-2025/+page.markdoc @@ -9,6 +9,17 @@ author: dennis-ivy category: product featured: false callToAction: true +faqs: + - question: "What is the Transactions API in [Appwrite Databases](/docs/products/databases)?" + answer: "The Transactions API lets you stage multiple database operations across one or more tables and commit them as one atomic action. If any step fails, Appwrite rolls every change back automatically, which keeps data consistent for things like transfers or multi-step writes." + - question: "How many sites can I deploy on the free plan now?" + answer: "The earlier one-site limit on the free plan was removed in October 2025. You can now deploy unlimited sites per project on [Appwrite Sites](/docs/products/sites) without upgrading." + - question: "What is included in Appwrite 1.8 for self-hosted?" + answer: "Appwrite 1.8 brings the new Databases experience, the latest Databases features, and migration improvements to self-hosted instances. Anyone running their own Appwrite gets parity with the features that previously landed on Cloud." + - question: "Which new cloud regions did Appwrite add?" + answer: "Singapore (SGP) and Toronto (TOR) joined the existing [Appwrite Cloud regions](/docs/products/network/regions). You can create new projects in either region or migrate an existing project to one of them." + - question: "Does [Appwrite Sites](/docs/products/sites) support TanStack Start and Next.js 16?" + answer: "Yes. TanStack Start runs with full SSR on Appwrite Sites with no extra configuration, and Next.js 16 is fully supported for production deployments. Both are available without changes to your build setup." --- Welcome back to the October product update. This month, we released the most requested Database feature, along with Appwrite 1.8x support for Self-hosted. Best of all, you can now spin up unlimited Sites on the free plan. diff --git a/src/routes/blog/post/product-update-september-2025/+page.markdoc b/src/routes/blog/post/product-update-september-2025/+page.markdoc index 86073b9e033..1a577a40d65 100644 --- a/src/routes/blog/post/product-update-september-2025/+page.markdoc +++ b/src/routes/blog/post/product-update-september-2025/+page.markdoc @@ -8,6 +8,17 @@ timeToRead: 7 author: dennis-ivy category: product featured: false +faqs: + - question: "What new queries shipped in September 2025?" + answer: "Time helper queries (`createdBefore`, `createdAfter`, `updatedBefore`, `updatedAfter`) make time-based filtering a one-liner, and inversion queries (`notSearch`, `notContains`, `notBetween`, `notStartsWith`, `notEndsWith`) let you exclude matches directly. Together they remove most of the workarounds people used to write client side." + - question: "What does the Appwrite Docs MCP server do?" + answer: "It exposes the [Appwrite documentation](/docs) to AI assistants through the Model Context Protocol. Assistants can search the docs, fetch specific guides, and generate code snippets using the current APIs so suggestions stay accurate." + - question: "What are spatial columns in [Appwrite Databases](/docs/products/databases)?" + answer: "Spatial columns add native support for points, lines, and polygons, along with spatial indexes and twelve new operators. You can store and query geo data without bolting on a separate database." + - question: "Does [Appwrite Sites](/docs/products/sites) support Turbopack?" + answer: "Yes. Next.js apps built with Turbopack deploy on Appwrite Sites without modification, with faster builds and consistent behavior between local and production. There is no separate configuration to enable it." + - question: "How much faster are function cold starts in Frankfurt?" + answer: "Function cold starts in the Frankfurt (FRA) region are about 58% faster after the September performance work, with more consistent start times across executions. Static sites also moved to edge proxies, so they skip the runtime entirely." --- Welcome back to the September Product Update. This month, we have some serious Database upgrades with a new set of queries and features. Also, get ready for one more exciting hackathon news. diff --git a/src/routes/blog/post/product-update-september/+page.markdoc b/src/routes/blog/post/product-update-september/+page.markdoc index c13b71035e6..7af11fd9dd4 100644 --- a/src/routes/blog/post/product-update-september/+page.markdoc +++ b/src/routes/blog/post/product-update-september/+page.markdoc @@ -3,10 +3,22 @@ layout: post title: "September product update: New Roles | Hackathon | CCPA | 1.6 for self-hosted" description: "A recap of everything new at Appwrite in September." date: 2024-09-30 +lastUpdated: 2026-05-22 cover: /images/blog/product-update-september/cover.avif timeToRead: 5 author: dennis-ivy category: product +faqs: + - question: "What roles are available in the Appwrite Console?" + answer: "In addition to the owner role, you can assign Developer, Editor, Analyst, and Billing roles to team members on the Pro and Enterprise plans. Each role limits what a member can see and change inside the Console, so you can grant access without handing over full control." + - question: "What is CCPA compliance and why does it matter for Appwrite users?" + answer: "CCPA is a California privacy law that gives consumers rights over how their personal data is collected and used. Appwrite being CCPA compliant means the platform meets those requirements, which makes it easier for you to satisfy your own obligations to California users." + - question: "What landed in Appwrite 1.6 for self-hosted?" + answer: "Self-hosted 1.6 includes local development tooling, the new Appwrite CLI, binary executions, dynamic keys, delayed executions, the Go SDK and runtime, and session alerts. These are the same features that shipped on Cloud during Init." + - question: "Can I update existing collection attribute names and sizes in Appwrite?" + answer: "Yes. You can rename an attribute or change its size directly from the Console without recreating the attribute or running a manual migration. This makes schema iteration much less painful." + - question: "What was the 1.5.11 security patch about?" + answer: "An issue in open-runtimes/executor caused error stack traces to leak into build and execution logs. Cloud was patched and affected keys were rotated by the team, and self-hosted users should upgrade to 1.5.11 to apply the fix." --- Right after Init, we hit the ground running with a busy month. We introduced the new **Roles** feature, announced **CCPA compliance**, and kicked off the **Appwrite** **Hacktoberfest Hackathon.** @@ -15,7 +27,7 @@ Let’s dive into it! ![New roles announcement](/images/blog/product-update-september/3.avif) # New roles -We’ve introduced Roles, a feature designed to bring granular permissions to the Appwrite Console, available for both the Pro and Scale plans. +We’ve introduced Roles, a feature designed to bring granular permissions to the Appwrite Console, available for both the Pro and Enterprise plans. Alongside the existing owner role, you can now assign these new roles to your team members: - Developer diff --git a/src/routes/blog/post/public-beta/+page.markdoc b/src/routes/blog/post/public-beta/+page.markdoc index 34f600966c5..c581056b98d 100644 --- a/src/routes/blog/post/public-beta/+page.markdoc +++ b/src/routes/blog/post/public-beta/+page.markdoc @@ -7,6 +7,17 @@ cover: /images/blog/cloud-beta.avif timeToRead: 5 author: christy-jacob category: cloud, announcement +faqs: + - question: "What is Appwrite Cloud?" + answer: "Appwrite Cloud is the fully managed version of Appwrite. You get the same APIs and Console as the open-source edition, without running or maintaining the infrastructure yourself." + - question: "What is the difference between the private beta and the public beta?" + answer: "The private beta was a closed group used to validate usage patterns, pricing, and infrastructure. The public beta opens signups to everyone while the team continues to refine the platform based on broader feedback." + - question: "Will Appwrite remain open source now that Cloud exists?" + answer: "Yes. Appwrite remains open source, and major features ship to the self-hosted edition. Cloud is a managed deployment of the same platform you can run yourself." + - question: "Which function runtimes does Appwrite Cloud support?" + answer: "During the public beta Cloud supports Node, Python, PHP, Ruby, and Dart runtimes for [Functions](/docs/products/functions). More runtimes are added over time based on demand." + - question: "Which regions does Appwrite Cloud run in?" + answer: "The public beta started in Frankfurt as the primary region. Additional regions have rolled out since, and the current list is documented under [Appwrite network regions](/docs/products/network/regions)." --- We're thrilled to announce a major step forward for Appwrite Cloud as we transition from our private beta to the public beta today! We're eager to hear your feedback, learn from your experiences, and continually improve Appwrite Cloud to better serve your needs. diff --git a/src/routes/blog/post/public-roadmap-announcement/+page.markdoc b/src/routes/blog/post/public-roadmap-announcement/+page.markdoc index 428656d7cba..1d3756a4cd8 100644 --- a/src/routes/blog/post/public-roadmap-announcement/+page.markdoc +++ b/src/routes/blog/post/public-roadmap-announcement/+page.markdoc @@ -7,6 +7,17 @@ cover: /images/blog/public-roadmap-announcement/cover.avif timeToRead: 5 author: eldad-fux category: open-source, announcement +faqs: + - question: "Where can I find the Appwrite public roadmap?" + answer: "The roadmap lives on GitHub at github.com/orgs/appwrite/projects. Each release has its own project board with issues and pull requests tagged for the version they are targeting." + - question: "How do I request a feature or report a bug for Appwrite?" + answer: "Open an issue on the relevant Appwrite repository with reproduction steps for bugs or a clear motivation for feature requests. Upvoting and commenting on existing issues also helps the team prioritize." + - question: "What goes on the roadmap and what stays internal?" + answer: "The public roadmap covers short-term and mid-term work that is already scoped. Longer-term initiatives that are still in RFC or planning may not appear yet, since the team avoids committing to dates it cannot hold." + - question: "What is the framework behind Appwrite's roadmap decisions?" + answer: "The team prioritizes work across four pillars: friction, reliability, growth, and revenue. These give a consistent way to weigh community feedback against long-term platform health." + - question: "Why should developers care about a vendor having a public roadmap?" + answer: "A public roadmap tells you whether features you depend on are being maintained, what is coming next, and when to expect it. It is easier to plan a production project around a vendor that ships predictably and listens to issues." --- We are excited to announce the launch of Appwrite’s public roadmap on GitHub. The new roadmap is part of our commitment to the Appwrite community and our core values of transparency and collaboration. It was one of the most highly requested features by the Appwrite community and will serve as a tool for increased collaboration among the core team, contributors, maintainers, and Appwrite developers. diff --git a/src/routes/blog/post/push-notifications-best-practices/+page.markdoc b/src/routes/blog/post/push-notifications-best-practices/+page.markdoc index a10c277b0e6..dad8d6e9863 100644 --- a/src/routes/blog/post/push-notifications-best-practices/+page.markdoc +++ b/src/routes/blog/post/push-notifications-best-practices/+page.markdoc @@ -8,6 +8,17 @@ timeToRead: 6 author: aditya-oberai category: product featured: false +faqs: + - question: "What is the difference between a push notification and an in-app notification?" + answer: "A push notification is delivered by the operating system and appears even when the app is closed, using services like FCM or APNS. An in-app notification only shows while the user has the app open and is handled by your application code directly." + - question: "How many push notifications per week is too many?" + answer: "Research from Helplama showed that 2 to 5 push notifications per week already pushes 43% of users to disable notifications, and 6 to 10 per week leads to 30% uninstalling the app. Aim for fewer, well-timed, high-value sends rather than frequent broadcasts." + - question: "How does Appwrite Messaging send push notifications?" + answer: "[Appwrite Messaging](/docs/products/messaging) ships with adapters for Firebase Cloud Messaging (FCM) and Apple Push Notification Service (APNS). You configure the provider once, then send pushes to users, topics, or targets through a single API." + - question: "When should I use a silent push notification?" + answer: "Silent pushes wake the app in the background to refresh data or sync state without showing anything to the user. They are best for keeping content up to date or triggering background work, not for messages the user should see." + - question: "What is the best way to ask users for push notification permission?" + answer: "Ask in context, right after the user takes an action that benefits from notifications, instead of on first launch. Explain the value in one sentence, and always provide an in-app way to opt back in or out later." --- Push notifications are messages that appear on a mobile device or computer from an app or website. They serve various purposes, such as alerts, promotions, reminders, and more. diff --git a/src/routes/blog/post/race-conditions-db-operators/+page.markdoc b/src/routes/blog/post/race-conditions-db-operators/+page.markdoc index 22d1dd4874b..5bdb4896959 100644 --- a/src/routes/blog/post/race-conditions-db-operators/+page.markdoc +++ b/src/routes/blog/post/race-conditions-db-operators/+page.markdoc @@ -8,6 +8,17 @@ timeToRead: 5 author: atharva category: tutorial featured: false +faqs: + - question: "What causes a race condition in a database update?" + answer: "It happens when two or more requests read a value, modify it in application code, and write it back at almost the same time. Each request based its write on a stale read, so updates overwrite each other and changes are lost." + - question: "How do DB operators in [Appwrite Databases](/docs/products/databases) prevent race conditions?" + answer: "DB operators run atomically on the server. Instead of fetching a row, mutating it locally, and writing it back, you send an instruction like `Operator.increment(1)` directly, and Appwrite applies it without a window where another request can interfere." + - question: "When should I use a DB operator instead of read-modify-write?" + answer: "Use an operator for any update where the new value depends on the existing value, like counters, balances, scores, or list mutations. Read-modify-write is fine when the field is being replaced wholesale and concurrent writes are not expected." + - question: "Do DB operators reduce bandwidth?" + answer: "Yes. You skip the initial getRow call because the server already has the current value. On hot paths like analytics counters or rate limiting, that is one fewer round trip per update, which adds up at scale." + - question: "Can I combine multiple operators in one update?" + answer: "Yes. A single update can apply operators to several columns at once, and they all commit together. Combined with the operator's atomicity, this lets you safely update related fields without coordinating multiple writes." --- A race condition is a special condition where events that are supposed to occur in sequence do not happen in sequence due to external factors, such as latency. These conditions are not ideal, as they could lead to outdated and incorrect data. Race conditions also exist in databases. If you're performing database operations through your app, it could get scary really quickly. diff --git a/src/routes/blog/post/react-admin-template-sites/+page.markdoc b/src/routes/blog/post/react-admin-template-sites/+page.markdoc index 5b6d1fe8127..1c8506d38e6 100644 --- a/src/routes/blog/post/react-admin-template-sites/+page.markdoc +++ b/src/routes/blog/post/react-admin-template-sites/+page.markdoc @@ -9,6 +9,19 @@ author: aditya-oberai category: tutorial featured: false callToAction: true +faqs: + - question: "What is React Admin?" + answer: "React Admin is an open-source framework for building B2B applications and internal tools on top of REST or GraphQL APIs. It ships with Material-UI components like data grids, forms, filters, and authentication built around enterprise admin patterns." + - question: "What does the CRM dashboard template include out of the box?" + answer: "The template provides customer management, order tracking, products, invoices, reviews, segments, and a dashboard overview, all powered by [Appwrite TablesDB](/docs/products/databases). A seeding script creates the database, tables, and a demo user on first deploy so you can log in immediately." + - question: "Why is the API key in the template safe to use?" + answer: "The `APPWRITE_API_KEY` is only used at build time to run the seed script that creates the database, tables, and demo user. Because the site is a static Vite build, the key is not bundled into the deployed assets and never reaches the browser." + - question: "Can I deploy this template against a self-hosted Appwrite instance?" + answer: "Yes. Point `VITE_APPWRITE_ENDPOINT` at your self-hosted Appwrite API endpoint and supply the matching project ID and API key. The rest of the deployment process on [Appwrite Sites](/docs/products/sites) stays the same." + - question: "How do I add a custom domain to a site deployed on [Appwrite Sites](/docs/products/sites)?" + answer: "Open the site in the Appwrite Console, go to Settings, Domains, and add your domain. Appwrite issues an SSL certificate automatically once the DNS records are pointed at the site." + - question: "Are the demo credentials safe to use in production?" + answer: "No. The seeded `john.doe@marmelab.com` account is meant for demoing the dashboard. Before going live, delete the demo user and create real accounts with strong passwords through [Appwrite Auth](/docs/products/auth)." --- Admin dashboards are at the heart of most business applications. Whether you're managing customers, tracking orders, or reviewing invoices, having a well-structured internal tool can make or break your team's productivity. However, building one from scratch, with data grids, filters, forms, and CRUD operations, takes significant time and effort. diff --git a/src/routes/blog/post/react-protected-routes/+page.markdoc b/src/routes/blog/post/react-protected-routes/+page.markdoc index 446fc72b198..30a0c762564 100644 --- a/src/routes/blog/post/react-protected-routes/+page.markdoc +++ b/src/routes/blog/post/react-protected-routes/+page.markdoc @@ -8,6 +8,17 @@ timeToRead: 4 author: dennis-ivy category: tutorial featured: false +faqs: + - question: "What is a protected route in React?" + answer: "A protected route is a route that only renders if the user passes an authentication check. If the check fails, the user is redirected to a login or public page instead of seeing the protected content." + - question: "Why use a wrapper component for protected routes instead of a custom hook?" + answer: "A wrapper component sits inside the route tree and can use `` to render nested protected routes, which keeps the routing config flat and declarative. You only write the auth check once and apply it to as many routes as you want." + - question: "What is the difference between `Outlet` and `Navigate` from React Router?" + answer: "`Outlet` renders whichever child route matches the current URL inside a parent route, which is how nested routes work. `Navigate` performs a client-side redirect to a different path during render, which is what you use to send unauthenticated users to `/login`." + - question: "How can I plug Appwrite Auth into a React protected route?" + answer: "Call [`account.get()`](/docs/products/auth) inside the wrapper component, store the result in state, and render `` if it succeeds or `` if it throws. Wrap the call in a loading state to avoid a flash of redirect while the request is in flight." + - question: "Should I check authentication on the client only?" + answer: "No. Client-side protected routes are about UX, not security. Always enforce permissions on the backend, either through [Appwrite document permissions](/docs/products/databases) or your own server logic, since anyone can bypass a client-only check." --- In this tutorial, we will explore a straightforward method for implementing protected routes in a React application. The aim is to ensure that users can only access certain pages, such as home and profile, after passing an authentication check. If a user is not authenticated, they will be redirected to the login page. diff --git a/src/routes/blog/post/reasons-to-run-your-ci-pipeline-on-appwrite/+page.markdoc b/src/routes/blog/post/reasons-to-run-your-ci-pipeline-on-appwrite/+page.markdoc index a935469d2b8..b73a7106ecc 100644 --- a/src/routes/blog/post/reasons-to-run-your-ci-pipeline-on-appwrite/+page.markdoc +++ b/src/routes/blog/post/reasons-to-run-your-ci-pipeline-on-appwrite/+page.markdoc @@ -9,6 +9,17 @@ author: eldad-fux category: product featured: false callToAction: true +faqs: + - question: "Can I really run my CI pipeline on [Appwrite Functions](/docs/products/functions)?" + answer: "Yes. If you already run workloads on Functions or [Appwrite Sites](/docs/products/sites), you can use the same runtime for build, test, and validation steps. That gives you parity between CI and production without maintaining a separate runner." + - question: "What does production parity actually mean for CI?" + answer: "It means the environment your tests run in matches the environment your code runs in once deployed. Same runtime, same dependencies, same constraints. That removes the \"works in CI, fails in prod\" class of bugs." + - question: "How does Appwrite's pricing compare to GitHub Actions for CI?" + answer: "Appwrite charges $0.06 per GB-hour, while GitHub's standard Linux runner works out to roughly $0.068 per GB-hour at its fixed 7 GB allocation. The Pro plan also includes 1,000 GB-hours of compute, so many teams stay within that envelope without overage fees." + - question: "Will I lose pull request visibility if I move CI off GitHub Actions?" + answer: "No. Appwrite's GitHub integration surfaces build and test status, logs, and check results directly on pull requests. You still get the dashboard you expect, just sourced from the same platform that runs your app." + - question: "Does running CI on Appwrite scale to larger test suites?" + answer: "Yes. You can increase CPU and memory on Functions and run builds in parallel, which means light projects pay only for what they use while bigger suites can scale up without hitting third-party runner limits." --- Modern applications rely heavily on CI pipelines. They’re the backbone of your delivery flow, the place where builds happen, tests run, and deployments get the final green light. But for many teams, CI still lives outside the hosting and runtime platform. That means juggling multiple services, maintaining extra integrations, and paying for compute twice. diff --git a/src/routes/blog/post/reducing-cold-starts-appwrite-sites/+page.markdoc b/src/routes/blog/post/reducing-cold-starts-appwrite-sites/+page.markdoc index e7faee0acf9..8600e1be728 100644 --- a/src/routes/blog/post/reducing-cold-starts-appwrite-sites/+page.markdoc +++ b/src/routes/blog/post/reducing-cold-starts-appwrite-sites/+page.markdoc @@ -7,6 +7,17 @@ cover: /images/blog/reducing-cold-starts-appwrite-sites/cover.avif timeToRead: 5 author: levi-van-noort category: product +faqs: + - question: "What is a cold start on [Appwrite Sites](/docs/products/sites)?" + answer: "A cold start is the extra time the first request takes when a new instance has to be spun up before serving traffic. For SSR sites, it includes downloading the build artifact, extracting it, and initializing the runtime." + - question: "How much did Appwrite reduce cold start times?" + answer: "Cold start duration dropped roughly 30 to 50% across the board. The download and extraction phases went from multi-second spikes to 100 to 400 milliseconds, which moved the bottleneck onto runtime initialization." + - question: "What is Node file tracing and why does it help?" + answer: "Node file tracing statically analyzes a Node.js app to figure out exactly which files are needed at runtime. Stripping out unused dependencies shrank build outputs by up to 98.8% on Appwrite's own templates, which means less to compress, transfer, and extract on every cold start." + - question: "Why use igzip instead of gzip?" + answer: "igzip is an optimized gzip implementation from Intel's Intelligent Storage Acceleration Library. Swapping gzip for igzip improved extraction times by 50 to 100% with consistent gains across build sizes, which is why Appwrite picked it over alternatives like zstd that had more variable performance." + - question: "Do I need to change my project to benefit from the new cold start improvements?" + answer: "No code changes are required. Redeploy your active deployment on [Appwrite Sites](/docs/products/sites) and the updated build pipeline applies the new compression and tracing automatically." --- If you've ever deployed a site and noticed that first request taking just a bit too long, you've experienced a cold start. It's one of those things that's easy to overlook during development but quickly becomes noticeable in production, especially when your users are the ones waiting. diff --git a/src/routes/blog/post/remix-3-whats-changing-and-why-it-matters/+page.markdoc b/src/routes/blog/post/remix-3-whats-changing-and-why-it-matters/+page.markdoc index dfe20648668..f190f3f3a67 100644 --- a/src/routes/blog/post/remix-3-whats-changing-and-why-it-matters/+page.markdoc +++ b/src/routes/blog/post/remix-3-whats-changing-and-why-it-matters/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/remix-3-whats-changing-and-why-it-matters/cover.avif timeToRead: 8 author: ebenezer-don category: news +faqs: + - question: "Does Remix 3 still use React?" + answer: "No. Remix 3 drops React entirely and ships its own component model built on web standards. You still write JSX, but there is no virtual DOM and updates are explicit instead of triggered by hooks like `useState`." + - question: "What runtimes will Remix 3 support?" + answer: "Remix 3 runs on the Fetch API using standard `Request` and `Response` objects, so it works on Node, Deno, Bun, and any other runtime that implements Fetch. There are no runtime-specific adapters required." + - question: "What are Frames in Remix 3?" + answer: "Frames are sections of a page that can refresh independently with a server-rendered HTML fragment. They give you partial updates without JSON APIs or client-side state libraries, similar to the model used by HTMX." + - question: "Are loaders and actions still part of Remix 3?" + answer: "Yes. Routes still export handlers for each HTTP method, with `GET` for loading data and `POST`, `PUT`, or `DELETE` for mutations. The framework re-runs the relevant loaders after a mutation so the UI stays in sync." + - question: "When can I use Remix 3 in production?" + answer: "The first stable release is targeted for early 2026. Previews shown at Remix Jam 2025 are usable for experiments, but the API is still moving and not recommended for production until the official release." + - question: "How is Remix 3 different from Next.js?" + answer: "Remix 3 is intentionally smaller and closer to web standards, with no React, no virtual DOM, and no build-time magic. Next.js leans into React Server Components and an opinionated build pipeline, while Remix 3 favors composable primitives that work on any JavaScript runtime." --- For a while, it seemed like Remix had reached a natural end. By late 2024, almost everything that made Remix unique, its loaders, actions, and nested routing, had been merged into React Router 7. The framework's creators, Ryan Florence and Michael Jackson, even joked that Remix 2 had become "React Router, the Framework." Many developers assumed Remix would fade away. diff --git a/src/routes/blog/post/rest-vs-graphql-websockets-which-is-best-for-your-app/+page.markdoc b/src/routes/blog/post/rest-vs-graphql-websockets-which-is-best-for-your-app/+page.markdoc index 766cc91b23a..9e2327b8815 100644 --- a/src/routes/blog/post/rest-vs-graphql-websockets-which-is-best-for-your-app/+page.markdoc +++ b/src/routes/blog/post/rest-vs-graphql-websockets-which-is-best-for-your-app/+page.markdoc @@ -7,6 +7,17 @@ cover: /images/blog/rest-vs-graphql-websockets/cover.avif timeToRead: 5 author: eldad-fux category: product +faqs: + - question: "When should I choose REST over GraphQL?" + answer: "Pick REST when your app maps cleanly to resources and CRUD operations, when you want maximum tooling and caching support, or when consumers expect predictable URLs and HTTP semantics. It is also the safer default for IoT, mobile, and public APIs." + - question: "When should I use GraphQL instead?" + answer: "Use GraphQL when clients need to fetch deeply nested data, when different clients want different shapes of the same resource, or when you want to reduce over-fetching across a complex schema. The cost is a more involved server and caching story than REST." + - question: "What is a WebSocket and when do I need one?" + answer: "A WebSocket is a long-lived, bi-directional connection over a single TCP socket. Use it when you need real-time updates pushed from the server, like chat, live feeds, multiplayer games, or collaborative editing, where polling REST is too slow." + - question: "Which protocols does Appwrite support?" + answer: "Appwrite uses REST as its primary API for SDK and HTTP communication, exposes a [GraphQL endpoint](/docs/apis/graphql) for clients that prefer it, and ships a WebSocket-based [Realtime API](/docs/apis/realtime) for live data. You can mix and match across the same project." + - question: "Can I use REST and WebSockets in the same application?" + answer: "Yes, and it is a common pattern. REST handles CRUD and request-response work, while WebSockets handle live updates on top of the same data. Appwrite is built around this combination, so the client SDKs expose both." --- In software development, APIs are the lifeblood of communication between various components of an application. They set the rules for data exchange, ensuring smooth interaction between systems. diff --git a/src/routes/blog/post/rethinking-saas-authentication/+page.markdoc b/src/routes/blog/post/rethinking-saas-authentication/+page.markdoc index 3df0ea9c6d4..f6b4a8b6cc7 100644 --- a/src/routes/blog/post/rethinking-saas-authentication/+page.markdoc +++ b/src/routes/blog/post/rethinking-saas-authentication/+page.markdoc @@ -9,6 +9,17 @@ author: laura-du-ry callToAction: true unlisted: true category: product +faqs: + - question: "What makes SaaS authentication different from a typical login system?" + answer: "SaaS auth has to handle multi-tenancy, customer-managed roles, and enterprise expectations like SSO and audit logs in addition to standard login flows. It is less about authenticating one user base and more about isolating many customer organizations cleanly." + - question: "Why is MFA over SMS considered weak?" + answer: "SMS codes can be intercepted through SIM swapping or carrier-level attacks, and they do not protect against phishing pages that proxy the code. Phishing-resistant methods like TOTP apps and passkeys bind the second factor to the device or origin, which is much harder to bypass." + - question: "How does Appwrite support multi-tenant SaaS authentication?" + answer: "[Appwrite Teams](/docs/products/auth/teams) provide per-tenant identity, membership, and role management on top of [Auth](/docs/products/auth). You can isolate users by team, assign granular permissions, and let tenant admins manage their own members." + - question: "What is passwordless authentication and is it secure?" + answer: "Passwordless replaces a password with a different proof of identity, like a magic URL, OTP, or passkey. Done well, it is more secure than passwords because there is nothing to phish or reuse across sites, and it tends to improve completion rates on login." + - question: "Which SaaS compliance frameworks should I care about?" + answer: "Most B2B SaaS buyers expect [GDPR](/docs/advanced/security/gdpr), [SOC 2](/docs/advanced/security/soc2), and often [HIPAA](/docs/advanced/security/hipaa) depending on the vertical. Picking an auth platform that already handles encryption, access controls, and regional hosting makes those audits much shorter." --- In SaaS, authentication isn’t just a technical requirement; it's a key pillar of product quality, security, and growth. Whether you're guiding new users through onboarding, handling multi-tenant environments, or protecting APIs, how you manage identity can make or break customer trust and loyalty. diff --git a/src/routes/blog/post/saas-to-vertical-ai/+page.markdoc b/src/routes/blog/post/saas-to-vertical-ai/+page.markdoc index fff5d139706..8a8ce168ef2 100644 --- a/src/routes/blog/post/saas-to-vertical-ai/+page.markdoc +++ b/src/routes/blog/post/saas-to-vertical-ai/+page.markdoc @@ -10,7 +10,17 @@ callToAction: true unlisted: true category: startup call_to_action: true - +faqs: + - question: "What is a vertical AI agent?" + answer: "A vertical AI agent is an AI system built to automate one specific business function end to end, like payroll, QA testing, or customer support. Unlike general-purpose chat models, it owns the workflow rather than acting as a tool a human still drives." + - question: "How does vertical AI differ from horizontal AI?" + answer: "Horizontal AI is generalist and works across industries and tasks, like a chat assistant. Vertical AI is specialist and goes deep into one domain, replacing software and labor inside that workflow instead of helping a human do it faster." + - question: "Why is now a good time to start a vertical AI startup?" + answer: "LLMs are mature enough to ground real workflows, businesses are actively replacing manual processes with agents, and most verticals do not yet have a dominant AI-native provider. That combination opens an early-mover window in many industries." + - question: "Will vertical AI replace SaaS entirely?" + answer: "Probably not in every category, but it will absorb a lot of the work that SaaS tools delegate back to humans. Expect SaaS and vertical AI agents to coexist, with agents handling whole workflows and traditional SaaS continuing to provide systems of record." + - question: "What infrastructure does a vertical AI startup need on day one?" + answer: "You typically need auth, a database, secure file storage, and a way to run background jobs that call models and integrate with external systems. A platform like [Appwrite](/) provides those primitives so you can focus on the agent logic instead of glue." --- B2B enterprise SaaS is about to undergo a major shift. While SaaS revolutionized how software is built and distributed, allowing businesses to streamline operations with cloud-based tools, it had one major problem: it’s still built on a one-size-fits-all approach, with general-purpose solutions that require constant customization and integration. This led to complexity and inefficiency, as businesses needed multiple tools and human resources to make everything work. diff --git a/src/routes/blog/post/scale-plan-now-available/+page.markdoc b/src/routes/blog/post/scale-plan-now-available/+page.markdoc index 5a89f308e60..29255847237 100644 --- a/src/routes/blog/post/scale-plan-now-available/+page.markdoc +++ b/src/routes/blog/post/scale-plan-now-available/+page.markdoc @@ -3,14 +3,26 @@ layout: post title: The Appwrite Scale plan is now publicly available description: After months of beta testing we are ready to release the Scale plan to everyone. date: 2025-01-23 +lastUpdated: 2026-05-22 cover: /images/blog/scale-plan.avif timeToRead: 4 author: laura-du-ry category: product featured: false callToAction: true +faqs: + - question: "Is the Appwrite Scale plan still available?" + answer: "No. The Scale plan is no longer offered as a separate tier. The features it covered (priority support, advanced compliance, custom organization roles, custom backup policies, longer log retention) are now part of the Enterprise plan. See the current [pricing page](/pricing) for the latest plan structure." + - question: "Where did the Scale plan features go?" + answer: "Everything that was unique to Scale moved into the Enterprise plan, including BAA, SOC-2, custom backup policies, 28-day log retention (Enterprise extends to 90 days), SSO, custom organization roles, and a dedicated success manager. Contact [sales](/contact-us/enterprise) if you need any of these." + - question: "I was on the Scale plan. What happens to my organization?" + answer: "Existing Scale customers are handled directly by the Appwrite team. If you have not been contacted about a transition, reach out to billing@appwrite.io and the team will walk you through your options on the current plan structure." --- +{% info title="Scale plan has been deprecated" %} +The Scale plan is no longer offered as a separate tier. Its features (priority support, advanced compliance, custom organization roles, custom backup policies, longer log retention) are now part of the [Enterprise plan](/pricing). +{% /info %} + Over a year ago, we launched our pricing structure and introduced the Pro plan. Today, we’re excited to unveil the Scale plan. A new offering that provides more support and flexibility. This plan is specifically tailored for teams within agencies, startups, scale-ups, and SMBs, ensuring they have the tools and resources to drive their business forward. # The Scale Plan diff --git a/src/routes/blog/post/scaling-ai-workloads-why-mongodb-works-well-for-high-velocity-data/+page.markdoc b/src/routes/blog/post/scaling-ai-workloads-why-mongodb-works-well-for-high-velocity-data/+page.markdoc index ddd686b8804..4b1e1525ce0 100644 --- a/src/routes/blog/post/scaling-ai-workloads-why-mongodb-works-well-for-high-velocity-data/+page.markdoc +++ b/src/routes/blog/post/scaling-ai-workloads-why-mongodb-works-well-for-high-velocity-data/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: atharva category: product featured: false +faqs: + - question: "Why is MongoDB a good fit for AI workloads?" + answer: "MongoDB handles the patterns AI systems actually depend on, namely high write throughput, horizontal sharding, flexible documents, and high availability. AI applications continuously write events, predictions, and feedback signals with shapes that change as models evolve, and MongoDB stores that data without requiring rigid schemas or downtime for migrations." + - question: "How does MongoDB handle schema changes in production?" + answer: "MongoDB lets you add new fields to documents without touching existing records, and different versions of the same data structure can coexist in a single collection. There is no migration, table lock, or backfill required for most schema evolution, which is useful when models or pipelines are updated frequently." + - question: "Can I self-host Appwrite with MongoDB as the database?" + answer: "Yes. Appwrite 1.9 and later supports MongoDB as the underlying database backend for self-hosted instances. Appwrite manages the MongoDB instance automatically as a replica set, and the API and SDK behavior stay identical regardless of which database you pick. See the [self-hosted MongoDB integration](/integrations/self-hosted-mongodb) for details." + - question: "Does using MongoDB with Appwrite change how I write application code?" + answer: "No. Appwrite exposes the same APIs and SDKs whether the underlying storage is MariaDB or MongoDB. The database choice is a deployment-time decision that affects scalability and operational properties, not your application code." + - question: "When should I scale horizontally instead of scaling up a single machine?" + answer: "Vertical scaling works until a single machine hits its ceiling on CPU, RAM, or storage, and costs rise sharply as you push that limit. For AI workloads with continuously growing data and unpredictable traffic, horizontal scaling (sharding across multiple nodes) is more practical because capacity grows incrementally and a single node failure stops being a single point of failure." + - question: "How does MongoDB stay available during node failures?" + answer: "MongoDB uses replica sets, which maintain multiple copies of data across nodes with automatic failover if the primary node goes down. For production AI features like fraud detection or personalization, this means an individual node failure or maintenance event does not translate into a user-visible outage." --- AI applications don't fail because the model is slow. They fail because everything around the model can't keep up. diff --git a/src/routes/blog/post/scan-receipts-with-appwrite-functions/+page.markdoc b/src/routes/blog/post/scan-receipts-with-appwrite-functions/+page.markdoc index 85969c6474f..283abbc6f8a 100644 --- a/src/routes/blog/post/scan-receipts-with-appwrite-functions/+page.markdoc +++ b/src/routes/blog/post/scan-receipts-with-appwrite-functions/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/receipt-scan.avif timeToRead: 15 author: vincent-ge category: tutorial +faqs: + - question: "What does the Hugging Face Donut Receipts model return?" + answer: "The model returns extracted receipt fields wrapped in XML-like tags, including store name, address, phone, date, time, subtotal, tax, total, tips, and discount. You parse the response with regex (or a small parser) to pull each tagged value into a structured object you can store or return to your client." + - question: "Why run receipt scanning inside Appwrite Functions instead of from the client?" + answer: "Running the scan inside [Appwrite Functions](/docs/products/functions) keeps your Hugging Face API key off the client and gives you a single server-side endpoint that handles the upload, the model call, and post-processing. It also makes it easy to chain follow-up actions (storing the receipt, updating a database row) in the same execution." + - question: "How do I store the receipt image so the function can process it?" + answer: "Upload the image to [Appwrite Storage](/docs/products/storage) from the client, then pass the file ID to the function. The function reads the file using the server SDK, forwards the bytes to the Hugging Face model, and writes the parsed result to a database row tied to the user." + - question: "How do I keep my Hugging Face API key secret in an Appwrite Function?" + answer: "Set the key as an environment variable on the function and mark it as a secret in the Appwrite Console. The function reads it at runtime via `process.env` or the equivalent in your runtime, and the value is never exposed in the dashboard or API once it is marked secret." + - question: "Can I use a different OCR or receipt extraction model?" + answer: "Yes. The same Function structure works with any HTTP-accessible model or OCR service (other Hugging Face models, Google Document AI, AWS Textract, an OpenAI vision model). Swap the API URL, headers, and response parser, and keep the upload and storage flow the same." + - question: "How can I make receipt entry feel low-friction for users?" + answer: "Default to image upload over a form, parse what you can with OCR, and only ask the user to confirm or correct the extracted fields. Pre-filling totals, dates, and merchant names removes most of the typing that causes users to abandon receipt-tracking apps." --- I downloaded a personal finance app a few weeks ago to help me track my expenses. I uninstalled that app about five minutes later. diff --git a/src/routes/blog/post/screenshots-best-practices/+page.markdoc b/src/routes/blog/post/screenshots-best-practices/+page.markdoc index dda3324efcd..4749d5be67b 100644 --- a/src/routes/blog/post/screenshots-best-practices/+page.markdoc +++ b/src/routes/blog/post/screenshots-best-practices/+page.markdoc @@ -9,6 +9,19 @@ author: atharva category: tutorial featured: false callToAction: true +faqs: + - question: "Why should I store screenshots instead of generating them on demand?" + answer: "Generating a screenshot per request is slow and expensive. You hit API rate limits, response times spike under load, and users wait on loading spinners. Persisting screenshots once and serving them from object storage turns later requests into a fast file lookup instead of a fresh render." + - question: "How do I capture and store a screenshot with Appwrite?" + answer: "Use the Avatars service to render the screenshot, fetch the result, then upload it to [Appwrite Storage](/docs/products/storage) with `storage.createFile`. Store the resulting file ID in a database row alongside the source URL so subsequent requests can look it up instead of regenerating." + - question: "How do I know if a screenshot for a URL already exists?" + answer: "Maintain a table that maps URLs to file IDs in [Appwrite Databases](/docs/products/databases). Before generating a new screenshot, query the table by URL. If a row exists, serve the stored file; otherwise capture, store, and insert a new row." + - question: "How do I refresh screenshots when the underlying page changes?" + answer: "Add a TTL or `updatedAt` field to the row and treat any screenshot older than that threshold as stale. You can refresh lazily on read (regenerate on access after expiry) or proactively on a schedule, depending on how fresh the previews need to be." + - question: "What format and size should I use for stored screenshots?" + answer: "WebP at quality 80 to 85 is a strong default for link previews and thumbnails because it is significantly smaller than PNG with negligible quality loss. Pick viewport dimensions that match where the image will be used (1200 by 630 for Open Graph cards, smaller for thumbnails) so you are not paying to render and store oversized images." + - question: "How do I avoid duplicate work when many users request the same URL at once?" + answer: "Treat the URL as a deduplication key. Before kicking off generation, do an existence check against your tracking table. For concurrent first-time requests, an in-memory lock or a database constraint on the URL field prevents two workers from rendering the same page in parallel." --- Screenshots are everywhere in modern applications. Link previews in chat apps, visual documentation in developer tools, thumbnail galleries in dashboards, and compliance archives in enterprise software. What seems like a simple feature, "show me what this page looks like", can quickly become a performance bottleneck and maintenance headache if not handled properly. diff --git a/src/routes/blog/post/security-is-a-revolving-door/+page.markdoc b/src/routes/blog/post/security-is-a-revolving-door/+page.markdoc index 0738beaf20a..0a100be206a 100644 --- a/src/routes/blog/post/security-is-a-revolving-door/+page.markdoc +++ b/src/routes/blog/post/security-is-a-revolving-door/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/security-is-a-revolving-door/cover.avif timeToRead: 10 author: aditya-oberai category: security +faqs: + - question: "Why does Appwrite hash passwords with Argon2?" + answer: "Argon2 won the Password Hashing Competition and is the current industry recommendation for credential storage. It is memory-hard, which means attackers cannot just throw cheap GPU cycles at cracking hashes at scale. Passwords are salted automatically, and legacy hashes are transparently upgraded to Argon2 on the next successful sign-in." + - question: "What protects Appwrite from credential-stuffing and brute-force attacks?" + answer: "Authentication endpoints are rate limited out of the box, with state communicated via standard `X-RateLimit-*` headers. Repeated failed logins are throttled and eventually blocked without any configuration on your part, and you can layer [MFA](/docs/products/auth) on top so a leaked password alone is not enough to take over an account." + - question: "What is encrypted at rest in Appwrite?" + answer: "Sensitive platform data including webhook secrets, API keys, and user sessions is encrypted server-side. You can also enable field-level encryption on specific database columns and storage buckets using AES-128 in GCM mode, so you can encrypt only the data that needs it instead of paying the cost on everything." + - question: "How should I store secrets for Functions and Sites?" + answer: "Use environment variables and mark sensitive ones (API keys, signing keys, connection strings) as secret. Once a variable is marked secret it is hidden from both the Console and the API, and the action cannot be reversed, so the value cannot leak through the dashboard or programmatic access." + - question: "What does Appwrite's permissions system actually control?" + answer: "[Permissions](/docs/products/databases) are defined at the table, row, storage bucket, and individual file level, and cover read, create, update, delete, and write. Roles can target any visitor, guests, all authenticated users, specific users, teams, or team roles, so you can model fine-grained access without writing custom authorization checks on every endpoint." + - question: "How can I be notified when a new session is created on a user's account?" + answer: "Appwrite ships session alerts that email users when a new session is created for their account. Combined with configurable session limits (default 10 active sessions per user) and explicit logout invalidation, this gives users early signal if something looks off and prevents stale sessions from piling up." --- Earlier this month, Vercel [disclosed a security incident](https://vercel.com/kb/bulletin/vercel-april-2026-security-incident) that affected a subset of its customers. An attacker compromised a third-party AI tool used internally at Vercel, which was then used to take over an employee's account and pivot through internal systems. The result: environment variables marked as non-sensitive (ones that decrypt to plaintext) for a number of customers were exposed, potentially including API keys, database credentials, and signing keys. diff --git a/src/routes/blog/post/security-update-regarding-the-axios-npm-incident/+page.markdoc b/src/routes/blog/post/security-update-regarding-the-axios-npm-incident/+page.markdoc index db2aea611c0..40a017ff02d 100644 --- a/src/routes/blog/post/security-update-regarding-the-axios-npm-incident/+page.markdoc +++ b/src/routes/blog/post/security-update-regarding-the-axios-npm-incident/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 3 author: eldad-fux category: security featured: false +faqs: + - question: "Were Appwrite SDKs affected by the compromised Axios npm releases?" + answer: "No. Appwrite's production repositories, SDKs, and tooling chain were reviewed and were not impacted. The JavaScript and TypeScript SDKs use the native `fetch` API rather than Axios, so the affected packages were not in the customer-facing dependency tree." + - question: "Do I need to take emergency action as an Appwrite customer?" + answer: "Based on Appwrite's internal assessment, no emergency action is required specifically for Appwrite services or SDK usage. You should still review your own application dependencies and pin Axios (and any other direct dependencies) to known-good versions in production." + - question: "How do I protect my own projects from compromised npm packages?" + answer: "Pin direct dependencies to specific versions, commit your lockfile, and use `npm ci` (or the equivalent for your package manager) in CI so installs resolve against the lockfile instead of pulling new versions through semver ranges. This dramatically reduces the chance of pulling a freshly published malicious release." + - question: "What is a software supply chain attack?" + answer: "It is when an attacker compromises a dependency, build system, or distribution channel that your project trusts, rather than attacking your application directly. The Axios incident was a classic example: a maintainer account was compromised and malicious versions were published to npm, so anything resolving to those versions would have pulled the payload." + - question: "What changes has Appwrite made to its release process?" + answer: "Appwrite added stronger lockfile handling for dependency reproducibility, updated SDK generation and release tooling so dependency changes are more visible in review, and enforced stricter install behavior in CI so the dependency tree stays aligned with the reviewed lockfile. These are preventive improvements rather than a response to a direct compromise." + - question: "Why are lockfiles important during a supply chain incident?" + answer: "Lockfiles record the exact versions and hashes of every package installed. With a committed lockfile and a strict installer, your build will reinstall those same versions instead of pulling newly published (possibly malicious) releases through semver-compatible ranges, which is exactly what got many projects compromised in past incidents." --- We want to share a brief update regarding the recent Axios supply chain incident on npm, where malicious package versions were reportedly published after a maintainer account was compromised. diff --git a/src/routes/blog/post/self-hosting-appwrite-with-mongodb/+page.markdoc b/src/routes/blog/post/self-hosting-appwrite-with-mongodb/+page.markdoc index a7178eb3b65..e9d585d2840 100644 --- a/src/routes/blog/post/self-hosting-appwrite-with-mongodb/+page.markdoc +++ b/src/routes/blog/post/self-hosting-appwrite-with-mongodb/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/self-hosting-appwrite-with-mongodb/cover.avif timeToRead: 6 author: atharva category: tutorial +faqs: + - question: "Which Appwrite version is needed to run MongoDB as the backend?" + answer: "Appwrite 1.9.0 introduced MongoDB as a supported database backend for self-hosted installs. Earlier versions only support MariaDB, so you need to either install fresh on 1.9 or later, or migrate an existing instance through the upgrade path before switching backends." + - question: "Can I switch from MariaDB to MongoDB after installation?" + answer: "No. The database choice is permanent for a given Appwrite instance. If you have an existing MariaDB-backed install and want to move to MongoDB, you need to set up a new instance with MongoDB selected and migrate the data over." + - question: "What are the system requirements for self-hosting Appwrite with MongoDB?" + answer: "Appwrite recommends at least 2 CPU cores, 4GB of RAM, and 2GB of swap. You also need Docker installed, and port 20080 open during installation for the web-based setup wizard (you can close it once setup completes)." + - question: "Does Appwrite manage the MongoDB instance for me?" + answer: "Yes. When you pick MongoDB during install, Appwrite stands up its own MongoDB instance configured as a replica set with Appwrite's schema. You do not connect Appwrite to an existing MongoDB cluster, and there is nothing to tune manually for the database to work with Appwrite." + - question: "Do I lose the secret API key shown during installation?" + answer: "Yes, in the sense that you cannot retrieve it from the Console later. That key encrypts sensitive data on the server, so copy it to a password manager or secrets vault during install. Losing it means you cannot decrypt encrypted data on the instance." + - question: "Does choosing MongoDB change how my application code talks to Appwrite?" + answer: "No. The API surface, SDK methods, and behaviors are the same regardless of the underlying database. Only the storage engine changes, so existing apps, [Functions](/docs/products/functions), and [Sites](/docs/products/sites) work without modification." --- Appwrite is built on self-hosting, but until now, MariaDB was the only database option. With Appwrite 1.9.0, you can now choose MongoDB as your database backend. This is a big deal if you prefer a document-based database or already have MongoDB expertise on your team. diff --git a/src/routes/blog/post/setting-up-google-signin/+page.markdoc b/src/routes/blog/post/setting-up-google-signin/+page.markdoc index caad8454915..7309a9ad238 100644 --- a/src/routes/blog/post/setting-up-google-signin/+page.markdoc +++ b/src/routes/blog/post/setting-up-google-signin/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/setting-up-google-signin/cover.avif timeToRead: 5 author: atharva category: tutorial +faqs: + - question: "What do I need from Google Cloud Console to enable Sign in with Google?" + answer: "You need an OAuth consent screen and an OAuth client ID and secret. The consent screen controls what users see when they sign in, and the client ID and secret identify your project to Google so it can issue tokens to your application." + - question: "Should I choose Internal or External audience for my OAuth app?" + answer: "Pick Internal if the app is limited to your Google Workspace organization, since it skips verification. Pick External if anyone outside your organization can sign in. External apps may require Google verification once you cross certain user thresholds or request sensitive scopes." + - question: "Which OAuth scopes do I need for basic Google sign-in?" + answer: "For standard sign-in flows, `.../auth/userinfo.email`, `.../auth/userinfo.profile`, and `openid` are enough. They return basic profile information without triggering Google's sensitive-scope review process. Only request additional scopes when you actually need to call Google APIs on the user's behalf." + - question: "How do I wire Google OAuth into Appwrite?" + answer: "In the Appwrite Console, go to [Auth](/docs/products/auth) settings, open the Google provider, paste in the client ID and client secret from Google Cloud Console, and save. Then copy the redirect URI Appwrite displays and add it to Authorized Redirect URIs on your Google OAuth client." + - question: "Can I share my OAuth client ID publicly?" + answer: "The client ID is treated as public and is fine to ship in client code. The client secret is not, and should only live on the server (or in Appwrite's configuration). If a secret leaks, rotate it in Google Cloud Console immediately." + - question: "Why is the redirect URI important in Google OAuth?" + answer: "Google will only redirect users back to URIs explicitly listed in your OAuth client config. If the redirect URI does not match exactly, the sign-in flow fails with an error. For Appwrite, use the redirect URI shown in the Google provider settings, not a custom URL you invent." --- This article will teach you how to configure **Sign in with Google** in your applications. We will focus on two key parts: diff --git a/src/routes/blog/post/setting-up-route-protection-in-react-native/+page.markdoc b/src/routes/blog/post/setting-up-route-protection-in-react-native/+page.markdoc index c95e895da9a..7715df11ff3 100644 --- a/src/routes/blog/post/setting-up-route-protection-in-react-native/+page.markdoc +++ b/src/routes/blog/post/setting-up-route-protection-in-react-native/+page.markdoc @@ -9,6 +9,19 @@ author: nishant-jain category: tutorial featured: false callToAction: true +faqs: + - question: "How do I structure protected and public routes in Expo Router?" + answer: "Group protected routes inside a folder like `(app)` and keep public routes (sign-in, sign-up) outside it. The route group gets its own `_layout.tsx` that performs the auth check and redirects to the sign-in screen if there is no active session, so the protection lives in one place instead of every screen." + - question: "Where should the auth check live?" + answer: "Inside the protected group's `_layout.tsx`. Read the session from your auth context and either render the `Slot` (when authenticated) or `Redirect` to the sign-in screen (when not). This runs before any child route mounts, so unauthenticated users never see protected content." + - question: "How do I share auth state across screens in React Native?" + answer: "Use React Context. Create an `AuthProvider` that exposes user, session, `signIn`, and `signOut`, wrap your root layout with it, and consume the context via a `useAuth` hook from any screen. This keeps the session in one source of truth and avoids prop drilling." + - question: "How do I handle the loading state while restoring a session?" + answer: "Track a `loading` flag in your auth provider that is true until you have finished checking for an existing session on app start. Render a splash or loader while loading is true so users do not see a flicker between public and protected routes during cold start." + - question: "How does Appwrite fit into this flow?" + answer: "[Appwrite Auth](/docs/products/auth) manages users and sessions on the backend. Your React Native app calls Appwrite to create or restore a session, and you set that session in your auth context. The route protection logic stays the same, only the `signIn`, `signOut`, and session-restore methods talk to Appwrite." + - question: "What happens to deep links when a user is not authenticated?" + answer: "Because the route group's layout intercepts any unauthenticated access and redirects to sign-in, deep links into protected routes will also bounce to the sign-in screen. To send users back to the original deep link after login, capture the intended path before redirecting and navigate to it once a session is established." --- In this guide, we'll walk through implementing protected routes in React Native using a simplified authentication approach with hardcoded values. The implementation uses a straightforward application structure that's easy to follow along with. diff --git a/src/routes/blog/post/should-you-stop-using-otp-sms/+page.markdoc b/src/routes/blog/post/should-you-stop-using-otp-sms/+page.markdoc index 8f8dd14afbe..d18daa57e6b 100644 --- a/src/routes/blog/post/should-you-stop-using-otp-sms/+page.markdoc +++ b/src/routes/blog/post/should-you-stop-using-otp-sms/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 7 author: aditya-oberai category: product featured: false +faqs: + - question: "Should I stop using SMS OTPs in my app?" + answer: "If you can move users to a stronger second factor (TOTP via an authenticator app, passkeys, or push approval), do it. SMS is vulnerable to SIM-swapping, SS7 interception, and social engineering, and per-message costs scale poorly. SMS OTP is still acceptable as a fallback or for low-risk flows, but it should not be your only second factor for sensitive actions." + - question: "What is SIM swapping and why does it break SMS OTP?" + answer: "SIM swapping is when an attacker convinces a mobile carrier to port a victim's phone number to a SIM the attacker controls. Once they own the number, every SMS OTP (including 2FA codes and account recovery codes) goes straight to them. It is a social engineering attack against the carrier, not the user, which is why the user has no way to prevent it directly." + - question: "Are TOTP authenticator apps actually more secure than SMS?" + answer: "Yes. TOTP codes are generated locally on the device from a shared secret, so they never travel over the cellular network and cannot be intercepted via SS7 or stolen via SIM-swap. They are still phishable, so passkeys or WebAuthn are stronger again, but TOTP is a meaningful upgrade over SMS with minimal user friction." + - question: "What passwordless options does Appwrite support?" + answer: "[Appwrite Auth](/docs/products/auth) supports magic URLs, email OTP, and phone (SMS) OTP, plus OAuth providers and TOTP-based MFA. You can mix them, for example email OTP for primary auth and TOTP as the second factor, so SMS does not have to be in the critical path." + - question: "Why is SMS OTP expensive at scale?" + answer: "Carrier delivery fees vary by destination country and can spike for international traffic, premium routes, or fraud-attempt floods. Some attackers exploit this with toll-fraud schemes that trigger huge volumes of OTP sends to numbers they control, and your bill absorbs the cost regardless of whether real users completed the flow." + - question: "When does SMS OTP still make sense?" + answer: "When your user base does not reliably have email, authenticator apps, or smartphones capable of passkeys, SMS OTP remains the lowest-friction option. It is also a reasonable fallback for account recovery if it is combined with additional verification, not used as the only signal." --- > Should you stop using SMS OTPs for authentication now? diff --git a/src/routes/blog/post/simplify-messaging-twilio/+page.markdoc b/src/routes/blog/post/simplify-messaging-twilio/+page.markdoc index 8186a63917f..11964bb62e6 100644 --- a/src/routes/blog/post/simplify-messaging-twilio/+page.markdoc +++ b/src/routes/blog/post/simplify-messaging-twilio/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 7 author: aditya-oberai category: integrations featured: false +faqs: + - question: "What does Twilio Programmable Messaging do?" + answer: "It is Twilio's API for sending and receiving SMS, MMS, and WhatsApp messages over a single REST endpoint. It also includes content templates, link shortening, scheduled sends, and delivery insights, so you do not have to glue together separate APIs for each channel." + - question: "How does Appwrite integrate with Twilio for messaging?" + answer: "[Appwrite Messaging](/docs/products/messaging) ships with a Twilio provider adapter. You add your Twilio account SID, auth token, and sender number to a provider configuration, and Appwrite handles the API calls when you send an SMS via its messaging API. You do not have to write Twilio-specific code in every service." + - question: "What credentials do I need from Twilio?" + answer: "An account SID, an auth token, and at least one Twilio phone number (or messaging service SID) you can send from. The SID and token authenticate your API calls, and the sender number determines what recipients see and what regulatory rules apply." + - question: "Why use a third-party messaging provider instead of building one?" + answer: "Carrier integrations, deliverability, compliance (10DLC, A2P registration, country-specific rules), and reliable global delivery are hard to build and maintain. Twilio and similar providers absorb that work and give you a single API. Owning the SMS pipe end-to-end only makes sense at very high volume where pricing matters more than time-to-build." + - question: "Can I use the same Appwrite setup for SMS and push notifications?" + answer: "Yes. [Appwrite Messaging](/docs/products/messaging) supports multiple channels (SMS, email, push) behind a unified API, so you can send the same notification through different channels based on user preference or fallback rules without writing a separate integration for each." + - question: "How do I track whether a message was actually delivered?" + answer: "Twilio exposes delivery status via webhooks and message-status callbacks (queued, sent, delivered, failed). You can store the latest status on the message record in your database and surface it to admins or users, which is critical for debugging carrier or number-quality issues." --- Every day, we receive multiple messages from different web and mobile applications, whether OTPs for transactions or promotional messages. If you're a developer, you might have even developed one yourself. If you haven't already guessed, this blog post focuses on messaging - explaining what it is, the tools you can utilize to build a messaging system, and more. diff --git a/src/routes/blog/post/simplify-your-data-management-with-relationships/+page.markdoc b/src/routes/blog/post/simplify-your-data-management-with-relationships/+page.markdoc index 511b3e7b5f7..61aa9d53f3b 100644 --- a/src/routes/blog/post/simplify-your-data-management-with-relationships/+page.markdoc +++ b/src/routes/blog/post/simplify-your-data-management-with-relationships/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/simplify-your-data-management-with-relationships/cover.avif timeToRead: 6 author: jake-barnby category: accessibility +faqs: + - question: "What relationship types does Appwrite Databases support?" + answer: "Four: one-to-one, one-to-many, many-to-one, and many-to-many. You pick the type when creating the relationship attribute, and Appwrite enforces the cardinality so you do not have to model it manually with join tables or ID arrays." + - question: "When should I use a one-way vs two-way relationship?" + answer: "Use a one-way relationship when only one side needs to know about the other (for example, a movie that lists its reviews but reviews do not need to expose the movie). Use two-way when both sides need to traverse the link in queries. Two-way costs slightly more storage and write overhead, so do not enable it by default." + - question: "Does Appwrite support relationships across [Databases](/docs/products/databases) products?" + answer: "Relationships are defined within a single Appwrite database between tables in that database. You cannot create a relationship attribute that points to a row in a different database, so model related entities in the same database." + - question: "What are the deletion behaviors for related rows?" + answer: "Appwrite lets you choose how related rows behave when a parent is deleted: restrict (block the delete), cascade (delete the children), or set null (clear the relationship). Pick based on your data model. Cascade is convenient but irreversible, restrict is safer when child data has independent value." + - question: "Should I model everything with relationships or denormalize?" + answer: "Use relationships when the related data has its own lifecycle, is shared across parents, or is too large to embed. Denormalize (duplicate small, rarely-changing fields onto the parent) when you mainly need a label or a couple of attributes in a list view and want to avoid the extra lookup. Both patterns coexist comfortably in Appwrite." + - question: "Do relationships replace the need to write joins?" + answer: "For most reads, yes. Appwrite resolves related rows in the response when you query the parent, so you do not need to perform a separate fetch and merge in your code. For complex aggregations or filters across multiple relationships, you may still want to break the work into multiple queries." --- Managing collections of data is an essential task for any application, but it can quickly become complex when you need to keep track of the relationships between different collections. For instance, if you have two collections of data, such as movies and reviews, you may need to retrieve all the reviews associated with a particular movie. However, writing complex code to retrieve this data and merge it together manually can be time-consuming and prone to errors. diff --git a/src/routes/blog/post/social-media-auth/+page.markdoc b/src/routes/blog/post/social-media-auth/+page.markdoc index fa2d1f96565..6ad7213f953 100644 --- a/src/routes/blog/post/social-media-auth/+page.markdoc +++ b/src/routes/blog/post/social-media-auth/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/social-media-auth/cover.avif timeToRead: 5 author: aditya-oberai category: security +faqs: + - question: "Is social media authentication safe to use?" + answer: "It is generally safer than weak user-chosen passwords because providers like Google and Apple invest heavily in account security. The trade-off is centralization: if a user's social account is compromised, every linked service is at risk, and an outage at the provider can lock users out of your app. Treat it as one option among several, not the only auth path." + - question: "What user data does social login actually expose to my app?" + answer: "It depends on the scopes you request. Most flows return basic profile information (name, email, profile picture, provider user ID). Anything beyond that (friends list, calendars, contacts) requires extra scopes and typically explicit user consent. Request the minimum you need and avoid sensitive scopes unless they are core to the product." + - question: "Should I offer social login alongside email and password?" + answer: "Yes, in most cases. Social login drops sign-up friction and boosts conversion, but some users do not want to link their social account to your product, and you also need a non-social path for account recovery if a provider has an outage. Offer both, and let users link or unlink providers from their account settings." + - question: "Which providers does [Appwrite Auth](/docs/products/auth) support?" + answer: "Appwrite supports a long list of OAuth2 providers including Google, GitHub, Apple, Microsoft, Facebook, GitLab, Discord, and more. You configure each provider in the Console with its client ID and secret, and Appwrite handles the redirect, token exchange, and session creation." + - question: "What happens if a user signs in with a social provider that then changes its policy?" + answer: "If the provider stops returning a verified email, requires new consent, or shuts down, users could lose access to their accounts on your app. Mitigate this by storing the user's email (when available) and offering an alternate path like magic links or password recovery so users are not stranded if a single provider breaks." + - question: "What alternatives should I consider to social login?" + answer: "Magic links, email or SMS OTPs, passkeys (WebAuthn), and traditional email and password each have different trade-offs around friction, security, and recoverability. For privacy-sensitive products, magic links or passkeys often work better than social login because they do not require trusting a third-party provider with the user's identity." --- Social media authentication has become an integral part of our digital lives, offering a streamlined way to access various online services. We may not even realize it at times; however, logging in with Facebook, X, Linkedin, and other such providers are common authentication methods we come across in most major applications today. There are challenges to using social media providers as authentication methods, though. A [massive Facebook incident in 2021](https://abcnews.go.com/International/facebook-outage-highlights-risks-overdependence-single-tech-giant/story?id=80413709) rendered over a billion people helpless as they lost access to a major part of the internet. Such dependence on major social media providers for essential internet activity can have major drawbacks, too. Therefore, in this blog, let us discuss the pros and cons of social media authentication and the delicate balance of convenience and privacy surrounding it. diff --git a/src/routes/blog/post/solving-the-headaches-of-screenshot-automation-and-why-an-api-first-approach-works-better/+page.markdoc b/src/routes/blog/post/solving-the-headaches-of-screenshot-automation-and-why-an-api-first-approach-works-better/+page.markdoc index 8e511d228f2..024435d6451 100644 --- a/src/routes/blog/post/solving-the-headaches-of-screenshot-automation-and-why-an-api-first-approach-works-better/+page.markdoc +++ b/src/routes/blog/post/solving-the-headaches-of-screenshot-automation-and-why-an-api-first-approach-works-better/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aishwari category: tutorial featured: false +faqs: + - question: "Why is screenshot automation harder than it looks?" + answer: "Modern pages render differently based on device size, locale, auth state, async data, and feature flags. The same URL can produce wildly different output depending on when and where it is rendered, and headless browsers are timing-sensitive. The hard part is not capturing an image, it is getting a reproducible image." + - question: "When does a managed screenshot API beat running my own headless browsers?" + answer: "When you generate screenshots frequently, need consistent output across environments, support multiple regions or locales, or run captures in CI or scheduled jobs. Owning the browser fleet means absorbing breakage from browser updates, scaling concurrency, and debugging flaky CI failures. A managed API offloads all of that." + - question: "What does the Appwrite Screenshots API do?" + answer: "It renders webpages to images on Appwrite's infrastructure and returns the result. You call the endpoint with a URL and rendering options (viewport, format, quality), and Appwrite handles the browser, the queueing, and the scaling. You can store the resulting image in [Appwrite Storage](/docs/products/storage) for reuse." + - question: "Can I capture full-page screenshots, not just the visible viewport?" + answer: "Yes. Most screenshot APIs (Appwrite included) let you choose between a viewport-sized capture and a full-page capture that scrolls the page to render everything. Full-page is useful for visual regression testing and archival, viewport is enough for link previews." + - question: "How do I keep screenshots from being regenerated on every request?" + answer: "Cache them. Store generated screenshots in object storage, keep a mapping from URL (or URL plus options) to file ID in a database, and serve the stored file on cache hits. Add a TTL so screenshots refresh when the underlying page changes meaningfully, but do not pay the rendering cost on every read." + - question: "What about pages behind auth or with dynamic content?" + answer: "For auth-protected pages, you typically need to inject cookies or run the capture from a service that can sign in. For dynamic content, configure the capture to wait for a specific selector or for `DOMContentLoaded` plus a small idle window before snapping the image, so async content has rendered." --- Automating screenshots sounds simple. Render a webpage. Capture an image. Done. diff --git a/src/routes/blog/post/sound-null-safety-for-your-dart-functions/+page.markdoc b/src/routes/blog/post/sound-null-safety-for-your-dart-functions/+page.markdoc index d9e3c9f46e8..7b08d5b1a03 100644 --- a/src/routes/blog/post/sound-null-safety-for-your-dart-functions/+page.markdoc +++ b/src/routes/blog/post/sound-null-safety-for-your-dart-functions/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 12 author: vincent-ge category: product featured: false +faqs: + - question: "What is sound null safety in Dart?" + answer: "Sound null safety means the compiler tracks whether a value can be null, and forces you to handle the null case at compile time. A type like `String` cannot hold null, while `String?` explicitly can. This catches an entire class of runtime null errors before your code ships." + - question: "Why does null safety matter for Appwrite Functions?" + answer: "Functions sit at the boundary between your code and external input (user-submitted JSON, third-party API responses, webhook payloads). You do not control the shape of that data, so null safety surfaces missing or malformed fields as compile-time errors instead of mysterious runtime crashes inside [Appwrite Functions](/docs/products/functions)." + - question: "How do I model a JSON payload that may have missing fields?" + answer: "Mark every field that is not guaranteed to be present as nullable in your Dart model (`String?` instead of `String`), and write `fromJson` factories that explicitly check for null before reading nested objects. The compiler will then refuse to let you ignore the missing case downstream." + - question: "Should I use `!` to bypass null checks?" + answer: "Only when you are certain the value cannot be null at that point, for example right after an explicit null check or for a value the runtime guarantees. Reaching for `!` to silence the analyzer defeats the purpose of null safety and replaces a compile-time error with a runtime one." + - question: "Which Dart runtimes does Appwrite support?" + answer: "[Appwrite Functions](/docs/products/functions) supports Dart 3.x runtimes (and newer). Sound null safety is enabled by default in Dart 3, so any function you write or migrate today benefits from it without extra configuration." + - question: "How do I handle null gracefully in user-facing errors?" + answer: "Validate the incoming payload at the top of your function, and return a structured error (with status code and message) if required fields are missing. The caller gets actionable feedback instead of a generic 500, and your business logic only runs with data shapes it knows how to handle." --- Dart 3 runtimes are now available on Appwrite Cloud. Among the many cool features introduced in Dart 3, sound null safety stands out as an important change for Appwrite Functions. diff --git a/src/routes/blog/post/sql-vs-nosql/+page.markdoc b/src/routes/blog/post/sql-vs-nosql/+page.markdoc index c2e12e55e66..677140585a5 100644 --- a/src/routes/blog/post/sql-vs-nosql/+page.markdoc +++ b/src/routes/blog/post/sql-vs-nosql/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 9 author: ebenezer-don category: tutorial featured: false +faqs: + - question: "When should I pick SQL over NoSQL?" + answer: "Pick SQL when your data has a stable schema, requires strong consistency, or relies on transactions across multiple tables. Financial software, ERPs, CRMs, and any system where every transaction must be valid before the next one starts are textbook SQL workloads." + - question: "When does NoSQL make more sense?" + answer: "When your data shapes change frequently, when you need to scale horizontally on commodity hardware, or when availability matters more than strict, real-time consistency. Social feeds, IoT pipelines, content stores, and analytics-style workloads with high write volume tend to fit NoSQL well." + - question: "Does Appwrite use SQL or NoSQL under the hood?" + answer: "Both are supported, depending on how you self-host. Appwrite originally shipped with MariaDB (SQL), and since 1.9 you can also choose MongoDB (NoSQL) as the underlying database. Your application code talks to [Appwrite Databases](/docs/products/databases) the same way regardless of the storage engine." + - question: "What are ACID and BASE in plain terms?" + answer: "ACID (Atomicity, Consistency, Isolation, Durability) is the strict transactional contract most SQL databases offer: every transaction either fully completes or fully rolls back. BASE (Basically Available, Soft state, Eventually consistent) is the looser contract many distributed NoSQL systems offer: data eventually agrees across nodes, but readers may see slightly stale values in the meantime." + - question: "Can I use both SQL and NoSQL in the same app?" + answer: "Yes, and many teams do. A common pattern is SQL for transactional core data (accounts, payments, orders) and NoSQL for high-volume, flexible-shape data (events, logs, embeddings, content). The cost is operational: two systems to back up, monitor, and reason about." + - question: "How does scaling differ between SQL and NoSQL?" + answer: "SQL typically scales vertically (bigger machine) with read replicas for read scaling, and sharding is doable but more involved. NoSQL systems are built around horizontal scaling out of the box, with partitioning and replication usually baked in. For predictable, modest growth either works. For unpredictable spikes and very large datasets, NoSQL is often cheaper to scale." --- diff --git a/src/routes/blog/post/startup-accelerator-guide/+page.markdoc b/src/routes/blog/post/startup-accelerator-guide/+page.markdoc index 29f68aa8c47..85da7f6e052 100644 --- a/src/routes/blog/post/startup-accelerator-guide/+page.markdoc +++ b/src/routes/blog/post/startup-accelerator-guide/+page.markdoc @@ -9,6 +9,19 @@ author: veeresh-mulge callToAction: true unlisted: true category: startup +faqs: + - question: "What is a startup accelerator?" + answer: "An accelerator is a time-bound, cohort-based program (typically 3 to 6 months) that gives early-stage startups funding, mentorship, training, and investor access in exchange for equity, usually 5 to 10 percent. The goal is to compress years of learning into a few focused months and end with a Demo Day pitch to investors." + - question: "How is an accelerator different from an incubator?" + answer: "Accelerators expect an MVP, early traction, and a full-time founding team, run on fixed timelines, take equity, and push toward fundraising. Incubators support earlier-stage founders (sometimes pre-product), run open-ended programs, may or may not take equity, and focus on validation rather than scaling." + - question: "How much equity do accelerators typically take?" + answer: "Most well-known accelerators take between 5 and 10 percent of the company in exchange for a seed check and program access. Y Combinator's standard deal is $500K for 7 percent. Equity terms vary, so read the deal carefully against the actual value of the network and capital being offered." + - question: "Do I need to be in the same city as the accelerator?" + answer: "Increasingly no. Many programs (including YC) offer remote or hybrid cohorts, and a number of accelerators (Antler, Techstars regional programs) run in specific cities globally. In-person time still helps with networking, but it is rarely a hard requirement anymore." + - question: "When is the right time to apply to an accelerator?" + answer: "When you have a working product, some early signal (users, revenue, retention, or strong founder-market fit), and a full-time team ready to commit. Applying too early can lead to wasted equity if you do not get enough value from the program. Applying too late and you are giving away dilution for capital you could raise on your own terms." + - question: "Can I use Appwrite's Startups program alongside an accelerator?" + answer: "Yes. The [Appwrite Startups program](/startups) provides cloud credits, priority support, and discounts for early-stage companies, which is complementary to accelerator funding. Accelerators give you capital and mentorship, Appwrite gives you the backend infrastructure to build and scale your product faster." --- Whether you're a solo founder, part of a small team, or just starting to turn an idea into a business, you've probably heard the word "accelerator" tossed around. Accelerators have become a key part of the modern startup ecosystem. They exist to give startups a short, intense burst of support, usually over a few months, aimed at accelerating their journey from early traction to steady growth. diff --git a/src/routes/blog/post/startup-incubator-guide/+page.markdoc b/src/routes/blog/post/startup-incubator-guide/+page.markdoc index b18954cd8a6..4699be27c7b 100644 --- a/src/routes/blog/post/startup-incubator-guide/+page.markdoc +++ b/src/routes/blog/post/startup-incubator-guide/+page.markdoc @@ -9,6 +9,19 @@ author: veeresh-mulge callToAction: true unlisted: true category: startup +faqs: + - question: "What is a startup incubator?" + answer: "An incubator is an organization that supports very early-stage startups (often pre-product or pre-revenue) by providing mentorship, office space or resources, networking, and structured programming. The goal is to help founders move from a concept to a validated, structured business, not to push for immediate scale." + - question: "How is an incubator different from an accelerator?" + answer: "Incubators are open-ended, accept earlier-stage founders, and focus on validation and foundational work. Accelerators are time-bound cohorts that expect an MVP and existing traction, take equity, and push toward fundraising at a Demo Day. Pick incubator if you are still figuring out what to build, accelerator if you are ready to scale what you have." + - question: "Do incubators take equity?" + answer: "It varies. Some incubators (especially university-affiliated or government-backed programs) take no equity and may even offer stipends or office space free. Others take small equity stakes in exchange for resources. Read the terms carefully and compare against what you actually need at your stage." + - question: "When should I join an incubator?" + answer: "When you have a concept or early prototype but no clear product-market fit yet, and you would benefit from structured mentorship, network access, or shared infrastructure. If you already have paying customers and a tight team, an accelerator is usually a better fit." + - question: "What should I look for in an incubator?" + answer: "Strong mentor quality and accessibility, a relevant alumni network, alignment with your industry or geography, and clear deliverables. Be wary of vague promises (\"access to investors,\" \"world-class mentorship\") without concrete proof. Talk to alumni before committing time or equity." + - question: "How does Appwrite support early-stage startups?" + answer: "The [Appwrite Startups program](/startups) offers cloud credits, priority support, and discounts so early-stage teams can build a production backend (auth, databases, storage, functions) without paying full price. It pairs well with incubator support, the incubator gives you mentorship and structure, Appwrite gives you the infrastructure to ship." --- Building a tech startup is hard, especially for first-time founders. You're expected to move fast, ship a great product, find early users, and raise money. All at once, with limited resources and almost no room for error. diff --git a/src/routes/blog/post/startup-mvp-guide/+page.markdoc b/src/routes/blog/post/startup-mvp-guide/+page.markdoc index 9295f8abcdf..7de052c8b21 100644 --- a/src/routes/blog/post/startup-mvp-guide/+page.markdoc +++ b/src/routes/blog/post/startup-mvp-guide/+page.markdoc @@ -10,6 +10,19 @@ callToAction: true unlisted: true category: startup call_to_action: true +faqs: + - question: "What is an MVP?" + answer: "A Minimum Viable Product is the simplest version of your product that solves a real problem for a specific group of users. It is not a prototype and not a feature-complete v1, it is the smallest thing you can ship to get real feedback and validate whether anyone actually wants what you are building." + - question: "How long should it take to build an MVP?" + answer: "Aim for weeks, not months. A reasonable target is 2 to 6 weeks for a working version that solves the core problem end-to-end. If your MVP is taking longer, that is a strong signal you are building too much. Cut features until you can ship inside that window." + - question: "What should I leave out of an MVP?" + answer: "Anything that is not directly required to deliver the core value. Skip role-based admin panels, advanced analytics, integrations, custom theming, and edge-case handling. Hard-code values, use a backend-as-a-service, and focus exclusively on the one or two flows that prove or disprove the hypothesis." + - question: "How can Appwrite help me ship an MVP faster?" + answer: "Appwrite provides [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) out of the box, so you do not have to build a backend from scratch. Many founders go from idea to first user in days because they only have to write the frontend and the business logic that makes the product different." + - question: "Who should use my MVP?" + answer: "Early adopters, people who have the problem you are solving badly enough that they will tolerate rough edges. They are easier to find through targeted communities, niche forums, and direct outreach than through broad marketing, and their feedback is dramatically more useful than feedback from casual users." + - question: "What is the biggest mistake founders make with MVPs?" + answer: "Overbuilding. Founders confuse polish with progress and add features the market has not asked for, instead of putting the rough version in front of users to see what actually matters. Ship ugly, learn fast, then invest in polish where users are clearly engaged." --- Nearly [70% of startups fail](https://www.embroker.com/blog/startup-statistics/) within 2-5 years of starting operations, and while many factors contribute to this, one key factor is developing a product that doesn't align with customer needs. diff --git a/src/routes/blog/post/startups-ideas-for-developers-2025/+page.markdoc b/src/routes/blog/post/startups-ideas-for-developers-2025/+page.markdoc index 220010cd61f..780970bb017 100644 --- a/src/routes/blog/post/startups-ideas-for-developers-2025/+page.markdoc +++ b/src/routes/blog/post/startups-ideas-for-developers-2025/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/startups-ideas-2024/cover.avif timeToRead: 5 author: snezhanna category: product +faqs: + - question: "How do I come up with a profitable startup idea as a developer?" + answer: "Start with problems you (or people in your network) actually have. Watch the tools you use daily, lurk in subreddits and Discord servers for industries you understand, and write down recurring complaints. Profitable ideas usually look boring at first, real workflows that people already pay to solve, not novelty toys." + - question: "Should I validate an idea before writing code?" + answer: "Yes. Post the concept in relevant communities (Reddit, Indie Hackers, niche Slack groups), talk to 10 to 20 potential users, and see if anyone is willing to commit to trying it. If no one cares before the code exists, it is unlikely to matter after launch. Validation can be a landing page, a Figma mockup, or a five-minute video." + - question: "How fast should a solo developer ship an MVP?" + answer: "Aim for 2 to 6 weeks. The point is to put something usable in front of real users and learn, not to perfect the product. Use a backend-as-a-service like [Appwrite](/) so you can focus on the product surface rather than building auth, storage, and a database from scratch." + - question: "What kind of ideas work well for solo developers?" + answer: "Niche SaaS tools, developer utilities, internal-tool replacements, content-driven products (newsletters, learning platforms), and B2B micro-tools. Avoid markets that require huge upfront capital, regulatory complexity, or large sales teams. Solo developers win on focus and speed, not scale." + - question: "How do I find early users?" + answer: "Go where the people with the problem already hang out. Specific subreddits, Discord servers, Twitter/X niches, industry forums, and small newsletters convert dramatically better than broad ads. Engage with the community first, share progress publicly, and reach out to specific people who have complained about the exact problem you are solving." + - question: "How can Appwrite help me build a startup faster?" + answer: "Appwrite ships [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) as a single platform you can self-host or use in the cloud. That removes most of the backend you would otherwise build, so a solo developer can ship a working product in days instead of weeks." --- Last updated: June 15, 2025 diff --git a/src/routes/blog/post/state-of-audio-processing/+page.markdoc b/src/routes/blog/post/state-of-audio-processing/+page.markdoc index d107cc2255c..f2bce4948e4 100644 --- a/src/routes/blog/post/state-of-audio-processing/+page.markdoc +++ b/src/routes/blog/post/state-of-audio-processing/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 15 author: luke-silver category: product featured: false +faqs: + - question: "What is audio processing in AI?" + answer: "It is the set of techniques for interpreting and manipulating audio signals with algorithms. That covers speech recognition, text-to-speech, music generation, sound separation, noise reduction, and audio classification. Modern audio processing relies heavily on deep neural networks trained on large audio datasets." + - question: "What are Fourier transforms used for in audio processing?" + answer: "A Fourier transform breaks a time-domain audio signal into its constituent frequencies. That is how you isolate instruments in a mix, filter out specific noise bands, build spectrograms for visualization, and feed structured input to models that work better in the frequency domain than on raw waveforms." + - question: "Why did deep learning change audio processing so dramatically?" + answer: "Earlier methods like hidden Markov models required substantial manual feature engineering and struggled with complex speech patterns. Deep models, especially CNNs and RNNs (and later transformers), learn features directly from raw or near-raw audio, which is why speech recognition and audio generation jumped in quality starting in the mid-2010s." + - question: "What is WaveNet and why does it matter?" + answer: "WaveNet, introduced by DeepMind in 2016, was one of the first models to generate raw audio waveforms with quality close to human speech. It demonstrated that neural networks could produce lifelike speech and music end-to-end, and it set the foundation for most modern text-to-speech and audio synthesis systems." + - question: "Can I run audio processing pipelines on Appwrite?" + answer: "You can host audio inference or processing logic in [Appwrite Functions](/docs/products/functions) and store input and output audio files in [Appwrite Storage](/docs/products/storage). Heavy model inference usually lives on a GPU service you call from a function, but the orchestration (uploads, queueing, persistence, auth) fits cleanly inside Appwrite." + - question: "What audio formats should I use for ML pipelines?" + answer: "WAV for training and processing because it is lossless and easy to parse. MP3 or AAC for storage and delivery to end users because they are dramatically smaller. Most ML libraries can decode common formats directly, but consistency in sample rate (16kHz for speech, 44.1kHz or 48kHz for music) matters more than the container format." --- Audio processing is a rapidly advancing field within artificial intelligence where algorithms are designed to interpret and manipulate audio signals. From the early days of basic sound synthesis to today's voice assistants and automatic music generation, AI in audio processing has undergone significant development. Let's explore the history of this field and the key concepts and innovations that have shaped it. diff --git a/src/routes/blog/post/state-of-computer-vision/+page.markdoc b/src/routes/blog/post/state-of-computer-vision/+page.markdoc index 9309be73eba..37a53d126f2 100644 --- a/src/routes/blog/post/state-of-computer-vision/+page.markdoc +++ b/src/routes/blog/post/state-of-computer-vision/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 15 author: bradley-schofield category: product featured: false +faqs: + - question: "What is computer vision?" + answer: "Computer vision is a field of artificial intelligence focused on giving machines the ability to understand and process visual data from images, videos, point clouds, X-rays, and other sources. The goal is to extract meaningful information from visual inputs so it can be used for downstream tasks like classification, detection, or segmentation." + - question: "What are convolutions and kernels in computer vision?" + answer: "Convolutions are the fundamental operation behind most computer vision algorithms. A kernel is a small grid of numbers that slides across an image, multiplying values and summing them to produce a new feature map. Different kernels detect different features, like edges, blurs, or sharpening effects." + - question: "What is a CNN and why does it matter for computer vision?" + answer: "A Convolutional Neural Network (CNN) is a type of neural network that uses convolutions to extract features from images automatically. CNNs power most modern image classification and object detection systems, including breakthroughs like LeNet-5 and AlexNet." + - question: "What are the main applications of computer vision today?" + answer: "Computer vision is used in medical imaging to detect tumors and diseases, in agriculture to identify weeds, in manufacturing for quality control, and in consumer apps for filters, face unlock, and AR experiences. The industry is projected to be worth over $50 billion by 2030." + - question: "How can I build computer vision features into an Appwrite app?" + answer: "You can run computer vision models inside [Appwrite Functions](/docs/products/functions) and store inputs and outputs in [Appwrite Storage](/docs/products/storage) and [Appwrite Databases](/docs/products/databases). This lets you trigger image classification or object detection workflows on uploads without managing your own backend." + - question: "What is the difference between image classification and object detection?" + answer: "Image classification assigns a single label to an entire image, like tagging a photo as a cat or dog. Object detection goes further by locating and labelling multiple objects within the image, drawing bounding boxes around each one. Detection is harder because it needs both classification and localization." --- # Introduction diff --git a/src/routes/blog/post/state-of-natural-language-processing/+page.markdoc b/src/routes/blog/post/state-of-natural-language-processing/+page.markdoc index 2cd87c7781c..3ae9635a7ef 100644 --- a/src/routes/blog/post/state-of-natural-language-processing/+page.markdoc +++ b/src/routes/blog/post/state-of-natural-language-processing/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 15 author: luke-silver category: product featured: false +faqs: + - question: "What is natural language processing?" + answer: "Natural language processing (NLP) is a field combining computer science, AI, and linguistics to help computers understand, interpret, and generate human language. It powers chatbots, translation, search, sentiment analysis, and modern large language models like GPT and BERT." + - question: "What is the difference between traditional NLP and large language models?" + answer: "Traditional NLP uses techniques like Naive Bayes classifiers, Bag of Words, and TF-IDF, which rely on word counts and statistical patterns. Large language models use deep neural networks with attention mechanisms to capture context and meaning across long passages, which lets them generate fluent text and handle ambiguous prompts." + - question: "What are word embeddings?" + answer: "Word embeddings represent words as vectors in a high-dimensional space where similar words sit closer together. Techniques like Word2Vec and GloVe capture semantic relationships, so a model can tell that 'cat' and 'dog' are related while 'car' is not. Embeddings became a foundation for most modern NLP." + - question: "Why did transformers change NLP?" + answer: "Transformers, introduced in 2017, use attention mechanisms to weigh the importance of different words in a sequence in parallel. This lets them handle long passages efficiently and learn richer context than older recurrent networks. They power BERT, GPT, and most modern language models." + - question: "How can I use NLP in an Appwrite project?" + answer: "You can run NLP models or call third-party APIs from [Appwrite Functions](/docs/products/functions) and store text and embeddings in [Appwrite Databases](/docs/products/databases). This works well for chatbots, content moderation, sentiment analysis, and semantic search features in your app." + - question: "What is a Naive Bayes classifier used for?" + answer: "A Naive Bayes classifier is a simple probabilistic model often used for spam detection and basic text classification. It counts how often words appear in known categories and uses Bayes' theorem to predict the most likely category for new text. It is fast, easy to train, and a strong baseline." --- Natural Language Processing (NLP) is a field that combines computer science, artificial intelligence, and linguistics to enable computers to understand, interpret, and generate human language. From chatbots to language translation, NLP powers many of the intelligent features we use every day. In this post, we'll explore the history of NLP and dive into the key concepts behind large language models (LLMs). diff --git a/src/routes/blog/post/storage-previews-vs-ssr-image-optimization/+page.markdoc b/src/routes/blog/post/storage-previews-vs-ssr-image-optimization/+page.markdoc index 0d3425d1d24..605c918d89c 100644 --- a/src/routes/blog/post/storage-previews-vs-ssr-image-optimization/+page.markdoc +++ b/src/routes/blog/post/storage-previews-vs-ssr-image-optimization/+page.markdoc @@ -3,11 +3,25 @@ layout: post title: "Storage previews vs SSR image optimization: when to use which" description: More frameworks are adding server-side image manipulation. Learn when to use service-based image transformations like Appwrite Storage previews versus SSR functions for image optimization. date: 2025-11-06 +lastUpdated: 2026-05-22 cover: /images/blog/storage-previews-vs-ssr-image-optimization/cover.avif timeToRead: 8 author: ebenezer-don category: product featured: false +faqs: + - question: "What is the difference between Storage previews and SSR image optimization?" + answer: "Storage previews handle image transformations through a dedicated service API, separate from your app server, with built-in CDN caching. SSR image optimization processes images on your application server using libraries like Sharp or IPX. Service-based approaches reduce server load, while SSR gives you more direct control over the pipeline." + - question: "When should I use Appwrite Storage previews instead of framework SSR utilities?" + answer: "Use [Appwrite Storage](/docs/products/storage) previews when you want centralized image storage that works across web, mobile, and other clients, or when you do not want to manage Sharp binaries and caching. SSR utilities make sense if your images are tightly tied to a single framework deployment and you need custom transformation logic." + - question: "Do Appwrite Storage previews support modern formats like WebP and AVIF?" + answer: "Yes. You can request transformed images in formats like WebP by passing an output parameter to the file preview endpoint. This lets you serve smaller, modern formats without changing the underlying file." + - question: "Are transformed images cached automatically?" + answer: "Appwrite Storage previews cache transformed images on first request and serve subsequent requests from cache. This avoids re-processing the same image repeatedly and improves response times. SSR-based optimization usually requires you to configure caching yourself." + - question: "Does using Storage previews mean I cannot also use SSR image utilities?" + answer: "No. The two approaches can coexist. You might use Appwrite Storage previews for user uploads and dynamic content, then use SSR image utilities for static marketing assets that ship with your codebase." + - question: "How does Appwrite Storage compare to Cloudinary or other media platforms?" + answer: "Appwrite Storage is part of a broader backend platform, so you get image handling alongside auth, databases, functions, and messaging. Dedicated media platforms like Cloudinary often have richer media-specific features but require integrating an extra service. We have a deeper comparison in the [Appwrite vs Cloudinary post](/blog/post/appwrite-vs-cloudinary)." --- Image optimization has become a standard feature in modern web frameworks. From Next.js to Nuxt, frameworks now include built-in tools for manipulating images at the server level. The [recent release of Nuxt Image v2](https://nuxt.com/blog/nuxt-image-v2#server-side-utilities) highlights this trend with new server-side utilities that let you transform images directly in your server endpoints. @@ -112,7 +126,7 @@ Let's look at the key differences between these approaches: ## Cost considerations -**Service-based** has predictable costs. Appwrite's [pricing](/pricing) includes 100 origin images per month on Pro and Scale plans, with additional images at $5 per 1,000. You pay for unique images, not transformations. So one image with 20 different variations only counts as one origin image. +**Service-based** has predictable costs. Appwrite's [pricing](/pricing) includes 100 origin images per month on the Pro plan (Enterprise has custom limits), with additional images at $5 per 1,000. You pay for unique images, not transformations. So one image with 20 different variations only counts as one origin image. **SSR functions** cost depends on your infrastructure. You pay for compute time, bandwidth, and storage. Low traffic might mean minimal costs, but high traffic requires more server capacity. The actual cost varies based on your cloud provider and configuration. diff --git a/src/routes/blog/post/sveltekit-starter-sites/+page.markdoc b/src/routes/blog/post/sveltekit-starter-sites/+page.markdoc index 297b26f7130..676aad1b379 100644 --- a/src/routes/blog/post/sveltekit-starter-sites/+page.markdoc +++ b/src/routes/blog/post/sveltekit-starter-sites/+page.markdoc @@ -9,6 +9,19 @@ author: aditya-oberai category: tutorial featured: false callToAction: true +faqs: + - question: "What is Appwrite Sites?" + answer: "[Appwrite Sites](/docs/products/sites) is a platform for deploying, hosting, and scaling web applications directly inside Appwrite. It supports popular frameworks like SvelteKit, Next.js, Nuxt, React, Vue, Angular, and Flutter, with both SSR and static rendering options." + - question: "How do I deploy a SvelteKit app to Appwrite Sites?" + answer: "Go to the Sites page in your Appwrite project, click Create site, and choose the Svelte starter template or connect your own GitHub repo. Pick a production branch, review environment variables, and click Deploy. You can also use the Appwrite CLI with `appwrite init sites` and `appwrite push sites`." + - question: "What is included in the SvelteKit starter template?" + answer: "The starter ships with a clean single-page UI, the Appwrite SDK pre-installed, and deployment settings tuned for SvelteKit's SSR rendering strategy on Appwrite Sites. It is a working baseline you can extend with your own routes and data." + - question: "Can I deploy a SvelteKit app to Appwrite Sites using the CLI?" + answer: "Yes. Run `appwrite init sites` to scaffold a project, pick SvelteKit as the framework, and choose your specification. Once you have made changes, run `appwrite push sites` to deploy. The CLI workflow is documented in the [deploy manually](/docs/products/sites/deploy-manually) guide." + - question: "Do I need to self-host Appwrite to use Sites?" + answer: "No. You can use Appwrite Sites on Appwrite Cloud after creating a free account, or you can self-host Appwrite 1.7 or later. Both paths support the same starter templates and deployment flows." + - question: "What is SvelteKit?" + answer: "SvelteKit is a web framework built on top of Svelte that supports server-rendered and client-enhanced apps. It includes routing, data loading, and adapters for different deployment targets, making it well suited for full stack apps deployed to platforms like Appwrite Sites." --- Building web applications requires both front-end expertise and back-end infrastructure. [Appwrite Sites](/products/sites) simplifies this process by providing a platform for deploying, hosting, and scaling web applications. diff --git a/src/routes/blog/post/swift-101-build-a-library-with-swift-package-manager/+page.markdoc b/src/routes/blog/post/swift-101-build-a-library-with-swift-package-manager/+page.markdoc index 0ce24d24a69..17f1cfffdc0 100644 --- a/src/routes/blog/post/swift-101-build-a-library-with-swift-package-manager/+page.markdoc +++ b/src/routes/blog/post/swift-101-build-a-library-with-swift-package-manager/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 6 author: jake-barnby category: engineering, tutorial featured: false +faqs: + - question: "What is Swift Package Manager?" + answer: "Swift Package Manager (SwiftPM) is Swift's official tool for managing dependencies, building libraries, and producing executables. Starting with Swift 5 and Xcode 11, it works across the entire Apple ecosystem, not just server-side Swift." + - question: "What is the difference between a Swift module and a Swift package?" + answer: "A module is a single namespace of Swift code with its own visibility rules. A package is a collection of source files and a `Package.swift` manifest that can contain one or more targets (which become modules) and produce libraries or executables." + - question: "How do I create a Swift library with SwiftPM?" + answer: "Run `swift package init --type=library` inside an empty directory. SwiftPM scaffolds a `Sources` directory, a `Tests` directory, and a `Package.swift` manifest. You can then run `swift build` to compile the library and `swift test` to run its tests." + - question: "What does a Package.swift manifest contain?" + answer: "The `Package.swift` manifest declares your package's name, the products it produces (libraries or executables), the dependencies it pulls in, and the targets it builds. Each target maps to a module of source files and can depend on other targets or external products." + - question: "Can I distribute a Swift package to other developers?" + answer: "Yes. Push your package to a public Git repository and other developers can add it as a dependency by pointing to the repo URL and a version tag. SwiftPM will resolve, fetch, and build it automatically when they run `swift build` or open the project in Xcode." + - question: "Does Appwrite have a Swift SDK?" + answer: "Yes. Appwrite ships an official Swift SDK distributed through Swift Package Manager, so you can add it to iOS, macOS, or server Swift projects. You can use it with [Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and other products." --- The Swift Package Manager, or SwiftPM, has been part of Swift since version 3.0. Initially, it was just for server-side or command-line Swift projects. However, starting with Swift 5 and Xcode 11, SwiftPM now works across the entire Apple ecosystem for building apps. This is great because packages let you organize your code into reusable, logical groups that you can easily share between projects or even with the world. diff --git a/src/routes/blog/post/tanstack-start-support-in-appwrite-sites/+page.markdoc b/src/routes/blog/post/tanstack-start-support-in-appwrite-sites/+page.markdoc index 3b36d95f108..b98081de4ed 100644 --- a/src/routes/blog/post/tanstack-start-support-in-appwrite-sites/+page.markdoc +++ b/src/routes/blog/post/tanstack-start-support-in-appwrite-sites/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/tanstack-start-support-in-appwrite-sites/cover.avif timeToRead: 5 author: matej-baco category: announcement +faqs: + - question: "What is TanStack Start?" + answer: "TanStack Start is a full stack React framework from the team behind TanStack Query and TanStack Router. It focuses on type safety, explicit routing, and server-side rendering, powered by Vite for fast builds. It also supports SolidJS as an alternative renderer." + - question: "Does Appwrite Sites support TanStack Start with full SSR?" + answer: "Yes. [Appwrite Sites](/docs/products/sites) now supports TanStack Start with full server-side rendering. You can build and deploy TanStack Start apps to Appwrite Cloud with zero configuration, instead of forcing them into a static deployment." + - question: "How do I deploy a TanStack Start app to Appwrite Sites?" + answer: "Push your TanStack Start project to Git, create a new site in your Appwrite project, and connect the repository. Appwrite detects the framework and applies the right build and runtime settings. The [TanStack Start quick start](/docs/products/sites/quick-start/tanstack-start) walks through the full flow." + - question: "How is TanStack Start different from Next.js?" + answer: "Next.js wraps a lot of features into conventions and platform-specific optimizations, especially on Vercel. TanStack Start takes the opposite approach with explicit routing, transparent data loading, and an architecture that runs the same everywhere. Both support SSR, but TanStack Start aims for simplicity and portability." + - question: "Can I use TanStack Start with Solid on Appwrite Sites?" + answer: "Yes. TanStack Start supports Solid in addition to React, and Appwrite Sites' SSR support for TanStack Start extends to Solid apps. This makes it the first SSR-friendly path for Solid on Appwrite." + - question: "What Appwrite services can I use from a TanStack Start app?" + answer: "You can use [Appwrite Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), [Functions](/docs/products/functions), and [Messaging](/docs/products/messaging) from server and client code in your TanStack Start app. The web SDK works in client routes, and you can call Appwrite from server functions for SSR data loading." --- The React world has a new favourite, and developers can’t stop talking about it. [TanStack Start](https://tanstack.com/start/latest) is quickly becoming the go-to framework for teams that want simplicity, type safety, control, and performance without the overhead. Built by the same team behind TanStack Query(React Query) and TanStack Router, it’s redefining how React apps are built and shipped: lighter, faster, and closer to how you want to code. diff --git a/src/routes/blog/post/the-appwrite-network/+page.markdoc b/src/routes/blog/post/the-appwrite-network/+page.markdoc index b304169e4d3..38ec96585eb 100644 --- a/src/routes/blog/post/the-appwrite-network/+page.markdoc +++ b/src/routes/blog/post/the-appwrite-network/+page.markdoc @@ -9,6 +9,19 @@ author: christy-jacob category: product featured: false callToAction: true +faqs: + - question: "What is the Appwrite Network?" + answer: "The [Appwrite Network](/docs/products/network) is a global network of cloud regions, edge locations, and Points of Presence (PoPs) that powers Appwrite Cloud. It improves availability, reduces latency, and helps with compliance for local data regulations." + - question: "Which regions does Appwrite Cloud support?" + answer: "At launch, the Appwrite Network is operational in Frankfurt (FRA), Sydney (SYD), New York City (NYC), Singapore (SGP), and Toronto (TOR). More regions like San Francisco, Bangalore, Amsterdam, and London are planned. Pro users can pick from available regions when creating a project." + - question: "What is the difference between a region, an edge, and a PoP?" + answer: "Regions host your core data and services like Auth, Databases, Functions, Messaging, and Storage. Edges run lightweight compute close to your users using geo-routing. PoPs are CDN locations that cache and deliver content. Together, they bring data, compute, and delivery closer to end users." + - question: "Does Appwrite Cloud include a CDN and DDoS protection?" + answer: "Yes. All Appwrite Cloud projects are served through a built-in global CDN with strategically placed PoPs, plus integrated DDoS protection that combines traffic analysis, rate limiting, and filtering. This applies to all plans without extra configuration." + - question: "Can I control where my project's data is stored?" + answer: "Yes. When you create a project, you can choose the region where your data lives. The data stays in that region for compliance, while edges and the CDN make it accessible to users worldwide with low latency." + - question: "Does Appwrite offer a Web Application Firewall?" + answer: "Yes. The [WAF](/docs/products/network/waf) is available to enterprise customers and inspects HTTP and HTTPS traffic at OSI Layer 7. It blocks common attacks like SQL injection, XSS, and CSRF, and includes customizable rulesets managed through a dedicated success manager." --- We are happy to announce the launch of the Appwrite Network, a network of cloud regions and edge locations (edges) to improve Appwrite Cloud availability, performance, and compliance with local regulations. This will provide Appwrite developers and teams with the best tools and infrastructure to build, deploy, and scale your applications. This brings us closer to the Appwrite mission of making software development more accessible and enjoyable for all developers. diff --git a/src/routes/blog/post/the-developers-cloud/+page.markdoc b/src/routes/blog/post/the-developers-cloud/+page.markdoc index e4be066812c..af945198862 100644 --- a/src/routes/blog/post/the-developers-cloud/+page.markdoc +++ b/src/routes/blog/post/the-developers-cloud/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 7 author: eldad-fux category: announcement featured: true +faqs: + - question: "What is the developers' cloud?" + answer: "The developers' cloud is Appwrite's vision for a single platform that supports the full product lifecycle: imagine, build, deploy, observe, and protect. It sits between a traditional BaaS, which stops at the API layer, and hyperscalers, which expect teams to build every piece themselves." + - question: "Is Appwrite still a backend platform?" + answer: "Yes, the backend services are still core to Appwrite. [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Functions](/docs/products/functions), [Messaging](/docs/products/messaging), and [Storage](/docs/products/storage) remain the foundation. The platform now extends beyond build to include deploy, with [Appwrite Sites](/docs/products/sites), and more stages over time." + - question: "What is Appwrite Sites?" + answer: "[Appwrite Sites](/docs/products/sites) lets you deploy and host web applications directly inside Appwrite. It is the first major step beyond the build stage, so you can take a project live and scale it with the same developer experience as the rest of Appwrite." + - question: "How is Appwrite approaching AI?" + answer: "Appwrite treats AI as a tool that should make developers more productive, not replace the craft. Work is underway on a built-in vector store, smoother integration between Appwrite Functions and AI models, and patterns for agent-driven apps using Functions and Realtime." + - question: "What is the difference between Appwrite and a hyperscaler like AWS or GCP?" + answer: "Hyperscalers offer enormous raw power but expect you to assemble every piece yourself. Appwrite gives you the same capabilities at a higher level of abstraction with a coherent developer experience, so you do not need to integrate dozens of services to ship a product." + - question: "What does observe and protect mean in Appwrite's roadmap?" + answer: "Observe covers monitoring and understanding how your app behaves in production. Protect covers operating with confidence and keeping your data and users safe. These stages will expand the platform beyond build and deploy, giving developers more visibility and control at scale." --- Technology continues to reshape the world, and developers remain at the center of that transformation. Their creativity and problem-solving are what turn ideas into products that matter. From the beginning, Appwrite was built to serve that creativity. Our mission has always been clear: to make software development accessible, developer-centric, and flexible by building with and for the open-source community. diff --git a/src/routes/blog/post/the-evolution-of-team-appwrite/+page.markdoc b/src/routes/blog/post/the-evolution-of-team-appwrite/+page.markdoc index 96b281a54be..f909e0751f3 100644 --- a/src/routes/blog/post/the-evolution-of-team-appwrite/+page.markdoc +++ b/src/routes/blog/post/the-evolution-of-team-appwrite/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/the-evolution-of-team-appwrite/hiring-cover.avif timeToRead: 9 author: laura-du-ry category: open-source +faqs: + - question: "How does Appwrite hire people from its open source community?" + answer: "Many Appwriters first joined the community by contributing code, content, support, or SDK work, and were later hired after consistently delivering quality contributions. The pattern is simple: people noticed their work, the team got to know them, and a role opened up. None of them did it to get hired." + - question: "Do I have to contribute code to get noticed by an open source company?" + answer: "No. Contributions can be code, content, tutorials, community support, design, or speaking. Several Appwrite team members were noticed for non-code work like YouTube tutorials, Discord support, and design portfolios. Quality and consistency matter more than the medium." + - question: "What does the Appwrite team look for in candidates?" + answer: "Appwrite looks for consistent quality, eagerness to learn, openness to feedback, and willingness to support others. The team also values a healthy work life balance and discourages overworking. Standing out is about depth, not volume." + - question: "How can I start contributing to Appwrite?" + answer: "Join the [Appwrite Discord](/discord), pick up issues from the public GitHub repositories, or write content and tutorials about Appwrite. You can also contribute to related projects like Utopia-PHP and the official SDKs. Helping other community members is just as valuable." + - question: "Is contributing to open source a realistic path into a tech job?" + answer: "Yes. Many engineers, content creators, and developer advocates land roles through open source visibility. It gives hiring teams real evidence of your skills, work style, and how you collaborate, which is hard to convey in a CV." + - question: "Does Appwrite hire only engineers from the community?" + answer: "No. Appwrite hires across engineering, design, marketing, growth, and developer relations. Non-technical hires also come through the community or through visible portfolios and public work." --- 2024 has begun, and as it goes with a new year, many people search for a new job. Statistically speaking, January is the most popular month of the year for new job seekers. Reasons vary from New Year's resolutions and increased hiring activity to bonus payouts. At Appwrite, we notice this, too. That said, throughout the year the team gets numerous hiring requests in their DMs, so many we cannot respond to most, let alone do we have vacancies for all these people. So, in response, we decided to write this blog. We will give you insights into how many current team members joined Appwrite after helping out in the community and contributing. But please note they never did this with the intention of getting hired. This was just the outcome of their actions. diff --git a/src/routes/blog/post/the-fastest-way-to-launch-your-next-side-project/+page.markdoc b/src/routes/blog/post/the-fastest-way-to-launch-your-next-side-project/+page.markdoc index 90b36ba77e6..7789ad3855f 100644 --- a/src/routes/blog/post/the-fastest-way-to-launch-your-next-side-project/+page.markdoc +++ b/src/routes/blog/post/the-fastest-way-to-launch-your-next-side-project/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aishwari category: startup featured: false +faqs: + - question: "Why do most side projects never launch?" + answer: "Most side projects fail because of lost momentum, not bad ideas. By the time you finish setting up auth, databases, APIs, file uploads, and deployment, the energy that sparked the idea is gone. The longer the gap between idea and a working version, the harder it is to stay motivated." + - question: "What should be in an MVP for a side project?" + answer: "One core feature, one clear user, and one problem solved. For a habit tracker, that might be sign up, add a habit, and mark it complete. Skip dashboards, analytics, billing, and notifications until real users tell you they need them." + - question: "How can Appwrite speed up side project development?" + answer: "Appwrite gives you the backend pieces most side projects need out of the box, including [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), [Functions](/docs/products/functions), [Messaging](/docs/products/messaging), and [Sites](/docs/products/sites) for hosting. You can have a working backend in minutes instead of spending days on infrastructure." + - question: "How long does it take to launch a side project with Appwrite?" + answer: "A realistic timeline is around three days. Day one for project setup, auth, and database collections. Day two for the core feature. Day three for a basic UI, deployment, and sharing with a small group of users. The point is to learn fast, not ship perfect." + - question: "When should I launch my side project?" + answer: "Launch as soon as the core feature works and a real user can do something meaningful with it. If your project feels polished and complete before launch, you probably waited too long. Real users will reshape your roadmap in ways you cannot predict from the inside." + - question: "Should I worry about scale on day one of a side project?" + answer: "No. Designing for millions of users before you have a single one is a common mistake. Use a backend like Appwrite that can scale when you need it, but focus your time on shipping the smallest useful version. You can refine architecture once users actually exist." --- Every developer has at least one idea sitting in the back of their mind. A tool to solve a small daily annoyance. A weekend SaaS experiment. Something you've been meaning to build "when things calm down." You tell yourself you'll start it soon, next weekend, maybe, or once the current project wraps up. diff --git a/src/routes/blog/post/the-future-of-coding-cursor-ai-and-the-rise-of-backend-automation-with-appwrite/+page.markdoc b/src/routes/blog/post/the-future-of-coding-cursor-ai-and-the-rise-of-backend-automation-with-appwrite/+page.markdoc index 274853d30d6..be867f6d53a 100644 --- a/src/routes/blog/post/the-future-of-coding-cursor-ai-and-the-rise-of-backend-automation-with-appwrite/+page.markdoc +++ b/src/routes/blog/post/the-future-of-coding-cursor-ai-and-the-rise-of-backend-automation-with-appwrite/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 6 author: tessa category: integrations featured: false +faqs: + - question: "What is Cursor?" + answer: "Cursor is an AI-powered code editor that integrates AI directly into the coding experience, so developers can describe what they want instead of typing every line. It supports prompts that scaffold full features and lets you iterate on code with the assistant in the same window." + - question: "What is the Model Context Protocol (MCP)?" + answer: "MCP is an open standard that lets editors, agents, and developer tools communicate securely with external services. It removes the need to write custom connectors or manage tokens manually, so AI assistants can talk directly to platforms like Appwrite." + - question: "How does the Appwrite MCP server work with Cursor?" + answer: "The Appwrite MCP server lets Cursor interact with your Appwrite project using natural language. You can create projects, add database collections, configure storage, and scaffold functions by describing what you need. The MCP layer handles the API communication." + - question: "What can I do with Appwrite MCP through an AI editor?" + answer: "You can create and modify backend resources by talking to your editor, including spinning up [Databases](/docs/products/databases) collections, configuring [Auth](/docs/products/auth), uploading files to [Storage](/docs/products/storage), and deploying [Functions](/docs/products/functions). It is faster than clicking through dashboards or writing boilerplate code." + - question: "Do I still need to write code if I use Cursor and Appwrite MCP?" + answer: "Yes. The AI accelerates scaffolding and configuration, but you still review, refine, and direct the work. Treat the combination as a fast pair programmer and infrastructure assistant, not a replacement for understanding your codebase." + - question: "Is the Appwrite MCP server secure to use with AI tools?" + answer: "The MCP server uses your Appwrite API keys and respects existing project permissions. You should treat the keys like any other credential, scope them to the minimum permissions needed, and review what the AI proposes before applying changes to production projects." --- The way we build software is evolving quickly. AI-driven tools like Cursor are changing how developers write code, while backend platforms like Appwrite are changing how infrastructure is managed. Together, they are shaping a new era of development focused on automation, speed, and intelligence. diff --git a/src/routes/blog/post/the-journey-and-meaning-behind-our-new-logo/+page.markdoc b/src/routes/blog/post/the-journey-and-meaning-behind-our-new-logo/+page.markdoc index 7f26d8e0e97..1785a438e6c 100644 --- a/src/routes/blog/post/the-journey-and-meaning-behind-our-new-logo/+page.markdoc +++ b/src/routes/blog/post/the-journey-and-meaning-behind-our-new-logo/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/the-journey-and-meaning-behind-our-new-logo/cover.avif timeToRead: 5 author: jade-baudchon category: design +faqs: + - question: "Why did Appwrite redesign its logo?" + answer: "The original logo featured the HTML symbol, which no longer represented the many languages Appwrite supports. It also had scaling issues at small sizes, and user research showed the meaning was unclear. The redesign aligns the brand with Appwrite's broader vision and platform reach." + - question: "What does the new Appwrite logo represent?" + answer: "The new logo's lines converge to form a globe, representing Appwrite's interconnected global developer community. The lines also evoke lines of code coming together to build something meaningful. The overall shape resembles a lowercase 'a' for Appwrite." + - question: "How was the new Appwrite logo designed?" + answer: "The design team started with sketches, vectorized concepts, then ran multiple internal feedback rounds. Early drafts leaned on generic coding symbols, but the team eventually focused on what makes Appwrite unique: its global community and the essence of code coming together." + - question: "What was the story behind Appwrite's original logo?" + answer: "The first logo was designed by founder and CEO Eldad Fux. Its rounded elements echoed a gaming controller and the HTML symbol, matching the early slogan 'Let's make coding fun again'. The vibrant pink color came from a dress worn by Eldad's partner." + - question: "How does the new logo influence Appwrite's overall brand?" + answer: "The new mark drives the rest of Appwrite's visual identity, including the website, promotional materials, and documentation. The line-based motif from the logo also appears in imagery and illustrations across the brand." + - question: "Does a logo redesign change Appwrite the product?" + answer: "No. The product, APIs, and developer experience continue to evolve on their own roadmap. The logo redesign reflects how the company has grown and what it stands for, but it does not change how Appwrite Cloud, the SDKs, or the open source project behave." --- diff --git a/src/routes/blog/post/the-subtle-art-of-hackathon ideation/+page.markdoc b/src/routes/blog/post/the-subtle-art-of-hackathon ideation/+page.markdoc index 75da319d7d8..6c6b304e0af 100644 --- a/src/routes/blog/post/the-subtle-art-of-hackathon ideation/+page.markdoc +++ b/src/routes/blog/post/the-subtle-art-of-hackathon ideation/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/the-subtle-art-of-hackathon ideation/cover.avif timeToRead: 4 author: aditya-oberai category: hackathon +faqs: + - question: "What is a hackathon?" + answer: "A hackathon is a development marathon where teams build innovative products or solutions within a limited timeframe. It pushes participants to combine creativity, problem-solving, and technical skills, usually around an externally provided or self-chosen problem." + - question: "Why is ideation important in a hackathon?" + answer: "A hackathon is fundamentally about solving a real problem, not just writing the best code. If the early ideation step is weak, the rest of the project, including design, build, and pitch, suffer too. A strong idea sets up everything that follows." + - question: "How do I come up with a good hackathon idea?" + answer: "Pick a problem you personally relate to, understand how widely it affects others, evaluate multiple possible solutions, and then choose the one that can sustain itself without depending on systems you do not have access to. Emotional connection and scale together drive winning ideas." + - question: "How long should I spend on ideation in a hackathon?" + answer: "There is no universal number, but treat ideation as critical work, not overhead. Spending a few focused hours up front to test the problem, scale, and solution will save you from rewrites and pivots later in the hackathon when time is most precious." + - question: "Can I use Appwrite for a hackathon project?" + answer: "Yes. Appwrite is a popular choice for hackathons because [Auth](/docs/products/auth), [Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Functions](/docs/products/functions) are ready out of the box, so you can focus on your unique feature instead of plumbing. The free Appwrite Cloud tier is enough for most hackathon projects." + - question: "How do I know if my hackathon idea is too ambitious?" + answer: "Look at the time you have and the smallest demoable version of your idea. If you cannot describe a working core feature you could ship in the hackathon window, the scope is too big. Trim until you can demo something real at the end." --- Hackathons have been an immense part of my journey as a developer and a student, providing me with some of the best growth opportunities I could have hoped for. Participating in hackathons was immensely rewarding for me in terms of learning, work output, networking as well as the occasional prizes. diff --git a/src/routes/blog/post/three-important-steps-you-need-to-complete-with-appwrite/+page.markdoc b/src/routes/blog/post/three-important-steps-you-need-to-complete-with-appwrite/+page.markdoc index 2b95cc8d289..cf5fd0ab2aa 100644 --- a/src/routes/blog/post/three-important-steps-you-need-to-complete-with-appwrite/+page.markdoc +++ b/src/routes/blog/post/three-important-steps-you-need-to-complete-with-appwrite/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/three-important-steps-you-need-to-complete-with-appwrite/3-i timeToRead: 3 author: dennis-ivy category: product +faqs: + - question: "What are the three steps to complete before using a new Appwrite project?" + answer: "Add a platform (or generate an API key with scopes for server SDKs), add a hostname if you are using the Web SDK, and set proper permissions on your database collections and storage buckets. Skipping any of these usually leads to errors when making your first request." + - question: "Why do I need to add a platform in Appwrite?" + answer: "Platforms tell Appwrite which clients are allowed to connect to your project. You add a platform from the project overview to register a Web, Flutter, Android, Apple, or server SDK. Without it, your requests are rejected for security." + - question: "Why am I getting a CORS error when calling Appwrite from my web app?" + answer: "Most CORS errors happen because you have not added the right hostname to your web platform settings in Appwrite. Add the exact origin you are connecting from (including localhost during development) to fix the error. There is a deeper walkthrough in the [CORS error post](/blog/post/cors-error)." + - question: "How do permissions work in Appwrite?" + answer: "Permissions control who can read or write data in [Databases](/docs/products/databases) collections and [Storage](/docs/products/storage) buckets. You set them at the collection, bucket, or document level. Without the right permissions, even authenticated users see errors or empty data." + - question: "What is the difference between client and server SDKs in Appwrite?" + answer: "Client SDKs run in your app and act on behalf of end users, so they use sessions and respect permissions. Server SDKs run in trusted environments and use API keys with explicit scopes. Pick the SDK that matches where your code runs and what level of access it needs." + - question: "What scopes should I give my Appwrite API key?" + answer: "Give the API key only the scopes it needs for the operations it performs, like `databases.read` or `users.write`. Avoid creating broad keys, especially for production. You can rotate keys and create separate ones for different services to limit blast radius." --- When creating a new project, there are three important things you need to do to ensure you have things set up properly and can connect to your Appwrite backend. diff --git a/src/routes/blog/post/top-25-vibe-coding-tools/+page.markdoc b/src/routes/blog/post/top-25-vibe-coding-tools/+page.markdoc index df5c1c19b54..0055d324f0f 100644 --- a/src/routes/blog/post/top-25-vibe-coding-tools/+page.markdoc +++ b/src/routes/blog/post/top-25-vibe-coding-tools/+page.markdoc @@ -10,6 +10,19 @@ category: tutorial featured: false callToAction: true unlisted: true +faqs: + - question: "What is vibe coding?" + answer: "Vibe coding is a style of programming where developers rely on AI models to generate and debug code. You describe what you want in plain English and the AI scaffolds the implementation, while you focus on guiding the system, validating outputs, and refining the result through iteration." + - question: "What features should I look for in a vibe coding tool?" + answer: "Look for natural language input, AI-generated code, iterative refinement, code explanation, bug detection, and support for the [Model Context Protocol](/docs/tooling/mcp). A clean, fast user interface and integration with your existing editor or IDE also make a big difference day to day." + - question: "Does vibe coding replace traditional programming skills?" + answer: "No. AI assistants speed up scaffolding and repetitive work, but you still need to understand architecture, debugging, and trade-offs. Developers who treat AI as a collaborator and review its output carefully tend to ship better code than those who copy and paste blindly." + - question: "What is the Model Context Protocol (MCP) and why does it matter?" + answer: "MCP is an open standard that lets editors and AI tools talk to external services through a common interface. Tools that support MCP can pull richer project context and even drive backends like Appwrite directly, which leads to smarter suggestions across files and sessions." + - question: "Can vibe coding tools work with backend platforms like Appwrite?" + answer: "Yes. Appwrite has an [MCP server](/docs/tooling/mcp) that lets AI editors create projects, configure [Auth](/docs/products/auth), set up [Databases](/docs/products/databases), and manage [Functions](/docs/products/functions) using natural language. You can pair a vibe coding editor with Appwrite to spin up a full stack quickly." + - question: "How much time can AI coding tools actually save?" + answer: "Surveys like JetBrains' Developer Ecosystem report typically show 1 to 2 hours saved per week as a common answer, but the real value depends on your workload. Repetitive tasks, boilerplate, and simple refactors are where AI gives the biggest immediate wins." --- Imagine coding with an AI partner that suggests improvements in real-time. This is the future with vibe coding. AI pair programmers are becoming indispensable in modern development environments. diff --git a/src/routes/blog/post/top-6-vector-databases-2025/+page.markdoc b/src/routes/blog/post/top-6-vector-databases-2025/+page.markdoc index 8380bf1fd23..09ab3f30b6a 100644 --- a/src/routes/blog/post/top-6-vector-databases-2025/+page.markdoc +++ b/src/routes/blog/post/top-6-vector-databases-2025/+page.markdoc @@ -10,6 +10,19 @@ category: tutorial featured: false callToAction: true unlisted: true +faqs: + - question: "What is a vector database?" + answer: "A vector database stores data as numerical vectors (embeddings) and supports similarity search across them. Instead of exact matches, it finds items with the closest meaning using metrics like cosine similarity or Euclidean distance, which is the foundation of RAG and semantic search." + - question: "When should I use a vector database instead of a traditional database?" + answer: "Use a vector database when you need similarity search, recommendations, or semantic retrieval over unstructured data like text, images, or audio. Traditional databases are still better for exact lookups, joins, and transactional workloads. Many teams use both together." + - question: "What are common vector database indexing techniques?" + answer: "The most common indexing techniques are Hierarchical Navigable Small World (HNSW), Inverted File (IVF), and Product Quantization (PQ). They enable efficient approximate nearest neighbour search across millions or billions of vectors, trading off some accuracy for speed and memory." + - question: "Which vector databases are popular in 2026?" + answer: "Popular options include Pinecone, Weaviate, Milvus, Qdrant, Chroma, and MongoDB Atlas with native vector search. PostgreSQL with `pgvector` and Elasticsearch are also common when teams want to extend an existing system rather than adopt a new one." + - question: "What is retrieval augmented generation (RAG)?" + answer: "RAG is a pattern where an LLM retrieves relevant context from a vector database before generating an answer. This gives the model up to date or domain-specific information without retraining it. Most modern AI assistants and chatbots use some form of RAG." + - question: "How does Appwrite fit into an AI app that uses vector search?" + answer: "You can use [Appwrite Functions](/docs/products/functions) to generate embeddings and orchestrate calls to your vector database, and store related app data, files, and users in [Appwrite Databases](/docs/products/databases), [Storage](/docs/products/storage), and [Auth](/docs/products/auth). This keeps your app logic close to your backend while a dedicated vector database handles similarity search." --- Search has changed. Traditional databases work great when you’re querying exact matches or running structured lookups. But when you start dealing with embeddings, similarity search, or AI-generated data, those systems quickly hit their limits. That’s where **Vector Databases** come in. diff --git a/src/routes/blog/post/top-auth0-alternatives/+page.markdoc b/src/routes/blog/post/top-auth0-alternatives/+page.markdoc index 645f0fab277..38828055ef2 100644 --- a/src/routes/blog/post/top-auth0-alternatives/+page.markdoc +++ b/src/routes/blog/post/top-auth0-alternatives/+page.markdoc @@ -10,6 +10,19 @@ category: tutorial featured: false callToAction: true unlisted: true +faqs: + - question: "Why look for an Auth0 alternative?" + answer: "Teams usually look for Auth0 alternatives because of rising costs as user counts scale, limited flexibility on auth flows, vendor lock-in, or a desire to combine auth with other backend services in one platform. Alternatives can offer better pricing tiers, self-hosting options, or tighter integration with the rest of your stack." + - question: "Is Appwrite a good Auth0 alternative?" + answer: "Yes, especially if you also want backend services beyond auth. [Appwrite Auth](/docs/products/auth) supports 30+ login methods including email/password, OAuth, magic URLs, phone OTP, MFA, and teams. It can be used on Appwrite Cloud or fully self-hosted, and integrates with [Databases](/docs/products/databases), [Functions](/docs/products/functions), and [Storage](/docs/products/storage)." + - question: "Does Appwrite Auth have a free plan?" + answer: "Yes. Appwrite Cloud has a free plan with up to 75,000 monthly active users. You can also self-host Appwrite for free under its open source license, which is useful if you want full data control or to run inside your own infrastructure." + - question: "What auth methods should I support in a modern app?" + answer: "At minimum, support email and password with strong password policies, plus at least one OAuth provider your users actually use. Add magic links or OTP for low-friction login, and offer MFA for sensitive accounts. The right mix depends on your audience, but covering passwordless and social login is now standard." + - question: "How do I migrate users away from Auth0?" + answer: "Most platforms support bulk user import from Auth0 exports, often preserving identifiers and password hashes where possible. You typically run the new system in parallel, migrate users in batches, and use a phased cutover. Always test password hash compatibility and OAuth provider configuration before flipping production traffic." + - question: "Should I self-host my auth system or use a managed service?" + answer: "Self-hosting gives you full data control and avoids per-user pricing, but you take on operational responsibility for uptime, security patches, and scaling. Managed services trade some control for convenience. Open source platforms like Appwrite let you switch between the two without rewriting your app." --- With AI tools, APIs, and open-source platforms accelerating development like never before, building full-stack applications is no longer reserved for large teams. Developers today can spin up powerful, production-ready apps in days or sometimes even hours. But with this ease and speed comes an often overlooked trade-off: security. diff --git a/src/routes/blog/post/top-startup-accelerators-australia/+page.markdoc b/src/routes/blog/post/top-startup-accelerators-australia/+page.markdoc index a77f8e46786..9eb19106e07 100644 --- a/src/routes/blog/post/top-startup-accelerators-australia/+page.markdoc +++ b/src/routes/blog/post/top-startup-accelerators-australia/+page.markdoc @@ -9,6 +9,19 @@ author: laura-du-ry callToAction: true unlisted: true category: product +faqs: + - question: "What is the difference between a startup incubator and an accelerator?" + answer: "Incubators support idea-stage founders with flexible timelines, light mentorship, and product validation. Accelerators are time-boxed cohort programs (usually 3 to 6 months) that take startups with traction and help them scale, fundraise, and pitch. Accelerators typically provide seed funding in exchange for equity, while incubators may not." + - question: "What are the top startup accelerators in Australia?" + answer: "Well-known programs include Startmate, Muru-D, Melbourne Accelerator Program, Antler, Slingshot, H2 Ventures, SproutX, and Founder Institute. Each has a different focus, from generalist tech to fintech, agtech, and corporate innovation." + - question: "Does an Australian startup accelerator take equity?" + answer: "Most accelerators take 5 to 10 percent equity in exchange for seed funding and program access. Incubators often take less or no equity, especially if they are university-backed. Always review the standard offer letter and any pro-rata clauses before joining." + - question: "When should I apply to an accelerator?" + answer: "Apply once you have a working product, early users or revenue, and a clear thesis you want to test. If you are still validating the problem and exploring ideas, an incubator or a pre-accelerator program is usually a better fit." + - question: "How does Appwrite support startups?" + answer: "The [Appwrite Startups program](https://appwrite.io/startups) offers cloud credits, discounts, priority support, and access to a managed all-in-one developer platform. This helps early stage teams ship faster with auth, databases, storage, functions, messaging, and hosting in one place." + - question: "Do I need to be in a major city to join an Australian accelerator?" + answer: "Many accelerators have hybrid or remote formats, but some still require regular in-person attendance in Sydney or Melbourne. Check the program format before applying, especially if you cannot relocate. International programs like Antler and Founder Institute often offer multiple regional cohorts." --- Australia has quietly grown into one of the most exciting regions for startup activity, fueled by strong government support, world-class universities, and a maturing investor ecosystem. From fintech hubs in Sydney to deep tech innovators in Melbourne, the country is producing global startups with increasing consistency. But behind many of these success stories lies a foundational catalyst: incubators and accelerators. diff --git a/src/routes/blog/post/top-startup-accelerators-europe/+page.markdoc b/src/routes/blog/post/top-startup-accelerators-europe/+page.markdoc index f1d7ebb28e1..ee5dcdaa8ce 100644 --- a/src/routes/blog/post/top-startup-accelerators-europe/+page.markdoc +++ b/src/routes/blog/post/top-startup-accelerators-europe/+page.markdoc @@ -9,6 +9,19 @@ author: laura-du-ry callToAction: true unlisted: true category: product +faqs: + - question: "What is the difference between a startup incubator and an accelerator?" + answer: "Incubators help idea-stage founders build a product and validate the business model on a flexible timeline. Accelerators are fixed-term cohort programs (usually 3 to 6 months) that take startups with an MVP and push them toward rapid growth and fundraising. Accelerators typically include seed investment in exchange for equity." + - question: "Which are the top startup accelerators in Europe?" + answer: "Well-known European programs include UnternehmerTUM in Munich, Station F in Paris, Start2 Group, HEC Paris Incubator, Lanzadera in Spain, SSE Business Lab in Stockholm, and Startup Autobahn. The right choice depends on your sector, stage, and location." + - question: "Do European accelerators take equity?" + answer: "Most accelerators take 5 to 10 percent equity in exchange for seed funding and program access. Some publicly funded or university-led programs charge no equity but may not provide direct cash investment. Always read the offer terms carefully before joining." + - question: "What do incubators and accelerators offer beyond money?" + answer: "Most programs offer mentorship, workspaces, structured curriculum, investor access, and a peer community of other founders. The network and warm intros are often worth more than the cash, especially when raising your next round." + - question: "How can Appwrite help my European startup?" + answer: "The [Appwrite Startups program](https://appwrite.io/startups) gives qualifying startups cloud credits, discounts, priority support, and access to a managed all-in-one developer platform with auth, databases, storage, functions, messaging, and hosting. It is designed to help small teams ship faster without rebuilding backend plumbing." + - question: "Can I join an accelerator while bootstrapping?" + answer: "Yes, but check the equity terms first. Some accelerators require equity even if you do not take their cash investment. Bootstrappers often prefer incubators, equity-free programs, or selective corporate accelerators that focus on partnerships rather than dilution." --- In the startup world, having a brilliant idea is only the beginning. The real challenge lies in execution, validation, and growth. This is where incubators and accelerators come in. These programs are designed to support early-stage startups with the tools, guidance, and networks they need to succeed faster and more efficiently. Whether you're a solo founder with a prototype or a team looking to scale, understanding the role of incubators and accelerators can be a game-changer. diff --git a/src/routes/blog/post/top-startup-accelerators-singapore/+page.markdoc b/src/routes/blog/post/top-startup-accelerators-singapore/+page.markdoc index 5c94614a131..7b123578eaf 100644 --- a/src/routes/blog/post/top-startup-accelerators-singapore/+page.markdoc +++ b/src/routes/blog/post/top-startup-accelerators-singapore/+page.markdoc @@ -9,6 +9,19 @@ author: laura-du-ry callToAction: true unlisted: true category: product +faqs: + - question: "What is the difference between a startup incubator and an accelerator?" + answer: "Incubators are built for idea-stage founders and provide flexible mentorship to help shape a working MVP and find product-market fit. Accelerators are fixed term, cohort based programs for startups with traction. They compress the path to scale and fundraising into 3 to 4 months." + - question: "Which are the top startup accelerators in Singapore?" + answer: "Notable programs include BLOCK71 (NUS Enterprise), Antler Singapore, SGInnovate, Enterprise Singapore's Startup SG Accelerator, Tribe Accelerator, SPH Plug and Play, and ICE71. They cover deep tech, blockchain, cybersecurity, media tech, and generalist tech." + - question: "Does the Singapore government support startups?" + answer: "Yes. Enterprise Singapore's Startup SG Accelerator funds and supports partner incubators and accelerators across strategic sectors. Founders can also access government-linked programs through agencies like SGInnovate, especially for deep tech and frontier science startups." + - question: "What sectors are strongest in Singapore's startup scene?" + answer: "Singapore has strong activity in fintech, deep tech, cybersecurity, blockchain or Web3, AI, and sustainability. Many accelerators focus on a vertical, so picking one aligned with your sector usually leads to better mentors, pilots, and follow-on investors." + - question: "How can Appwrite help my Singapore-based startup?" + answer: "The [Appwrite Startups program](https://appwrite.io/startups) gives qualifying teams cloud credits, discounts, priority support, and an all-in-one backend platform with auth, databases, storage, functions, messaging, and hosting. Combined with an accelerator, it helps small teams ship faster without rebuilding infrastructure." + - question: "Do Singapore accelerators take equity?" + answer: "Most equity-taking accelerators in Singapore follow the 5 to 10 percent range in exchange for seed funding, similar to global programs. Government-linked schemes often provide grants without equity, but they may require specific milestones, local registration, or co-funding from approved partners." --- Startups operate under extreme pressure, limited time, limited resources, and no margin for error. In this environment, execution speed and access to the right support can define outcomes. That’s why many founders turn to incubators and accelerators not just for help, but for leverage. diff --git a/src/routes/blog/post/top-startup-accelerators-usa/+page.markdoc b/src/routes/blog/post/top-startup-accelerators-usa/+page.markdoc index 9559f8ab68e..46042e91df0 100644 --- a/src/routes/blog/post/top-startup-accelerators-usa/+page.markdoc +++ b/src/routes/blog/post/top-startup-accelerators-usa/+page.markdoc @@ -9,6 +9,19 @@ author: veeresh-mulge callToAction: true unlisted: true category: product +faqs: + - question: "What is the difference between a startup incubator and an accelerator?" + answer: "Incubators focus on early stage founders who are still validating an idea or building an MVP, and they tend to run on flexible timelines with little or no investment. Accelerators are structured cohort programs (typically 3 to 6 months) for startups with early traction, and they usually offer seed investment in exchange for equity, ending in a demo day." + - question: "Do startup accelerators take equity?" + answer: "Most accelerators take equity, often around 6 to 7 percent, in exchange for a seed check that ranges from roughly $100k to $500k. A smaller number (such as MassChallenge) run zero-equity programs funded by grants and corporate sponsors. Always check the term sheet before applying." + - question: "How competitive are top accelerators like Y Combinator and Techstars?" + answer: "Acceptance rates at top tier programs are typically under 2 to 3 percent, with thousands of applications per batch. A clear problem statement, a working prototype, and signs of early demand (waitlist, revenue, or active users) make a stronger application than a polished deck alone." + - question: "Does Appwrite have a program for early stage startups?" + answer: "Yes. The Appwrite Startups program offers cloud credits, discounts, priority support, and access to the full Appwrite platform for eligible early stage companies. You can apply at appwrite.io/startups." + - question: "Should I join an accelerator before raising a seed round?" + answer: "If you need investor introductions, structured mentorship, or external validation, an accelerator can compress a year of learning into a few months. If you already have warm investor relationships and clear product market fit signals, the equity cost may not be worth it. Treat the decision like any other dilution event." + - question: "Can non US startups apply to US based accelerators?" + answer: "Most major US accelerators (Y Combinator, Techstars, 500 Global) actively recruit international founders, often providing visa support for the program duration. You will usually need to incorporate as a Delaware C-Corp before funding." --- Startups are built on bold ideas, but ideas alone aren’t enough. You need structure, speed, and support. That’s where incubators and accelerators step in. They help startups reduce guesswork, avoid early pitfalls, and get to market faster. Whether you’re validating a concept or chasing growth, these programs offer the infrastructure to move forward with confidence. diff --git a/src/routes/blog/post/track-document-order-with-sequence/+page.markdoc b/src/routes/blog/post/track-document-order-with-sequence/+page.markdoc index 450ab7edf55..3edb3c8ce62 100644 --- a/src/routes/blog/post/track-document-order-with-sequence/+page.markdoc +++ b/src/routes/blog/post/track-document-order-with-sequence/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/track-document-order-with-sequence/cover.avif timeToRead: 6 author: ebenezer-don category: tutorial +faqs: + - question: "What is the $sequence attribute in Appwrite?" + answer: "$sequence is a system attribute that Appwrite assigns to every document on creation. It is a unique, auto-incrementing integer scoped to the collection, so the first document gets 1, the second gets 2, and so on. It is read only and cannot be modified or reused." + - question: "Why not just use a timestamp to order documents?" + answer: "Timestamps can collide when documents are created within the same millisecond, which leads to unstable sort order. $sequence is monotonically increasing and unique, so it gives you a deterministic order even under high concurrency." + - question: "Can I sort and paginate by $sequence in Appwrite?" + answer: "Yes. $sequence works with the standard Query API, so you can use Query.orderAsc('$sequence') or Query.orderDesc('$sequence') and combine it with cursor pagination. See the [Appwrite Databases docs](/docs/products/databases) for the full query reference." + - question: "Do I have to create $sequence manually?" + answer: "No. Appwrite assigns it automatically when the document is created, alongside other system attributes like $id and $createdAt. You should not define a sequence attribute yourself in your collection schema." + - question: "Is $sequence safe to expose in URLs or UI?" + answer: "Yes for things like ticket numbers, order numbers, or invoice numbers where a predictable counter is the desired behavior. Avoid using it where you need unguessable IDs (for example, share links), because the value is enumerable. Use $id for those cases." + - question: "Does $sequence reset if I delete documents?" + answer: "No. The counter is monotonic and does not reuse values, so deleting document 42 does not free up the sequence number 42. The next inserted document still gets the next unused integer." --- Some systems need to reflect the order in which actions happen. A ticketing system, for example, should assign "Ticket #41" before "Ticket #42". But in a user interface, it often makes sense to display the latest tickets first, so "Ticket #42" may appear above #41. diff --git a/src/routes/blog/post/ttl-cache-performance-benchmark/+page.markdoc b/src/routes/blog/post/ttl-cache-performance-benchmark/+page.markdoc index 89b20943566..ba7f5de630b 100644 --- a/src/routes/blog/post/ttl-cache-performance-benchmark/+page.markdoc +++ b/src/routes/blog/post/ttl-cache-performance-benchmark/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 8 author: atharva category: performance featured: false +faqs: + - question: "What is TTL caching in Appwrite Databases?" + answer: "TTL (time to live) caching lets you cache the result of a listRows call for a fixed number of seconds. You pass a ttl parameter to the existing listRows call, and Appwrite serves identical repeat requests from memory until the TTL expires. The underlying query, endpoint, and SDK do not change. See the [Appwrite Databases docs](/docs/products/databases) for details." + - question: "How much faster are cached reads in the benchmark?" + answer: "Across 100,000 sequential listRows calls against a 10,000 row table, the cached phase served requests dramatically faster than the uncached phase, with the largest gains at the tail of the latency distribution (P95 and P99). The full breakdown and an interactive visualisation are at ttl-benchmark.appwrite.network." + - question: "When should I avoid using TTL caching?" + answer: "Avoid TTL caching for queries where staleness is unacceptable, for example, displaying a user's account balance or current cart contents. It works best for read heavy, slow changing data such as product listings, category pages, leaderboards, or content feeds." + - question: "How is the cache invalidated?" + answer: "Invalidation is purely time based. Once the TTL window expires, the next request repopulates the cache from the database. There is no write triggered invalidation, so pick a TTL that matches how stale the data can safely be." + - question: "Does caching change the response shape or query syntax?" + answer: "No. The only difference is the ttl parameter on listRows. Your query, filters, sort, pagination, and the returned row structure stay identical, which makes it safe to roll out behind a feature flag." + - question: "Where is the benchmark source code?" + answer: "The full benchmark, including the seed script, query definitions, and run harness, is open source at github.com/appwrite-community/ttl-benchmark. You can reproduce the numbers on your own Appwrite instance." --- Last week we [introduced TTL-based list caching](/blog/post/announcing-list-cache-ttl) for Appwrite Databases. The announcement covered what the feature does and how to use it. This post is the follow-up: we put the cache under sustained load, measured it, and then broke the numbers down so you can decide whether the feature is worth wiring into your own read paths. diff --git a/src/routes/blog/post/turbopack-support-appwrite-sites/+page.markdoc b/src/routes/blog/post/turbopack-support-appwrite-sites/+page.markdoc index 49b5fbdb3cd..44c5a27b22e 100644 --- a/src/routes/blog/post/turbopack-support-appwrite-sites/+page.markdoc +++ b/src/routes/blog/post/turbopack-support-appwrite-sites/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/turbopack-support-appwrite-sites/cover.avif timeToRead: 3 author: ebenezer-don category: announcement +faqs: + - question: "What is Turbopack?" + answer: "Turbopack is a Rust based bundler developed by Vercel as a successor to webpack. It is designed for faster incremental updates and large project performance, and it is the default development bundler in recent versions of Next.js." + - question: "Do I need to change my build command to deploy a Turbopack Next.js app on Appwrite Sites?" + answer: "No. With native Turbopack support, you can deploy Next.js apps that use Turbopack on [Appwrite Sites](/docs/products/sites) without modifying the build command. The --turbopack flag is preserved end to end." + - question: "My existing site shows 404 errors after the update, what do I do?" + answer: "Open your site settings on Appwrite Sites, switch the framework adapter to Server side rendering under Build settings, and redeploy. This rebuilds the project with the updated runtime that supports Turbopack output." + - question: "Is Turbopack support available on self hosted Appwrite?" + answer: "Turbopack support landed first on Appwrite Cloud. Self hosted support is rolling out in an upcoming release, so check the changelog for your version before deploying." + - question: "Does Appwrite Sites support Next.js features beyond Turbopack?" + answer: "Yes. Appwrite Sites supports Next.js with server side rendering, static generation, and the App Router. See the [Sites docs](/docs/products/sites) for the full feature matrix." + - question: "Will my webpack based Next.js app still work?" + answer: "Yes. webpack builds continue to work without changes. The Turbopack update is additive and does not remove or alter the existing webpack path." --- Appwrite Sites now supports Next.js applications built with Turbopack, Vercel's bundler. This update fixes build compatibility issues and makes your Next.js deployments faster. diff --git a/src/routes/blog/post/typescript-7-faster-with-go/+page.markdoc b/src/routes/blog/post/typescript-7-faster-with-go/+page.markdoc index 829ae41b2a3..ef195d4a90f 100644 --- a/src/routes/blog/post/typescript-7-faster-with-go/+page.markdoc +++ b/src/routes/blog/post/typescript-7-faster-with-go/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/typescript-7-faster-with-go/cover.avif timeToRead: 5 author: ebenezer-don category: tutorial +faqs: + - question: "Is TypeScript itself being rewritten in Go?" + answer: "No. The TypeScript language, syntax, and type system are unchanged. Only the compiler (tsc) is being ported to Go under the internal name Project Corsa. TypeScript code you write today will still compile the same way." + - question: "How much faster is the Go based TypeScript compiler?" + answer: "Early Microsoft benchmarks show roughly a 10x improvement. Compiling the VS Code codebase (about 1.5 million lines) reportedly dropped from around 78 seconds to about 7.5 seconds. Similar speedups were measured for Playwright and TypeORM, but these are early stage numbers and real world results will vary." + - question: "Why did Microsoft choose Go over Rust or C++?" + answer: "Microsoft cited Go's structural similarity to the existing TypeScript codebase, which makes porting easier, plus Go's garbage collection (acceptable for a non latency sensitive compiler) and its ergonomics for traversing ASTs and graphs. Rust would have required more rewriting and stricter memory management." + - question: "When will TypeScript 7 ship?" + answer: "Microsoft has not committed to a firm date. The roadmap targets a preview release with basic type checking in mid 2025 and a feature complete version later in 2025. TypeScript 7.0 will ship once the Go compiler reaches feature parity." + - question: "Will my existing build tools and IDE plugins keep working?" + answer: "Microsoft has committed to running the JavaScript and Go based compilers in parallel during the transition. Most tools that use the public TypeScript APIs should continue to work, but anything that relies on internal compiler internals may need updates." + - question: "Should I wait for TypeScript 7 to start a new project?" + answer: "No. TypeScript 6.x will keep receiving updates and remain supported. Start now on the stable compiler, and switch to the Go based one when it stabilizes. The migration is meant to be drop in for typical projects." --- Over the past decade, TypeScript has earned the trust of developers building large-scale JavaScript applications. It offers the safety net of a type system, reliable tooling, and codebases that are *arguably* easier to maintain. Yet, if you ask developers working with large projects, they'll likely express one common frustration: the TypeScript compiler can feel painfully slow. diff --git a/src/routes/blog/post/uber-clone-nextjs-appwrite/+page.markdoc b/src/routes/blog/post/uber-clone-nextjs-appwrite/+page.markdoc index 92a788fb4ac..9ca613c7ff2 100644 --- a/src/routes/blog/post/uber-clone-nextjs-appwrite/+page.markdoc +++ b/src/routes/blog/post/uber-clone-nextjs-appwrite/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 15 author: atharva category: tutorial, product featured: false +faqs: + - question: "What are geo queries in Appwrite?" + answer: "Geo queries let you filter and sort documents based on geographic coordinates stored in a point column. Operators like distanceLessThan return documents within a radius of a reference point. They require a spatial index on the point column to perform well. See the [Appwrite Databases docs](/docs/products/databases) for the supported geo query operators." + - question: "Do I need a spatial index for location based queries?" + answer: "Yes, if you want them to be fast. Without a spatial index, Appwrite has to scan every row and compute distance, which does not scale past a few hundred rows. Adding a spatial index to your point column is the single most impactful change for geo query performance." + - question: "How do realtime subscriptions work in this app?" + answer: "[Appwrite Realtime](/docs/products/databases) pushes events over websockets when documents are created, updated, or deleted. The rider subscribes to their own ride row and reacts when status changes or the driver's location updates, while the driver subscribes to pending rides in their area." + - question: "Why use a one time password (OTP) for ride verification?" + answer: "An OTP confirms that the driver who arrives is the one matched in the app, and that the rider getting in is the one who booked. It is a simple anti fraud measure used by most production ride hailing apps." + - question: "Can I run this app on self hosted Appwrite?" + answer: "Yes. The tutorial works against either Appwrite Cloud or a self hosted instance, as long as your version supports point columns, spatial indexes, and Realtime. Update the endpoint and project ID in your environment file accordingly." + - question: "How do I deploy the finished Next.js app?" + answer: "You can deploy the Next.js frontend to [Appwrite Sites](/docs/products/sites) and keep the backend (database, auth, realtime) on the same project. That keeps everything in one place and lets you use the same project ID and endpoint across environments." --- Ride-hailing apps like Uber depend on two things: knowing where people are and pushing updates the moment something changes. The driver needs to see nearby ride requests. The rider needs to know when a driver accepts and where that driver is right now. diff --git a/src/routes/blog/post/understand-data-queries/+page.markdoc b/src/routes/blog/post/understand-data-queries/+page.markdoc index 10b31020c8d..0a9ff65d778 100644 --- a/src/routes/blog/post/understand-data-queries/+page.markdoc +++ b/src/routes/blog/post/understand-data-queries/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 6 author: aditya-oberai category: engineering, tutorial featured: false +faqs: + - question: "What are the four main types of SQL data queries?" + answer: "SELECT (retrieve data), INSERT (add new rows), UPDATE (modify existing rows), and DELETE (remove rows). Together they cover the standard CRUD operations against a relational database, and almost every higher level ORM or query builder maps to these four operations under the hood." + - question: "What is the difference between AND and OR in a query?" + answer: "AND requires every condition to be true for a row to match, so it narrows the result set. OR matches if any condition is true, so it widens the result set. You can nest both inside the same query to express more specific logic." + - question: "How do I query data in Appwrite without writing SQL?" + answer: "Use the Appwrite Query builder in your SDK of choice. It exposes helpers like Query.equal, Query.greaterThan, Query.or, and Query.and that compile to the same filter, sort, and pagination semantics across all SDKs. See the [Appwrite Databases docs](/docs/products/databases) for the full operator list." + - question: "Does Appwrite support OR, AND, and CONTAINS queries?" + answer: "Yes. Appwrite supports OR (any condition matches), AND (all conditions match), and CONTAINS (filter by values inside an array column). You can nest these to build the same expressions you would write as a WHERE clause in SQL." + - question: "How do I prevent SQL injection?" + answer: "Never concatenate user input directly into a query string. Use parameterized queries, prepared statements, or an ORM that escapes inputs automatically. If you use a managed database like Appwrite, the SDK and Query API handle escaping for you, so injection is not a concern at the API layer." + - question: "Should I use raw SQL or an ORM in a new project?" + answer: "Use an ORM or managed database API by default. You get type safety, escaping, and migrations for free, and you avoid common bugs around joins and pagination. Drop down to raw SQL only for queries that are too complex or performance critical to express through the abstraction." --- For any developer working with databases in any capacity, knowledge of queries is fundamental. These queries, executed through languages like SQL (Structured Query Language), are the backbone of database interaction, allowing you to retrieve, update, insert, or delete data. In this blog, we'll delve into the different types of data queries, shedding light on their functions and best practices. diff --git a/src/routes/blog/post/understand-oauth2/+page.markdoc b/src/routes/blog/post/understand-oauth2/+page.markdoc index c079711e01d..c9c210d3c65 100644 --- a/src/routes/blog/post/understand-oauth2/+page.markdoc +++ b/src/routes/blog/post/understand-oauth2/+page.markdoc @@ -9,6 +9,19 @@ author: laura-du-ry callToAction: true unlisted: true category: product +faqs: + - question: "What is OAuth2 in simple terms?" + answer: "OAuth2 is an authorization standard that lets a user grant an app limited access to their data on another service without handing over their password. Instead, the app receives a scoped access token that it uses to call the resource server on the user's behalf." + - question: "What is the difference between OAuth2 and OpenID Connect?" + answer: "OAuth2 handles authorization (what an app is allowed to do), while OpenID Connect (OIDC) is a thin layer on top of OAuth2 that adds authentication (who the user is) via an ID token. If you need to log a user in, you generally want OIDC, not raw OAuth2." + - question: "Which OAuth2 flow should I use?" + answer: "Use the Authorization Code flow with PKCE for SPAs and mobile apps, the Authorization Code flow for traditional server side web apps, and the Client Credentials flow for machine to machine API calls. Avoid the Implicit and Resource Owner Password flows in new code, they are now considered legacy." + - question: "Does Appwrite support OAuth2 login?" + answer: "Yes. [Appwrite Auth](/docs/products/auth) supports OAuth2 sign-in with major providers (Google, GitHub, Apple, and many others) out of the box. You configure the provider in the console and call the OAuth2 method in your SDK to start the flow." + - question: "What is PKCE and when do I need it?" + answer: "PKCE (Proof Key for Code Exchange) is an extension to the Authorization Code flow that prevents intercepted authorization codes from being exchanged by an attacker. You need it for any public client, including SPAs and mobile apps, where you cannot safely store a client secret." + - question: "What is the difference between an access token and a refresh token?" + answer: "An access token is short lived and used to call the resource server. A refresh token is longer lived and used only to get a new access token when the old one expires. Treat refresh tokens like credentials and store them securely server side whenever possible." --- Modern applications rarely operate in isolation. Whether it's logging in with Google or sharing data with a third-party service, users demand interoperability and security. That’s where OAuth2 steps in: a powerful protocol designed to delegate access without compromising user credentials. diff --git a/src/routes/blog/post/understanding-idp-vs-sp-initiated-sso/+page.markdoc b/src/routes/blog/post/understanding-idp-vs-sp-initiated-sso/+page.markdoc index 81c427a2f73..3fd0316c970 100644 --- a/src/routes/blog/post/understanding-idp-vs-sp-initiated-sso/+page.markdoc +++ b/src/routes/blog/post/understanding-idp-vs-sp-initiated-sso/+page.markdoc @@ -9,6 +9,19 @@ author: laura-du-ry callToAction: true unlisted: true category: product +faqs: + - question: "What is the difference between IdP-initiated and SP-initiated SSO?" + answer: "IdP-initiated SSO starts at the identity provider portal (the user picks an app from a dashboard), while SP-initiated SSO starts at the service the user is trying to use, which then redirects them to the IdP to authenticate. The end result is the same logged in session, but the trigger and redirect flow are different." + - question: "Which SSO flow is more secure?" + answer: "SP-initiated SSO is generally considered safer because the request originates from the service, so it is harder for attackers to forge an unsolicited login assertion. IdP-initiated flows are more vulnerable to certain assertion injection attacks and are increasingly discouraged for new integrations." + - question: "Can the same application support both SSO flows?" + answer: "Yes. Many SaaS apps support both. Employees log in through the IdP dashboard (IdP-initiated), while external users hit the app directly and get redirected to authenticate (SP-initiated). The two flows can share the same backend session logic." + - question: "Does Appwrite support SSO?" + answer: "Yes. [Appwrite Auth](/docs/products/auth) supports SSO and federated identity through OAuth2 providers and protocols like SAML and OIDC on supported plans. Check the auth docs for the current list of supported providers and flows." + - question: "When should I prefer IdP-initiated SSO?" + answer: "IdP-initiated flows fit corporate portals, education hubs, or any environment where users start their day at a dashboard and pick from a list of internal apps. They also help when the IdP is the canonical source of truth and you want to keep app discovery centralised." + - question: "What is a SAML assertion?" + answer: "A SAML assertion is a signed XML message issued by the IdP that asserts who the user is and what permissions they have. The service provider verifies the signature, reads the user attributes, and creates a local session. It is the SAML equivalent of a JWT in OAuth2 flows." --- Managing authentication across multiple applications is a growing challenge for developers, especially with users expecting more convenience and security. Single Sign-On (SSO) offers a practical solution to that problem, allowing users to access multiple services with one login. Although the experience is almost always seamless for users, developers have multiple options for implementing SSO in their applications. diff --git a/src/routes/blog/post/unlimited-appwrite-sites-free-plan/+page.markdoc b/src/routes/blog/post/unlimited-appwrite-sites-free-plan/+page.markdoc index 590753f1b19..5d08188f19e 100644 --- a/src/routes/blog/post/unlimited-appwrite-sites-free-plan/+page.markdoc +++ b/src/routes/blog/post/unlimited-appwrite-sites-free-plan/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/sites-free-plan.avif timeToRead: 4 author: laura-du-ry category: announcement +faqs: + - question: "How many sites can I deploy on the Appwrite free plan?" + answer: "There is no per project cap on Sites for the free plan. You can deploy unlimited sites under a single Appwrite project for staging, previews, internal tools, and production, all without upgrading." + - question: "What is included with each site on the free plan?" + answer: "Every site on [Appwrite Sites](/docs/products/sites) includes automatic builds, free SSL, DDoS protection, and global CDN distribution. You do not have to wire any of this up yourself." + - question: "Can I use my own custom domain on the free plan?" + answer: "Yes. You can add a custom domain to any site on the free plan, including subdomains for staging or preview environments. Appwrite handles the SSL certificate issuance and renewal." + - question: "Are there any limits I should know about?" + answer: "There is no cap on the number of sites, but the free plan still has the standard bandwidth, build minutes, and storage quotas attached to the broader Appwrite project. Check the pricing page for the current numbers." + - question: "Can I deploy multiple frameworks in the same Appwrite project?" + answer: "Yes. Each site is configured independently, so you can run a Next.js production app, a Vite docs site, and a static landing page side by side in one project. See the [Sites docs](/docs/products/sites) for the supported frameworks." + - question: "Do I need to upgrade to use staging or preview environments?" + answer: "No. Spin up a separate site per environment (staging, preview, production) and point each one at the appropriate branch. Everything stays on the free plan." --- When we launched Appwrite Sites in early access, our goal was clear: make deploying modern web projects as easy and integrated as building them. From the start, we intended for developers to have full flexibility, to deploy, test, and scale without limits. diff --git a/src/routes/blog/post/user-impersonation-tutorial/+page.markdoc b/src/routes/blog/post/user-impersonation-tutorial/+page.markdoc index b915b46cc14..2f552adede0 100644 --- a/src/routes/blog/post/user-impersonation-tutorial/+page.markdoc +++ b/src/routes/blog/post/user-impersonation-tutorial/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 12 author: atharva category: tutorial, product featured: false +faqs: + - question: "What is user impersonation in Appwrite?" + answer: "User impersonation lets a designated user (typically a support agent or admin) make requests on behalf of another user without knowing their credentials. The impersonator's actions are scoped to that user's permissions and recorded in audit logs." + - question: "How do I enable impersonation for a user in Appwrite?" + answer: "Open the user in the Appwrite Console under Auth, scroll to the User impersonation section, and toggle it on. Appwrite then grants that user the users.read scope so they can list other users and switch into their context through the [Appwrite Auth](/docs/products/auth) APIs." + - question: "Is impersonation safe to use in production?" + answer: "Yes, when scoped carefully. Limit the impersonator role to a small group of trusted staff, rely on row level permissions to prevent privilege escalation, and review the audit log regularly. Treat the ability to impersonate the same way you would treat database admin access." + - question: "Does impersonation bypass row level security?" + answer: "No. The impersonated session inherits the target user's permissions, so the row level rules still apply. If the original user cannot see a row, the impersonator cannot either." + - question: "Will the impersonated user know I am acting as them?" + answer: "Appwrite logs impersonation actions in the project audit log, but it does not send the user a notification by default. If you need that, add a server side hook or [Appwrite Function](/docs/products/functions) that sends an email or alert whenever an impersonation session is created." + - question: "What if I do not want any of my staff to be able to impersonate users?" + answer: "Do nothing. Impersonation is off by default and only available to users you explicitly enable it for. The capability is opt in per user, not a global account setting." --- User impersonation lets a trusted operator act as another user without sharing credentials. It is useful when your support team needs to debug a user-specific issue, verify what someone sees with their permissions, or manage data on their behalf. diff --git a/src/routes/blog/post/user-role-guests-missing-scope-account/+page.markdoc b/src/routes/blog/post/user-role-guests-missing-scope-account/+page.markdoc index 5d2d3e9390b..c1037b1eb18 100644 --- a/src/routes/blog/post/user-role-guests-missing-scope-account/+page.markdoc +++ b/src/routes/blog/post/user-role-guests-missing-scope-account/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/user-role-guests-missing-scope-account/cover.avif timeToRead: 5 author: ebenezer-don category: debugging +faqs: + - question: "What does User (role: guests) missing scope (account) mean?" + answer: "It means the request hit Appwrite without an authenticated session, so the caller is treated as a guest. The endpoint you called requires an account scope, which only logged in users have. You need to create or restore a session before making the call." + - question: "Why do I get this error right after calling account.get()?" + answer: "Usually because there is no active session in the current SDK client. Either the user has not logged in yet, the session cookie was not sent, or you are calling account.get on a fresh server side client that has not been authenticated for this request." + - question: "How do I fix this in OAuth2 web apps with cross domain cookies?" + answer: "Either allow third party cookies in the browser during local development, configure a [custom domain](/docs/advanced/platform/custom-domains) so cookies become first party, or switch to OAuth2 token based auth with createOAuth2Token which falls back to local storage." + - question: "How do I handle this on the server side in SSR frameworks?" + answer: "Server side sessions are not persisted automatically. Create the session, capture the secret returned by Appwrite, store it in your own session store or cookie, and attach it to subsequent server side clients. See the [Appwrite Auth](/docs/products/auth) docs for the SSR pattern." + - question: "Is it ever safe to ignore this error?" + answer: "Yes. On app startup it is the simplest way to detect that no user is logged in. Catch the exception from account.get and redirect to your login screen. The error is only a real problem when you expected an authenticated session to exist." + - question: "Can I prevent the error by checking for a session first?" + answer: "There is no separate is logged in endpoint. The idiomatic pattern is to call account.get inside a try/catch, treat the missing scope error as no session, and treat a successful response as a logged in user." --- If you've been working with Appwrite, you've likely encountered the error message **"Error: User (role: guests) missing scope (account)"** at some point. This error is one of the most common questions we see from developers, especially those new to Appwrite. In this post, we'll break down what this error means and walk through the various scenarios where it might appear, along with their solutions. diff --git a/src/routes/blog/post/using-nextjs-wrong/+page.markdoc b/src/routes/blog/post/using-nextjs-wrong/+page.markdoc index 3a0ba71ef9c..adccce504eb 100644 --- a/src/routes/blog/post/using-nextjs-wrong/+page.markdoc +++ b/src/routes/blog/post/using-nextjs-wrong/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 8 author: atharva category: tutorial featured: false +faqs: + - question: "When should I use Next.js instead of plain React with Vite?" + answer: "Use Next.js when you need server side rendering, static generation, or server components for SEO, fast initial loads, or smaller client bundles. For internal dashboards and admin tools behind a login, plain React with Vite is usually simpler and lighter." + - question: "What is the difference between server and client components?" + answer: "Server components run on the server, can access databases and secrets directly, and only send HTML to the browser. Client components ship JavaScript that hydrates and runs in the browser. You add the 'use client' directive at the top of a file to opt into a client component." + - question: "Why is fetching data in useEffect a bad pattern in Next.js?" + answer: "Fetching in useEffect means the page renders empty first, then JavaScript loads, then the request fires, then the UI updates. Users see a loading spinner instead of content. Server components fetch on the server before the page is sent, so the user gets HTML with real data immediately." + - question: "Which Appwrite SDK do I use in a server component?" + answer: "Use the Node SDK (node-appwrite) in server components and the Web SDK (appwrite) in client components. Server components typically authenticate with an [Appwrite](/docs/products/auth) API key, while client components use the user's session." + - question: "Can I mix server and client components in the same route?" + answer: "Yes. The recommended pattern is to start every component as a server component and only mark the smaller interactive subtrees as client components. You can pass serialisable props from server components down into client components, but not the other way around." + - question: "Will server side rendering slow down my pages?" + answer: "On the contrary, SSR usually improves perceived performance because the user sees content immediately instead of a spinner. The trade off is that your server does more work per request, so cache aggressively (with revalidate or ISR) for high traffic pages." --- Next.js has become the default choice for new React projects. But here's the problem: most developers treat it like React with a fancy router. They spin up a Next.js app, slap `'use client'` on every component, fetch data in `useEffect`, and wonder why when they face problems. diff --git a/src/routes/blog/post/valentines-day-sonnet-generator/+page.markdoc b/src/routes/blog/post/valentines-day-sonnet-generator/+page.markdoc index a2016da8bb7..d8b1b6c9d60 100644 --- a/src/routes/blog/post/valentines-day-sonnet-generator/+page.markdoc +++ b/src/routes/blog/post/valentines-day-sonnet-generator/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/valentines-day-sonnet-generator/cover.avif timeToRead: 7 author: aditya-oberai category: functions +faqs: + - question: "What does this Appwrite Function do?" + answer: "It accepts a name from the frontend, sends a prompt to OpenAI's GPT-4 API asking for a Shakespearean style sonnet about that person, and returns the generated sonnet. The function is deployed from the Prompt ChatGPT [Appwrite Functions](/docs/products/functions) template." + - question: "Why use Appwrite Functions for an OpenAI call instead of calling OpenAI from the browser?" + answer: "Calling OpenAI directly from the browser leaks your API key. Wrapping the call in an Appwrite Function keeps the key in a server side environment variable, lets you add rate limits and validation, and gives you a single endpoint for any client to hit." + - question: "Which environment variables do I need to set?" + answer: "Set OPENAI_API_KEY to a valid OpenAI API key with access to GPT-4. The function reads this from the function's environment variables, so it never reaches the client." + - question: "Do I need a paid OpenAI account to use GPT-4?" + answer: "Yes. GPT-4 access requires at least OpenAI Usage tier 1, which means a payment method on file and some prior usage on lower tier models. Free trial accounts cannot call GPT-4 directly." + - question: "Can I swap GPT-4 for another model?" + answer: "Yes. Edit the model parameter in the function's request to OpenAI to use any model your account has access to (for example, GPT-4o or GPT-4o-mini). You can also point the request at a different provider entirely as long as you change the SDK call accordingly." + - question: "How do I deploy the static frontend?" + answer: "The Prompt ChatGPT template ships the frontend in the static folder, which is served by the function itself. Alternatively, deploy the HTML separately on [Appwrite Sites](/docs/products/sites) and call the function as an API." --- This year to make Valentine’s Day a little more special for all you lovebirds, you might remember that we worked on a fun little project. This project allowed a number of you to create romantic sonnets for your loved ones. Did you know, however, that this project was powered by a Node.js Appwrite Function and OpenAI’s GPT-4 API? diff --git a/src/routes/blog/post/vibe-coding-security-best-practices/+page.markdoc b/src/routes/blog/post/vibe-coding-security-best-practices/+page.markdoc index 8f05793c646..352f1d3226d 100644 --- a/src/routes/blog/post/vibe-coding-security-best-practices/+page.markdoc +++ b/src/routes/blog/post/vibe-coding-security-best-practices/+page.markdoc @@ -9,6 +9,19 @@ author: ebenezer-don category: tutorial featured: false callToAction: true +faqs: + - question: "What is vibe coding?" + answer: "Vibe coding is the practice of building software by guiding an AI assistant in natural language rather than typing every line yourself. You describe the feature, review what the AI produces, and iterate. It can be faster, but it pushes responsibility for code quality and security onto the human reviewer." + - question: "Is AI generated code secure by default?" + answer: "No. AI models generate plausible code based on training patterns, not verified secure code. They routinely produce insecure authentication, missing input validation, hardcoded secrets, and outdated crypto. Treat every AI suggestion as untrusted input and review it before shipping." + - question: "What is the single most impactful thing I can do to secure vibe coded apps?" + answer: "Stop writing your own authentication. Use a managed auth service like [Appwrite Auth](/docs/products/auth), Auth0, or Clerk so password hashing, session handling, MFA, and rate limiting are not your responsibility. Most production breaches start with bespoke auth that an LLM helped draft." + - question: "How do I store secrets safely when using AI tools?" + answer: "Never commit secrets to source code. Use environment variables, a secrets manager, or your platform's secret store, and add the relevant files to gitignore. If you suspect a secret was pushed to a repo, rotate it immediately, removing the commit alone is not enough." + - question: "Should I let AI write database queries?" + answer: "Only if you read every line. AI models still generate string concatenated SQL that is vulnerable to injection. Prefer parameterized queries, an ORM, or a managed data API like [Appwrite Databases](/docs/products/databases) that does the escaping for you." + - question: "Do I still need code review and tests if AI wrote the code?" + answer: "Yes, more than ever. AI generated code looks confident even when it is wrong. Pair it with unit tests, integration tests, type checks, linters, and a human reviewer for security sensitive changes. The faster you generate, the more you need to verify." --- Vibe coding is changing the way developers build software. Instead of manually writing every function, many developers are beginning to rely on AI-assisted tools to generate code based on natural language instructions. This approach can significantly speed up development and allow teams to create applications faster. But... the convenience of vibe coding comes with significant security risks. diff --git a/src/routes/blog/post/webp-support-for-safari/+page.markdoc b/src/routes/blog/post/webp-support-for-safari/+page.markdoc index dc93f0990c1..ed08b059efa 100644 --- a/src/routes/blog/post/webp-support-for-safari/+page.markdoc +++ b/src/routes/blog/post/webp-support-for-safari/+page.markdoc @@ -7,6 +7,19 @@ cover: /images/blog/webp-support-for-safari/cover.avif timeToRead: 3 author: eldad-fux category: product +faqs: + - question: "What is WebP and why does it matter?" + answer: "WebP is a modern image format that compresses better than JPEG and PNG while keeping similar quality. It typically reduces image size by around 25 to 35 percent, which means faster page loads, lower bandwidth bills, and a better experience on mobile networks." + - question: "Is WebP supported on Safari now?" + answer: "Yes. Safari has supported WebP since Safari 14 (macOS Big Sur and iOS 14), so every currently supported Apple OS version can decode WebP. Appwrite Cloud now serves WebP directly to Safari instead of falling back to PNG." + - question: "Do I have to change anything in my app to get the smaller images?" + answer: "No. If you use [Appwrite Storage](/docs/products/storage) image previews with output=webp, Safari clients now get WebP automatically. There are no SDK changes, no new parameters, and no extra requests." + - question: "Will old Safari versions still work?" + answer: "Versions that pre date Safari 14 are not part of the supported matrix on modern macOS or iOS. For practical purposes, all currently used Safari versions handle WebP, so the PNG fallback path is no longer triggered." + - question: "How much will my image sizes drop after the switch?" + answer: "Expect roughly a 25 to 35 percent reduction compared to PNG for typical photos and UI assets, with even larger savings on graphics and screenshots. Real numbers depend on the source image, but the change is automatic so you can measure it on your own dashboards." + - question: "Does this work for both Cloud and self hosted Appwrite?" + answer: "WebP delivery is rolled out on Appwrite Cloud first. Self hosted instances inherit the same behavior in the matching release, so check your version's changelog if you run Appwrite on your own infrastructure." --- We’re happy to share that Appwrite Cloud users now have full WebP support across all versions of Safari browsers and devices. diff --git a/src/routes/blog/post/what-is-cdn/+page.markdoc b/src/routes/blog/post/what-is-cdn/+page.markdoc index 30244524c98..1f74c0744b2 100644 --- a/src/routes/blog/post/what-is-cdn/+page.markdoc +++ b/src/routes/blog/post/what-is-cdn/+page.markdoc @@ -9,6 +9,19 @@ author: veeresh-mulge callToAction: true unlisted: true category: tutorial +faqs: + - question: "What is a CDN in plain terms?" + answer: "A content delivery network is a fleet of servers placed in cities around the world that cache copies of your content close to your users. When someone visits your site, they connect to the nearest edge server instead of the origin, which means lower latency and less load on your origin." + - question: "What is the difference between a CDN and a web host?" + answer: "A web host runs your origin server, where your app and data actually live. A CDN sits in front of that origin and serves cached copies of static (and sometimes dynamic) responses from many global locations. You almost always want both." + - question: "Does Appwrite include a CDN?" + answer: "Yes. Every site you deploy on [Appwrite Sites](/docs/products/sites) is served through Appwrite's global CDN with 120+ points of presence, free TLS, and automatic edge caching. There is no separate CDN to set up. See the [Appwrite Network docs](/docs/products/network) for details." + - question: "Can a CDN cache API responses, not just static files?" + answer: "Yes. Modern CDNs (including the Appwrite CDN) cache API responses based on URL, headers, and cache control directives. This is most useful for read heavy endpoints with shared responses, such as product listings or public content feeds." + - question: "Will a CDN improve security as well as speed?" + answer: "Usually yes. CDNs sit in front of your origin and absorb traffic spikes and DDoS attacks, terminate TLS at the edge, and often include a web application firewall. They are part of a layered defense, not a replacement for application level security." + - question: "How is cached content kept up to date?" + answer: "Each cached object has a time to live (TTL). When it expires, the next request triggers a fresh fetch from the origin. You can also force invalidation explicitly when you push new content, so users do not have to wait for the TTL to expire." --- Ever clicked on a website and been surprised at how quickly, or painfully slowly, it loads? That speed isn't just about how powerful the server is; it's about where the server is. If your app lives in New York but your users are in Tokyo, every request must cross an ocean before seeing anything. Not ideal. diff --git a/src/routes/blog/post/what-is-ciam/+page.markdoc b/src/routes/blog/post/what-is-ciam/+page.markdoc index a5611b309c1..3934fb07f60 100644 --- a/src/routes/blog/post/what-is-ciam/+page.markdoc +++ b/src/routes/blog/post/what-is-ciam/+page.markdoc @@ -9,6 +9,19 @@ author: laura-du-ry callToAction: true unlisted: true category: product +faqs: + - question: "What is CIAM?" + answer: "CIAM stands for Customer Identity and Access Management. It is the set of tools and processes that let a business register, authenticate, authorize, and manage external users (customers, partners, citizens) at scale, while staying compliant with privacy regulations." + - question: "How is CIAM different from traditional IAM?" + answer: "Traditional IAM is built for internal employees and focuses on operational efficiency and tight access policies. CIAM is built for external customers and prioritises self service registration, social and passwordless logins, smooth user experience, and handling millions of users instead of thousands." + - question: "What features should a CIAM solution include?" + answer: "At minimum: self service signup and login (with social, MFA, and SSO options), profile and preference management, consent and privacy tooling for GDPR or CCPA, strong authentication features like passwordless or biometrics, and scalability to support millions of accounts. [Appwrite Auth](/docs/products/auth) covers most of these out of the box." + - question: "Does Appwrite work as a CIAM platform?" + answer: "Yes. [Appwrite Auth](/docs/products/auth) provides registration, login, social and OAuth2 providers, MFA, session management, and built in security features that map directly to CIAM requirements. For larger deployments you can pair it with custom roles and team permissions." + - question: "Why does CIAM matter for compliance?" + answer: "Regulations like GDPR, CCPA, and HIPAA require you to capture consent, control where personal data is stored, and let users access or delete their data. A CIAM platform centralises that logic so you do not have to bolt it onto every app. The fines for getting this wrong are significant." + - question: "When do I outgrow building auth myself and need a CIAM platform?" + answer: "If you find yourself building MFA, social login, password resets, session revocation, audit logging, and consent flows by hand, you are already past the point where a CIAM platform pays for itself. Most teams hit this around their first real B2C launch." --- Balancing security and user experience has always been a challenge for digital businesses. Too much friction, and users abandon. Too little, and security is compromised. Customer Identity and Access Management (CIAM) bridges this gap, offering a secure, seamless way to authenticate, authorize, and personalize user journeys at scale. diff --git a/src/routes/blog/post/what-is-golang/+page.markdoc b/src/routes/blog/post/what-is-golang/+page.markdoc index fdcfbac5731..5956a007039 100644 --- a/src/routes/blog/post/what-is-golang/+page.markdoc +++ b/src/routes/blog/post/what-is-golang/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 6 author: aditya-oberai category: product featured: false +faqs: + - question: "What is Go (Golang)?" + answer: "Go is a statically typed, compiled programming language created at Google in 2009. It is designed for simplicity, fast compilation, and concurrency. It is widely used for backend services, CLI tools, cloud infrastructure, and high performance systems." + - question: "What are goroutines and why are they useful?" + answer: "Goroutines are lightweight functions that run concurrently. They start at around 2 KB of stack and are multiplexed onto OS threads by the Go runtime, so you can spin up thousands of them without exhausting memory. Combined with channels, they make concurrent code much easier to write than thread pools." + - question: "What is Go best suited for?" + answer: "Backend services, microservices, cloud and DevOps tooling, networked daemons, and CPU heavy workloads like data transformation. It is less suited to native GUI apps or projects that depend on a deep ecosystem of third party scientific libraries." + - question: "Can I use Go with Appwrite?" + answer: "Yes. Appwrite ships a Go SDK and a Go runtime for [Appwrite Functions](/docs/products/functions), so you can write your function code in Go and call any Appwrite service (databases, auth, storage, messaging) from it." + - question: "How does Go compare to Node.js or Python for backend work?" + answer: "Go is typically faster at CPU bound work and uses far less memory per concurrent request than Node.js or Python. The trade off is a smaller third party ecosystem and more boilerplate around error handling. For high throughput services or CLIs, Go usually wins." + - question: "Is Go hard to learn?" + answer: "Go is one of the easier compiled languages to pick up. The spec is small, the standard library is rich enough that you rarely need extra dependencies, and the tooling (formatter, test runner, build system) is built in. Most developers are productive in a week or two." --- Appwrite has just announced support for Go SDK and Function runtime in version 1.6. The Go programming language (also known as Golang) is popular for its concurrency model, speed, and simple URL-based dependency management. diff --git a/src/routes/blog/post/what-is-hipaa-compliant/+page.markdoc b/src/routes/blog/post/what-is-hipaa-compliant/+page.markdoc index 20a42439726..b647dd81d70 100644 --- a/src/routes/blog/post/what-is-hipaa-compliant/+page.markdoc +++ b/src/routes/blog/post/what-is-hipaa-compliant/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 8 author: vincent-ge category: security featured: false +faqs: + - question: "What does HIPAA stand for and who does it apply to?" + answer: "HIPAA is the Health Insurance Portability and Accountability Act, a US law from 1996. It applies to covered entities (health plans, providers, clearinghouses) and to business associates that handle protected health information (PHI) on their behalf, including software vendors and developers." + - question: "What is protected health information (PHI)?" + answer: "PHI is any individually identifiable health information that a covered entity creates, receives, stores, or transmits. That includes names, addresses, dates, diagnoses, medical record numbers, biometric identifiers, and even photos when linked to health data. If your app handles any of this, HIPAA applies." + - question: "What technical safeguards does HIPAA require from developers?" + answer: "The Security Rule requires technical safeguards including access controls, audit logs, integrity controls, transmission security (encryption in transit), and protections for data at rest. As a developer, you are responsible for implementing these in code and configuration." + - question: "Does Appwrite help with HIPAA compliance?" + answer: "Appwrite Cloud offers configurations and security controls that support HIPAA aligned deployments on supported plans, including encryption, access controls, and audit logging. Review the [Appwrite security documentation](/docs/advanced/security) and your compliance contract before storing PHI." + - question: "What happens if my app is not HIPAA compliant?" + answer: "Non compliance can lead to civil fines (often tens of thousands to millions of dollars per violation category per year), criminal penalties for willful neglect, mandatory breach notifications, and significant reputational damage. Enforcement has increased steadily over the past decade." + - question: "When should I start thinking about HIPAA in my project?" + answer: "At the design phase, not after launch. Retrofitting encryption, audit logging, access control, and BAAs into an existing system is far more expensive than designing them in from the start. If you might ever touch PHI, assume HIPAA applies and plan accordingly." --- If you work in the health industry there is a good chance you have heard of HIPAA, but if you don’t, it might be unknown waters. HIPAA stands for the Health Insurance Portability and Accountability Act. It might sound like it’s only the business of healthcare professionals, but if you're working with healthcare apps or platforms that handle health information, HIPAA becomes your business, too. So, let’s break down what HIPAA is and why you, as a developer, need to sit up and take notice. diff --git a/src/routes/blog/post/what-is-mcp/+page.markdoc b/src/routes/blog/post/what-is-mcp/+page.markdoc index 605bbd44208..ffa9f619835 100644 --- a/src/routes/blog/post/what-is-mcp/+page.markdoc +++ b/src/routes/blog/post/what-is-mcp/+page.markdoc @@ -9,6 +9,19 @@ author: ebenezer-don category: tutorial featured: false callToAction: true +faqs: + - question: "What does MCP (Model Context Protocol) actually do?" + answer: "MCP is a standard that lets AI assistants connect to external tools, databases, APIs, and files through a uniform interface. Instead of writing custom integrations for every service, an AI client speaks MCP and the MCP server handles the actual data access. It turns a model that can only reason into one that can fetch real data and trigger actions." + - question: "Who created MCP and when was it released?" + answer: "MCP was developed by Anthropic and released as an open standard in November 2024. It is now adopted by a growing set of AI clients and tool providers, including IDE assistants, desktop clients, and backend platforms." + - question: "How is MCP different from a regular REST API?" + answer: "A REST API is one specific contract for one specific service. MCP is a protocol layer above that: it defines how AI clients discover tools, list their capabilities, and call them in a consistent way. The MCP server still talks to the underlying APIs, but the AI only has to learn MCP once instead of every API." + - question: "Does Appwrite have its own MCP server?" + answer: "Yes. Appwrite ships an official MCP server that exposes its APIs (auth, databases, storage, functions, messaging) to MCP-compatible clients like Claude Desktop and Cursor. You can install it locally and let your AI assistant manage your Appwrite project directly. See [Appwrite Functions](/docs/products/functions) and the wider product docs for what it can drive." + - question: "Is MCP secure to use with production data?" + answer: "MCP itself is just the protocol. Security depends on how the server is configured. Most MCP servers today run locally over stdio so the AI client never gets raw credentials, and remote servers should be deployed behind auth and scoped permissions. Treat any MCP server like a privileged backend service and limit what it is allowed to read or write." + - question: "Do I need to know MCP internals to use it?" + answer: "No. As a developer using an AI assistant, you typically install an MCP server, point your client at it, and start asking questions. You only need to understand the protocol if you are building a new MCP server or debugging tool calls." --- Updated on October 6, 2025 diff --git a/src/routes/blog/post/why-developers-leaving-nextjs-tanstack-start/+page.markdoc b/src/routes/blog/post/why-developers-leaving-nextjs-tanstack-start/+page.markdoc index d50c7a528b6..643f7c6f6da 100644 --- a/src/routes/blog/post/why-developers-leaving-nextjs-tanstack-start/+page.markdoc +++ b/src/routes/blog/post/why-developers-leaving-nextjs-tanstack-start/+page.markdoc @@ -9,6 +9,19 @@ author: tessa category: tutorial featured: false callToAction: true +faqs: + - question: "What is TanStack Start?" + answer: "TanStack Start is a full-stack React framework built on TanStack Router and powered by Vite. It offers type-safe routing, server functions, SSR, and flexible deployment, and it is built by the same team behind TanStack Query and TanStack Router." + - question: "Why are developers moving from Next.js to TanStack Start?" + answer: "The common reasons are less framework magic, clearer mental models, and freedom from a single hosting platform. Developers say TanStack Start feels closer to plain React, the type-safe routing surfaces bugs early, and it deploys cleanly to Netlify, Cloudflare, Vercel, or a Node server." + - question: "Is TanStack Start production-ready?" + answer: "Teams are already using it in production for dashboards, real-time apps, and company websites. It is younger than Next.js so the ecosystem is smaller, but the core APIs are stable and the underlying libraries (Router, Query) have been battle-tested for years." + - question: "Does TanStack Start replace Next.js?" + answer: "Not for everyone. Next.js is still a strong choice if you want App Router conventions, deep Vercel integration, or its built-in image and font optimization. TanStack Start is the better pick when you want explicit control, fewer abstractions, and the flexibility to host anywhere." + - question: "Can I use Appwrite with TanStack Start?" + answer: "Yes. Appwrite works with any JavaScript framework via its web SDK, and you can call its APIs from TanStack Start server functions or directly from the client. Use [Appwrite Auth](/docs/products/auth) for user sessions and [Appwrite Databases](/docs/products/databases) for data, and host the frontend wherever your TanStack Start deployment lives." + - question: "Do I need to learn TanStack Query and Router before TanStack Start?" + answer: "It helps but is not strictly required. Start ships with Router built in and Query integrates naturally, so you will pick them up as you build. Existing knowledge from either library transfers directly." --- The React world is full of opinions, and every few years a new framework changes how we think about building apps. Next.js has been the default choice for a long time. It offered a clear path to production and made React easier to manage. But recently, more developers have been moving toward **TanStack Start**, a newer full-stack framework built by the same team behind TanStack Query and TanStack Router. diff --git a/src/routes/blog/post/why-multi-cloud-is-taking-over/+page.markdoc b/src/routes/blog/post/why-multi-cloud-is-taking-over/+page.markdoc index 0d46d8fa2f9..088832dd362 100644 --- a/src/routes/blog/post/why-multi-cloud-is-taking-over/+page.markdoc +++ b/src/routes/blog/post/why-multi-cloud-is-taking-over/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 4 author: aditya-oberai category: product callToAction: true +faqs: + - question: "What is multi-cloud?" + answer: "Multi-cloud means running workloads across more than one cloud provider (such as AWS, Google Cloud, and Azure) instead of standardizing on a single vendor. Different services or regions can live on different providers, chosen based on cost, performance, compliance, or availability." + - question: "How is multi-cloud different from hybrid cloud?" + answer: "Hybrid cloud combines on-premises infrastructure with at least one public cloud. Multi-cloud refers specifically to using multiple public cloud providers. A setup can be both at the same time if it mixes on-prem with several public clouds." + - question: "What are the main risks of going multi-cloud?" + answer: "The biggest tradeoffs are operational complexity, higher tooling cost, a wider attack surface, and data transfer fees between providers. Teams typically need stronger automation, centralized identity, and consistent observability to keep a multi-cloud setup from outpacing what the team can manage." + - question: "How does Appwrite use a multi-cloud approach?" + answer: "The Appwrite Network is multi-cloud and vendor-agnostic by design, distributing services across providers and regions to keep latency low and avoid lock-in. That lets users deploy their Appwrite project close to their end users without being tied to a single underlying cloud." + - question: "Does multi-cloud help with data sovereignty?" + answer: "Yes. Because you can place workloads with providers and regions that meet specific regulatory requirements (GDPR in Europe, residency rules in India or the Middle East), multi-cloud makes it easier to keep data where the law says it has to live without abandoning a global footprint." + - question: "Is multi-cloud only for large companies?" + answer: "No. Smaller teams increasingly use multi-cloud to avoid lock-in, take advantage of free tiers across providers, or run their app close to a specific user base. Managed platforms like Appwrite reduce the operational overhead that used to make multi-cloud impractical for small teams." --- Choosing the right cloud provider can be challenging, which is why more businesses are turning to **multi-cloud,** using services from multiple cloud providers instead of relying on just one. diff --git a/src/routes/blog/post/why-nosql-databases-are-a-better-fit-for-ai-applications-than-relational-databases/+page.markdoc b/src/routes/blog/post/why-nosql-databases-are-a-better-fit-for-ai-applications-than-relational-databases/+page.markdoc index b189af65973..0ceeb090c13 100644 --- a/src/routes/blog/post/why-nosql-databases-are-a-better-fit-for-ai-applications-than-relational-databases/+page.markdoc +++ b/src/routes/blog/post/why-nosql-databases-are-a-better-fit-for-ai-applications-than-relational-databases/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: product featured: false +faqs: + - question: "Why are NoSQL databases a better fit for AI applications?" + answer: "AI workloads deal with unstructured, fast-changing data: embeddings, logs, model outputs, and user signals that rarely follow a fixed shape. NoSQL databases offer schema flexibility, horizontal scalability, and native support for documents and vectors, which removes the migration tax that relational databases impose every time the data model changes." + - question: "What are the main types of NoSQL databases used in AI?" + answer: "The five common categories are document stores (MongoDB, Couchbase), key-value stores (Redis, DynamoDB), column-family stores (Cassandra, HBase), graph databases (Neo4j, Neptune), and vector databases (Pinecone, Weaviate, Qdrant). Most production AI systems combine more than one, with each handling the workload it is best suited for." + - question: "Do AI applications still need a relational database?" + answer: "Often, yes. Relational databases remain the right choice for transactional, billing, and reporting workloads where strong consistency and ACID guarantees matter. Mature AI systems typically use both: relational for the structured layer, NoSQL for the dynamic AI-driven layer." + - question: "What is a vector database and when do I need one?" + answer: "A vector database stores and queries high-dimensional embeddings. You need one when building semantic search, retrieval-augmented generation (RAG), image similarity, or any feature that compares meaning rather than exact values. Some general-purpose databases (such as MongoDB Atlas) now offer vector search built in, reducing the need for a separate store." + - question: "Can I build an AI backend with Appwrite and MongoDB?" + answer: "Yes. You can self-host Appwrite with MongoDB configured as the underlying database and get auth, APIs, storage, and real-time updates without extra glue code. See [Appwrite Databases](/docs/products/databases) for what the data layer exposes." + - question: "Is schema flexibility just an excuse to skip data modeling?" + answer: "No, and treating it that way usually backfires. Schema flexibility means you can evolve the model as you learn, not that you skip modeling entirely. Production NoSQL systems still benefit from clear conventions, indexes, and validation at the application layer." --- AI applications don't work with data the way traditional software does. They ingest logs, embeddings, user behavior, generated content, and constantly evolving model features (data that is dynamic, semi-structured, and inherently unpredictable). Traditional relational databases were never built for this. That's why NoSQL databases have become the default starting point for a lot of modern AI workloads. diff --git a/src/routes/blog/post/why-schema-less-databases-are-better-for-modern-ai-workloads/+page.markdoc b/src/routes/blog/post/why-schema-less-databases-are-better-for-modern-ai-workloads/+page.markdoc index d8505f18948..66bb929d1a8 100644 --- a/src/routes/blog/post/why-schema-less-databases-are-better-for-modern-ai-workloads/+page.markdoc +++ b/src/routes/blog/post/why-schema-less-databases-are-better-for-modern-ai-workloads/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: jake-barnby category: product featured: false +faqs: + - question: "What is a schema-less database?" + answer: "A schema-less database stores records without enforcing a fixed, predefined structure across them. Each record can have different fields, and new fields can be added without migrations or downtime. The term overlaps heavily with NoSQL, especially document databases like MongoDB." + - question: "Why are schema-less databases better for AI workloads?" + answer: "AI pipelines change constantly. Model inputs and outputs evolve, new features get added, and data shapes shift between experiments. Schema-less databases let the data model evolve in lockstep, removing the migration cost that slows relational systems down every time an AI team ships a change." + - question: "Does schema-less mean no validation at all?" + answer: "No. Schema-less means the database does not enforce a global schema, but most production systems still apply validation at the application layer, often with libraries like Zod or Pydantic. You get flexibility where it matters and guardrails where they matter." + - question: "When should I still use a relational database for AI?" + answer: "Use relational databases for the transactional layer of your system: billing, accounts, audit logs, and anything that benefits from ACID guarantees. Most mature AI products run a relational database alongside a schema-less one, with each handling the workload it is built for." + - question: "How does Appwrite fit with schema-less databases?" + answer: "Appwrite ships auth, APIs, storage, [Appwrite Functions](/docs/products/functions), and real-time updates out of the box, and you can self-host it with MongoDB configured natively. That gives you a flexible document model for AI data plus the rest of the backend without extra services to assemble." + - question: "Are schema-less databases harder to query than SQL databases?" + answer: "They use different query languages and patterns rather than being strictly harder. Document databases use rich query operators, aggregation pipelines, and indexes that handle most analytical and transactional patterns well. The tradeoff is fewer cross-collection joins, which usually pushes you toward different data modeling rather than worse performance." --- AI innovation moves fast. Traditional database schemas don't. That gap is one of the biggest reasons AI projects slow down after the prototype stage, and it's why schema-less databases have become the go-to choice for teams building modern AI systems. diff --git a/src/routes/blog/post/why-you-need-to-try-the-new-bun-runtime/+page.markdoc b/src/routes/blog/post/why-you-need-to-try-the-new-bun-runtime/+page.markdoc index 628cec56f5b..8deaac6579e 100644 --- a/src/routes/blog/post/why-you-need-to-try-the-new-bun-runtime/+page.markdoc +++ b/src/routes/blog/post/why-you-need-to-try-the-new-bun-runtime/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 15 author: vincent-ge category: product featured: false +faqs: + - question: "What is Bun and how is it different from Node.js?" + answer: "Bun is a JavaScript runtime, package manager, bundler, and test runner in a single binary. It runs JavaScript and TypeScript natively, implements many web standards (fetch, FormData, WebSocket), and is built around speed. Node.js is a runtime only, with separate tools for the rest of the stack." + - question: "Why use Bun as an Appwrite Function runtime?" + answer: "Bun cuts deploy and build time significantly because it installs dependencies and runs TypeScript without a separate transpile step. For Appwrite Functions, that means faster iteration loops when you deploy and test code multiple times an hour. See [Appwrite Functions](/docs/products/functions) for the full runtime list." + - question: "Does Bun support all npm packages?" + answer: "Most popular npm packages work with Bun, especially anything that targets standard JavaScript. Some native modules and Node-specific APIs may still have edge cases, so test critical dependencies before committing to Bun for a production workload." + - question: "Do I need to rewrite my Node.js code to run on Bun?" + answer: "Usually not. Bun aims for Node.js compatibility for most common APIs, so existing handlers, fetch calls, and TypeScript code often run unchanged. Edge cases tend to involve native bindings or very specific Node internals." + - question: "Can I write Appwrite Functions in TypeScript with Bun?" + answer: "Yes. Bun runs TypeScript natively, so you do not need a separate tsc step or a populated dist folder. You can deploy your .ts source directly to an Appwrite Function and Bun handles the rest." + - question: "Is Bun production-ready?" + answer: "Bun reached 1.0 in late 2023 and is now used in production by teams running APIs, scripts, and serverless functions. As with any newer runtime, validate your specific dependencies and workload patterns, but the core runtime has been stable for long enough to trust for most use cases." --- When Bun announced their 1.0 release, marking Bun stable and production-ready, we excitedly began working on a Bun runtime for [Appwrite Functions](/docs/products/functions). diff --git a/src/routes/blog/post/will-claude-design-replace-designers/+page.markdoc b/src/routes/blog/post/will-claude-design-replace-designers/+page.markdoc index bd4860adfa6..5455bae8435 100644 --- a/src/routes/blog/post/will-claude-design-replace-designers/+page.markdoc +++ b/src/routes/blog/post/will-claude-design-replace-designers/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aishwari category: ai featured: false +faqs: + - question: "Will Claude Design replace designers?" + answer: "Not in the broad sense. AI design tools speed up visual production, exploration, and format conversion, but they do not handle user research, stakeholder dynamics, accessibility judgment, or the decisions about what not to build. Those parts of design remain firmly human, and they are usually where the most senior design work lives." + - question: "What is Claude Design good at today?" + answer: "It shortens the gap between idea and first draft, generates many design variations quickly, takes on repetitive production work like resizing and component variants, and bridges formats from wireframe to mockup to code. That tends to compress the early and middle stages of a design project." + - question: "What does Claude Design still struggle with?" + answer: "Anything that depends on context outside the prompt: understanding specific users, interpreting business constraints, navigating team politics, and making ethical or accessibility tradeoffs. It also struggles with the judgment calls that come from sitting with a problem for weeks." + - question: "How does this change what designers actually do day-to-day?" + answer: "Mechanical work shrinks, and time shifts toward strategy, discovery, and tight collaboration with engineering. Many designers report shipping more, exploring more directions, and treating individual artifacts as less precious because variations are cheap to produce." + - question: "If design gets faster, where does the bottleneck move?" + answer: "Downstream. When design is no longer the slow part, the friction moves to backend work like authentication, databases, file storage, and serverless functions. Tools that tighten that loop (such as the [Appwrite Claude Code plugin](/blog/post/announcing-appwrite-claude-code-plugin)) become the next place to save time." + - question: "Should junior designers be worried about AI?" + answer: "Worried is the wrong frame, but ignoring the shift is risky. The work that used to fill an early-career portfolio (resizing, variants, polishing) is exactly what AI is now good at. Junior designers who lean into research, collaboration, and judgment-heavy work tend to find a stronger career path than those who anchor on production output alone." --- It's the question showing up in design Slack channels, Twitter threads, and conference hallways everywhere. Every time a new AI tool enters the design space, someone asks it out loud. With Claude Design now in the conversation, it's being asked more often than ever. diff --git a/src/routes/blog/post/x-oauth2-appwrite/+page.markdoc b/src/routes/blog/post/x-oauth2-appwrite/+page.markdoc index 068ffaf17d7..9c92bdd13e8 100644 --- a/src/routes/blog/post/x-oauth2-appwrite/+page.markdoc +++ b/src/routes/blog/post/x-oauth2-appwrite/+page.markdoc @@ -8,6 +8,19 @@ timeToRead: 5 author: aditya-oberai category: announcement, tutorial featured: false +faqs: + - question: "How do I add X (Twitter) login to my Appwrite app?" + answer: "Register an app in the X Developer Console, copy the Client ID and Client Secret, then open your Appwrite project, go to Auth, Settings, OAuth2 Providers, and enable X with those credentials. Paste Appwrite's redirect URI back into your X app's callback settings and save. See [Appwrite Auth](/docs/products/auth) for the full flow." + - question: "Does Appwrite use PKCE for X OAuth?" + answer: "Yes. The X adapter uses OAuth 2.0 with PKCE (Proof Key for Code Exchange), which X's API v2 requires. PKCE adds protection against authorization code interception, particularly for mobile and single-page apps." + - question: "Can I call the X API on behalf of a user after they sign in?" + answer: "Yes. Appwrite stores the access token and refresh token from the OAuth flow, and you can retrieve them via the Account API to call X endpoints (such as reading the user's profile or posts) on their behalf, scoped to the permissions you requested." + - question: "What scopes should I request from X?" + answer: "Start with Read at a minimum, which gives you basic profile and timeline access. Only request elevated permissions like Write (posting) or Direct Message access if your product actually uses them, since extra scopes increase the friction of the consent screen and the risk surface if a token leaks." + - question: "Do I need to write any backend code for X OAuth in Appwrite?" + answer: "No. Appwrite handles the redirect, code exchange, token storage, and session creation. From the frontend you call a single SDK method to get the authorization URL, then create the session on the callback page using the userId and secret in the query string." + - question: "What other OAuth providers does Appwrite support?" + answer: "Appwrite Auth supports a wide list of OAuth2 providers including Google, GitHub, Apple, Facebook, Microsoft, Discord, and many more, all configured the same way from the Appwrite Console. See [Appwrite Auth](/docs/products/auth) for the full list and setup steps." --- We're excited to announce that Appwrite Auth now includes an X OAuth adapter. You can now let users sign in with their X account using Appwrite's built-in OAuth2 support, with no custom backend code required.