<?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: Eldad A. Fux</title>
    <description>The latest articles on DEV Community by Eldad A. Fux (@eldadfux).</description>
    <link>https://dev.to/eldadfux</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F224437%2F24510e1e-2d7b-414f-9b5c-f6566845bf04.jpeg</url>
      <title>DEV Community: Eldad A. Fux</title>
      <link>https://dev.to/eldadfux</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eldadfux"/>
    <language>en</language>
    <item>
      <title>Everything New in Appwrite 1.0</title>
      <dc:creator>Eldad A. Fux</dc:creator>
      <pubDate>Wed, 14 Sep 2022 13:15:25 +0000</pubDate>
      <link>https://dev.to/appwrite/everything-new-in-appwrite-10-43o6</link>
      <guid>https://dev.to/appwrite/everything-new-in-appwrite-10-43o6</guid>
      <description>&lt;p&gt;We are thrilled with the announcement of Appwrite 1.0. The new Appwrite release is our first ever stable version, and one of the biggest milestones for the project and the Appwrite community.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/1.0"&gt;Appwrite 1.0&lt;/a&gt; is not only about stability, like in every Appwrite release, the new Appwrite version is jammed with exciting new features that take Appwrite dev-experience to a new level. In this post, we have summarized everything you should know about the new release with links and resources for helping you to master all the cool new things version 1.0 has to offer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Permissions 2.0
&lt;/h2&gt;

&lt;p&gt;We have completely upgraded the Appwrite permissions mechanism, adding new capabilities, and more flexibility. Starting with version 1.0, we have introduced the permissions methods &lt;code&gt;create()&lt;/code&gt;, &lt;code&gt;update()&lt;/code&gt; and &lt;code&gt;delete()&lt;/code&gt; to allow granular control over which end user has access to which resource.&lt;/p&gt;

&lt;p&gt;The new &lt;code&gt;create()&lt;/code&gt; method will allow you to have more control over who can create a document or a file in a database collection or a storage bucket. For convenience, we have also kept the &lt;code&gt;write()&lt;/code&gt; permissions which will be used as an alias for &lt;code&gt;create()&lt;/code&gt; + &lt;code&gt;update()&lt;/code&gt; + &lt;code&gt;delete()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;From now own you will also be able to use the role &lt;code&gt;any()&lt;/code&gt; to give both signed or guests users access to read or &lt;em&gt;write&lt;/em&gt;. This is now possible since the introduction of buckets. By default Appwrite will still keep your resources safe from unauthorized access, but now you could explicitly allow any kind of user to create resources to be stored on your Appwrite backend.&lt;/p&gt;

&lt;p&gt;For more convenience, we have upgraded &lt;em&gt;all&lt;/em&gt; SDKs to support both the new &lt;code&gt;Permission&lt;/code&gt; and &lt;code&gt;Role&lt;/code&gt; classes for quick and easy completion of the different permissions method and allowed roles.&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="k"&gt;import&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="nx"&gt;Databases&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Permission&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Role&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="s2"&gt;appwrite&lt;/span&gt;&lt;span class="dl"&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;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Client&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="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://[HOSTNAME_OR_IP]/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;[PROJECT_ID]&lt;/span&gt;&lt;span class="dl"&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;databases&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;[DATABASE_ID]&lt;/span&gt;&lt;span class="dl"&gt;'&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;promise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;databases&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;[COLLECTION_ID]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Collection ID&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;actorName&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Chris Evans&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;height&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;183&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="c1"&gt;// Data&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="c1"&gt;// Permissions&lt;/span&gt;
        &lt;span class="nx"&gt;Permission&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;any&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt; &lt;span class="c1"&gt;// Anyone can view this document&lt;/span&gt;
        &lt;span class="nx"&gt;Permission&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;edit&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;Role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;team&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;writers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;Role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;team&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]),&lt;/span&gt; &lt;span class="c1"&gt;// Only writers and admins can edit this document&lt;/span&gt;
        &lt;span class="nx"&gt;Permission&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;Role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;5c1f88b42259e&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;Role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;team&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt; &lt;span class="c1"&gt;// Only user 5c1f88b42259e and admins can delete this document&lt;/span&gt;
    &lt;span class="p"&gt;]&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="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&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="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&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="nx"&gt;error&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;h2&gt;
  
  
  Queries 2.0
&lt;/h2&gt;

&lt;p&gt;The Queries system has also seen a major overhaul in Appwrite 1.0. We notice the list endpoints in Appwrite had inconsistent, yet bloated function signatures. For example, consider the example below which does nothing but sort by &lt;code&gt;title&lt;/code&gt; in ascending order:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Databases&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="s2"&gt;appwrite&lt;/span&gt;&lt;span class="dl"&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;databases&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[DATABASE_ID]&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// 'client' comes from setup&lt;/span&gt;
&lt;span class="nx"&gt;databases&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listDocuments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;movies&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// collectionId&lt;/span&gt;
    &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="c1"&gt;// queries&lt;/span&gt;
    &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// limit&lt;/span&gt;
    &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// offset&lt;/span&gt;
    &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// cursor&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;after&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// cursorDirection&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// orderAttributes&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ASC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;// orderTypes&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are far too many parameters in the &lt;code&gt;listDocument()&lt;/code&gt; method. To solve this problem we’ve overhauled the Queries system so that list endpoints take only a &lt;code&gt;queries&lt;/code&gt; parameter. Each type of query, sort, or pagination action will now be passed to list endpoints through the queries parameter.&lt;/p&gt;

&lt;p&gt;Here’s the same example in Appwrite 1.0:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Databases&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Query&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="s2"&gt;appwrite&lt;/span&gt;&lt;span class="dl"&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;databases&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[DATABASE_ID]&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;databases&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listDocuments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;movies&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// collectionId&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="nx"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;orderAsc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;// Order results in ascending order by title&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// queries&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This new syntax is much more concise and easy to write. The new query also does pagination in a similar fashion like before:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Databases&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Query&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="s2"&gt;appwrite&lt;/span&gt;&lt;span class="dl"&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;databases&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[DATABASE_ID]&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// 'client' comes from setup&lt;/span&gt;

&lt;span class="c1"&gt;// Page 1&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;databases&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listDocuments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;movies&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="nx"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;greaterThan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1999&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="nx"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;25&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;lastId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documents&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&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="nx"&gt;$id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Page 2&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;databases&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listDocuments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;movies&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="nx"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;greaterThan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1999&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="nx"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
&lt;span class="nx"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cursorAfter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lastId&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;Appwrite also required an exact index for querying and sorting in previous versions. If you had a query like the one below, you would have needed an index with the exact attributes and order of &lt;code&gt;[‘title’, ‘year’, ‘studio’]&lt;/code&gt;. The index of &lt;code&gt;[ ‘year’, ‘title’, ‘studio’]&lt;/code&gt; or &lt;code&gt;[‘title’, ‘year’, ‘studio’, ‘language’]&lt;/code&gt; would not have worked.&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="c1"&gt;// Page 1&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;databases&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listDocuments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;movies&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="nx"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;Lion&lt;/span&gt; &lt;span class="nx"&gt;King&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="nx"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;greaterThan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1999&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="nx"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="nx"&gt;studio&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="nx"&gt;Disney&lt;/span&gt;&lt;span class="err"&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;With the new flexible indexes in Appwrite 1.0, you can now perform the query with either of the previously mentioned index examples. This is the first of a series of planned improvements to increase database flexibility in Appwrite in the coming weeks and months.&lt;/p&gt;

&lt;h2&gt;
  
  
  DateTime Attributes and ISO8601 Support
&lt;/h2&gt;

&lt;p&gt;A new attribute was introduced in Appwrite 1.0 after popular demand, which is DateTime Attributes. The new DateTime attribute follows &lt;a href="https://en.wikipedia.org/wiki/ISO_8601"&gt;ISO 8601&lt;/a&gt; and displays time information in a human readable string. All DateTimes will be stored in UTC to avoid timezone confusion. &lt;/p&gt;

&lt;p&gt;This is better than Unix Timestamps in the sense that it can represent dates before 1970 and after 2038. This is useful for scheduling or birthday type information that often require longer time frames. To be consistent, all timestamps returned by different Appwrite endpoints are also in DateTime format and UTC timezone in Appwrite 1.0.&lt;/p&gt;

&lt;h2&gt;
  
  
  Password Hashing
&lt;/h2&gt;

&lt;p&gt;Appwrite 1.0 introduces a new API that allows you to import password hashes in different formats. The supported formats are &lt;a href="https://en.wikipedia.org/wiki/Bcrypt"&gt;BCrypt&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/MD5"&gt;MD5&lt;/a&gt;, SCrypt, SCrypt Modified (Firebase), &lt;a href="https://en.wikipedia.org/wiki/Argon2"&gt;Argon2&lt;/a&gt;, &lt;a href="https://www.openwall.com/phpass/"&gt;PHPass&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Secure_Hash_Algorithms/"&gt;SHA&lt;/a&gt;, and Plain Text. Appwrite will also be using Aragon2 as the new default hashing algorithm as recommended by &lt;a href="https://owasp.org/"&gt;OWASP&lt;/a&gt;. Here’s an example importing a password using BCrypt:&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="k"&gt;import&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="nx"&gt;Users&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="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;appwrite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// make sure to have client with endpoint and project ID&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Users&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;passwordHash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;$2a$12$SnuhggUBPwc0ZTFsLeENVuKD.UcNOl6h/fIFkzih8pRQYZa2oNVM2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Hash of password: AppwriteIsAwe$ome&lt;/span&gt;

&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createBcryptUser&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;test@appwrite.io&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;passwordHash&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is hashing API is only available on Server SDKs and intended for importing existing users from other platforms. All imported hashes that are imported are converted to Argon2 after the user is created, like normal users created on Appwrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zstd Compression
&lt;/h2&gt;

&lt;p&gt;In previous versions of Appwrite, we’ve only supported file compression using Gzip. In Appwrite 1.0, we introduced file compression using &lt;a href="http://facebook.github.io/zstd/"&gt;Zstandard&lt;/a&gt; which is a fast compression algorithm with high compression ratio intended for all types of online storage. You can now choose to use this type of compression algorithm in the Appwrite Storage service.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Coming Next?
&lt;/h2&gt;

&lt;p&gt;Appwrite still has lots of room to grow and evolve. We're excited for the future roadmap of Appwrite and confident in the potential of Appwrite to revolutionize how software is built and maintained. Together with the open-source community and wider developers community, we believe Appwrite has endless possibilities to simplify developers' lives and allow all of us to focus on innovation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Involved!
&lt;/h2&gt;

&lt;p&gt;Appwrite is built and designed by a &lt;a href="https://appwrite.io/discord"&gt;community&lt;/a&gt; of passionate open-source developers. Getting started in the Appwrite community and becoming more involved is very easy. While many love to support the project with code contributions, there are other great ways to give a hand. Helping in the &lt;a href="https://appwrite.io/discord"&gt;Discord community&lt;/a&gt; or through &lt;a href="https://github.com/appwrite/appwrite/issues"&gt;GitHub issues&lt;/a&gt;, sharing your feedback, reporting bugs, or spreading the word by creating written or video content and engaging with other developers on social media. Every contribution counts and helps us make Appwrite better.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>flutter</category>
      <category>news</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Announcing New Versions for Appwrite's Flutter and Dart SDKs</title>
      <dc:creator>Eldad A. Fux</dc:creator>
      <pubDate>Thu, 01 Sep 2022 11:18:58 +0000</pubDate>
      <link>https://dev.to/appwrite/announcing-new-versions-for-appwrites-flutter-and-dart-sdks-4l5j</link>
      <guid>https://dev.to/appwrite/announcing-new-versions-for-appwrites-flutter-and-dart-sdks-4l5j</guid>
      <description>&lt;p&gt;We're happy to announce the release of versions 7.0 and 6.1 of the Appwrite SDKs for Flutter and Dart. The new versions add some fixes and update outdated dependencies for both SDKs.&lt;/p&gt;

&lt;p&gt;We're also happy to share that version 7.0 of the Flutter SDKs now fully supports OAuth authentication for Windows applications. If you're already using OAuth authentication with previous versions of the Appwrite SDK with Android devices, you will need to make sure you update the &lt;code&gt;AndroidManifest.xml&lt;/code&gt; manifest file with the new settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;manifest&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
 ...
 &lt;span class="nt"&gt;&amp;lt;application&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
   ...
   &lt;span class="c"&gt;&amp;lt;!-- Add this inside the `&amp;lt;application&amp;gt;` tag, along side the existing `&amp;lt;activity&amp;gt;` tags --&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;activity&lt;/span&gt; &lt;span class="na"&gt;android:name=&lt;/span&gt;&lt;span class="s"&gt;"com.linusu.flutter_web_auth_2.CallbackActivity"&lt;/span&gt; &lt;span class="na"&gt;android:exported=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;intent-filter&lt;/span&gt; &lt;span class="na"&gt;android:label=&lt;/span&gt;&lt;span class="s"&gt;"flutter_web_auth_2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;action&lt;/span&gt; &lt;span class="na"&gt;android:name=&lt;/span&gt;&lt;span class="s"&gt;"android.intent.action.VIEW"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;category&lt;/span&gt; &lt;span class="na"&gt;android:name=&lt;/span&gt;&lt;span class="s"&gt;"android.intent.category.DEFAULT"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;category&lt;/span&gt; &lt;span class="na"&gt;android:name=&lt;/span&gt;&lt;span class="s"&gt;"android.intent.category.BROWSABLE"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;data&lt;/span&gt; &lt;span class="na"&gt;android:scheme=&lt;/span&gt;&lt;span class="s"&gt;"appwrite-callback-[PROJECT_ID]"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;/intent-filter&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/activity&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;/application&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/manifest&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In case you're using the package with web applications, you will need to update your callback file like the following example:&lt;br&gt;
&lt;/p&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;title&amp;gt;&lt;/span&gt;Authentication complete&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Authentication is complete. If this does not happen automatically, please
close the window.
&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
 &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;opener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;postMessage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
   &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;flutter-web-auth2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
 &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, the change is minor and meant to indicate that Appwrite is now using the &lt;code&gt;flutter_web_auth_2&lt;/code&gt; package instead of &lt;code&gt;flutter_web_auth&lt;/code&gt;. The new package includes multiple improvements and bug fixes that should enable a better experience when using the Appwrite SDK for Flutter.&lt;/p&gt;

&lt;p&gt;This is also a great opportunity to thank &lt;a href="https://github.com/ThexXTURBOXx"&gt;Nico Mexis&lt;/a&gt; for forking and maintaining the new &lt;a href="https://pub.dev/packages/flutter_web_auth_2"&gt;flutter_web_auth_2&lt;/a&gt; package and to many of the Appwrite community members, including &lt;a href="https://github.com/jocubeit"&gt;Dom Jocubeit&lt;/a&gt;, &lt;a href="https://github.com/2002Bishwajeet"&gt;Bishwajeet Parhi&lt;/a&gt;, &lt;a href="https://github.com/noga-dev"&gt;Agon Noga&lt;/a&gt; and &lt;a href="https://github.com/baas-enjoyer"&gt;Kamil Pyrkosz&lt;/a&gt; for raising, discussing and helping address those issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn More
&lt;/h2&gt;

&lt;p&gt;If you're new to Appwrite, Appwrite is a fully 100% open source backend as a service platform providing developers with all the core APIs required to build Web or Mobile applications. You can learn more about &lt;a href="https://appwrite.io"&gt;Appwrite&lt;/a&gt; and get started with the &lt;a href="https://appwrite.io/docs/getting-started-for-flutter"&gt;Appwrite SDK&lt;/a&gt; by visiting the &lt;a href="https://appwrite.io/docs"&gt;Appwrite Documentation&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>mobile</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Announcing Appwrite 0.14 with 11 Cloud Function Runtimes! 🥳</title>
      <dc:creator>Eldad A. Fux</dc:creator>
      <pubDate>Tue, 17 May 2022 15:04:13 +0000</pubDate>
      <link>https://dev.to/appwrite/announcing-appwrite-014-with-11-cloud-function-runtimes-36f5</link>
      <guid>https://dev.to/appwrite/announcing-appwrite-014-with-11-cloud-function-runtimes-36f5</guid>
      <description>&lt;p&gt;We're back with yet another Appwrite release! Appwrite 0.14 is now LIVE with a lot more improvements! With the new release we focused heavily on features that the Appwrite community requested the most. With many exciting features and important bug fixes, Appwrite 0.14 now enables even more flexibility, performance, and integrations to build your amazing next project! Let’s deep dive and learn what this release has to offer. 🏊‍♀️&lt;/p&gt;

&lt;h2&gt;
  
  
  ⏰ TL;DR
&lt;/h2&gt;

&lt;p&gt;Two areas that received the most attention are &lt;strong&gt;Events&lt;/strong&gt; and &lt;strong&gt;Certificates&lt;/strong&gt;. With the new event model, you can now trigger actions with a lot more precision. The improvements around certificates makes it more easy, scalable, and reliable to generate and manage Let's Encrypt generated certificates. You can now lean back on your chair and enjoy the trusty 🔐 green lock in front of your domain 🍹&lt;/p&gt;

&lt;p&gt;Alongside these features, we introduced new &lt;strong&gt;OAuth providers&lt;/strong&gt;, &lt;strong&gt;Storage Adapters&lt;/strong&gt;, and &lt;strong&gt;Function Runtimes&lt;/strong&gt; to support an even wider range of amazing applications on more platforms. Some small features you can get excited about are &lt;strong&gt;Wildcard Hostnames&lt;/strong&gt;, &lt;strong&gt;Async/Await support in Swift&lt;/strong&gt;, and the ability to ignore files using the &lt;strong&gt;Appwrite CLI&lt;/strong&gt;. We closed off the release with bug fixes and quality of life improvements around the &lt;strong&gt;Appwrite Console UI&lt;/strong&gt; and &lt;strong&gt;API signatures&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  New to Appwrite?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://appwrite.io/"&gt;Appwrite&lt;/a&gt; is an open-source back-end-as-a-service that abstracts all the complexity of building a modern application by providing you with a set of REST and Realtime APIs for your core back-end needs. Appwrite takes the heavy lifting for developers and handles user authentication and authorization, databases, file storage, cloud functions, webhooks, and much more!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧠 Event Model, the Smart Way
&lt;/h2&gt;

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

&lt;p&gt;We're thrilled to introduce support for a lot more events, allowing your configuration to be as specific or as generic as you require. Previously, the following event would be triggered, for instance, when a new database document was created:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;database.collections.create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is great, but what if you have dozens of collections? You would end up with many events triggered for each collection. What if you're only interested in events from one of these collections? &lt;/p&gt;

&lt;p&gt;With the new event model, we can specify specific resources we are interested in. The same example above could be written as follows if we were only interested in documents from the &lt;code&gt;[MY_COLLECTION]&lt;/code&gt; collection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;collections.[MY_COLLECTION].documents.*.create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, we specified, we are only interested in events from the &lt;code&gt;[MY_COLLECTION]&lt;/code&gt; collection in the new syntax. You can also notice the &lt;code&gt;*&lt;/code&gt; symbol indicating we are interested in all documents inside a collection. This new syntax will allow developers to get exceptionally specific with their events and reduce the number of unwanted webhooks and function executions to &lt;strong&gt;zero&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 Certificates You Can Trust
&lt;/h2&gt;

&lt;p&gt;Certificate generation was fully refactored with a focus on simplicity and reliability. We introduced the concept of a main domain to ensure we don't generate certificates for domains you don't own. &lt;/p&gt;

&lt;p&gt;Next, we updated the way we delete domains and certificates to ensure we only have one certificate per domain, and we delete it only once no domain needs it. This allows proper usage of the same domain under multiple Appwrite projects.&lt;/p&gt;

&lt;p&gt;We then introduced a mechanism to automatically retry certificate generations. A certificate generation can fail for a lot of reasons like a 5XX error, NS downtime, DNS miss-configuration, cache etc. Some of them are recoverable while some others are not. The &lt;code&gt;maintenance&lt;/code&gt; and &lt;code&gt;certificates&lt;/code&gt; workers will now retry the certificate renewals and generations for up to 5 attempts to try and overcome the recoverable errors.&lt;/p&gt;

&lt;p&gt;No need to worry about failed requests, since you will now receive &lt;strong&gt;an email notification&lt;/strong&gt; every time a certificate generation fails, so you can investigate it 👀 Just ensure your email is set in the &lt;code&gt;.env&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;Lastly, we introduced a new CLI command which comes in handy if you want to force the generation of a certificate for a specific domain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose &lt;span class="nb"&gt;exec &lt;/span&gt;appwrite ssl &lt;span class="nv"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"api.myapp.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  👪 C++, .NET, Java &amp;amp; Kotlin join the party!
&lt;/h2&gt;

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

&lt;p&gt;Let's welcome on board four new runtimes 🎉 A well-established &lt;strong&gt;Java&lt;/strong&gt; and its friend &lt;strong&gt;Kotlin&lt;/strong&gt; have joined the Appwrite Runtime family. They've also invited &lt;strong&gt;C++&lt;/strong&gt; and &lt;strong&gt;.NET&lt;/strong&gt; to ensure Appwrite developers can have the best possible experience writing code in a language they love the most. All these runtimes are now available when creating a new Appwrite Function, and provide the same breathtaking performance we shared with you in the previous Appwrite release. &lt;/p&gt;

&lt;p&gt;We didn't stop there! After a lot of feedback, we implemented &lt;strong&gt;Function Ignores&lt;/strong&gt; to allow developers using &lt;a href="https://appwrite.io/docs/command-line"&gt;Appwrite CLI&lt;/a&gt; to specify the files that will be part of a deployment. This comes in handy when you don't want to deploy files like your &lt;code&gt;.env&lt;/code&gt; along with your functions. Another great use-case would be ignoring local dependencies that are not necessary for deployment but are required by your IDE to get proper typing support. With smarter ignores in your Appwrite Function, deployment can be safe and rapidly faster. All of this can be done either by having a &lt;code&gt;.gitignore&lt;/code&gt; file in your function directory or by a manual configuration in your &lt;code&gt;appwrite.json&lt;/code&gt; file.&lt;/p&gt;




&lt;h2&gt;
  
  
  💪 Flexible Wildcard Hostnames
&lt;/h2&gt;

&lt;p&gt;If you've built a website before, or interacted with the Appwrite API, chances are, you've come across CORS issues. It all comes down to Appwrite protecting your backend from untrusted sources. Thankfully, in Appwrite 0.14 you can now use the wildcard symbol &lt;code&gt;*&lt;/code&gt; to support all subdomains of a trusted domain. For instance, you could allow &lt;code&gt;*.mydomain.com&lt;/code&gt; to trust all your subdomains. If you feel adventurous, you could even do &lt;code&gt;myapp.*&lt;/code&gt; or simply &lt;code&gt;*&lt;/code&gt;. Be aware, that the more you allow, the less control you have over who can use your backend!&lt;/p&gt;




&lt;h2&gt;
  
  
  ⛔️ Say No to Callback Hells
&lt;/h2&gt;

&lt;p&gt;With Appwrite 0.14 we have rewritten our Swift SDK to allow better code readability thanks to &lt;strong&gt;async/await&lt;/strong&gt; support introduced in Swift 5.5. Awaiting asynchronous code not only allows you to write code in a simple top-to-bottom code block but also prevents callback hell and re-throwing errors.&lt;/p&gt;

&lt;p&gt;Let’s start by looking at how a piece of code could look like without async/await support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;prepareConnection&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;getJWT&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;jwt&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Do stuff with JWT&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;getJWT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;@escaping&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Void&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createJWT&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
        &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;failure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;error&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="nf"&gt;fatalError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;success&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;response&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="nf"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jwt&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;As you can see, we had to use a &lt;code&gt;completion&lt;/code&gt; callback and the code looks overall really complex. Let’s enhance the same code with async/await support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;prepareConnection&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;jwt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getJWT&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Do stuff with JWT&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;getJWT&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createJWT&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jwt&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wow, what a change! By marking methods as &lt;code&gt;async&lt;/code&gt; and using &lt;code&gt;await&lt;/code&gt; to get data from Appwrite, we can achieve exact same logic as previously while keeping the code simple and succinct.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛰️ New Providers Everywhere - OAuth + Storage!
&lt;/h2&gt;

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

&lt;p&gt;We introduced 3 new OAuth providers &lt;strong&gt;Zoom, Okta, Auth0&lt;/strong&gt;, and 3 new storage adapters &lt;strong&gt;Linode, Backblaze, Wasabi&lt;/strong&gt;. Appwrite was and always will play well with other technologies so the decision regarding the technology stack is in your hands, not ours.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤩 And Much More!
&lt;/h2&gt;

&lt;p&gt;Alongside all the amazing stuff, we also decided to clear some confusion around user deletion. We renamed our Client SDK method from &lt;code&gt;account.delete()&lt;/code&gt; to &lt;code&gt;account.updateStatus()&lt;/code&gt;. The new naming convention aims to indicate that the account is not deleted; instead the status is updated. To completely delete an account, you can use the Appwrite Dashboard or the &lt;code&gt;users.delete()&lt;/code&gt; method in the Server SDK. Keep in mind we no longer reserve a user ID after deletion, so make sure to also delete all user-generated content and invalidate permissions before deleting the user to prevent any data leaks.&lt;/p&gt;

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

&lt;p&gt;Appwrite Console (Dashboard) received a lot of attention in this update! A shiny new component for the new event model was added, a verification toggle on the user has been implemented, and an activity tab was added to the teams page. We also introduced better logs for function deployments, fixed missing attribute icons in the Database screens and project logos, and updated the enum attribute dropdown to show correct values.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Learn More
&lt;/h2&gt;

&lt;p&gt;This was only a tip of the iceberg of what Appwrite 0.14 has to offer! Check out the &lt;a href="https://github.com/appwrite/appwrite/blob/master/CHANGES.md"&gt;official release notes&lt;/a&gt; and stay tuned for more blog posts! In upcoming weeks we will describe all features in their own separate blogposts to give them well-deserved spotlights. We can't wait to see what you build with &lt;a href="https://appwrite.io/"&gt;Appwrite&lt;/a&gt;! 😎&lt;/p&gt;

</description>
      <category>news</category>
      <category>opensource</category>
      <category>cloud</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Announcing the Appwrite OSS Fund</title>
      <dc:creator>Eldad A. Fux</dc:creator>
      <pubDate>Wed, 04 May 2022 14:38:02 +0000</pubDate>
      <link>https://dev.to/appwrite/announcing-the-appwrite-oss-fund-4ilg</link>
      <guid>https://dev.to/appwrite/announcing-the-appwrite-oss-fund-4ilg</guid>
      <description>&lt;p&gt;Building and maintaining an Open Source Software(OSS), the project is hard. If your project gets popular, it becomes even harder. When I started building Appwrite two years ago, I fell in love with the community, the people, and the OSS way. It only took me a few days to understand there is nothing in life I want to do more. Finally, three months after the project started gaining momentum, I decided to leave my day job and follow my dream, of becoming a full-time OSS maintainer.&lt;/p&gt;

&lt;p&gt;Little did I know how hard it would be. For months I worked on improving the project, providing support, creating content, and spreading the word. I always believed Appwrite has huge potential, but at the same breath, I knew it was going to require massive efforts and resources to get the project where it can and needs to be.&lt;/p&gt;

&lt;p&gt;After 12 months of working on the project full-time, I started feeling financial pain. I was literally with my back to the wall. Understanding the product is far from complete or in a state where I can monetize it, I started to think about collecting OSS donations, providing premium support, and even as far as canceling my rental as I was starting to feel the pressure of overloading expenses. &lt;/p&gt;

&lt;p&gt;In the best timing ever, I got an amazing investment offer from the wonderful individuals at Ibex and Seedcamp that offered to support my vision for Appwrite. Six months later, they were followed by an investment from Bessemer (Auth0, Cloudinary) and Flybridge (Firebase, MongoDB) that led our 8.5m seed round.&lt;/p&gt;

&lt;p&gt;Today with over 27 full-time Appwriters and backed by a community of over 150,000 developers, we're stronger than ever, which means it's time to give back and support those who weren't as fortunate as us and remember the origins of our journey. Today is the time to announce the Appwrite OSS Fund.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why OSS fund?
&lt;/h2&gt;

&lt;p&gt;Open-source is all about collaborating, learning, sharing, and building together with the community. Keeping up this spirit, we at Appwrite thought of giving back to the community with the introduction to &lt;strong&gt;“Appwrite OSS Fund”&lt;/strong&gt;. This is our way of giving back to the community - which forms the core of our company - growing and helping others grow. If reading Eldad's story made you think to yourself, "that sounds just like me," then this is your cue to apply for the OSS Fund, and take your project to the level you dreamt of. &lt;/p&gt;

&lt;p&gt;In the journey of turning your dream project into a reality, all that you need to have is the vision to build an awesome open-source project. The idea behind the fund is to support developers like you and the open-source project you are building.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does the fund work?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Appwrite OSS Fund is simple:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You apply for it from &lt;a href="https://appwrite.io/oss-fund"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If selected, you get a fund worth &lt;strong&gt;$2500&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;We pay you via GitHub sponsors or Open Collective.&lt;/li&gt;
&lt;li&gt;You can nominate yourself or any other maintainers you know.&lt;/li&gt;
&lt;li&gt;There is no bar to the number of nominations you make - with an exception of one project per nominee.&lt;/li&gt;
&lt;li&gt;Once your application is received, a response email will be within 15-30 days.&lt;/li&gt;
&lt;li&gt;To review the applications, we will set up a committee composed of the core Appwrite team and representatives of the Appwrite community to assess all applications. The committee will decide how the funding will be best used by applying projects based on multiple factors, ranging from project popularity, technological impact, innovation, and the current project’s financial capabilities.&lt;/li&gt;
&lt;li&gt;For more information, visit &lt;a href="https://appwrite.io/oss-fund"&gt;here&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This Is Not Enough&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We will always think of new ways to expand our support for the community and ensure this will be core to everything we do at Appwrite, but we also recognize our support alone will not be enough. We call other companies and individuals to join us. Support projects and maintainers in one of many ways possible, and work together to create a sustainable future where open source is not only something we get a lot from but also something we are actively giving back to. &lt;/p&gt;

&lt;h2&gt;
  
  
  Acknowledgment
&lt;/h2&gt;

&lt;p&gt;We are humbled to have the opportunity and privilege to contribute to the growth of developers. Thank you for all the love and support that you all have showered on Appwrite, it gives us the enthusiasm to become better every day.&lt;/p&gt;

&lt;p&gt;Let the spirit of open-source never get dull - share about the Appwrite OSS Fund to the maximum, help us reach the unheard voices.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>appwrite</category>
      <category>programming</category>
      <category>news</category>
    </item>
    <item>
      <title>Announcing Appwrite 0.13 with Major Upgrades to Storage and Functions</title>
      <dc:creator>Eldad A. Fux</dc:creator>
      <pubDate>Wed, 02 Mar 2022 16:57:27 +0000</pubDate>
      <link>https://dev.to/appwrite/announcing-appwrite-013-with-major-upgrades-to-storage-and-functions-3hpf</link>
      <guid>https://dev.to/appwrite/announcing-appwrite-013-with-major-upgrades-to-storage-and-functions-3hpf</guid>
      <description>&lt;p&gt;Only one month after the release of Appwrite 0.12, we’re excited to announce the release of Appwrite 0.13. The new release includes multiple major features to take your Appwrite experience to the extreme and help you implement some new and exciting use cases on top of your shiny, open-source, and self-hosted backend-as-a-service.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⏰ TL;DR
&lt;/h2&gt;

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

&lt;p&gt;This new release has been focused on two main areas. The first is &lt;strong&gt;Appwrite Storage&lt;/strong&gt;. We have added many new features, including &lt;strong&gt;buckets&lt;/strong&gt;, (especially) &lt;strong&gt;big file support&lt;/strong&gt;, &lt;strong&gt;stream downloads&lt;/strong&gt;, and new &lt;strong&gt;storage adapters&lt;/strong&gt; for &lt;strong&gt;S3, DigitalOcean Spaces&lt;/strong&gt;, and other S3 compatible devices.&lt;/p&gt;

&lt;p&gt;The second area of improvement is &lt;strong&gt;Appwrite’s Cloud Functions.&lt;/strong&gt; The new Appwrite Functions API uses our new executor build on top of open-runtimes (more on open-runtime below) that improves Appwrite functions execution performance by &lt;strong&gt;over 10 times(!)&lt;/strong&gt; and now allows the anxiously anticipated &lt;strong&gt;sync &amp;amp; async&lt;/strong&gt; executions. &lt;/p&gt;

&lt;p&gt;On top of these major additions, you can also expect multiple new and improved OAuth adapters, new logging providers, many bug fixes, and some UI improvements to the Appwrite console. Keep reading to learn everything you need to know about the 0.13 release.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h2&gt;
  
  
  New to Appwrite?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://appwrite.io"&gt;Appwrite&lt;/a&gt; is an open-source back-end-as-a-service that abstracts all the complexity of building a modern application by providing you with a set of REST APIs for your core back-end needs. Appwrite takes the heavy lifting for developers and handles user authentication and authorization, databases, file storage, cloud functions, webhooks, and much more!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  📦 Storage Buckets
&lt;/h2&gt;

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

&lt;p&gt;&lt;strong&gt;Storage buckets&lt;/strong&gt; are very similar to collections for the Appwrite Database. Buckets allow you to group different files under the same permissions and settings. For each bucket, you can &lt;strong&gt;define which file type&lt;/strong&gt; it should accept, the &lt;strong&gt;max file size&lt;/strong&gt; allowed and and toggle &lt;strong&gt;file encryption&lt;/strong&gt; and &lt;strong&gt;file antivirus scan&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Using buckets, you can choose between bucket-level or file-level permissions and set a dedicated bucket per user or a bucket for each type of file your app needs to store, like profile images or PDF files.  &lt;/p&gt;

&lt;h2&gt;
  
  
  🗄 Storage Adapters and S3 Support
&lt;/h2&gt;

&lt;p&gt;We designed Appwrite to be flexible and technology agnostic with the idea that you should be able to integrate Appwrite with your favorite technology stack. With this release, you can now use your &lt;strong&gt;S3 or S3 compatible&lt;/strong&gt; services like &lt;strong&gt;DigitalOcean spaces&lt;/strong&gt; as the storage adapter for your Appwrite files.&lt;/p&gt;

&lt;p&gt;This allows you to quickly scale Appwrite using managed solutions for all the Appwrite persistent services (storage and database). With this change, the Appwrite layer of your setup becomes completely stateless and easier to manage on self-hosted setups. Furthermore, with cloud providers like &lt;strong&gt;AWS, DigitalOcean, and others&lt;/strong&gt; you can also utilize managed backup and monitoring solutions and be carefree about managing your Appwrite storage layer.&lt;/p&gt;

&lt;p&gt;This release unlocks new possibilities, and the Appwrite team has already started working on new storage adapters for even more flexibility. Contributing a new storage adapter is also possible and relatively simple using our updated contribution guide.&lt;/p&gt;

&lt;h2&gt;
  
  
  📈 Support for (VERY) Big Files
&lt;/h2&gt;

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

&lt;p&gt;Another significant improvement that Appwrite 0.13 adds to the storage API is supporting &lt;strong&gt;very large file uploads&lt;/strong&gt;. In previous Appwrite versions, each file is loaded to your server memory which means that the biggest file you can upload is limited to the amount of free memory you have available. This is no longer the case. Appwrite 0.13 now internally handles files in small chunks to ensure you always have enough memory available to serve other API calls and background jobs.&lt;/p&gt;

&lt;p&gt;Theoretically, once you change your &lt;code&gt;_APP_STORAGE_LIMIT&lt;/code&gt; env var, Appwrite doesn’t enforce any limit on the size of files you’ll be uploading. That said, you might hit other filesystem or vendor limits. For example, &lt;strong&gt;AWS and DigitalOcean S3&lt;/strong&gt; services have a file size limit of &lt;strong&gt;5TB&lt;/strong&gt;, &lt;strong&gt;ext4 filesystem&lt;/strong&gt; has a limit of &lt;strong&gt;16TB&lt;/strong&gt;, and &lt;strong&gt;NTFS&lt;/strong&gt; has a limit of &lt;strong&gt;256TB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With big files support enabled in Appwrite, the Appwrite server will still support the built-in ability to compress and encrypt files but limit those features to files smaller or equal to 20MB. This design ensures we keep a decent balance between flexibility and performance. With storage buckets support, you can also completely disable file compression and encryption at your discretion.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧑‍💻 CLI v2.0 and a new Build Worker
&lt;/h2&gt;

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

&lt;p&gt;Beside version 0.13, we’re also excited to share the release of the new &lt;strong&gt;Appwrite CLI version 2.0&lt;/strong&gt;. The new version was completely rewritten to decouple our CLI from Docker, and have a better and easier workflow for deploying new Cloud Functions.&lt;/p&gt;

&lt;p&gt;The new CLI 2.0 will have two new commands, &lt;code&gt;init&lt;/code&gt; for creating resources and &lt;code&gt;deploy&lt;/code&gt; for deploying resources. The new CLI will also support starter templates for Functions in different languages, Console scope to manage the creation of projects, API keys, and more, and an &lt;code&gt;appwrite.json&lt;/code&gt; file to store your configuration and deploy on different Appwrite instances.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡️ Improved and (WAY) Faster Runtimes for Cloud Functions
&lt;/h2&gt;

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

&lt;p&gt;One of the biggest improvements of Appwrite 0.13 is our &lt;strong&gt;new Functions runtime and execution architecture&lt;/strong&gt;. The new architecture uses TCP communication instead of the Docker CLI to start, run, and execute functions. The new communication method allows warm functions to run &lt;strong&gt;over 10X faster&lt;/strong&gt; compared to previous Appwrite releases.&lt;/p&gt;

&lt;p&gt;The new architecture also allows the Appwrite Functions API to execute functions &lt;strong&gt;synchronously and asynchronously&lt;/strong&gt;. This new capability should allow an enormous amount of new use-cases to be built on top of the Appwrite functions and brings Appwrite very close to serverless capabilities of major cloud providers like GCP and AWS. We’ll soon release our latest benchmarks to emphasize how the new performance improvements look like.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤩 Many More Features
&lt;/h2&gt;

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

&lt;p&gt;Appwrite 0.13 includes many more new features. We have added two new OAuth providers for &lt;strong&gt;Stripe and Notion&lt;/strong&gt;. We have &lt;strong&gt;upgraded the Microsoft OAuth adapter&lt;/strong&gt; to accept new settings and be much more flexible. New support for &lt;strong&gt;OAuth refresh token&lt;/strong&gt; was added, and we added a &lt;strong&gt;new error logging adapter&lt;/strong&gt; for managing your Appwrite server errors with LogOwl.&lt;/p&gt;

&lt;p&gt;In the new version we have also improved the format of errors displayed by the Appwrite API. Now each error includes a specific type of code as documented in the updated error codes page in the official documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Learn More
&lt;/h2&gt;

&lt;p&gt;Appwrite 0.13 includes many more features, bug fixes, and security patches you should really care about that just can’t fit in one blog post. You can learn more by reviewing our &lt;a href="https://github.com/appwrite/appwrite/blob/master/CHANGES.md"&gt;official release notes&lt;/a&gt;. In the next couple of weeks, we will continue the Appwrite 0.13 release party with more content, events, and demos created by the core team to highlight the different features and powerful capabilities in this new version of Appwrite. Stay tuned!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>news</category>
      <category>opensource</category>
    </item>
    <item>
      <title>It's Here! Announcing the Release of Appwrite 0.12!</title>
      <dc:creator>Eldad A. Fux</dc:creator>
      <pubDate>Wed, 05 Jan 2022 10:37:45 +0000</pubDate>
      <link>https://dev.to/appwrite/its-here-announcing-the-release-of-appwrite-012-5c8b</link>
      <guid>https://dev.to/appwrite/its-here-announcing-the-release-of-appwrite-012-5c8b</guid>
      <description>&lt;p&gt;We're excited to share that Appwrite 0.12 is now officially available! The new Appwrite version includes our &lt;strong&gt;biggest ever performance improvements&lt;/strong&gt;, &lt;strong&gt;enhanced developer experience&lt;/strong&gt;, and &lt;strong&gt;many new features&lt;/strong&gt; designed to make developers' lives easier. Trust us, this one's a biggie! In addition, the latest release includes over 1,500 commits and contributions from 29 new contributors that have helped make this release possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Database on Steroids
&lt;/h2&gt;

&lt;p&gt;In version 0.12, we have &lt;strong&gt;&lt;em&gt;completely&lt;/em&gt;&lt;/strong&gt; rewritten the Appwrite data management layer. We have improved the internal data structures, background workers, and we’ve enabled new concepts such as attributes (instead of rules) and indexes to allow maximum performance and flexibility.&lt;/p&gt;

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

&lt;p&gt;We’ve also added a new easy-to-understand query syntax. The new syntax allows new capabilities, like OR statements, and opens the door for the core team to implement many more advanced features we’re passionate about, like &lt;code&gt;includes&lt;/code&gt; operator and GEO-based queries.&lt;/p&gt;

&lt;p&gt;The team has done a lot of work to enable other databases providers, and we hope to release support for more loved databases soon. A major part of our agenda is to enable dev teams the comfort and confidence to use Appwrite the way they wish to, with tools they already love, know, and feel confident with.&lt;/p&gt;

&lt;p&gt;The new database does introduce some breaking changes before we move to version 1.0. Please take time to review the list of changes and our &lt;a href="https://dev.to/appwrite/appwrite-012-migration-post-3cha"&gt;migration tutorial&lt;/a&gt;. To support existing Appwrite users we'll continue to support the 0.11 branch for at least the next six months.&lt;/p&gt;

&lt;h2&gt;
  
  
  📑 Pagination Just Got A LOT Faster!
&lt;/h2&gt;

&lt;p&gt;With Appwrite 0.12, we are happy to introduce the new cursor pagination strategy. While the traditional offset and limit pagination is very intuitive and easy to understand it doesn’t &lt;a href="https://www.eversql.com/faster-pagination-in-mysql-why-order-by-with-limit-and-offset-is-slow/"&gt;scale well&lt;/a&gt;. To tackle this problem, we have limited the limit+offset pagination to a maximum of 5,000 documents. With this limit, you can still use the offset+limit pagination for small dataset, but as your data grows, you can migrate to the new cursor pagination that scales very well with almost no regard to your collection size.&lt;/p&gt;

&lt;p&gt;The chart below demonstrates how significant this performance difference can be on a collection containing &lt;strong&gt;1M documents&lt;/strong&gt;. The bigger the dataset, the bigger the difference, and now Appwrite can allow you to scale your pagination with confidence.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgy7j3oexkncs4irn1kcc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgy7j3oexkncs4irn1kcc.png" alt="Cursor vs Offset Pagination" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The new change will apply to all the Appwrite resources where pagination is possible. Whether it's your custom collections, list of files, users, functions and other relevant resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚧 Permissions are Easier and More Flexible
&lt;/h2&gt;

&lt;p&gt;When we initially designed Appwrite, we wanted to have a simple declarative permission model that is also secure by default. With the release of Appwrite 0.12, we're happy to introduce the next evolution of the Appwrite permissions: &lt;strong&gt;Permission Models&lt;/strong&gt;. You will now be able to choose between two different permission models for your collections, &lt;strong&gt;collection-level permissions&lt;/strong&gt; and &lt;strong&gt;document-level permissions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7p6tj82pekwivp2iu5c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7p6tj82pekwivp2iu5c.png" alt="Appwrite's Permission Models" width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're already familiar with Appwrite, the document-level model will act in the same way as you already know. Each document can have read and write permissions that define which Appwrite entity (user/team/role) has access to each operation.&lt;/p&gt;

&lt;p&gt;The new &lt;strong&gt;Collection Level&lt;/strong&gt; model introduces new and easier to use collection permissions. Using the collection permissions, you only need to set the read and write permissions once. In addition, the collections permission will act the same for all the documents regardless of any permissions that may have been set on a specific document.&lt;/p&gt;

&lt;p&gt;The new model offers more flexibility for other use cases, which may not require you to leverage the original, document-level permissions. The new collection-level permission can also lead to enhanced performance as the Appwrite API is not required to validate each permission individually.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎛 More Dashboards, and More Control
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7htmepbs9quia7lfho36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7htmepbs9quia7lfho36.png" alt="Appwrite's Usage Stats" width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have upgraded the Appwrite console with more dashboards with your Appwrite projects' usage metrics. This is the first of many upgrades where we aim to make more usage metrics easily available through the console. Using our new dashboards, you can quickly get insights into your project performance, size, and cost. In addition, the new dashboard will now show data for your entire project, files, users, collections and documents over time. We've also added charts for your &lt;a href="https://en.wikipedia.org/wiki/Create,_read,_update_and_delete"&gt;CRUD operations&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤟 Anyone Ask for Custom IDs?
&lt;/h2&gt;

&lt;p&gt;Custom IDs were probably one of the most requested features we’ve ever got. Now they're here! With custom IDs, you can define human-readable IDs on most Appwrite resources including users, teams, functions, projects, files, collections, and documents. If you still want to use the previous unique IDs, you can use the reserved &lt;code&gt;unique()&lt;/code&gt; keyword.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw9g9eor5pqtw6o0mfkme.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw9g9eor5pqtw6o0mfkme.png" alt="Appwrite's Custom IDs" width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With custom IDs, you can have a much smoother development experience. Instead of using meaningless strings in your code, you can now use proper naming conventions that allow you to easily migrate your code between different Appwrite environments without managing complex configuration files or programmatic setups for your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Your Services, Your Choice!
&lt;/h2&gt;

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

&lt;p&gt;We always wanted Appwrite to play well with other tools. However, we understand that one tool can’t always be the right solution to every problem. For that reason, we’ve created our server API, Cloud Functions, and our Microservice architecture that enables you to use Appwrite alongside your existing stack and even your own backend server.&lt;/p&gt;

&lt;p&gt;With version 0.12, Appwrite became more flexible by allowing you to choose which Appwrite services you wish to enable or disable. This is also a great security feature designed to reduce your attack surface by blocking services and resources you don’t consume. You can visit the new &lt;code&gt;Services&lt;/code&gt; section from your project settings and choose which services to use. For convenience, each project you own can have different settings. &lt;/p&gt;

&lt;h2&gt;
  
  
  🚨 Introducing Logging Providers!
&lt;/h2&gt;

&lt;p&gt;Error logging and monitoring are crucial for any application, Appwrite being no exception. We wanted to make it extremely easy to collect and monitor your logs while staying true to our philosophy of being completely platform agnostic. With Appwrite 0.12, we've introduced support for some amazing open source logging providers like &lt;a href="https://sentry.io"&gt;Sentry&lt;/a&gt;, &lt;a href="https://raygun.com/"&gt;Raygun&lt;/a&gt; and &lt;a href="https://www.appsignal.com/"&gt;AppSignal&lt;/a&gt;! &lt;/p&gt;

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

&lt;p&gt;We're always on the lookout for more logging providers and we'd love your contributions to the &lt;a href="https://github.com/utopia-php/logger"&gt;logging library&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Learn More
&lt;/h2&gt;

&lt;p&gt;Appwrite 0.12 includes many more features, bug fixes, and security patches you should really care about that just can’t fit in one blog post. You can learn more by reviewing our &lt;a href="https://github.com/appwrite/appwrite/blob/master/CHANGES.md"&gt;official release notes&lt;/a&gt;. In the next couple of weeks, we will continue the Appwrite 0.12 release party with more content, events, and demos created by the core team to highlight the different features and powerful capabilities in this new version of Appwrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  🗂⚡️☁️ What's Next?
&lt;/h2&gt;

&lt;p&gt;If you like Appwrite 0.12, you will love Appwrite 0.13! Appwrite 0.12 release will enable us more flexibility and solid foundations to take Appwrite to new places, never seen in the backend-as-a-service space.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Appwrite 0.13&lt;/strong&gt; will be the first release of many to enjoy the perks of the hard work the Appwrite core team with over 500 collaborators have done for the Appwrite project and ecosystem. The next version will include some very cool features like &lt;strong&gt;buckets support&lt;/strong&gt; for the Appwrite storage, more flexibility with new &lt;strong&gt;storage devices&lt;/strong&gt;, &lt;strong&gt;Sync &amp;amp; Async serverless functions&lt;/strong&gt; that have been highly requested, and amazing performance boost thanks to our improved function &lt;strong&gt;execution model&lt;/strong&gt; and &lt;strong&gt;new runtimes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Beside the upcoming releases and features, we’ve just recently announced the ability to sign up and be the first to use the upcoming Appwrite Cloud. The &lt;strong&gt;Appwrite Cloud&lt;/strong&gt; is already in the works, and once available it will provide the easiest way to build on top of Appwrite and to scale your backend effortlessly. You can learn more on our new dedicated landing page for the &lt;a href="https://appwrite.io/cloud"&gt;Appwrite Cloud&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>news</category>
    </item>
    <item>
      <title>Getting Started With Appwrite's Apple SDK 📱💻</title>
      <dc:creator>Eldad A. Fux</dc:creator>
      <pubDate>Thu, 21 Oct 2021 04:40:39 +0000</pubDate>
      <link>https://dev.to/eldadfux/getting-started-with-appwrites-apple-sdk-5bd</link>
      <guid>https://dev.to/eldadfux/getting-started-with-appwrites-apple-sdk-5bd</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Bk_OFaWDqB8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Earlier this week, we announced the official release of &lt;a href="https://dev.to/appwrite/building-apps-just-got-swifter-announcing-appwrite-v011-4g62"&gt;Appwrite 0.11&lt;/a&gt; and the new Appwrite SDKs for Apple devices and Swift. Yesterday we had a short live session with Aditya, Jake, and Damodar, demonstrating how you can quickly start building apps for Apple devices with Appwrite as your backend server.&lt;/p&gt;

&lt;p&gt;To learn more, you can check our official Appwrite 0.11 announcement post, and check our &lt;a href="https://github.com/appwrite/sdk-for-apple"&gt;Apple&lt;/a&gt; and &lt;a href="https://github.com/appwrite/sdk-for-swift"&gt;Swift&lt;/a&gt; SDKs. If you have any further questions you can join the Appwrite team and community on the &lt;a href="https://appwrite.io/discord"&gt;Appwrite Discord server&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>mobile</category>
      <category>appwrite</category>
    </item>
    <item>
      <title>It's Here! Announcing Appwrite 0.10 and the new Realtime API!</title>
      <dc:creator>Eldad A. Fux</dc:creator>
      <pubDate>Tue, 31 Aug 2021 06:03:18 +0000</pubDate>
      <link>https://dev.to/appwrite/it-s-here-announcing-appwrite-0-10-and-the-new-appwrite-realtime-api-lbm</link>
      <guid>https://dev.to/appwrite/it-s-here-announcing-appwrite-0-10-and-the-new-appwrite-realtime-api-lbm</guid>
      <description>&lt;p&gt;After long anticipation and great feedback we got from the Appwrite community during our alpha launch, we're thrilled to announce the official release of &lt;a href="https://github.com/appwrite/appwrite/releases"&gt;Appwrite 0.10&lt;/a&gt;, including one of our most anticipated features: &lt;strong&gt;the Appwrite Realtime API! 🥁&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Besides the Realtime API, Appwrite 0.10 also comes with some exciting features, including new APIs, improved performance for the Appwrite Cloud Functions API, and multiple bug fixes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdp2jjy0ai0oecv8dteo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdp2jjy0ai0oecv8dteo.gif" alt="Social Media posts (7)" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🤔 What is the Appwrite Realtime API?
&lt;/h1&gt;

&lt;p&gt;Appwrite's new Realtime API introduces a new entry point to your Appwrite server in addition to the existing Appwrite REST API, and allows you to subscribe to any real-time events you'd like across your Appwrite projects. &lt;/p&gt;

&lt;p&gt;The Realtime API brings a powerful websocket server to your apps to supercharge the Database API and more! You'll be able to listen to real-time events for any of your Appwrite services including users, storage, functions and more. That way, you get notified about a new file being created, a user creating a new session, or a function execution being completed.&lt;/p&gt;

&lt;p&gt;In addition, the new Appwrite client SDKs include new supporting methods to allow you to &lt;code&gt;subscribe&lt;/code&gt; to any events and trigger any callbacks you wish directly from your &lt;a href="https://appwrite.io/docs/getting-started-for-web"&gt;Web&lt;/a&gt;, &lt;a href="https://appwrite.io/docs/getting-started-for-flutter"&gt;Flutter&lt;/a&gt;, or &lt;a href="https://appwrite.io/docs/getting-started-for-android"&gt;Android&lt;/a&gt; application (native iOS coming soon 😉). &lt;/p&gt;

&lt;p&gt;The new Realtime server has the potential to support &lt;strong&gt;hundreds of thousands&lt;/strong&gt; of concurrent connections on a single server with &lt;strong&gt;millions of open subscriptions&lt;/strong&gt;. This is a great start, and we're constantly working to improve these numbers and push Appwrite's performance 🚀 to the limits!&lt;/p&gt;

&lt;p&gt;The Realtime API leverages the same easy Appwrite &lt;a href="https://appwrite.io/docs/permissions"&gt;permissions mechanism&lt;/a&gt; to ensure only users with ‘read’ access to your different resources would get notified once a relevant event has triggered.&lt;/p&gt;

&lt;p&gt;As with all our existing SDKs, the new &lt;code&gt;subscribe&lt;/code&gt; methods of the Realtime API follow the trusty and predictable Appwrite coding style! Here's a sneak peak of the new API signatures&lt;/p&gt;

&lt;h3&gt;
  
  
  🌎 Web
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  🦋 Flutter
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  🤖 Android
&lt;/h3&gt;

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

&lt;p&gt;To learn more and start to integrate your apps with these neat real-time capabilities, read our updated getting started tutorials for Web, Flutter, and Android, or check our advanced documentation section for the &lt;a href="https://appwrite.io/docs/realtime"&gt;Realtime API&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  ⏲️ Improved Function Execution Times
&lt;/h1&gt;

&lt;p&gt;As part of our ongoing efforts to tune the Appwrite Cloud Functions service, version 0.10 will significantly boost the execution times. In addition, as part of a more extensive effort, we have migrated the Functions executions API to directly interact with &lt;strong&gt;Docker TCP API&lt;/strong&gt; instead of the &lt;strong&gt;Docker CLI&lt;/strong&gt;. This change resulted in &lt;strong&gt;60-120ms performance improvement&lt;/strong&gt; for most available runtimes!&lt;/p&gt;

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

&lt;p&gt;The next Appwrite version will include more upgrades as we plan to add support for both &lt;strong&gt;synchronous&lt;/strong&gt; and &lt;strong&gt;asynchronous&lt;/strong&gt; function executions and more performance improvements expected to boost execution times even more significantly. So stay tuned 😉&lt;/p&gt;

&lt;h1&gt;
  
  
  ⚡️ Introducing New APIs
&lt;/h1&gt;

&lt;p&gt;As requested by many members of the Appwrite community, we have now added three new API endpoints for updating your users' name, email address, and password using both the &lt;strong&gt;Users API&lt;/strong&gt; and the &lt;strong&gt;Appwrite console&lt;/strong&gt;!&lt;/p&gt;

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

&lt;p&gt;Using the new endpoints, developers of your projects get full freedom to manage your app users without the need to use the &lt;strong&gt;Accounts API&lt;/strong&gt; or a &lt;strong&gt;JWT secret&lt;/strong&gt; for handling this kind of behaviour from the Server API.&lt;/p&gt;

&lt;h1&gt;
  
  
  🔐 New Authentication Method!
&lt;/h1&gt;

&lt;p&gt;With this release, we introduced a new authentication method we like to call &lt;strong&gt;Magic URL!&lt;/strong&gt; Think of this as a password-less authentication method where a user can signup or login simply via their email ID! Here's a quick preview 👀 &lt;/p&gt;

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

&lt;h2&gt;
  
  
  😍 And More!
&lt;/h2&gt;

&lt;p&gt;We still haven't covered everything! There's lots more bug fixes and other micro optimizations we made under the hood to make your experience with Appwrite better! To get all the details on Appwrite 0.10, check out all the changes in the &lt;a href="https://github.com/appwrite/appwrite/blob/master/CHANGES.md"&gt;changelog on GitHub&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Are you curious about the big ideas we have up next, or have a great idea for Appwrite's future? Check out the &lt;a href="https://github.com/appwrite/rfc"&gt;RFC Repository&lt;/a&gt; for more details. Also, our &lt;a href="https://github.com/appwrite/awesome-appwrite"&gt;awesome-appwrite repository&lt;/a&gt; keeps growing with new tutorials, videos, and demos.&lt;/p&gt;

&lt;p&gt;If you've just discovered Appwrite and would like to get started, check out out our &lt;a href="https://30days.appwrite.io/"&gt;30 Days of Appwrite&lt;/a&gt; series where we explain step-by-step everything you need to know to build awesome Appwrite-powered apps. Follow us on &lt;a href="https://twitter.com/appwrite_io"&gt;Twitter&lt;/a&gt;, &lt;a href="https://dev.to/appwrite"&gt;Dev.to&lt;/a&gt;, or anywhere you find your friendly neighbourhood Appwrite. &lt;/p&gt;

&lt;h1&gt;
  
  
  👀 What's Next?
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Appwrite 0.11&lt;/strong&gt; is not far away and we promise it's going to be even more exciting 🤩! We'll continue improving upon Appwrite's solid performance, flexibility and adding amazing new features. &lt;/p&gt;

&lt;p&gt;Do you have ideas for an exciting new feature ? Open up a &lt;a href="https://github.com/appwrite/appwrite/discussions"&gt;Github Discussion&lt;/a&gt; so you can get feedback from the core team, maintainers and our ever growing community.   &lt;/p&gt;

&lt;p&gt;You're welcomed to join us on &lt;a href="https://appwrite.io/discord"&gt;Discord&lt;/a&gt; to get all the latest updates about new Appwrite versions and chat directly with the Appwrite team.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>flutter</category>
      <category>android</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Announcing the Appwrite Official Swag Store! 🛍</title>
      <dc:creator>Eldad A. Fux</dc:creator>
      <pubDate>Thu, 03 Jun 2021 16:12:47 +0000</pubDate>
      <link>https://dev.to/appwrite/announcing-the-appwrite-official-swag-store-3k8f</link>
      <guid>https://dev.to/appwrite/announcing-the-appwrite-official-swag-store-3k8f</guid>
      <description>&lt;p&gt;We're super excited to announce the launch of the &lt;a href="https://store.appwrite.io/"&gt;Appwrite Swag Store&lt;/a&gt;. Yes! Our Swag Store is now live, and you can order merch from your favourite open-source project starting now ❤️.&lt;/p&gt;

&lt;p&gt;We have been wanting to do this for quite some time now, and we realized it would be perfect to have the store up in time to distribute swags for &lt;a href="https://30days.appwrite.io"&gt;&lt;strong&gt;#30DaysOfAppwrite&lt;/strong&gt;&lt;/a&gt; event! We had two main motivations when we started out with this idea:&lt;/p&gt;

&lt;p&gt;We wanted the process of shipping swags to be much easier, and allow anyone liking our projects to be able to get any Appwrite swags they desire, and we also wanted a fun way to sponsor and support other open source projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Giving Back to The OSS Community 👩‍💻👨‍💻
&lt;/h2&gt;

&lt;p&gt;We love ❤️ Open Source and we know that you do too! We also know that some OSS projects might find it hard to sustain themselves. That's why we decided that any profit that the new Appwrite swags store makes will be invested back in the open-source community!&lt;/p&gt;

&lt;p&gt;We realized that a swag store would be a great way to support some exciting open-source projects, giving both you and us a sense of satisfaction. As with everything we do at Appwrite, we love transparency, here are some details.&lt;/p&gt;

&lt;p&gt;The price you see on our store accounts for all the production costs like store hosting, transaction commissions, and manufacturing costs and an additional 5-10% on each product. We will be sharing updates about the store revenue and the details about the projects we decide to sponsor each month in our monthly newsletter!&lt;/p&gt;

&lt;h2&gt;
  
  
  Easy Distribution ✈️
&lt;/h2&gt;

&lt;p&gt;We love giving away swags, and it lights up our faces every time one of you tags us on social media or sends us pictures of your Appwrite goodies.&lt;/p&gt;

&lt;p&gt;But then, scale happened! We started getting an overwhelming amount of responses during various events like &lt;strong&gt;Hacktoberfest&lt;/strong&gt;, the &lt;strong&gt;Easter Egg Hunt&lt;/strong&gt;, &lt;strong&gt;#30DaysOfAppwrite&lt;/strong&gt;, and people actually asking to support us and buy hoodies. Having all these new contributions is a great problem to have, but it became increasingly difficult to manage the procurement, warehousing, logistics and shipping of Goodies! Having the store takes that burden away, allowing us to invest more time in making Appwrite the best OSS alternative to Firebase we can! For all our future events, we will be distributing swag cards to make purchases easy for all of you!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Products 👚 👕
&lt;/h2&gt;

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

&lt;p&gt;With our motivations aside, let's talk a little bit about the products! We have &lt;a href="https://store.appwrite.io/products/appwrite-coffee-mug"&gt;debug_mugs()&lt;/a&gt; to help you while you crush those nasty bugs, &lt;a href="https://store.appwrite.io/products/appwrite-phone-case"&gt;phone.protect()&lt;/a&gt;, &lt;a href="https://store.appwrite.io/products/laptop-sleeve"&gt;laptop.protect()&lt;/a&gt;, &lt;a href="https://store.appwrite.io/collections/decor"&gt;init_pillows()&lt;/a&gt; and many &lt;a href="https://store.appwrite.io/search?q=notebooks&amp;amp;options[prefix]=last"&gt;new Notebooks()&lt;/a&gt; to name a few. Check out the store for a complete list of products and grab some before we run out of stock! You can find our store over at &lt;a href="https://store.appwrite.io/"&gt;https://store.appwrite.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We're anxiously awaiting feedback about what's good, what's bad, and what you'd like to see more of! We would love to hear about products you'd like to see, your favorite open-source projects we could sponsor, and everything else in between. If you have experience running an online store, hit us up! We would love to hear more about your learning and experiences.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>appwrite</category>
      <category>javascript</category>
      <category>swags</category>
    </item>
    <item>
      <title>Introducing: The Appwrite Gang of Four (and new ways to get swags)</title>
      <dc:creator>Eldad A. Fux</dc:creator>
      <pubDate>Sat, 17 Apr 2021 11:05:56 +0000</pubDate>
      <link>https://dev.to/appwrite/introducing-the-appwrite-gang-of-four-and-new-ways-to-get-swags-1jo9</link>
      <guid>https://dev.to/appwrite/introducing-the-appwrite-gang-of-four-and-new-ways-to-get-swags-1jo9</guid>
      <description>&lt;p&gt;We're happy to introduce you to the new Appwrite gang of four (yeh, like the book, but not really), a set of four TODO example applications built using all popular JS frameworks, including React, Vue, Angular and Svelte. The new examples are designed to demonstrate how you can utilize Appwrite in your favorite set of technologies.&lt;/p&gt;

&lt;p&gt;At Appwrite, we believe backend as a service should be as simple and most intuitive to use. Following that believe we designed the new examples to be as simple and straightforward but still give you an excellent idea of how to start using Appwrite and scale and grow with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  New to Appwrite?
&lt;/h2&gt;

&lt;p&gt;Appwrite is an open-source, end-to-end development platform designed to abstract the most complex and repetitive processes involved in building a modern app. Appwrite is a self-hosted solution you can host on any infrastructure and provides you all the core APIs and tools required to create any persistent modern application. You can learn more on our &lt;a href="https://appwrite.io"&gt;website&lt;/a&gt; or &lt;a href="https://github.com/appwrite/appwrite"&gt;Github repository&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Go and Test Our New Demos!
&lt;/h2&gt;

&lt;p&gt;All the new demos are already available on Github and offer a one-click-deployment setup to your favorite hosting service, including &lt;a href="https://vercel.com/"&gt;Vercel&lt;/a&gt;, &lt;a href="https://www.netlify.com/"&gt;Netlify&lt;/a&gt;, and &lt;a href="https://digitalocean.com/"&gt;DigitalOcean&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;💙 React TODO: &lt;a href="https://github.com/appwrite/todo-with-react"&gt;https://github.com/appwrite/todo-with-react&lt;/a&gt;&lt;br&gt;
💚 Vue TODO: &lt;a href="https://github.com/appwrite/todo-with-vue"&gt;https://github.com/appwrite/todo-with-vue&lt;/a&gt;&lt;br&gt;
❤️ Angular TODO: &lt;a href="https://github.com/appwrite/todo-with-angular"&gt;https://github.com/appwrite/todo-with-angular&lt;/a&gt;&lt;br&gt;
🧡 Svelte TODO: &lt;a href="https://github.com/appwrite/todo-with-svelte"&gt;https://github.com/appwrite/todo-with-svelte&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  We Have Some Hidden Swags Waiting For You!
&lt;/h2&gt;

&lt;p&gt;Our access credentials were recently "compromised", and someone tried to ruin our new and shiny demos 😉. They decided to leave behind 15 easter eggs 🥚 for you to discover. If you find them, submit a PR cleaning up that section of the code to claim some cool Appwrite Swag 🤩 (One PR per person across all the repos). You can track the number of claimed Easter Eggs using the badge at the top.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next?
&lt;/h2&gt;

&lt;p&gt;You can learn more about the different Appwrite features or check out some of our latest Feature Spotlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://appwrite.io/docs/functions"&gt;Cloud Functions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://appwrite.io/docs/command-line"&gt;Appwrite CLI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://eldadfux.medium.com/appwrite-0-7-introducing-the-doctor-cli-to-help-you-debug-your-server-health-889e9806fe85"&gt;Appwrite Doctor&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re new to Appwrite, you can try and &lt;a href="https://appwrite.io/docs/installation"&gt;install it&lt;/a&gt;. It will take you only 2.5 minutes. After you got yourself a copy of the Appwrite server, you can check some of our getting started guides for &lt;a href="https://appwrite.io/docs/getting-started-for-web"&gt;Web&lt;/a&gt;, &lt;a href="https://appwrite.io/docs/getting-started-for-flutter"&gt;Flutter&lt;/a&gt;, or &lt;a href="https://appwrite.io/docs/getting-started-for-server"&gt;Server&lt;/a&gt;, and visit our &lt;a href="https://appwrite.io/discord"&gt;Discord community&lt;/a&gt; where we chat about Appwrite non-stop.&lt;/p&gt;

&lt;p&gt;We really love our Github Stargazers 🤩. If you like what we're doing, head over to our &lt;a href="https://github.com/appwrite/appwrite"&gt;Github repo&lt;/a&gt; and drop us a ⭐️&lt;/p&gt;

</description>
      <category>angular</category>
      <category>vue</category>
      <category>svelte</category>
      <category>react</category>
    </item>
    <item>
      <title>Appwrite 0.8 is Coming Soon and This is What You Can Expect 🚀</title>
      <dc:creator>Eldad A. Fux</dc:creator>
      <pubDate>Fri, 26 Mar 2021 05:27:19 +0000</pubDate>
      <link>https://dev.to/appwrite/appwrite-0-8-is-coming-soon-and-this-is-what-you-can-expect-35li</link>
      <guid>https://dev.to/appwrite/appwrite-0-8-is-coming-soon-and-this-is-what-you-can-expect-35li</guid>
      <description>&lt;p&gt;After &lt;a href="https://dev.to/appwrite/announcing-the-release-of-appwrite-0-7-the-open-source-firebase-alternative-530d"&gt;launching v0.7&lt;/a&gt; last month with the new &lt;a href="https://appwrite.io/docs/functions"&gt;Appwrite Cloud Functions&lt;/a&gt; and the &lt;a href="https://appwrite.io/docs/command-line"&gt;Appwrite CLI&lt;/a&gt;, we are happy to share that Appwrite version 0.8 is nearing completion. We have prepared a list a list with some of the coolest features you can expect from the soon-to-be-released version.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io"&gt;Appwrite 0.8&lt;/a&gt; will take the project one step closer to our anticipated release of Appwrite first stable release, version 1.0.&lt;/p&gt;

&lt;h2&gt;
  
  
  Anonymous Login 🕵️
&lt;/h2&gt;

&lt;p&gt;It is important to consider the user experience when someone first comes to your application. The registration process can often prove to be a hurdle for users to use an application, especially if parts of the application are bound to an authentication process and hidden behind a login screen. Moreover, in today's world, the issue of privacy and data protection is a delicate one, especially because of new data privacy regulations, like &lt;a href="https://www.smashingmagazine.com/2018/02/gdpr-for-web-developers/"&gt;GDPR&lt;/a&gt; and &lt;a href="https://www.forbes.com/sites/forbestechcouncil/2020/11/17/cpra-could-bring-stricter-data-privacy-enforcement-heres-how-to-prepare/"&gt;CPRA&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The anonymous login is used, allowing users to create an account - without providing personal information such as an email address, username, or password and convert it to a real account at a later stage.&lt;/p&gt;

&lt;h2&gt;
  
  
  JWT 🤖
&lt;/h2&gt;

&lt;p&gt;By adding support for JWT authentication, developers can perform actions on behalf of their users and create a lot of new use-cases.&lt;/p&gt;

&lt;p&gt;With the new JWT support combined with Cloud Functions and the Appwrite Server API, the ability to customize your backend workflows and create new scenarios in reaction to the user or Appwrite events is endless.&lt;/p&gt;

&lt;h2&gt;
  
  
  ARM Support 🧑‍💻
&lt;/h2&gt;

&lt;p&gt;In order to keep up with the demands of ARM, all of our core containers now officially support the ARM ecosystem. This allows you to run Appwrite on Raspberry PI, Apple M1, AWS Graviton, and more. We aim to make Appwrite as tech agnostic as possible, and this matches very well with our self-hosted first approach, allowing Appwrite to run in any environment possible. And for all you Raspberry PI fans, yes, you could run appwrite on PI4, we're still working to allow all the features to be enabled, but it should be good to go. 😃&lt;/p&gt;

&lt;h2&gt;
  
  
  New Env Vars for Functions 🌩
&lt;/h2&gt;

&lt;p&gt;Thanks to the community feedback, we have added some helpful environment variables to our Cloud Functions. From v0.8, every Cloud Functions will have access to the current &lt;strong&gt;project ID&lt;/strong&gt;, &lt;strong&gt;user ID&lt;/strong&gt; (if the function was triggered by an authenticated user), and a valid &lt;strong&gt;JWT&lt;/strong&gt;. This will allow you to extend the Appwrite API easily and perform actions on behalf of your users from the function context.&lt;/p&gt;

&lt;h2&gt;
  
  
  New Image Preview Capabilities 🌠
&lt;/h2&gt;

&lt;p&gt;Appwrite has advanced image delivery capabilities, including advanced image cropping and image optimization (WEBP). With the new version, we will introduce new capabilities to the image preview endpoint, including adding image borders, radius, and opacity. This will allow you to use Appwrite as a complete OSS alternative to other commercialized image serving solutions and is an excellent fit for integrating into applications that require high performant clients, and image serving has been an issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  More Control Over Auth Methods 🔐
&lt;/h2&gt;

&lt;p&gt;Giving you more control over what authentication methods are available and to what extent - we added more settings to the dashboard, which lets you configure your projects according to your needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpera0ewxusyvqn7dwg5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpera0ewxusyvqn7dwg5.png" alt="The Appwrite Console" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Root Account 🤴
&lt;/h2&gt;

&lt;p&gt;In previous versions, the access to the Appwrite Console had to be configured by allowing specific Emails or IPs manually. Therefore the registration was open by default, and to prevent abuse, we added an option to limit the console to one root account. This will allow only a single administrative user. When a user has already signed-up, the console account creation endpoint will be blocked. This option will be enabled by default. You could still invite new members to join your project, but you won't have to worry about securing your console login before moving to a public host.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next? 💡
&lt;/h2&gt;

&lt;p&gt;As we mentioned before, the Appwrite team is working hard to provide the stack with more cool features and stability required for Appwrite to run well in any production environment. These days, we focus on multiple big features released in our next releases, like Realtime capabilities and a GraphQL entry point.&lt;/p&gt;

&lt;p&gt;We are also working on refactoring our database to allow you to choose between multiple different adapters and add custom DB indices. These changes are part of our ongoing efforts to allow developers using Appwrite to leverage their existing knowledge and run with confidence with the tools they already love.&lt;/p&gt;

&lt;p&gt;Our new capabilities around custom DB indices will allow Appwrite to run in much bigger scale environments and are expected to result in a major performance boost when appropriately tuned. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>flutter</category>
      <category>appwrite</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Appwrite 0.7: Introducing Built-in Brotli Compression for Improved API Performance</title>
      <dc:creator>Eldad A. Fux</dc:creator>
      <pubDate>Tue, 23 Feb 2021 16:32:03 +0000</pubDate>
      <link>https://dev.to/appwrite/appwrite-0-7-introducing-built-in-brotli-compression-for-improved-api-performance-25ki</link>
      <guid>https://dev.to/appwrite/appwrite-0-7-introducing-built-in-brotli-compression-for-improved-api-performance-25ki</guid>
      <description>&lt;p&gt;&lt;strong&gt;The new Appwrite version introduces Brotli compression support for faster HTTP communication and optimized network usage.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@crisovalle?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Cris Ovalle&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/speed?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The new Brotli compression in Appwrite is optional, and you can control how you want to use it using your standard HTTP encoding headers. If your end client doesn’t support it, Appwrite will skip it automatically. The new compression support will continue to work alongside the classic gzip compression Appwrite already supported.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Got here, but you’re new to Appwrite?&lt;/strong&gt; Appwrite is an end-to-end backend server packaged as a set of Docker micro-services that are really easy to set up and learn. Appwrite provides developers with all the core APIs, tools, and SDKs required to build a modern app. Appwrite can save you lots of time and is pretty fun to use.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is Brotli?
&lt;/h2&gt;

&lt;p&gt;Brotli is also a compression algorithm like GZIP. It is developed and maintained by &lt;a href="https://github.com/google/brotli"&gt;Google&lt;/a&gt; and is best used for text compression. The reason being, it uses a dictionary of common keywords and phrases on both client and server-side and thus gives a better compression ratio. In version 0.7 of Appwrite, you can enable the Brotli compression for any JSON or text-based response. Actually, the new Brotli support has significantly improved the Appwrite dashboard loading times.&lt;/p&gt;

&lt;h2&gt;
  
  
  Client Support
&lt;/h2&gt;

&lt;p&gt;As of 2021, Brotli is supported by all major web browsers, but if you’re using the Appwrite server API and your HTTP client supports Brotli, you can use it to improve performance and reduce your network bandwidth.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jiLgYY0T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/800/1%2ACv7-tPkwGXiUtq7D8BK30A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jiLgYY0T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/800/1%2ACv7-tPkwGXiUtq7D8BK30A.png" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next?
&lt;/h2&gt;

&lt;p&gt;You can learn more about the different Appwrite features or check out some of our latest Feature Spotlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://appwrite.io/docs/functions"&gt;Cloud Functions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://appwrite.io/docs/command-line"&gt;Appwrite CLI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://eldadfux.medium.com/appwrite-0-7-introducing-the-doctor-cli-to-help-you-debug-your-server-health-889e9806fe85"&gt;Appwrite Doctor&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re new to Appwrite, you can try and &lt;a href="https://appwrite.io/docs/installation"&gt;install it&lt;/a&gt;. It will take you only 2.5 minutes. After you got yourself a copy of the Appwrite server, you can check some of our getting started guides for &lt;a href="https://appwrite.io/docs/getting-started-for-web"&gt;Web&lt;/a&gt;, &lt;a href="https://appwrite.io/docs/getting-started-for-flutter"&gt;Flutter&lt;/a&gt;, or &lt;a href="https://appwrite.io/docs/getting-started-for-server"&gt;Server&lt;/a&gt;, and visit our &lt;a href="https://appwrite.io/discord"&gt;Discord community&lt;/a&gt; where we chat about Appwrite non-stop.&lt;/p&gt;

&lt;p&gt;We also really like Github stars, if you like what we do you go over to our &lt;a href="https://github.com/appwrite/appwrite"&gt;Github repo&lt;/a&gt; and give us one ⭐️.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>flutter</category>
      <category>webdev</category>
      <category>node</category>
    </item>
  </channel>
</rss>
