<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Appwrite</title>
    <description>The latest articles on DEV Community by Appwrite (appwrite).</description>
    <link>https://dev.to/appwrite</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F2225%2F81202665-3201-4ceb-b247-f8c5feae746f.png</url>
      <title>DEV Community: Appwrite</title>
      <link>https://dev.to/appwrite</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/appwrite"/>
    <language>en</language>
    <item>
      <title>Weekly roundup: Password strength, self-serve BAA, and AI updates</title>
      <dc:creator>Aishwari Pahwa</dc:creator>
      <pubDate>Wed, 17 Jun 2026 07:35:01 +0000</pubDate>
      <link>https://dev.to/appwrite/weekly-roundup-password-strength-self-serve-baa-and-ai-updates-20hk</link>
      <guid>https://dev.to/appwrite/weekly-roundup-password-strength-self-serve-baa-and-ai-updates-20hk</guid>
      <description>&lt;p&gt;This week on the Appwrite blog, we shipped new Auth controls, made BAA acceptance self-serve for Pro organizations, covered Anthropic’s latest Claude models, and shared a full breakdown of everything that landed in May.&lt;/p&gt;

&lt;p&gt;Here’s everything that went live this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Product announcements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Announcing Password strength
&lt;/h3&gt;

&lt;p&gt;Appwrite Auth now lets you enforce password strength with minimum length and character requirements.&lt;/p&gt;

&lt;p&gt;You can set the smallest number of characters a password must have, and require character types such as uppercase letters, lowercase letters, numbers, and special characters.&lt;/p&gt;

&lt;p&gt;This gives teams more control over password rules at sign-up and password change, without building custom validation logic from scratch.&lt;/p&gt;

&lt;p&gt;Read the announcement: &lt;a href="https://appwrite.io/blog/post/announcing-password-strength" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/announcing-password-strength&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Announcing self-serve BAA
&lt;/h3&gt;

&lt;p&gt;Pro organizations can now accept a Business Associate Agreement directly from the Appwrite Console.&lt;/p&gt;

&lt;p&gt;Until now, getting a BAA with Appwrite required contacting the team and completing a signing process. With self-serve BAA, eligible Pro organizations can move faster without waiting on a sales or legal cycle.&lt;/p&gt;

&lt;p&gt;For teams building healthcare applications that store or process PHI, this removes a major operational blocker from the compliance workflow.&lt;/p&gt;

&lt;p&gt;Read the announcement: &lt;a href="https://appwrite.io/blog/post/announcing-self-serve-baa" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/announcing-self-serve-baa&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AI and developer ecosystem updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Anthropic launched Claude Fable 5 and Claude Mythos 5
&lt;/h3&gt;

&lt;p&gt;Anthropic launched Claude Fable 5 and Claude Mythos 5, its first Mythos-class models.&lt;/p&gt;

&lt;p&gt;We covered what changed, how the models compare, and what developers should know about benchmarks, safeguards, pricing, and agent workflows.&lt;/p&gt;

&lt;p&gt;The post breaks down where these models fit in the current AI developer ecosystem and what they could mean for teams building with coding assistants and agents.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/anthropic-just-launched-claude-fable-5-and-claude-mythos-5" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/anthropic-just-launched-claude-fable-5-and-claude-mythos-5&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Product updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  May product update
&lt;/h3&gt;

&lt;p&gt;May was packed with releases across Appwrite, including:&lt;/p&gt;

&lt;p&gt;→ Presences API&lt;/p&gt;

&lt;p&gt;→ Rust runtime&lt;/p&gt;

&lt;p&gt;→ Database relationships&lt;/p&gt;

&lt;p&gt;→ BigInt columns&lt;/p&gt;

&lt;p&gt;→ 7x faster Storage uploads&lt;/p&gt;

&lt;p&gt;→ Git deployment triggers&lt;/p&gt;

&lt;p&gt;→ Deployment retention&lt;/p&gt;

&lt;p&gt;→ Email policies&lt;/p&gt;

&lt;p&gt;→ Bun and Deno build runtimes&lt;/p&gt;

&lt;p&gt;→ Appwrite plugin for OpenAI Codex&lt;/p&gt;

&lt;p&gt;→ Dart 3.12 for Functions and Flutter 3.44 for Sites&lt;/p&gt;

&lt;p&gt;From realtime presence to faster Storage uploads and new runtime support, May focused on making Appwrite faster, more flexible, and easier to build with across more stacks.&lt;/p&gt;

&lt;p&gt;Read the full update: &lt;a href="https://appwrite.io/blog/post/may-product-update-presences-api-rust-runtime-7x-faster-storage-uploads-and-more" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/may-product-update-presences-api-rust-runtime-7x-faster-storage-uploads-and-more&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;We’re continuing to ship product updates, developer tutorials, and AI-focused deep dives every week.&lt;/p&gt;

&lt;p&gt;Explore the latest posts on the &lt;a href="https://appwrite.io/blog" rel="noopener noreferrer"&gt;Appwrite blog&lt;/a&gt; to stay updated with everything happening across Appwrite and the developer ecosystem.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>news</category>
      <category>privacy</category>
      <category>security</category>
    </item>
    <item>
      <title>May product update: Presences API, Rust runtime, 7x faster Storage uploads, and more</title>
      <dc:creator>Aishwari Pahwa</dc:creator>
      <pubDate>Fri, 12 Jun 2026 09:31:26 +0000</pubDate>
      <link>https://dev.to/appwrite/may-product-update-presences-api-rust-runtime-7x-faster-storage-uploads-and-more-9h5</link>
      <guid>https://dev.to/appwrite/may-product-update-presences-api-rust-runtime-7x-faster-storage-uploads-and-more-9h5</guid>
      <description>&lt;p&gt;Welcome back to the product update.&lt;/p&gt;

&lt;p&gt;May was packed with releases across Appwrite. We shipped new tools for realtime collaboration, faster file uploads, better deployment workflows, new runtimes, Auth controls, and database improvements to help you build faster and scale with more confidence.&lt;/p&gt;

&lt;p&gt;Here is a quick overview of what we shipped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Presences API for online, typing, and activity states&lt;/li&gt;
&lt;li&gt;Rust runtime for Appwrite Functions&lt;/li&gt;
&lt;li&gt;Database relationships are officially out of beta&lt;/li&gt;
&lt;li&gt;BigInt columns for Appwrite Databases&lt;/li&gt;
&lt;li&gt;Up to 7x faster Storage uploads with parallel chunks&lt;/li&gt;
&lt;li&gt;Git deployment triggers for Functions and Sites&lt;/li&gt;
&lt;li&gt;Deployment retention for Functions and Sites&lt;/li&gt;
&lt;li&gt;Email policies for Appwrite Auth&lt;/li&gt;
&lt;li&gt;Bun and Deno build runtimes for Sites&lt;/li&gt;
&lt;li&gt;Dart 3.12 for Functions and Flutter 3.44 for Sites&lt;/li&gt;
&lt;li&gt;Appwrite plugin for OpenAI Codex&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s dive in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4dx0kl8ez778e9uxz89e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4dx0kl8ez778e9uxz89e.png" alt=" " width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Track who is online, typing, and active with the Presences API&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Appwrite now includes a Presences API for short-lived user statuses like online, away, typing, editing, or viewing.&lt;/p&gt;

&lt;p&gt;You can use it to build online indicators, typing states, multiplayer presence, collaborative editors, live dashboards, and activity feeds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-presences-api" rel="noopener noreferrer"&gt;Read the announcement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6y97a78kqz7t2k9uk15r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6y97a78kqz7t2k9uk15r.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Introducing the Rust runtime for Appwrite Functions&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Appwrite Functions now supports Rust as a first-class runtime.&lt;/p&gt;

&lt;p&gt;You can write and deploy functions in Rust, pair them with the official Appwrite Rust SDK, and use them for performance-sensitive backend workloads like webhook verification, image processing, payment flows, and data transformation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-rust-runtime" rel="noopener noreferrer"&gt;Read the announcement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd3g0clk3hop2yl4i0hdm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd3g0clk3hop2yl4i0hdm.png" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Database relationships are officially out of beta&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Database relationships in Appwrite are now production-ready across Appwrite Cloud and self-hosted deployments.&lt;/p&gt;

&lt;p&gt;You can model connected data more easily, filter across related records, and build apps with more reliable relationship loading and improved performance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/relationships-are-out-of-beta" rel="noopener noreferrer"&gt;Read the announcement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhozvepfkmo5gq33eh88u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhozvepfkmo5gq33eh88u.png" alt=" " width="799" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Introducing BigInt columns&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Appwrite Databases now supports 64-bit signed integers with the new BigInt column type.&lt;/p&gt;

&lt;p&gt;BigInt is useful for large counters, external IDs, high-resolution timestamps, financial values, and any data that needs integer precision without floating-point rounding.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-bigint-columns" rel="noopener noreferrer"&gt;Read the announcement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgczlg63fovug1dry9jx6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgczlg63fovug1dry9jx6.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Up to 7x faster Storage uploads with parallel chunks&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Appwrite SDKs now upload Storage file chunks in parallel.&lt;/p&gt;

&lt;p&gt;In our Node SDK benchmark, a 1.28 GB file upload dropped from 4 minutes 44 seconds to under 40 seconds. That is a 7.10x improvement, with no API changes needed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/faster-storage-uploads-parallel-chunks" rel="noopener noreferrer"&gt;Read the announcement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhtb3ihyzsmp7suqfm68.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhtb3ihyzsmp7suqfm68.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Git deployment triggers for Functions and Sites&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Git deployment triggers give you more control over which changes create automatic deployments.&lt;/p&gt;

&lt;p&gt;Use branch filters for production, staging, and preview workflows, or path filters so each Function or Site only deploys when relevant files change.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-git-deployment-triggers" rel="noopener noreferrer"&gt;Read more&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0tb5q6c4ltqhh94cbxgp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0tb5q6c4ltqhh94cbxgp.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Deployment retention for Functions and Sites&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Functions and Sites now support deployment retention.&lt;/p&gt;

&lt;p&gt;You can choose how long Appwrite keeps non-active deployments before deleting them automatically. Active deployments are never deleted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-deployment-retention" rel="noopener noreferrer"&gt;Read the announcement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5wuw655ia4f6wwj06fz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5wuw655ia4f6wwj06fz.png" alt=" " width="799" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Email policies for Appwrite Auth&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Appwrite Auth now supports email policies.&lt;/p&gt;

&lt;p&gt;You can block free providers, aliased emails, disposable inboxes, or enforce provider-specific domains for user creation and email updates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-email-policies" rel="noopener noreferrer"&gt;Read more&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1uqvnknulvw47h9ghyi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1uqvnknulvw47h9ghyi.png" alt=" " width="799" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Bun and Deno build runtimes for Sites&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Appwrite Sites now supports Bun and Deno as build runtimes for Node-based frameworks.&lt;/p&gt;

&lt;p&gt;You can switch the build runtime per Site from Runtime settings and apply the change on the next deployment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-bun-deno-runtimes" rel="noopener noreferrer"&gt;Read the announcement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo1uftbac1w9ujw13yblt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo1uftbac1w9ujw13yblt.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Dart 3.12 for Functions and Flutter 3.44 for Sites&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Appwrite now supports Dart 3.12 as a Functions runtime and Flutter 3.44 as a build runtime for Sites.&lt;/p&gt;

&lt;p&gt;Flutter teams can now build mobile apps, web apps, and backend functions with a more consistent Dart-based workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-dart-flutter-runtimes" rel="noopener noreferrer"&gt;Read the announcement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhhhv8earydyijqet4u70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhhhv8earydyijqet4u70.png" alt=" " width="799" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Appwrite plugin for OpenAI Codex&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The Appwrite plugin is now available for OpenAI Codex.&lt;/p&gt;

&lt;p&gt;It includes the Appwrite Docs MCP server and agent skills for the Appwrite CLI, major SDKs, and deployment workflows for Sites and Functions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-appwrite-codex-plugin" rel="noopener noreferrer"&gt;Learn more&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fand4m4xsitzh7nd57juq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fand4m4xsitzh7nd57juq.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Community Recognitions&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We are excited to feature Ibaraki Douji as part of our monthly Community Recognitions for May 2026. Ibaraki Douji built a full, up-to-date &lt;a href="https://gitlab.ibaraki.app/helm/appwrite" rel="noopener noreferrer"&gt;Helm chart for self-hosting Appwrite on Kubernetes&lt;/a&gt; that deploys the entire stack, including the API, Console, Realtime, background workers, schedulers, database, Redis, and Kubernetes-native ingress with TLS. It lets you scale each component independently, run clean upgrades, and fits GitOps workflows with tools like ArgoCD and Flux. It has been running in production since Appwrite 1.7.4. Keep in mind that this is a community-backed project and is not maintained by Appwrite.&lt;/p&gt;

&lt;p&gt;If you would like to participate in next month's Community Recognitions, &lt;a href="https://appwrite.io/discord" rel="noopener noreferrer"&gt;join our Discord server&lt;/a&gt; and showcase your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Engineering Resources&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/blog/post/3-things-you-can-build-with-rust-runtime" rel="noopener noreferrer"&gt;3 things you can build with the Rust runtime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/blog/post/building-snapchat-clone-with-presences-and-realtime" rel="noopener noreferrer"&gt;Building a Snapchat clone with Presences and Realtime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/blog/post/kimi-k2-6-arena-leaderboard-refresh" rel="noopener noreferrer"&gt;Kimi K2.6 lands on Appwrite Arena: the May 2026 leaderboard update&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What’s to come&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We are continuing to improve Appwrite across realtime collaboration, deployments, performance, databases, Auth, and AI-assisted workflows.&lt;/p&gt;

&lt;p&gt;Follow us on&amp;nbsp;&lt;a href="https://x.com/appwrite" rel="noopener noreferrer"&gt;X&lt;/a&gt;&amp;nbsp;and check our&amp;nbsp;&lt;a href="https://appwrite.io/changelog" rel="noopener noreferrer"&gt;Changelog&lt;/a&gt;&amp;nbsp;regularly, as we will release more information in the coming weeks.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Weekly roundup: Presences API, Git deployment triggers, and AI updates</title>
      <dc:creator>Aishwari Pahwa</dc:creator>
      <pubDate>Thu, 11 Jun 2026 12:22:02 +0000</pubDate>
      <link>https://dev.to/appwrite/weekly-roundup-presences-api-git-deployment-triggers-and-ai-updates-58lj</link>
      <guid>https://dev.to/appwrite/weekly-roundup-presences-api-git-deployment-triggers-and-ai-updates-58lj</guid>
      <description>&lt;p&gt;This week on the Appwrite blog, we shipped new product updates, published a hands-on realtime app tutorial, and covered the latest AI developer workflows.&lt;/p&gt;

&lt;p&gt;Here’s everything that went live this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Product announcements&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Announcing the Presences API&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Appwrite introduced the Presences API, a new way to track short-lived user statuses like who is online, typing, viewing, or active inside an app.&lt;/p&gt;

&lt;p&gt;Presences come with built-in Realtime channels, automatic expiry, and permission-aware subscriptions, making it easier to build collaborative and multiplayer-style experiences without managing temporary state manually.&lt;/p&gt;

&lt;p&gt;Read the announcement: &lt;a href="https://appwrite.io/blog/post/announcing-presences-api" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/announcing-presences-api&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Announcing Dart 3.12 for Functions and Flutter 3.44 for Sites&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Appwrite now supports Dart 3.12 as a Functions runtime and Flutter 3.44 as a build runtime for Sites.&lt;/p&gt;

&lt;p&gt;Developers can write serverless functions in Dart, deploy Flutter Web projects with Appwrite Sites, and use Appwrite Cloud for both backend and deployment workflows.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/announcing-dart-flutter-runtimes" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/announcing-dart-flutter-runtimes&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Announcing Git deployment triggers&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Git deployment triggers for Appwrite Functions and Sites let developers control which branches and file changes create automatic deployments.&lt;/p&gt;

&lt;p&gt;This helps teams build cleaner Git workflows for production branches, staging environments, previews, and monorepos, while avoiding unnecessary builds when unrelated files change.&lt;/p&gt;

&lt;p&gt;Read the announcement: &lt;a href="https://appwrite.io/blog/post/announcing-git-deployment-triggers" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/announcing-git-deployment-triggers&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Developer guides&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Build a Snapchat clone with Presences and Realtime&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We published a hands-on tutorial showing how to build a Snapchat-style app with Appwrite’s Presences API and Realtime.&lt;/p&gt;

&lt;p&gt;The guide walks through building realtime features using TanStack Start, TablesDB, Functions, and Storage, covering core experiences like live activity, disappearing content, and presence-driven interactions.&lt;/p&gt;

&lt;p&gt;Read the tutorial: &lt;a href="https://appwrite.io/blog/post/building-snapchat-clone-with-presences-and-realtime" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/building-snapchat-clone-with-presences-and-realtime&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;AI and developer ecosystem updates&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Anthropic launched Claude Opus 4.8 with fast mode and dynamic workflows&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We covered Claude Opus 4.8 and what it means for developers building with AI agents.&lt;/p&gt;

&lt;p&gt;The post breaks down fast mode, dynamic workflows, effort control, pricing, benchmarks, and how these updates point toward more flexible agentic development workflows.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/anthropic-just-launched-claude-opus-48-with-fast-mode-and-dynamic-workflows" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/anthropic-just-launched-claude-opus-48-with-fast-mode-and-dynamic-workflows&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;We’re continuing to ship product updates, developer tutorials, and AI-focused deep dives every week.&lt;/p&gt;

&lt;p&gt;Explore the latest posts on the &lt;a href="https://appwrite.io/blog" rel="noopener noreferrer"&gt;Appwrite blog&lt;/a&gt; to stay updated with everything happening across Appwrite and the developer ecosystem.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>backend</category>
      <category>news</category>
    </item>
    <item>
      <title>Weekly roundup: Product announcements, AI updates, and developer insights</title>
      <dc:creator>Aishwari Pahwa</dc:creator>
      <pubDate>Tue, 26 May 2026 13:13:41 +0000</pubDate>
      <link>https://dev.to/appwrite/weekly-roundup-product-announcements-ai-updates-and-developer-insights-4m3k</link>
      <guid>https://dev.to/appwrite/weekly-roundup-product-announcements-ai-updates-and-developer-insights-4m3k</guid>
      <description>&lt;p&gt;This week was packed on the Appwrite blog. We shipped major product announcements, covered important AI and developer ecosystem updates, and published new deep dives across backend infrastructure, Auth, Databases, storage, runtime support, AI coding workflows, and modern app development.&lt;/p&gt;

&lt;p&gt;Here’s everything that went live this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Major product announcements&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Faster Appwrite Storage uploads with parallel chunks&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We introduced parallel chunk uploads for Appwrite Storage, significantly improving large file upload performance. In benchmark tests, uploads saw improvements of up to 7x faster compared to the previous sequential approach. This update helps reduce upload bottlenecks for modern apps handling large media and datasets.&lt;/p&gt;

&lt;p&gt;Read the announcement: &lt;a href="https://appwrite.io/blog/post/faster-storage-uploads-parallel-chunks" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/faster-storage-uploads-parallel-chunks&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Email policies for Appwrite Auth&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Appwrite Auth now supports Email policies, letting developers block free email providers, aliased addresses, and disposable inboxes directly during signup. Policies can be configured independently through the Console or Server SDKs to improve signup quality and reduce abuse.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/announcing-email-policies" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/announcing-email-policies&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Bun and Deno runtimes for Appwrite Sites&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Appwrite Sites now supports Bun and Deno build runtimes. Developers can deploy applications using modern JavaScript runtimes without additional infrastructure setup, giving teams more flexibility across frameworks and tooling.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/announcing-bun-deno-runtimes" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/announcing-bun-deno-runtimes&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Introducing the Appwrite plugin for Codex&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We announced the Appwrite plugin for Codex, which brings Appwrite Skills and MCP support into Codex workflows. The plugin helps AI coding agents understand Appwrite projects, use the right SDK patterns, and build with more accurate context.&lt;/p&gt;

&lt;p&gt;Read the announcement: &lt;a href="https://appwrite.io/blog/post/announcing-appwrite-codex-plugin" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/announcing-appwrite-codex-plugin&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Database relationships are out of beta&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Database relationships in Appwrite are now production-ready. After a year of performance improvements, opt-in relationship loading, and full query support, relationships are ready for production workloads across Appwrite Databases.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/relationships-are-out-of-beta" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/relationships-are-out-of-beta&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Announcing BigInt columns&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Appwrite Databases now supports BigInt columns, making it easier to store and query large integer values. This is useful for financial data, analytics, IDs, counters, and other workloads where standard integer limits are not enough.&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://appwrite.io/blog/post/announcing-bigint-columns" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/announcing-bigint-columns&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Announcing deployment retention&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Deployment retention for Appwrite Functions and Sites lets developers choose how long non-active deployments are kept before they are automatically deleted. This helps teams reduce storage usage and keep deployment history cleaner.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/announcing-deployment-retention" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/announcing-deployment-retention&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Developer guides and build ideas&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3 things you can build with the Rust runtime&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We published a practical guide on what developers can build with the Appwrite Rust runtime. The post covers use cases where Rust is a strong fit for server-side workloads, including performance-focused functions and backend processing tasks.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/3-things-you-can-build-with-rust-runtime" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/3-things-you-can-build-with-rust-runtime&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;25 startup ideas you can build with vibe coding&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We shared 25 startup ideas developers can build with vibe coding, from AI-powered tools to lightweight SaaS products. The post focuses on practical ideas that can move quickly from concept to prototype with the right backend and AI-assisted workflow.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/25-startup-ideas-you-can-build-with-vibe-coding" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/25-startup-ideas-you-can-build-with-vibe-coding&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Vibe coding security mistakes to avoid&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We published a guide on common security mistakes developers can make when building with AI coding tools. The post covers risks around authentication, secrets, permissions, validation, and dependency management, helping developers move fast without shipping avoidable security issues.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/vibe-coding-security-mistakes" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/vibe-coding-security-mistakes&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How vibe coding is changing software development&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We explored how vibe coding is changing the way developers build software, from faster prototyping to more AI-assisted development workflows. The post looks at what this shift means for developers, teams, and the future of building applications.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/how-vibe-coding-is-changing-software-development" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/how-vibe-coding-is-changing-software-development&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Vibe coding vs traditional development&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We compared vibe coding with traditional software development, covering how each approach affects speed, control, technical decision-making, debugging, and long-term maintainability. The post helps developers understand where vibe coding works well and where traditional development practices still matter.&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://appwrite.io/blog/post/vibe-coding-vs-traditional-development" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/vibe-coding-vs-traditional-development&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How to deploy vibe coding projects to production&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We published a step-by-step guide on taking vibe-coded apps from prototype to production, covering hosting, domains, secrets, permissions, logs, backups, and pre-launch checks.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/deploy-vibe-coding-projects-to-production" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/deploy-vibe-coding-projects-to-production&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How agencies are using vibe coding to ship client projects&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We explored how agencies are using vibe coding to prototype faster, reduce delivery timelines, and ship client projects with more structured backend and deployment workflows.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/agencies-vibe-coding-client-projects" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/agencies-vibe-coding-client-projects&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Best backend for vibe coding apps in 2026&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We compared backend options for vibe coding apps and looked at how the right backend can reduce complexity across Auth, Databases, Storage, Functions, hosting, and production readiness.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/best-backend-for-vibe-coding-apps" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/best-backend-for-vibe-coding-apps&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Can vibe coding replace junior developers?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We examined whether vibe coding can replace junior developers and what it actually changes for hiring, learning, code review, debugging, and software development teams.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/can-vibe-coding-replace-junior-developers" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/can-vibe-coding-replace-junior-developers&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Best frontend frameworks for vibe coding&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We broke down the best frontend frameworks for vibe coding, including how options like Next.js, React, SvelteKit, Nuxt, Vue, Astro, and TanStack Start fit different project needs.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/best-frontend-frameworks-for-vibe-coding" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/best-frontend-frameworks-for-vibe-coding&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The hidden costs of vibe coding platforms&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We covered the hidden costs of vibe coding platforms, including lock-in, fragmented tooling, hosting limits, scaling concerns, and what developers should consider before committing to a platform.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/hidden-costs-of-vibe-coding-platforms" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/hidden-costs-of-vibe-coding-platforms&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;AI deep dives and industry updates&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Gemini 3.5 Flash benchmark and capability review&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We published a detailed breakdown of Gemini 3.5 Flash, covering benchmark performance, pricing, coding capabilities, reasoning improvements, and how it compares across real-world developer workflows.&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://appwrite.io/blog/post/gemini-3-5-flash-deep-dive" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/gemini-3-5-flash-deep-dive&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;OpenAI shipped Codex to the ChatGPT mobile app&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We explored what OpenAI’s latest Codex mobile integration means for developers, coding agents, and the future of AI-assisted software workflows directly from mobile devices.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://appwrite.io/blog/post/openai-just-shipped-codex-to-the-chatgpt-mobile-app" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/openai-just-shipped-codex-to-the-chatgpt-mobile-app&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Anthropic launched Claude for Small Business&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We covered Anthropic’s new Claude offering for small businesses and what it signals for the growing competition around AI-powered productivity and enterprise tooling.&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://appwrite.io/blog/post/anthropic-just-launched-claude-for-small-business" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/anthropic-just-launched-claude-for-small-business&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Security and ecosystem updates&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The TanStack npm attack shows how fragile modern JavaScript supply chains can be&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We broke down the TanStack Start npm supply chain attack and what it means for modern JavaScript teams. The post looks at how dependency risk affects developer workflows and why security needs to be treated as part of the application lifecycle.&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://appwrite.io/blog/post/tanstack-start-npm-supply-chain-attack" rel="noopener noreferrer"&gt;https://appwrite.io/blog/post/tanstack-start-npm-supply-chain-attack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We’re shipping new product updates, backend improvements, AI deep dives, and developer-focused content every week.&lt;/p&gt;

&lt;p&gt;Explore all the latest posts on the &lt;a href="https://appwrite.io/blog" rel="noopener noreferrer"&gt;Appwrite blog&lt;/a&gt; and stay updated with everything happening across Appwrite and the developer ecosystem.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>news</category>
      <category>performance</category>
      <category>product</category>
    </item>
    <item>
      <title>April product update: MongoDB support, Appwrite 1.9.0, Realtime upgrades and AI tooling</title>
      <dc:creator>Aishwari Pahwa</dc:creator>
      <pubDate>Mon, 11 May 2026 05:58:38 +0000</pubDate>
      <link>https://dev.to/appwrite/april-product-update-mongodb-support-appwrite-190-realtime-upgrades-and-ai-tooling-1eg6</link>
      <guid>https://dev.to/appwrite/april-product-update-mongodb-support-appwrite-190-realtime-upgrades-and-ai-tooling-1eg6</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Here is a quick overview of what we shipped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Appwrite and MongoDB partnership in Appwrite 1.9.0&lt;/li&gt;
&lt;li&gt;Terraform provider for Appwrite&lt;/li&gt;
&lt;li&gt;Message based Realtime over a single WebSocket&lt;/li&gt;
&lt;li&gt;List response caching with TTL&lt;/li&gt;
&lt;li&gt;Introducing the Webhooks API&lt;/li&gt;
&lt;li&gt;Official Appwrite Rust Server SDK&lt;/li&gt;
&lt;li&gt;Appwrite MCP Server 2.0&lt;/li&gt;
&lt;li&gt;Appwrite plugin for Claude Code&lt;/li&gt;
&lt;li&gt;Appwrite plugin now available on Cursor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's dive in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0o4bjeuwsxrpc7vvx3ni.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0o4bjeuwsxrpc7vvx3ni.png" alt=" " width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Appwrite and MongoDB join forces in Appwrite 1.90&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Appwrite and MongoDB are now official partners. Starting with Appwrite 1.9.0, MongoDB is supported as a database option for self hosted deployments.&lt;/p&gt;

&lt;p&gt;You can run Appwrite directly on your existing MongoDB infrastructure while keeping the same APIs and SDKs. No breaking changes. No rewrites.&lt;/p&gt;

&lt;p&gt;Reuse your existing backups, monitoring, and scaling setup while staying fully open source and self hosted.&lt;/p&gt;

&lt;p&gt;This release also includes improvements across Databases, Realtime, Auth, and infrastructure. You get better handling of large integers, new string column types, configurable caching, and improved observability for database usage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/appwrite-mongodb-partnership-self-hosted" rel="noopener noreferrer"&gt;Read the announcement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftqmsgoegqsv5k4p6r0f7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftqmsgoegqsv5k4p6r0f7.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Terraform provider for Appwrite&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You can now manage your Appwrite infrastructure using Terraform.&lt;/p&gt;

&lt;p&gt;Define databases, storage, functions, auth, messaging, and more using HCL, and apply changes consistently across environments.&lt;/p&gt;

&lt;p&gt;Works with both Appwrite Cloud and self-hosted setups.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/introducing-terraform-provider-for-appwrite" rel="noopener noreferrer"&gt;Read the announcement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqo68ka309ncs6q1zt5k8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqo68ka309ncs6q1zt5k8.png" alt=" " width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Message-based Realtime over a single WebSocket&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Realtime has been reworked to use a message-based protocol over a single persistent WebSocket connection.&lt;/p&gt;

&lt;p&gt;You can now manage multiple subscriptions on one connection, update them without reconnecting, and avoid URL length limits entirely. This makes Realtime more predictable and scalable for production workloads.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-message-based-realtime-sdk" rel="noopener noreferrer"&gt;Learn more&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5lvuo5j072z240eh79pt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5lvuo5j072z240eh79pt.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;List response caching with TTL&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You can now cache list query responses in memory using a configurable TTL.&lt;/p&gt;

&lt;p&gt;Repeated reads skip the database entirely until the cache expires, improving performance for feeds, dashboards, and frequently accessed data.&lt;/p&gt;

&lt;p&gt;Caching is permission-aware, so users only see data they are allowed to access.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-list-cache-ttl" rel="noopener noreferrer"&gt;Learn more&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxlgikymk9s6f41eog5z4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxlgikymk9s6f41eog5z4.png" alt=" " width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Introducing the Webhooks API&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Webhooks can now be fully managed through the Appwrite Server SDKs.&lt;/p&gt;

&lt;p&gt;Create, update, and delete webhooks directly from code, configure signing secrets, and automate workflows for CI/CD or multi-tenant systems.&lt;/p&gt;

&lt;p&gt;Available across all major Server SDKs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-webhooks-api" rel="noopener noreferrer"&gt;Learn more&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3lhke28qz9x0ve3zgxc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3lhke28qz9x0ve3zgxc.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Introducing the Appwrite Rust SDK&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Appwrite now has an official Server SDK for Rust.&lt;/p&gt;

&lt;p&gt;It is async-first, type-safe, and designed for backend services and infrastructure use cases, covering all major Appwrite services. No raw HTTP calls, just a clean and idiomatic Rust API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-appwrite-rust-sdk" rel="noopener noreferrer"&gt;Learn more&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy7lpngajamocm3ijygt5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy7lpngajamocm3ijygt5.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Appwrite MCP Server 2.0&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We have rebuilt the Appwrite MCP server with a simpler architecture.&lt;/p&gt;

&lt;p&gt;Instead of passing service flags, everything is now enabled by default. The server exposes two tools: one to search the full Appwrite tool catalog, and one to execute operations. This reduces complexity and uses less of the model’s context.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-appwrite-mcp-server-2" rel="noopener noreferrer"&gt;Read the announcement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fny4fm7pb21l1ttvz9jkv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fny4fm7pb21l1ttvz9jkv.png" alt=" " width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Appwrite plugin for Claude Code&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Connecting Claude Code to a real backend usually takes manual setup and extra context.&lt;/p&gt;

&lt;p&gt;The Appwrite plugin removes that. With a single install, your agent can interact with your Appwrite project using the right context from the start, with built-in skills and MCP servers included.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/blog/post/announcing-appwrite-claude-code-plugin" rel="noopener noreferrer"&gt;Learn more&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5v2du317veekoegwz2bw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5v2du317veekoegwz2bw.png" alt=" " width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Appwrite plugin now available on Cursor&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The Appwrite plugin is now live on the Cursor marketplace.&lt;/p&gt;

&lt;p&gt;No need to configure MCP servers or install skills separately. Just install and start building with support for the Appwrite CLI and major SDKs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cursor.com/marketplace/appwrite" rel="noopener noreferrer"&gt;Install from the Cursor marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F508aflkpkazh0alg89kn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F508aflkpkazh0alg89kn.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Community Recognitions&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We are excited to feature Abid as part of our monthly Community Recognitions for April 2026. Abid created a wrapper around an earlier version of the Appwrite MCP server to reduce token and context usage, an idea that later inspired improvements in Appwrite MCP Server 2.0.&lt;/p&gt;

&lt;p&gt;If you would like to participate in next month’s Community Recognitions,&amp;nbsp;&lt;a href="https://discord.gg/3nfbe6NhkE" rel="noopener noreferrer"&gt;join our Discord server&lt;/a&gt;&amp;nbsp;and showcase your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Engineering Resources&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/blog/post/5-claude-hacks-you-need-to-try-right-now" rel="noopener noreferrer"&gt;5 Claude hacks you need to try right now&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/blog/post/claude-mythos-preview" rel="noopener noreferrer"&gt;Claude Mythos preview: the model too powerful too release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/blog/post/did-claude-design-kill-lovable" rel="noopener noreferrer"&gt;Did Claude Design just kill Lovable?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/blog/post/6-practical-ways-developers-use-ai-to-build-faster" rel="noopener noreferrer"&gt;6 practical ways developers use AI to build faster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/blog/post/backend-for-claude-code-apps" rel="noopener noreferrer"&gt;How to add a backend to apps built with Claude Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What's to come&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We are just getting started with MongoDB and AI integrations. Expect deeper database flexibility, more tools for AI-assisted development, and continued improvements across performance and developer experience.&lt;/p&gt;

&lt;p&gt;Follow us on&amp;nbsp;&lt;a href="https://x.com/appwrite" rel="noopener noreferrer"&gt;X&lt;/a&gt;&amp;nbsp;and check our&amp;nbsp;&lt;a href="https://appwrite.io/changelog" rel="noopener noreferrer"&gt;Changelog&lt;/a&gt;&amp;nbsp;regularly, as we will release more information in the coming weeks.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>backend</category>
      <category>mongodb</category>
      <category>news</category>
    </item>
    <item>
      <title>Improve your Appwrite developer experience with dev keys</title>
      <dc:creator>Aditya Oberai</dc:creator>
      <pubDate>Thu, 22 May 2025 12:42:37 +0000</pubDate>
      <link>https://dev.to/appwrite/improve-your-appwrite-developer-experience-with-dev-keys-347l</link>
      <guid>https://dev.to/appwrite/improve-your-appwrite-developer-experience-with-dev-keys-347l</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;And this is the exact problem &lt;strong&gt;dev keys&lt;/strong&gt; are here to solve!&lt;/p&gt;

&lt;h2&gt;
  
  
  What are dev keys?
&lt;/h2&gt;

&lt;p&gt;Dev keys are a type of secret used by Appwrite's client SDKs. They allow the developer to bypass any rate limits enforced by Appwrite and suppress any CORS errors caused by not using a configured hostname. A developer can configure the expiration date of a dev key to any of the three preset options (1 day, 7 days, or 30 days).&lt;/p&gt;

&lt;p&gt;Dev keys should never be used in production environments, as they can make your app more susceptible to abuse and security breaches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try out dev keys in an app
&lt;/h2&gt;

&lt;p&gt;To test dev keys, I created a simple demo web app that sends 200 requests to create a new document in an Appwrite database. To set this app up, you must complete the following steps:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Setup Appwrite project
&lt;/h3&gt;

&lt;p&gt;First, create an &lt;a href="https://cloud.appwrite.io" rel="noopener noreferrer"&gt;Appwrite Cloud&lt;/a&gt; account or &lt;a href="https://appwrite.io/docs/advanced/self-hosting" rel="noopener noreferrer"&gt;self-host Appwrite 1.7&lt;/a&gt;. Create a project (which will lead you to the project overview page) and head to the &lt;strong&gt;Databases&lt;/strong&gt; page from the left sidebar. Create a new database with the ID &lt;code&gt;testDb&lt;/code&gt; and a new collection with the ID &lt;code&gt;testCollection&lt;/code&gt;. Store both of these IDs for future usage. In this collection, add the following attribute:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;number&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Then, head to the &lt;strong&gt;Settings&lt;/strong&gt; tab of the collection, scroll down to the &lt;strong&gt;Permissions&lt;/strong&gt; section, and add the following permissions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Create&lt;/th&gt;
&lt;th&gt;Read&lt;/th&gt;
&lt;th&gt;Update&lt;/th&gt;
&lt;th&gt;Delete&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Any&lt;/td&gt;
&lt;td&gt;False&lt;/td&gt;
&lt;td&gt;False&lt;/td&gt;
&lt;td&gt;False&lt;/td&gt;
&lt;td&gt;False&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Lastly, return to the project overview page, head to the &lt;strong&gt;Settings&lt;/strong&gt; page from the left sidebar, and copy your &lt;strong&gt;API endpoint&lt;/strong&gt; and &lt;strong&gt;project ID&lt;/strong&gt; for future usage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Create web app
&lt;/h3&gt;

&lt;p&gt;Next up, we'll create our test app. This will require us to create two files in our working directory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;index.html&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Dev keys demo&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Dev keys demo&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Click on this button to add 200 documents to the database in less than 1 minute.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Add documents&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Appwrite Web SDK --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/appwrite@18.1.1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Our app's script --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"app.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;app.js&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Appwrite&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://&amp;lt;REGION&amp;gt;.cloud.appwrite.io/v1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Your API Endpoint&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setProject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;YOUR_PROJECT_ID&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Your project ID&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;database&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Appwrite&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Databases&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;promises&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;promise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;database&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;testDb&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Your database ID&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;testCollection&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Your collection ID&lt;/span&gt;
        &lt;span class="nx"&gt;Appwrite&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unique&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;promises&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;promise&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Request initiated:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;promises&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you open the HTML page in your browser and click on the &lt;code&gt;Add documents&lt;/code&gt; button, you will notice numerous errors in the console with the HTTP code &lt;code&gt;429&lt;/code&gt;, as Appwrite's rate limits allow one client to create 120 requests per minute for this API endpoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Create dev key
&lt;/h3&gt;

&lt;p&gt;Head back to your Appwrite project. On the overview page, select the &lt;strong&gt;Dev keys&lt;/strong&gt; tab under the Integrations section and create a new dev key. You can add whatever name and expiry date you like.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0sy7w92eqzyhxuv3c1v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0sy7w92eqzyhxuv3c1v.png" alt="Dev key" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After creating this dev key, head to the &lt;code&gt;app.js&lt;/code&gt; file and update the Appwrite client to the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Appwrite&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://&amp;lt;REGION&amp;gt;.cloud.appwrite.io/v1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setProject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;YOUR_PROJECT_ID&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setDevKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;YOUR_DEV_KEY&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Your dev key&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Test the app
&lt;/h3&gt;

&lt;p&gt;Reopen the HTML page in your browser. Clicking the &lt;code&gt;Add documents&lt;/code&gt; button will allow all 200 requests to execute successfully.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;And with that, you have successfully tested dev keys! Learn more about Appwrite by visiting the docs and joining the Discord community.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/docs/advanced/platform/dev-keys" rel="noopener noreferrer"&gt;Appwrite dev keys docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/discord" rel="noopener noreferrer"&gt;Appwrite Discord server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>opensource</category>
      <category>testing</category>
      <category>appwrite</category>
    </item>
    <item>
      <title>Announcing Hosting for Flutter Web: deploy your Flutter web apps with Appwrite</title>
      <dc:creator>Steven</dc:creator>
      <pubDate>Thu, 22 May 2025 07:14:44 +0000</pubDate>
      <link>https://dev.to/appwrite/announcing-hosting-for-flutter-web-deploy-your-flutter-web-apps-with-appwrite-10n0</link>
      <guid>https://dev.to/appwrite/announcing-hosting-for-flutter-web-deploy-your-flutter-web-apps-with-appwrite-10n0</guid>
      <description>&lt;p&gt;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, you can now deploy Flutter web apps directly from your Appwrite project. No extra configuration, no added complexity.&lt;/p&gt;

&lt;p&gt;This means you can use your existing Dart and Flutter knowledge to create fast, responsive web apps without needing to learn HTML, CSS, or JavaScript. Build once with Flutter and deploy to mobile, desktop, and web. All from a single codebase, all hosted on Appwrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why native Flutter web support matters
&lt;/h2&gt;

&lt;p&gt;While most web environments are made for Node, Deno, or Bun runtimes, only a few are tailored for the needs of Flutter developers. Appwrite Sites is different. It’s designed with full Flutter web support in mind,  not just as an afterthought. That means native framework detection, optimized build settings, and direct integration with your Appwrite backend products like databases, authentication, storage, and functions.&lt;/p&gt;

&lt;p&gt;More importantly, it eliminates the common friction points of mobile app deployment. You don’t need to pay for developer accounts ($25 for Android, $99/year for Apple), wait days for store approvals, or navigate restrictive platform policies. With web deployment, your app is live the moment you push it.&lt;/p&gt;

&lt;p&gt;And because web apps run anywhere with a browser, you’re no longer limited to iOS or Android. Your Flutter app can be accessed from a desktop, tablet, mobile phone, or even a smart fridge. The web is universal, and Appwrite makes it easy to reach your users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not just for full web apps
&lt;/h2&gt;

&lt;p&gt;Even if you're not targeting the web as your primary platform, &lt;strong&gt;Appwrite Sites still solves real needs for Flutter developers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Many apps include flows that rely on external links, such as email verification, password reset, or payments. These typically direct users to a browser. With Sites, you can now create and host those supporting pages using the same Flutter tooling you're already familiar with.&lt;/p&gt;

&lt;p&gt;Instead of stitching together HTML pages or managing another stack, you can build these "satellite" pages as lightweight Flutter web apps,  and deploy them effortlessly with Appwrite. It's a way you leverage your existing knowledge and a more consistent way to build, with fewer moving parts and one unified codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full Flutter framework support&lt;/strong&gt;: Sites now recognizes and supports Flutter as a framework during setup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-detection&lt;/strong&gt;: Flutter web projects are automatically identified.  No manual config required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimized static hosting&lt;/strong&gt;: Deployed like any other static site, but with Flutter-first optimizations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub integration&lt;/strong&gt;: Automatically deploy on every push from your GitHub repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works on Cloud and Self-Hosted&lt;/strong&gt;: Whether using Appwrite Cloud or Self-hosting, Sites for Flutter works everywhere.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  How to get started
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Step 1: Create Flutter Web app
&lt;/h2&gt;

&lt;p&gt;First, you must either create a Flutter Web app or set up the &lt;a href="https://github.com/appwrite/templates-for-sites" rel="noopener noreferrer"&gt;Flutter Web starter template&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Open your terminal, and run the following command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter create my_app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In case you have an existing Flutter app and want to add web support to it, you need to run the following command in your project directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter create &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--platforms&lt;/span&gt; web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Push this project to a &lt;a href="https://github.com/new" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Create Appwrite project
&lt;/h2&gt;

&lt;p&gt;Head to the &lt;a href="https://cloud.appwrite.io/" rel="noopener noreferrer"&gt;Appwrite Console&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If this is your first time using Appwrite, create an account and create your first project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Create site
&lt;/h2&gt;

&lt;p&gt;Head to the &lt;strong&gt;Sites&lt;/strong&gt; page in your Appwrite project, click on the &lt;strong&gt;Create site&lt;/strong&gt; button, and select &lt;strong&gt;Connect a repository&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Connect your GitHub account and select the repository you intend to deploy.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select the &lt;strong&gt;production branch&lt;/strong&gt; and &lt;strong&gt;root directory&lt;/strong&gt; from your repo.&lt;/li&gt;
&lt;li&gt;Verify that the &lt;strong&gt;correct framework&lt;/strong&gt; is selected. In case an incorrect framework is visible, pick &lt;strong&gt;Flutter Web&lt;/strong&gt; from the drop-down list.&lt;/li&gt;
&lt;li&gt;Confirm the &lt;strong&gt;install command&lt;/strong&gt;, &lt;strong&gt;build command&lt;/strong&gt;, and &lt;strong&gt;output directory&lt;/strong&gt; in the build settings. The default build settings for Flutter Web are:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install command:&lt;/strong&gt; &lt;code&gt;N/A&lt;/code&gt; (leave empty)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build command:&lt;/strong&gt; &lt;code&gt;flutter build web&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output directory:&lt;/strong&gt; &lt;code&gt;./build/web&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Add any &lt;strong&gt;environment variables&lt;/strong&gt; required by the site.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Click on the &lt;strong&gt;Deploy&lt;/strong&gt; button.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Visit site
&lt;/h2&gt;

&lt;p&gt;After successful deployment, click on the &lt;strong&gt;Visit site&lt;/strong&gt; button.&lt;/p&gt;

&lt;h1&gt;
  
  
  Simplifying development
&lt;/h1&gt;

&lt;p&gt;Sites for Flutter is part of Appwrite’s larger mission to simplify the developer experience. With support for backend and frontend services, including static hosting, databases, functions, and auth, Appwrite is the all-in-one platform to build any application.&lt;/p&gt;

&lt;p&gt;Try it today on &lt;strong&gt;Appwrite Cloud&lt;/strong&gt; or &lt;strong&gt;self-hosted,&lt;/strong&gt; and you can take your Flutter app live in just a few clicks.&lt;/p&gt;

&lt;h1&gt;
  
  
  More resources
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/docs/producst/sites" rel="noopener noreferrer"&gt;Appwrite Sites docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/blog/post/open-source-vercel-alternative" rel="noopener noreferrer"&gt;Appwrite compared to Vercel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/VtDe6hDw91k" rel="noopener noreferrer"&gt;Appwrite Sites product tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/0cERQxFjTW4" rel="noopener noreferrer"&gt;Appwrite Sites video announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/discord" rel="noopener noreferrer"&gt;Appwrite Discord server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>flutter</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How to setup the SvelteKit starter template on Appwrite Sites</title>
      <dc:creator>Aditya Oberai</dc:creator>
      <pubDate>Wed, 21 May 2025 15:08:48 +0000</pubDate>
      <link>https://dev.to/appwrite/how-to-setup-the-sveltekit-starter-template-on-appwrite-sites-2b2k</link>
      <guid>https://dev.to/appwrite/how-to-setup-the-sveltekit-starter-template-on-appwrite-sites-2b2k</guid>
      <description>&lt;p&gt;Building web applications requires both front-end expertise and back-end infrastructure. &lt;a href="https://appwrite.io/products/sites" rel="noopener noreferrer"&gt;Appwrite Sites&lt;/a&gt; simplifies this process by providing a platform for deploying, hosting, and scaling web applications.&lt;/p&gt;

&lt;p&gt;To ease this process even further, Appwrite Sites offers a variety of starter kits for popular frameworks like Next.js, React, Vue, Nuxt, Angular, SvelteKit, and Flutter. In this blog, you will learn how to set up the SvelteKit starter template and deploy it to Appwrite Sites.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview of the starter template
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://kit.svelte.dev/" rel="noopener noreferrer"&gt;SvelteKit&lt;/a&gt; is a modern web framework built on top of Svelte that enables fast, server-rendered and client-enhanced web applications with powerful routing, data loading, and deployment features out of the box.&lt;/p&gt;

&lt;p&gt;Appwrite's SvelteKit starter template includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A clean, single-page UI&lt;/li&gt;
&lt;li&gt;Integration with Appwrite's SDK&lt;/li&gt;
&lt;li&gt;Pre-configured deployment settings for Appwrite Sites' SSR rendering strategy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk6y2b6zoca3lhn25jbzy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk6y2b6zoca3lhn25jbzy.png" alt="Deployed app" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy the starter template on Appwrite
&lt;/h2&gt;

&lt;p&gt;Firstly, you must head to Appwrite Cloud and &lt;a href="https://cloud.appwrite.io/console/register" rel="noopener noreferrer"&gt;create an account&lt;/a&gt; if you haven't already (or &lt;a href="https://appwrite.io/docs/advanced/self-hosting" rel="noopener noreferrer"&gt;self-host Appwrite 1.7&lt;/a&gt;). Next, create your first project, which will lead you to the project overview page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwlvkdrqtb1wqfrqvnaj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwlvkdrqtb1wqfrqvnaj.png" alt="Add platform" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Head to the &lt;strong&gt;Sites&lt;/strong&gt; page from the left sidebar, click on the &lt;strong&gt;Create site&lt;/strong&gt; button, and select the &lt;strong&gt;Clone a template&lt;/strong&gt; option. This will take you to the Appwrite Sites templates listing, where you should search &lt;code&gt;Svelte starter&lt;/code&gt; and click on the template.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8mcbrztz2qba92vpo2v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8mcbrztz2qba92vpo2v.png" alt="Starter template" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After selecting the template, you can choose to connect a GitHub repository now or at a later time. If you choose to connect a repository, ensure you select a production branch (leave the root directory as is). Then, review the preset environment variables, update the domain name if you want, and click on the &lt;strong&gt;Deploy&lt;/strong&gt; button. You can watch the deployment logs as the site is built.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpb0bly5xdgp6e4eb1zpy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpb0bly5xdgp6e4eb1zpy.png" alt="Deployment logs" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternative method to deploy starter template
&lt;/h3&gt;

&lt;p&gt;As an alternative to the Appwrite console, you can create and deploy websites using the &lt;a href="https://appwrite.io/docs/products/sites/deploy-manually#cli" rel="noopener noreferrer"&gt;Appwrite CLI&lt;/a&gt;. Create your SvelteKit starter using the following shell command and configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;appwrite init sites
? What would you like to name your site? Svelte starter
? What ID would you like to have &lt;span class="k"&gt;for &lt;/span&gt;your site? unique&lt;span class="o"&gt;()&lt;/span&gt;
? What framework would you like to use? SvelteKit &lt;span class="o"&gt;(&lt;/span&gt;sveltekit&lt;span class="o"&gt;)&lt;/span&gt;
? What specification would you like to use? 0.5 CPU, 512MB RAM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can then make any edits to the website and deploy it using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;appwrite push sites
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Test the starter template
&lt;/h2&gt;

&lt;p&gt;After your site has been successfully deployed, Appwrite will show you a &lt;strong&gt;Congratulations&lt;/strong&gt; page. You can then either choose to view the site by clicking on the &lt;strong&gt;Visit site&lt;/strong&gt; button or view the site configuration (deployments, logs, domains, usage, and settings) by clicking on the &lt;strong&gt;Go to dashboard&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcl0sm2yub622kgeumj10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcl0sm2yub622kgeumj10.png" alt="Congratulations" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;And with that, the SvelteKit starter kit is deployed to Appwrite Sites. You can explore other templates or deploy any other websites you'd like. &lt;/p&gt;

&lt;p&gt;For more information about Appwrite Sites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/docs/products/sites" rel="noopener noreferrer"&gt;Appwrite Sites product docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/docs/products/sites/quick-start/sveltekit" rel="noopener noreferrer"&gt;Quick start to deploy any SvelteKit app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/discord" rel="noopener noreferrer"&gt;Appwrite Discord server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>svelte</category>
      <category>programming</category>
      <category>appwrite</category>
    </item>
    <item>
      <title>How to setup the Nuxt starter template on Appwrite Sites</title>
      <dc:creator>Aditya Oberai</dc:creator>
      <pubDate>Wed, 21 May 2025 13:47:42 +0000</pubDate>
      <link>https://dev.to/appwrite/how-to-setup-the-nuxt-starter-template-on-appwrite-sites-a6g</link>
      <guid>https://dev.to/appwrite/how-to-setup-the-nuxt-starter-template-on-appwrite-sites-a6g</guid>
      <description>&lt;p&gt;Building web applications requires both front-end expertise and back-end infrastructure. &lt;a href="https://appwrite.io/products/sites" rel="noopener noreferrer"&gt;Appwrite Sites&lt;/a&gt; simplifies this process by providing a platform for deploying, hosting, and scaling web applications.&lt;/p&gt;

&lt;p&gt;To ease this process even further, Appwrite Sites offers a variety of starter kits for popular frameworks like Next.js, React, Vue, Nuxt, Angular, SvelteKit, and Flutter. In this blog, you will learn how to set up the Nuxt starter template and deploy it to Appwrite Sites.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview of the starter template
&lt;/h2&gt;

&lt;p&gt;Nuxt is a framework built on top of Vue.js that makes it easy to develop server-rendered, statically generated, or single-page applications with features like routing, SEO optimization, and modular architecture out of the box.&lt;/p&gt;

&lt;p&gt;Appwrite's Nuxt starter template includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A clean, single-page UI&lt;/li&gt;
&lt;li&gt;Integration with Appwrite's SDK&lt;/li&gt;
&lt;li&gt;Pre-configured deployment settings for Appwrite Sites' SSR rendering strategy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgbz9sulm8m4vhla0lbvu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgbz9sulm8m4vhla0lbvu.png" alt="Deployed app" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy the starter template on Appwrite
&lt;/h2&gt;

&lt;p&gt;Firstly, you must head to Appwrite Cloud and &lt;a href="https://cloud.appwrite.io/console/register" rel="noopener noreferrer"&gt;create an account&lt;/a&gt; if you haven't already (or &lt;a href="https://appwrite.io/docs/advanced/self-hosting" rel="noopener noreferrer"&gt;self-host Appwrite 1.7&lt;/a&gt;). Next, create your first project, which will lead you to the project overview page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgpti1kt87m5obad42p8i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgpti1kt87m5obad42p8i.png" alt="Add platform" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Head to the &lt;strong&gt;Sites&lt;/strong&gt; page from the left sidebar, click on the &lt;strong&gt;Create site&lt;/strong&gt; button, and select the &lt;strong&gt;Clone a template&lt;/strong&gt; option. This will take you to the Appwrite Sites templates listing, where you should search &lt;code&gt;Nuxt starter&lt;/code&gt; and click on the template.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyad3mk7484ezk4x7eayt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyad3mk7484ezk4x7eayt.png" alt="Starter template" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After selecting the template, you can choose to connect a GitHub repository now or at a later time. If you choose to connect a repository, ensure you select a production branch (leave the root directory as is). Then, review the preset environment variables, update the domain name if you want, and click on the &lt;strong&gt;Deploy&lt;/strong&gt; button. You can watch the deployment logs as the site is built.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc2r0w4c0sn6nqqgf26ge.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc2r0w4c0sn6nqqgf26ge.png" alt="Deployment logs" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternative method to deploy starter template
&lt;/h3&gt;

&lt;p&gt;As an alternative to the Appwrite console, you can create and deploy websites using the &lt;a href="https://appwrite.io/docs/products/sites/deploy-manually#cli" rel="noopener noreferrer"&gt;Appwrite CLI&lt;/a&gt;. Create your Nuxt starter using the following shell command and configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;appwrite init sites
? What would you like to name your site? Nuxt starter
? What ID would you like to have &lt;span class="k"&gt;for &lt;/span&gt;your site? unique&lt;span class="o"&gt;()&lt;/span&gt;
? What framework would you like to use? Nuxt &lt;span class="o"&gt;(&lt;/span&gt;nuxt&lt;span class="o"&gt;)&lt;/span&gt;
? What specification would you like to use? 0.5 CPU, 512MB RAM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can then make any edits to the website and deploy it using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;appwrite push sites
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Test the starter template
&lt;/h2&gt;

&lt;p&gt;After your site has been successfully deployed, Appwrite will show you a &lt;strong&gt;Congratulations&lt;/strong&gt; page. You can then either choose to view the site by clicking on the &lt;strong&gt;Visit site&lt;/strong&gt; button or view the site configuration (deployments, logs, domains, usage, and settings) by clicking on the &lt;strong&gt;Go to dashboard&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flokt08ywruf4olvmd8jo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flokt08ywruf4olvmd8jo.png" alt="Congratulations" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;And with that, the Nuxt starter kit is deployed to Appwrite Sites. You can explore other templates or deploy any other websites you'd like. &lt;/p&gt;

&lt;p&gt;For more information about Appwrite Sites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/docs/products/sites" rel="noopener noreferrer"&gt;Appwrite Sites product docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/docs/products/sites/quick-start/nuxt" rel="noopener noreferrer"&gt;Quick start to deploy any Nuxt app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/discord" rel="noopener noreferrer"&gt;Appwrite Discord server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>nuxt</category>
      <category>programming</category>
      <category>appwrite</category>
    </item>
    <item>
      <title>How to setup the Next.js starter template on Appwrite Sites</title>
      <dc:creator>Aditya Oberai</dc:creator>
      <pubDate>Wed, 21 May 2025 13:10:06 +0000</pubDate>
      <link>https://dev.to/appwrite/how-to-setup-the-nextjs-starter-template-on-appwrite-sites-357k</link>
      <guid>https://dev.to/appwrite/how-to-setup-the-nextjs-starter-template-on-appwrite-sites-357k</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;To ease this process even further, Appwrite Sites offers a variety of starter kits for popular frameworks like Next.js, React, Vue, Nuxt, Angular, SvelteKit, and Flutter. In this blog, you will learn how to set up the Next.js starter template and deploy it to &lt;a href="https://appwrite.io/products/sites" rel="noopener noreferrer"&gt;Appwrite Sites&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview of the starter template
&lt;/h2&gt;

&lt;p&gt;Next.js is a React framework that enables developers to build fast, scalable web applications with features like server-side rendering, static site generation, and API routes out of the box.&lt;/p&gt;

&lt;p&gt;Appwrite's Next.js starter template includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A clean, single-page UI&lt;/li&gt;
&lt;li&gt;Integration with Appwrite's SDK&lt;/li&gt;
&lt;li&gt;Pre-configured deployment settings for Appwrite Sites' SSR rendering strategy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cxsqbkptnflqqja493a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cxsqbkptnflqqja493a.png" alt="Deployed app" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy the starter template on Appwrite
&lt;/h2&gt;

&lt;p&gt;Firstly, you must head to Appwrite Cloud and &lt;a href="https://cloud.appwrite.io/console/register" rel="noopener noreferrer"&gt;create an account&lt;/a&gt; if you haven't already (or &lt;a href="https://appwrite.io/docs/advanced/self-hosting" rel="noopener noreferrer"&gt;self-host Appwrite 1.7&lt;/a&gt;). Next, create your first project, which will lead you to the project overview page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F207jrkbmlnnbunbp0jjr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F207jrkbmlnnbunbp0jjr.png" alt="Add platform" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Head to the &lt;strong&gt;Sites&lt;/strong&gt; page from the left sidebar, click on the &lt;strong&gt;Create site&lt;/strong&gt; button, and select the &lt;strong&gt;Clone a template&lt;/strong&gt; option. This will take you to the Appwrite Sites templates listing, where you should search &lt;code&gt;Next.js starter&lt;/code&gt; and click on the template.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi22jhtnw3tgbch9mllsw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi22jhtnw3tgbch9mllsw.png" alt="Starter template" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After selecting the template, you can choose to connect a GitHub repository now or at a later time. If you choose to connect a repository, ensure you select a production branch (leave the root directory as is). Then, review the preset environment variables, update the domain name if you want, and click on the &lt;strong&gt;Deploy&lt;/strong&gt; button. You can watch the deployment logs as the site is built.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpvdf7n45d03sqf1f58uf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpvdf7n45d03sqf1f58uf.png" alt="Deployment logs" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternative method to deploy starter template
&lt;/h3&gt;

&lt;p&gt;As an alternative to the Appwrite console, you can create and deploy websites using the &lt;a href="https://appwrite.io/docs/products/sites/deploy-manually#cli" rel="noopener noreferrer"&gt;Appwrite CLI&lt;/a&gt;. Create your Next.js starter using the following shell command and configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;appwrite init sites
? What would you like to name your site? Next.js starter
? What ID would you like to have &lt;span class="k"&gt;for &lt;/span&gt;your site? unique&lt;span class="o"&gt;()&lt;/span&gt;
? What framework would you like to use? Next.js &lt;span class="o"&gt;(&lt;/span&gt;nextjs&lt;span class="o"&gt;)&lt;/span&gt;
? What specification would you like to use? 0.5 CPU, 512MB RAM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can then make any edits to the website and deploy it using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;appwrite push sites
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Test the starter template
&lt;/h2&gt;

&lt;p&gt;After your site has been successfully deployed, Appwrite will show you a &lt;strong&gt;Congratulations&lt;/strong&gt; page. You can then either choose to view the site by clicking on the &lt;strong&gt;Visit site&lt;/strong&gt; button or view the site configuration (deployments, logs, domains, usage, and settings) by clicking on the &lt;strong&gt;Go to dashboard&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqvd92jopktavrh9n7zzb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqvd92jopktavrh9n7zzb.png" alt="Congratulations" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;And with that, the Next.js starter kit is deployed to Appwrite Sites. You can explore other templates or deploy any other websites you'd like. &lt;/p&gt;

&lt;p&gt;For more information about Appwrite Sites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/docs/products/sites" rel="noopener noreferrer"&gt;Appwrite Sites product docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/docs/products/sites/quick-start/nextjs" rel="noopener noreferrer"&gt;Quick start to deploy any Next.js app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/discord" rel="noopener noreferrer"&gt;Appwrite Discord server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>programming</category>
      <category>appwrite</category>
    </item>
    <item>
      <title>How to setup the Flutter starter template on Appwrite Sites</title>
      <dc:creator>Aditya Oberai</dc:creator>
      <pubDate>Wed, 21 May 2025 13:02:09 +0000</pubDate>
      <link>https://dev.to/appwrite/how-to-setup-the-flutter-starter-template-on-appwrite-sites-1mhe</link>
      <guid>https://dev.to/appwrite/how-to-setup-the-flutter-starter-template-on-appwrite-sites-1mhe</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Appwrite Sites changes that by offering built-in support for Flutter Web, making it easy to host and scale your applications. Alongside Flutter, Appwrite also provides starter kits for popular frameworks like Next.js, React, Vue, Nuxt, Angular, and SvelteKit. In this blog, you'll learn how to set up the Flutter starter template and deploy it to &lt;a href="https://appwrite.io/products/sites" rel="noopener noreferrer"&gt;Appwrite Sites&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview of the starter template
&lt;/h2&gt;

&lt;p&gt;Flutter Web is a part of the Flutter framework that allows developers to build responsive, high-performance web applications using a single Dart codebase.&lt;/p&gt;

&lt;p&gt;Appwrite's Flutter starter template includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A clean, single-page UI&lt;/li&gt;
&lt;li&gt;Integration with Appwrite's SDK&lt;/li&gt;
&lt;li&gt;Pre-configured deployment settings for Appwrite Sites' Static rendering strategy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1stffwjg5auy145wurgd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1stffwjg5auy145wurgd.png" alt="Deployed app" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy the starter template on Appwrite
&lt;/h2&gt;

&lt;p&gt;Firstly, you must head to Appwrite Cloud and &lt;a href="https://cloud.appwrite.io/console/register" rel="noopener noreferrer"&gt;create an account&lt;/a&gt; if you haven't already (or &lt;a href="https://appwrite.io/docs/advanced/self-hosting" rel="noopener noreferrer"&gt;self-host Appwrite 1.7&lt;/a&gt;). Next, create your first project, which will lead you to the project overview page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zhayousqd87l0ktrh0b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zhayousqd87l0ktrh0b.png" alt="Add platform" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Head to the &lt;strong&gt;Sites&lt;/strong&gt; page from the left sidebar, click on the &lt;strong&gt;Create site&lt;/strong&gt; button, and select the &lt;strong&gt;Clone a template&lt;/strong&gt; option. This will take you to the Appwrite Sites templates listing, where you should search &lt;code&gt;Flutter starter&lt;/code&gt; and click on the template.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg55ov6y6e4zi1aiy5t9n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg55ov6y6e4zi1aiy5t9n.png" alt="Starter template" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After selecting the template, you can choose to connect a GitHub repository now or at a later time. If you choose to connect a repository, ensure you select a production branch (leave the root directory as is). Then, review the preset environment variables, update the domain name if you want, and click on the &lt;strong&gt;Deploy&lt;/strong&gt; button. You can watch the deployment logs as the site is built.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternative method to deploy starter template
&lt;/h3&gt;

&lt;p&gt;As an alternative to the Appwrite console, you can create and deploy websites using the &lt;a href="https://appwrite.io/docs/products/sites/deploy-manually#cli" rel="noopener noreferrer"&gt;Appwrite CLI&lt;/a&gt;. Create your Flutter starter using the following shell command and configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;appwrite init sites
? What would you like to name your site? Flutter starter
? What ID would you like to have &lt;span class="k"&gt;for &lt;/span&gt;your site? unique&lt;span class="o"&gt;()&lt;/span&gt;
? What framework would you like to use? Flutter &lt;span class="o"&gt;(&lt;/span&gt;flutter&lt;span class="o"&gt;)&lt;/span&gt;
? What specification would you like to use? 0.5 CPU, 512MB RAM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can then make any edits to the website and deploy it using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;appwrite push sites
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Test the starter template
&lt;/h2&gt;

&lt;p&gt;After your site has been successfully deployed, Appwrite will show you a &lt;strong&gt;Congratulations&lt;/strong&gt; page. You can then either choose to view the site by clicking on the &lt;strong&gt;Visit site&lt;/strong&gt; button or view the site configuration (deployments, logs, domains, usage, and settings) by clicking on the &lt;strong&gt;Go to dashboard&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswu6d5cr8za639vcsrky.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswu6d5cr8za639vcsrky.png" alt="Congratulations" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;And with that, the Flutter starter kit is deployed to Appwrite Sites. You can explore other templates or deploy any other websites you'd like. &lt;/p&gt;

&lt;p&gt;For more information about Appwrite Sites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/docs/products/sites" rel="noopener noreferrer"&gt;Appwrite Sites product docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/docs/products/sites/quick-start/flutter" rel="noopener noreferrer"&gt;Quick start to deploy any Flutter Web app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appwrite.io/discord" rel="noopener noreferrer"&gt;Appwrite Discord server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>flutter</category>
      <category>programming</category>
      <category>appwrite</category>
    </item>
    <item>
      <title>How to host SSR web apps on Appwrite Sites</title>
      <dc:creator>Ebenezer Don</dc:creator>
      <pubDate>Tue, 20 May 2025 13:34:40 +0000</pubDate>
      <link>https://dev.to/appwrite/how-to-host-ssr-web-apps-on-appwrite-sites-2keb</link>
      <guid>https://dev.to/appwrite/how-to-host-ssr-web-apps-on-appwrite-sites-2keb</guid>
      <description>&lt;p&gt;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).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmh5rebvlimmcp75hpq9r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmh5rebvlimmcp75hpq9r.png" alt="Image description" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've used platforms like Vercel before, this will feel familiar. You can connect your GitHub repository, choose a branch, and Appwrite will build your app and deploy it to a server.&lt;/p&gt;

&lt;p&gt;In this post, we'll show you exactly how to host an SSR-capable web app using Appwrite Sites, from repository connection to framework-specific configurations. Whether you're migrating from Vercel or starting from scratch, this guide will walk you through every step.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is SSR, and why does it matter?
&lt;/h2&gt;

&lt;p&gt;Server-Side Rendering (SSR) means your web app's pages are rendered on the server at request time. Unlike pre-rendered static pages, SSR allows your app to respond to each request with dynamic content that's fully rendered before it reaches the browser. It's a powerful approach for apps that need authentication, personalization, real-time data, or SEO-friendly dynamic content.&lt;/p&gt;

&lt;p&gt;Appwrite Sites supports SSR by allowing you to configure your framework's build settings and output behavior, and by running your app on a server runtime (Node.js) where needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hosting an SSR app on Appwrite Sites
&lt;/h2&gt;

&lt;p&gt;Let's walk through the process step by step.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Open the Appwrite Console
&lt;/h3&gt;

&lt;p&gt;Log in to your Appwrite Console. In the left sidebar, you'll see a section labeled &lt;strong&gt;Sites&lt;/strong&gt;. Click on it. This will take you to the Sites dashboard, where you can manage existing sites or deploy a new one.&lt;/p&gt;

&lt;p&gt;Click the &lt;strong&gt;Create Site&lt;/strong&gt; button to get started.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqeopwt3m2gq0law49x59.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqeopwt3m2gq0law49x59.png" alt="Image description" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this point, you have two options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clone a template&lt;/strong&gt; , If you're starting fresh, this is a quick way to scaffold a new site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect a repository&lt;/strong&gt; , If you already have a working app in GitHub, this is what you'll want.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Choose &lt;strong&gt;Connect a repository&lt;/strong&gt;. Appwrite will walk you through selecting a GitHub repository and giving the necessary permissions if you haven't already.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Configure your deployment settings
&lt;/h3&gt;

&lt;p&gt;Once your repository is connected, you'll land on the deployment configuration page. Here's what you'll see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name&lt;/strong&gt;: A name for your site, usually taken from your repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Branch&lt;/strong&gt;: The branch you want to use for production (typically &lt;code&gt;main&lt;/code&gt; or &lt;code&gt;master&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Root directory&lt;/strong&gt;: Leave this as &lt;code&gt;./&lt;/code&gt; unless your app lives in a subfolder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent mode&lt;/strong&gt;: This prevents Appwrite from adding GitHub comments when changes are pushed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework&lt;/strong&gt;: Optional, but recommended. Selecting your framework here helps Appwrite apply sensible defaults and display SSR instructions specific to your setup.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, scroll down to the &lt;strong&gt;Build settings&lt;/strong&gt; section. This is where you define how your app gets built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install command&lt;/strong&gt;: The default &lt;code&gt;npm install&lt;/code&gt; usually works unless your app uses a different package manager or custom setup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build command&lt;/strong&gt;: For most frameworks, this is &lt;code&gt;npm run build&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output directory&lt;/strong&gt;: For Next.js, this would typically be &lt;code&gt;./.next&lt;/code&gt;. Different frameworks may use different output paths.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your app needs environment variables, like API keys, secrets, or runtime flags, you can define them in the &lt;strong&gt;Environment variables&lt;/strong&gt; section. You can also import them from an existing &lt;code&gt;.env&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;When you're done, click &lt;strong&gt;Deploy&lt;/strong&gt;. Appwrite will pull your code, run your build steps, and deploy your site.&lt;/p&gt;

&lt;h2&gt;
  
  
  Framework-specific SSR tips
&lt;/h2&gt;

&lt;p&gt;While Appwrite Sites supports SSR, not every framework behaves the same out of the box. If your app was previously deployed on Vercel, there's a good chance it was configured with a Vercel-specific adapter, especially if you used Next.js or SvelteKit.&lt;/p&gt;

&lt;p&gt;These adapters are tailored for Vercel's environment and won't run properly on Appwrite, which expects Node.js as the runtime. To make SSR work on Appwrite, you'll need to switch to the appropriate Node.js adapter.&lt;/p&gt;

&lt;p&gt;Let's go through a few popular frameworks and what to look out for:&lt;/p&gt;

&lt;h3&gt;
  
  
  Next.js
&lt;/h3&gt;

&lt;p&gt;If you're using Next.js, SSR is supported. In your &lt;code&gt;next.config.js&lt;/code&gt; file, &lt;strong&gt;make sure you do not set the &lt;code&gt;output&lt;/code&gt; field&lt;/strong&gt;. That's specific to Vercel and can interfere with the way Appwrite handles the build output.&lt;/p&gt;

&lt;p&gt;Just let Next.js use its default behavior, and in your site settings, keep the output directory as &lt;code&gt;./.next&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  SvelteKit
&lt;/h3&gt;

&lt;p&gt;SvelteKit sites hosted on Vercel typically use &lt;code&gt;@sveltejs/adapter-vercel&lt;/code&gt;. That won't work on Appwrite. To fix this, open your &lt;code&gt;svelte.config.js&lt;/code&gt; file and switch to the Node.js adapter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;adapter&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@sveltejs/adapter-node&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;kit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once that's set, rebuild and redeploy your site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nuxt
&lt;/h3&gt;

&lt;p&gt;Nuxt works quite seamlessly on Appwrite. In your site settings, make sure the build command is set to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SSR is supported out of the box with no additional adapter configuration needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Angular (with SSR)
&lt;/h3&gt;

&lt;p&gt;If you've enabled SSR in your Angular app, make sure your &lt;code&gt;src/server.ts&lt;/code&gt; file is using the &lt;code&gt;@angular/ssr/node&lt;/code&gt; package. This enables Angular Universal to run properly in a Node.js environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Astro
&lt;/h3&gt;

&lt;p&gt;For Astro apps, you'll want to install and configure the Node adapter. In &lt;code&gt;astro.config.mjs&lt;/code&gt;, update your adapter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@astrojs/node&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;server&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;node&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells Astro to render pages server-side using Node.js.&lt;/p&gt;

&lt;h3&gt;
  
  
  Remix
&lt;/h3&gt;

&lt;p&gt;Remix apps should be configured to use &lt;code&gt;@remix-run/node&lt;/code&gt; in the server entry file. Make sure your &lt;code&gt;entry.server.tsx&lt;/code&gt; file imports from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createRequestHandler&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@remix-run/node&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures the server runtime is correctly set for Node environments like Appwrite.&lt;/p&gt;

&lt;h3&gt;
  
  
  Analog (Angular meta-framework)
&lt;/h3&gt;

&lt;p&gt;Analog supports SSR via Vite. To enable it, set the &lt;code&gt;ssr&lt;/code&gt; property to &lt;code&gt;true&lt;/code&gt; inside your &lt;code&gt;vite.config.ts&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;analog&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;ssr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This activates server-side rendering in your build pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check or change framework instructions
&lt;/h2&gt;

&lt;p&gt;If you're not sure what to do for your specific framework, you can find help directly in the Appwrite Console.&lt;/p&gt;

&lt;p&gt;Just open your deployed site from the Sites dashboard, click on &lt;strong&gt;Settings&lt;/strong&gt;, and scroll down to the &lt;strong&gt;Build settings&lt;/strong&gt; section. When you select a framework from the dropdown, Appwrite will show instructions for SSR configuration, specific to your chosen stack.&lt;/p&gt;

&lt;p&gt;That way, you'll know exactly what needs to change, and how.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Hosting SSR apps with Appwrite Sites gives you a lot of flexibility. You get a Git-powered workflow, server runtime support, and integration with frameworks you already use. But more importantly, you're in control. You're not locked into a proprietary environment, and you can configure the exact build behavior you need.&lt;/p&gt;

&lt;p&gt;If you're switching from Vercel, just remember to revisit your framework's adapter and build setup. Most of the time, it's just a matter of switching to a Node.js adapter and updating a couple of config files.&lt;/p&gt;

&lt;p&gt;Once you've set that up, Appwrite Sites takes care of the rest, from cloning your repo to deploying server-rendered content.&lt;/p&gt;

&lt;p&gt;Try it out, and let us know how it works for your stack.ed 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).&lt;/p&gt;

&lt;p&gt;If you've used platforms like Vercel before, this will feel familiar. You can connect your GitHub repository, choose a branch, and Appwrite will build your app and deploy it to a server.&lt;/p&gt;

&lt;p&gt;In this post, we'll show you exactly how to host an SSR-capable web app using Appwrite Sites, from repository connection to framework-specific configurations. Whether you're migrating from Vercel or starting from scratch, this guide will walk you through every step.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is SSR, and why does it matter?
&lt;/h2&gt;

&lt;p&gt;Server-Side Rendering (SSR) means your web app's pages are rendered on the server at request time. Unlike pre-rendered static pages, SSR allows your app to respond to each request with dynamic content that's fully rendered before it reaches the browser. It's a powerful approach for apps that need authentication, personalization, real-time data, or SEO-friendly dynamic content.&lt;/p&gt;

&lt;p&gt;Appwrite Sites supports SSR by allowing you to configure your framework's build settings and output behavior, and by running your app on a server runtime (Node.js) where needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hosting an SSR app on Appwrite Sites
&lt;/h2&gt;

&lt;p&gt;Let's walk through the process step by step.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Open the Appwrite Console
&lt;/h3&gt;

&lt;p&gt;Log in to your Appwrite Console. In the left sidebar, you'll see a section labeled &lt;strong&gt;Sites&lt;/strong&gt;. Click on it. This will take you to the Sites dashboard, where you can manage existing sites or deploy a new one.&lt;/p&gt;

&lt;p&gt;Click the &lt;strong&gt;Create Site&lt;/strong&gt; button to get started.&lt;/p&gt;

&lt;p&gt;&lt;a href="" class="article-body-image-wrapper"&gt;&lt;img alt="Screenshot 2025-05-13 at 14.13.57.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this point, you have two options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clone a template&lt;/strong&gt; , If you're starting fresh, this is a quick way to scaffold a new site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect a repository&lt;/strong&gt; , If you already have a working app in GitHub, this is what you'll want.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Choose &lt;strong&gt;Connect a repository&lt;/strong&gt;. Appwrite will walk you through selecting a GitHub repository and giving the necessary permissions if you haven't already.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Configure your deployment settings
&lt;/h3&gt;

&lt;p&gt;Once your repository is connected, you'll land on the deployment configuration page. Here's what you'll see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name&lt;/strong&gt;: A name for your site, usually taken from your repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Branch&lt;/strong&gt;: The branch you want to use for production (typically &lt;code&gt;main&lt;/code&gt; or &lt;code&gt;master&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Root directory&lt;/strong&gt;: Leave this as &lt;code&gt;./&lt;/code&gt; unless your app lives in a subfolder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent mode&lt;/strong&gt;: This prevents Appwrite from adding GitHub comments when changes are pushed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework&lt;/strong&gt;: Optional, but recommended. Selecting your framework here helps Appwrite apply sensible defaults and display SSR instructions specific to your setup.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, scroll down to the &lt;strong&gt;Build settings&lt;/strong&gt; section. This is where you define how your app gets built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install command&lt;/strong&gt;: The default &lt;code&gt;npm install&lt;/code&gt; usually works unless your app uses a different package manager or custom setup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build command&lt;/strong&gt;: For most frameworks, this is &lt;code&gt;npm run build&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output directory&lt;/strong&gt;: For Next.js, this would typically be &lt;code&gt;./.next&lt;/code&gt;. Different frameworks may use different output paths.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your app needs environment variables, like API keys, secrets, or runtime flags, you can define them in the &lt;strong&gt;Environment variables&lt;/strong&gt; section. You can also import them from an existing &lt;code&gt;.env&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;When you're done, click &lt;strong&gt;Deploy&lt;/strong&gt;. Appwrite will pull your code, run your build steps, and deploy your site.&lt;/p&gt;

&lt;h2&gt;
  
  
  Framework-specific SSR tips
&lt;/h2&gt;

&lt;p&gt;While Appwrite Sites supports SSR, not every framework behaves the same out of the box. If your app was previously deployed on Vercel, there's a good chance it was configured with a Vercel-specific adapter, especially if you used Next.js or SvelteKit.&lt;/p&gt;

&lt;p&gt;These adapters are tailored for Vercel's environment and won't run properly on Appwrite, which expects Node.js as the runtime. To make SSR work on Appwrite, you'll need to switch to the appropriate Node.js adapter.&lt;/p&gt;

&lt;p&gt;Let's go through a few popular frameworks and what to look out for:&lt;/p&gt;

&lt;h3&gt;
  
  
  Next.js
&lt;/h3&gt;

&lt;p&gt;If you're using Next.js, SSR is supported. In your &lt;code&gt;next.config.js&lt;/code&gt; file, &lt;strong&gt;make sure you do not set the &lt;code&gt;output&lt;/code&gt; field&lt;/strong&gt;. That's specific to Vercel and can interfere with the way Appwrite handles the build output.&lt;/p&gt;

&lt;p&gt;Just let Next.js use its default behavior, and in your site settings, keep the output directory as &lt;code&gt;./.next&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  SvelteKit
&lt;/h3&gt;

&lt;p&gt;SvelteKit sites hosted on Vercel typically use &lt;code&gt;@sveltejs/adapter-vercel&lt;/code&gt;. That won't work on Appwrite. To fix this, open your &lt;code&gt;svelte.config.js&lt;/code&gt; file and switch to the Node.js adapter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;adapter&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@sveltejs/adapter-node&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;kit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once that's set, rebuild and redeploy your site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nuxt
&lt;/h3&gt;

&lt;p&gt;Nuxt works quite seamlessly on Appwrite. In your site settings, make sure the build command is set to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SSR is supported out of the box with no additional adapter configuration needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Angular (with SSR)
&lt;/h3&gt;

&lt;p&gt;If you've enabled SSR in your Angular app, make sure your &lt;code&gt;src/server.ts&lt;/code&gt; file is using the &lt;code&gt;@angular/ssr/node&lt;/code&gt; package. This enables Angular Universal to run properly in a Node.js environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Astro
&lt;/h3&gt;

&lt;p&gt;For Astro apps, you'll want to install and configure the Node adapter. In &lt;code&gt;astro.config.mjs&lt;/code&gt;, update your adapter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@astrojs/node&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;server&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;node&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells Astro to render pages server-side using Node.js.&lt;/p&gt;

&lt;h3&gt;
  
  
  Remix
&lt;/h3&gt;

&lt;p&gt;Remix apps should be configured to use &lt;code&gt;@remix-run/node&lt;/code&gt; in the server entry file. Make sure your &lt;code&gt;entry.server.tsx&lt;/code&gt; file imports from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createRequestHandler&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@remix-run/node&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures the server runtime is correctly set for Node environments like Appwrite.&lt;/p&gt;

&lt;h3&gt;
  
  
  Analog (Angular meta-framework)
&lt;/h3&gt;

&lt;p&gt;Analog supports SSR via Vite. To enable it, set the &lt;code&gt;ssr&lt;/code&gt; property to &lt;code&gt;true&lt;/code&gt; inside your &lt;code&gt;vite.config.ts&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;analog&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;ssr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This activates server-side rendering in your build pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check or change framework instructions
&lt;/h2&gt;

&lt;p&gt;If you're not sure what to do for your specific framework, you can find help directly in the Appwrite Console.&lt;/p&gt;

&lt;p&gt;Just open your deployed site from the Sites dashboard, click on &lt;strong&gt;Settings&lt;/strong&gt;, and scroll down to the &lt;strong&gt;Build settings&lt;/strong&gt; section. When you select a framework from the dropdown, Appwrite will show instructions for SSR configuration, specific to your chosen stack.&lt;/p&gt;

&lt;p&gt;That way, you'll know exactly what needs to change, and how.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Hosting SSR apps with Appwrite Sites gives you a lot of flexibility. You get a Git-powered workflow, server runtime support, and integration with frameworks you already use. But more importantly, you're in control. You're not locked into a proprietary environment, and you can configure the exact build behavior you need.&lt;/p&gt;

&lt;p&gt;If you're switching from Vercel, just remember to revisit your framework's adapter and build setup. Most of the time, it's just a matter of switching to a Node.js adapter and updating a couple of config files.&lt;/p&gt;

&lt;p&gt;Once you've set that up, Appwrite Sites takes care of the rest, from cloning your repo to deploying server-rendered content.&lt;/p&gt;

&lt;p&gt;Try it out, and let us know how it works for your stack.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>react</category>
    </item>
  </channel>
</rss>
