Merge branch 'main' of https://github.com/appwrite/website into feat-qa-fixes

This commit is contained in:
Torsten Dittmann
2023-09-25 20:02:21 +02:00
166 changed files with 1712 additions and 1241 deletions

23
.github/workflows/index.yml vendored Normal file
View File

@@ -0,0 +1,23 @@
name: Search Index
on:
push:
branches:
- main
jobs:
indexing:
runs-on: ubuntu-latest
name: Indexing
steps:
- uses: actions/checkout@v4
with:
repository: 'meilisearch/scrapix'
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '20.x'
- run: yarn
- run: yarn start -c "$SCRAPIX_CONFIG"
env:
SCRAPIX_CONFIG: ${{ secrets.SCRAPIX_CONFIG }}

View File

@@ -5,7 +5,7 @@
<link rel="icon" type="image/svg+xml" href="/images/logos/logo.svg" /> <link rel="icon" type="image/svg+xml" href="/images/logos/logo.svg" />
<link rel="stylesheet" href="/icon-font/aw-icon.css" /> <link rel="stylesheet" href="/icon-font/aw-icon.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Appwrite Next</title> <title>Appwrite - open-source backend as a service</title>
%sveltekit.head% %sveltekit.head%
</head> </head>
<body class="theme-dark" data-sveltekit-preload-data="hover"> <body class="theme-dark" data-sveltekit-preload-data="hover">

View File

@@ -114,7 +114,7 @@
<div class="u-flex-vertical u-main-space-between u-gap-32"> <div class="u-flex-vertical u-main-space-between u-gap-32">
<span class="aw-icon-discord aw-u-font-size-40" aria-hidden="true" aria-label="Discord" /> <span class="aw-icon-discord aw-u-font-size-40" aria-hidden="true" aria-label="Discord" />
</div> </div>
<div class="aw-title u-margin-block-start-auto">125k+ Discord Members</div> <div class="aw-title u-margin-block-start-auto">17k+ Discord Members</div>
</a> </a>
<a <a
@@ -143,7 +143,7 @@
<div class="u-flex-vertical u-main-space-between u-gap-32"> <div class="u-flex-vertical u-main-space-between u-gap-32">
<span class="aw-icon-youtube aw-u-font-size-40" aria-hidden="true" aria-label="YouTube" /> <span class="aw-icon-youtube aw-u-font-size-40" aria-hidden="true" aria-label="YouTube" />
</div> </div>
<div class="aw-title u-margin-block-start-auto">16k+ Youtube Subscribers</div> <div class="aw-title u-margin-block-start-auto">3k+ Youtube Subscribers</div>
</a> </a>
<a <a

View File

@@ -31,7 +31,7 @@ return res.json({ success: true });`.trim();
<span in:fade>Pushing to GitHub...</span> <span in:fade>Pushing to GitHub...</span>
<div class="loader is-small" in:fade /> <div class="loader is-small" in:fade />
{:else if $state.submit === 'success'} {:else if $state.submit === 'success'}
<span>Deployed to GitHub</span> <span>Deployed to Appwrite Cloud</span>
<span class="aw-icon-check" /> <span class="aw-icon-check" />
{/if} {/if}
</div> </div>

View File

@@ -31,7 +31,7 @@
<a class="aw-link" href="/docs/quick-starts/nextjs">Next.js</a> <a class="aw-link" href="/docs/quick-starts/nextjs">Next.js</a>
</li> </li>
<li> <li>
<a class="aw-link" href="/docs/quick-starts/vuejs">Vue.js</a> <a class="aw-link" href="/docs/quick-starts/vue">Vue.js</a>
</li> </li>
<li> <li>
<a class="aw-link" href="/docs/quick-starts/sveltekit">SvelteKit</a> <a class="aw-link" href="/docs/quick-starts/sveltekit">SvelteKit</a>
@@ -94,45 +94,6 @@
</li> </li>
</ul> </ul>
</li> </li>
<li class="aw-footer-nav-main-item">
<h5 class="aw-footer-nav-main-title aw-is-not-mobile aw-caption-500 aw-eyebrow">Learn</h5>
<button class="aw-footer-nav-button is-open aw-is-only-mobile">
<span class="aw-caption-500 aw-eyebrow">Learn</span>
<svg
class="aw-footer-nav-button-arrow"
xmlns="http://www.w3.org/2000/svg"
width="20"
height="20"
viewBox="0 0 20 20"
fill="none"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M10.4243 13.0243C10.19 13.2586 9.81007 13.2586 9.57576 13.0243L5.07576 8.52426C4.84145 8.28995 4.84145 7.91005 5.07576 7.67574C5.31007 7.44142 5.68997 7.44142 5.92429 7.67574L10 11.7515L14.0758 7.67574C14.3101 7.44142 14.69 7.44142 14.9243 7.67574C15.1586 7.91005 15.1586 8.28995 14.9243 8.52426L10.4243 13.0243Z"
fill="#ADADB0"
/>
</svg>
</button>
<ul class="aw-footer-nav-secondary-list aw-sub-body-400">
<li>
<a class="aw-link" href="/docs">Docs</a>
</li>
<li>
<a class="aw-link" href="/community">Community</a>
</li>
<li><a class="aw-link" href="/blog">Blog</a></li>
<li><a class="aw-link" href="/roadmap">Roadmap</a></li>
<li>
<a class="aw-link" href="https://github.com/appwrite/appwrite/releases" target="_blank"
>Changelog</a
>
</li>
<li>
<a class="aw-link" href="https://status.appwrite.io" target="_blank">Status</a>
</li>
</ul>
</li>
<li class="aw-footer-nav-main-item"> <li class="aw-footer-nav-main-item">
<h5 class="aw-footer-nav-main-title aw-is-not-mobile aw-caption-500 aw-eyebrow">About</h5> <h5 class="aw-footer-nav-main-title aw-is-not-mobile aw-caption-500 aw-eyebrow">About</h5>
<button class="aw-footer-nav-button is-open aw-is-only-mobile"> <button class="aw-footer-nav-button is-open aw-is-only-mobile">
@@ -155,7 +116,6 @@
</button> </button>
<ul class="aw-footer-nav-secondary-list aw-sub-body-400"> <ul class="aw-footer-nav-secondary-list aw-sub-body-400">
<li><a class="aw-link" href="/pricing">Pricing</a></li> <li><a class="aw-link" href="/pricing">Pricing</a></li>
<li><a class="aw-link" href="/company">Company</a></li>
<li><a class="aw-link" href="/careers">Careers</a></li> <li><a class="aw-link" href="/careers">Careers</a></li>
<li><a class="aw-link" href="/heroes">Heroes</a></li> <li><a class="aw-link" href="/heroes">Heroes</a></li>
<li> <li>

View File

@@ -85,9 +85,9 @@
<li> <li>
<a href="https://status.appwrite.io" target="_blank">Status</a> <a href="https://status.appwrite.io" target="_blank">Status</a>
</li> </li>
<li> <!-- <li>
<a href="https://github.com/appwrite/appwrite/releases" target="_blank">Changelog</a> <a href="https://github.com/appwrite/appwrite/releases" target="_blank">Changelog</a>
</li> </li> -->
</ul> </ul>
<div class="aw-main-footer-grid-1-column-4 aw-main-footer-copyright"> <div class="aw-main-footer-grid-1-column-4 aw-main-footer-copyright">
Copyright © 2023 Appwrite Copyright © 2023 Appwrite

View File

@@ -31,7 +31,7 @@
<a href="https://github.com/appwrite/appwrite/stargazers" target="_blank" class="aw-button is-text u-width-full-line"> <a href="https://github.com/appwrite/appwrite/stargazers" target="_blank" class="aw-button is-text u-width-full-line">
<span class="aw-icon-star" aria-hidden="true" /> <span class="aw-icon-star" aria-hidden="true" />
<span class="text">Star on GitHub</span> <span class="text">Star on GitHub</span>
<span class="aw-inline-tag aw-sub-body-400">33.2k</span> <span class="aw-inline-tag aw-sub-body-400">33.2K</span>
</a> </a>
</div> </div>
</div> </div>

View File

@@ -28,7 +28,7 @@
<li class="aw-strip-plans-item aw-strip-plans-container-query"> <li class="aw-strip-plans-item aw-strip-plans-container-query">
<div class="aw-strip-plans-item-wrapper"> <div class="aw-strip-plans-item-wrapper">
<div class="aw-strip-plans-plan"> <div class="aw-strip-plans-plan">
<h4 class="title aw-description">Free</h4> <h4 class="title aw-description">Starter</h4>
<div class="aw-title aw-u-color-text-primary">$0</div> <div class="aw-title aw-u-color-text-primary">$0</div>
<div class="info aw-caption-500" /> <div class="info aw-caption-500" />
</div> </div>

View File

@@ -142,7 +142,7 @@
/> />
</svg> </svg>
<span class="text">Star on GitHub</span> <span class="text">Star on GitHub</span>
<span class="aw-inline-tag aw-sub-body-400">33.2k</span> <span class="aw-inline-tag aw-sub-body-400">33.2K</span>
</a> </a>
<a href="https://cloud.appwrite.io/console" class="aw-button"> <a href="https://cloud.appwrite.io/console" class="aw-button">
<span class="aw-sub-body-500">Go to console</span> <span class="aw-sub-body-500">Go to console</span>

View File

@@ -14,6 +14,7 @@
<script lang="ts"> <script lang="ts">
export let title: string; export let title: string;
export let back: string;
export let toc: Array<TocItem>; export let toc: Array<TocItem>;
</script> </script>
@@ -21,29 +22,35 @@
<article class="aw-article u-contents"> <article class="aw-article u-contents">
<header class="aw-article-header"> <header class="aw-article-header">
<div class="aw-article-header-start u-flex-vertical aw-u-cross-start"> <div class="aw-article-header-start u-flex-vertical aw-u-cross-start">
<button {#if back !== undefined}
class=" <a
href={back}
class="
aw-button is-text aw-is-only-mobile aw-button is-text aw-is-only-mobile
aw-u-padding-block-0 aw-u-padding-inline-start-0 aw-u-padding-inline-end-12" aw-u-padding-block-0 aw-u-padding-inline-start-0 aw-u-padding-inline-end-12"
aria-label="previous page" aria-label="previous page"
> >
<span class="icon-cheveron-left" aria-hidden="true" /> <span class="icon-cheveron-left" aria-hidden="true" />
</button> </a>
{/if}
<ul class="aw-metadata aw-caption-400"> <ul class="aw-metadata aw-caption-400">
<slot name="metadata" /> <slot name="metadata" />
</ul> </ul>
<div class="u-position-relative u-flex u-cross-center"> <div class="u-position-relative u-flex u-cross-center">
<button {#if back !== undefined}
class=" <a
href={back}
class="
aw-button is-text is-icon aw-u-cross-center aw-u-size-40 aw-button is-text is-icon aw-u-cross-center aw-u-size-40
u-position-absolute u-inset-inline-start-0 aw-u-translate-x-negative" u-position-absolute u-inset-inline-start-0 aw-u-translate-x-negative"
aria-label="previous page" aria-label="previous page"
> >
<span <span
class="icon-cheveron-left aw-u-font-size-24 aw-u-color-text-primary aw-is-not-mobile" class="icon-cheveron-left aw-u-font-size-24 aw-u-color-text-primary aw-is-not-mobile"
aria-hidden="true" aria-hidden="true"
/> />
</button> </a>
{/if}
<h1 class="aw-title">{title}</h1> <h1 class="aw-title">{title}</h1>
</div> </div>
</div> </div>
@@ -106,44 +113,46 @@
</div> </div>
<aside class="aw-references-menu aw-u-padding-inline-start-24"> <aside class="aw-references-menu aw-u-padding-inline-start-24">
<div class="aw-references-menu-content"> <div class="aw-references-menu-content">
<div class="u-flex u-main-space-between u-cross-center u-gap-16"> {#if toc && toc.length > 0}
<h5 class="aw-references-menu-title aw-eyebrow">On This Page</h5> <div class="u-flex u-main-space-between u-cross-center u-gap-16">
</div> <h5 class="aw-references-menu-title aw-eyebrow">On This Page</h5>
<ol class="aw-references-menu-list"> </div>
{#each toc as parent (parent.href)} <ol class="aw-references-menu-list">
<li class="aw-references-menu-item" class:article-scroll-indicator={parent.selected}> {#each toc as parent (parent.href)}
<a <li class="aw-references-menu-item" class:article-scroll-indicator={parent.selected}>
href={parent.href} <a
class="aw-references-menu-link" href={parent.href}
class:is-selected={parent.selected} class="aw-references-menu-link"
> class:is-selected={parent.selected}
{#if parent?.step}
<span class="aw-numeric-badge">{parent.step}</span>
{/if}
<span class="aw-caption-400">{parent.title}</span>
</a>
{#if parent.children}
<ol
class="aw-references-menu-list u-margin-block-start-16 u-margin-inline-start-32"
> >
{#each parent.children as child} {#if parent?.step}
<li class="aw-references-menu-item"> <span class="aw-numeric-badge">{parent.step}</span>
<a href={child.href} class="aw-references-menu-link"> {/if}
<span class="aw-caption-400">{child.title}</span> <span class="aw-caption-400">{parent.title}</span>
</a> </a>
</li> {#if parent.children}
{/each} <ol
</ol> class="aw-references-menu-list u-margin-block-start-16 u-margin-inline-start-32"
{/if} >
</li> {#each parent.children as child}
{/each} <li class="aw-references-menu-item">
</ol> <a href={child.href} class="aw-references-menu-link">
<div class="u-sep-block-start u-padding-block-start-20"> <span class="aw-caption-400">{child.title}</span>
<a class="aw-link u-inline-flex u-cross-center u-gap-8" href="#top"> </a>
<span class="icon-arrow-up" aria-hidden="true" /> </li>
<span class="aw-sub-body-500">Back to top</span> {/each}
</a> </ol>
</div> {/if}
</li>
{/each}
</ol>
<div class="u-sep-block-start u-padding-block-start-20">
<a class="aw-link u-inline-flex u-cross-center u-gap-8" href="#top">
<span class="icon-arrow-up" aria-hidden="true" />
<span class="aw-sub-body-500">Back to top</span>
</a>
</div>
{/if}
</div> </div>
</aside> </aside>
</article> </article>

View File

@@ -87,10 +87,10 @@
label: 'Blog', label: 'Blog',
href: '/blog' href: '/blog'
}, },
{ // {
label: 'Changelog', // label: 'Changelog',
href: '#' // href: '#'
}, // },
{ {
label: 'Pricing', label: 'Pricing',
href: '/pricing' href: '/pricing'
@@ -159,7 +159,7 @@
class:is-transparent={browser} class:is-transparent={browser}
class:is-hidden={isHeaderHidden} class:is-hidden={isHeaderHidden}
> >
<div class="aw-top-banner"> <!-- <div class="aw-top-banner">
<div class="aw-top-banner-content aw-u-color-text-primary"> <div class="aw-top-banner-content aw-u-color-text-primary">
<span class="aw-caption-500">We are having lots of fun on</span> <span class="aw-caption-500">We are having lots of fun on</span>
<span class="aw-icon-discord" aria-hidden="true" /> <span class="aw-icon-discord" aria-hidden="true" />
@@ -168,7 +168,7 @@
<span class="aw-icon-close" aria-hidden="true" /> <span class="aw-icon-close" aria-hidden="true" />
</button> </button>
</div> </div>
</div> </div> -->
<div class="aw-container" style="--container-size:103rem"> <div class="aw-container" style="--container-size:103rem">
<div class="aw-main-header-wrapper"> <div class="aw-main-header-wrapper">
@@ -202,7 +202,7 @@
<a href="https://github.com/appwrite/appwrite/stargazers" target="_blank" class="aw-button is-text"> <a href="https://github.com/appwrite/appwrite/stargazers" target="_blank" class="aw-button is-text">
<span aria-hidden="true" class="aw-icon-star" /> <span aria-hidden="true" class="aw-icon-star" />
<span class="text">Star on GitHub</span> <span class="text">Star on GitHub</span>
<span class="aw-inline-tag aw-sub-body-400">33.2k</span> <span class="aw-inline-tag aw-sub-body-400">33.2K</span>
</a> </a>
<a href="https://cloud.appwrite.io/register" class="aw-button is-secondary">Sign up</a> <a href="https://cloud.appwrite.io/register" class="aw-button is-secondary">Sign up</a>
<a href="https://cloud.appwrite.io" class="aw-button"> <a href="https://cloud.appwrite.io" class="aw-button">

View File

@@ -97,7 +97,7 @@
<a href="https://github.com/appwrite/appwrite/stargazers" target="_blank" class="aw-button is-text u-width-full-line"> <a href="https://github.com/appwrite/appwrite/stargazers" target="_blank" class="aw-button is-text u-width-full-line">
<span class="aw-icon-star" aria-hidden="true" /> <span class="aw-icon-star" aria-hidden="true" />
<span class="text">Star on GitHub</span> <span class="text">Star on GitHub</span>
<span class="aw-inline-tag aw-sub-body-400">33.2k</span> <span class="aw-inline-tag aw-sub-body-400">33.2K</span>
</a> </a>
</div> </div>
</div> </div>

View File

@@ -58,7 +58,7 @@ const languages = {
css: css css: css
} as const satisfies Record<string, LanguageFn>; } as const satisfies Record<string, LanguageFn>;
const platformAliases: Record<Platform, keyof typeof languages> = { const platformAliases: Record<string, keyof typeof languages> = {
[Platform.ClientWeb]: 'js', [Platform.ClientWeb]: 'js',
[Platform.ClientFlutter]: 'dart', [Platform.ClientFlutter]: 'dart',
[Platform.ClientAndroidJava]: 'java', [Platform.ClientAndroidJava]: 'java',
@@ -73,7 +73,9 @@ const platformAliases: Record<Platform, keyof typeof languages> = {
[Platform.ServerPhp]: 'php', [Platform.ServerPhp]: 'php',
[Platform.ServerPython]: 'py', [Platform.ServerPython]: 'py',
[Platform.ServerRuby]: 'rb', [Platform.ServerRuby]: 'rb',
[Platform.ServerSwift]: 'swift' [Platform.ServerSwift]: 'swift',
vue: 'html',
svelte: 'html'
}; };
Object.entries(languages).forEach(([key, value]) => { Object.entries(languages).forEach(([key, value]) => {

View File

@@ -42,7 +42,7 @@ export enum Platform {
ServerSwift = 'server-swift' ServerSwift = 'server-swift'
} }
export const platformMap: Record<Language, string> = { export const platformMap: Record<Language|string, string> = {
[Platform.ClientApple]: 'Apple', [Platform.ClientApple]: 'Apple',
[Platform.ClientFlutter]: 'Flutter', [Platform.ClientFlutter]: 'Flutter',
[Platform.ClientWeb]: 'Web', [Platform.ClientWeb]: 'Web',
@@ -86,7 +86,9 @@ export const platformMap: Record<Language, string> = {
powershell: 'PowerShell', powershell: 'PowerShell',
cmd: 'CMD', cmd: 'CMD',
yaml: 'YAML', yaml: 'YAML',
text: 'Text' text: 'Text',
vue: 'Vue',
svelte: 'Svelte'
}; };
export const serviceMap: Record<Service, string> = { export const serviceMap: Record<Service, string> = {

View File

@@ -21,6 +21,7 @@
export let title: string; export let title: string;
export let description: string; export let description: string;
export let back: string;
export let difficulty: string = ''; export let difficulty: string = '';
export let readtime: string = ''; export let readtime: string = '';
@@ -59,7 +60,7 @@
<meta name="description" content={description} /> <meta name="description" content={description} />
</svelte:head> </svelte:head>
<DocsArticle {title} {toc}> <DocsArticle {title} {back} {toc}>
<svelte:fragment slot="metadata"> <svelte:fragment slot="metadata">
{#if difficulty} {#if difficulty}
<li>{difficulty}</li> <li>{difficulty}</li>

View File

@@ -1,7 +1,7 @@
<script context="module" lang="ts"> <script context="module" lang="ts">
export type AuthorData = { export type AuthorData = {
name: string; name: string;
id: string; slug: string;
role: string; role: string;
avatar: string; avatar: string;
bio: string; bio: string;
@@ -14,6 +14,7 @@
<script lang="ts"> <script lang="ts">
import { Article, FooterNav, MainFooter } from '$lib/components'; import { Article, FooterNav, MainFooter } from '$lib/components';
import { page } from '$app/stores';
import { Main } from '$lib/layouts'; import { Main } from '$lib/layouts';
import { getContext } from 'svelte'; import { getContext } from 'svelte';
import type { PostsData } from './Post.svelte'; import type { PostsData } from './Post.svelte';
@@ -27,6 +28,10 @@
export let github: string; export let github: string;
const posts = getContext<PostsData[]>('posts'); const posts = getContext<PostsData[]>('posts');
const authors = getContext<AuthorData[]>('authors');
const author = authors.find(
(p) => $page.url.pathname.substring($page.url.pathname.lastIndexOf('/') + 1) === p.slug
);
</script> </script>
<Main> <Main>
@@ -249,7 +254,7 @@
<div class="u-margin-block-start-48"> <div class="u-margin-block-start-48">
<ul class="aw-grid-articles"> <ul class="aw-grid-articles">
{#each posts as post} {#each posts.filter((p) => p.author === author?.slug) as post}
<Article <Article
title={post.title} title={post.title}
href={post.href} href={post.href}
@@ -282,5 +287,5 @@
<MainFooter /> <MainFooter />
</div> </div>
</div> </div>
</div></Main </div>
> </Main>

View File

@@ -27,7 +27,7 @@
export let category: string; export let category: string;
const authors = getContext<AuthorData[]>('authors'); const authors = getContext<AuthorData[]>('authors');
const authorData = authors.find((a) => a.name.includes(author)); const authorData = authors.find((a) => a.slug === author);
const categoriesList = getContext<CategoryData[]>('categories'); const categoriesList = getContext<CategoryData[]>('categories');
const categories = getValidCategories(); const categories = getValidCategories();
const posts = getContext<PostsData[]>('posts'); const posts = getContext<PostsData[]>('posts');
@@ -158,7 +158,7 @@
<section class="u-margin-block-start-32"> <section class="u-margin-block-start-32">
<ul class="aw-grid-articles"> <ul class="aw-grid-articles">
{#each posts.filter((p) => p.title !== title).slice(0, 3) as post} {#each posts.filter((p) => p.title !== title).slice(0, 3) as post}
{@const author = authors.find((a) => a.name.includes(post.author))} {@const author = authors.find((a) => a.slug === post.author)}
{#if author} {#if author}
<Article <Article
title={post.title} title={post.title}

View File

@@ -0,0 +1 @@
<strong class="u-bold"><slot /></strong>

View File

@@ -5,6 +5,7 @@
export { default as Heading } from './Heading.svelte'; export { default as Heading } from './Heading.svelte';
export { default as List } from './List.svelte'; export { default as List } from './List.svelte';
export { default as Paragraph } from './Paragraph.svelte'; export { default as Paragraph } from './Paragraph.svelte';
export { default as Strong } from './Strong.svelte';
export { default as Image } from './Image.svelte'; export { default as Image } from './Image.svelte';
export { default as Item } from './Item.svelte'; export { default as Item } from './Item.svelte';
export { default as Link } from './Link.svelte'; export { default as Link } from './Link.svelte';

View File

@@ -3,7 +3,7 @@
Appwrite provides two APIs to manager user accounts. Appwrite provides two APIs to manager user accounts.
The Account API is the API you should use in your **client applications** like web, Flutter, mobile, and native apps. The Account API is the API you should use in your **client applications** like web, Flutter, mobile, and native apps.
Account API creates sessions, which represent an authenticated user and is attached to a user's [account](/docs/products/auth/account). Account API creates sessions, which represent an authenticated user and is attached to a user's [account](/docs/products/auth/accounts).
Sessions respect [permissions](/docs/advanced/platform/permissions), which means users can only access resources if they have been granted the correct permissions. Sessions respect [permissions](/docs/advanced/platform/permissions), which means users can only access resources if they have been granted the correct permissions.
You'll notice that the Account API doesn't allow you to view or make changes to other users. You'll notice that the Account API doesn't allow you to view or make changes to other users.

View File

@@ -2,31 +2,31 @@
| Name | Payload | Description | | Name | Payload | Description |
|----------------------------------------|------------------------------------|-----------------------------------------------------| |----------------------------------------|------------------------------------|-----------------------------------------------------|
| `teams.*` | [Team Object](/docs/models/team) | This event triggers on any teams event. | | `teams.*` | [Team Object](/docs/references/cloud/models/team) | This event triggers on any teams event. |
| `teams.*.create` | [Team Object](/docs/models/team) | This event triggers when a team is created. | | `teams.*.create` | [Team Object](/docs/references/cloud/models/team) | This event triggers when a team is created. |
| `teams.*.delete` | [Team Object](/docs/models/team) | This event triggers when a team is deleted. | | `teams.*.delete` | [Team Object](/docs/references/cloud/models/team) | This event triggers when a team is deleted. |
| `teams.*.memberships.*` | [Membership Object](/docs/models/membership) | This event triggers on any team memberships event. | | `teams.*.memberships.*` | [Membership Object](/docs/references/cloud/models/membership) | This event triggers on any team memberships event. |
| `teams.*.memberships.*.create` | [Membership Object](/docs/models/membership) | This event triggers when a membership is created. | | `teams.*.memberships.*.create` | [Membership Object](/docs/references/cloud/models/membership) | This event triggers when a membership is created. |
| `teams.*.memberships.*.delete` | [Membership Object](/docs/models/membership) | This event triggers when a membership is deleted. | | `teams.*.memberships.*.delete` | [Membership Object](/docs/references/cloud/models/membership) | This event triggers when a membership is deleted. |
| `teams.*.memberships.*.update` | [Membership Object](/docs/models/membership) | This event triggers when a membership is updated. | | `teams.*.memberships.*.update` | [Membership Object](/docs/references/cloud/models/membership) | This event triggers when a membership is updated. |
| `teams.*.memberships.*.update.status` | [Membership Object](/docs/models/membership) | This event triggers when a team memberships status is updated. | | `teams.*.memberships.*.update.status` | [Membership Object](/docs/references/cloud/models/membership) | This event triggers when a team memberships status is updated. |
| `teams.*.update` | [Team Object](/docs/models/team) | This event triggers when a team is updated. | | `teams.*.update` | [Team Object](/docs/references/cloud/models/team) | This event triggers when a team is updated. |
| `teams.*.update.prefs` | [Team Object](/docs/models/team) | This event triggers when a team's preferences are updated. | | `teams.*.update.prefs` | [Team Object](/docs/references/cloud/models/team) | This event triggers when a team's preferences are updated. |
| `users.*` | [User Object](/docs/models/user) | This event triggers on any user's event. | | `users.*` | [User Object](/docs/references/cloud/models/user) | This event triggers on any user's event. |
| `users.*.create` | [User Object](/docs/models/user) | This event triggers when a user is created. | | `users.*.create` | [User Object](/docs/references/cloud/models/user) | This event triggers when a user is created. |
| `users.*.delete` | [User Object](/docs/models/user) | This event triggers when a user is deleted. | | `users.*.delete` | [User Object](/docs/references/cloud/models/user) | This event triggers when a user is deleted. |
| `users.*.recovery.*` | [Token Object](/docs/models/token) | This event triggers on any user's recovery token event. | | `users.*.recovery.*` | [Token Object](/docs/references/cloud/models/token) | This event triggers on any user's recovery token event. |
| `users.*.recovery.*.create` | [Token Object](/docs/models/token) | This event triggers when a recovery token for a user is created. | | `users.*.recovery.*.create` | [Token Object](/docs/references/cloud/models/token) | This event triggers when a recovery token for a user is created. |
| `users.*.recovery.*.update` | [Token Object](/docs/models/token) | This event triggers when a recovery token for a user is validated. | | `users.*.recovery.*.update` | [Token Object](/docs/references/cloud/models/token) | This event triggers when a recovery token for a user is validated. |
| `users.*.sessions.*` | [Session Object](/docs/models/session) | This event triggers on any user's sessions event. | | `users.*.sessions.*` | [Session Object](/docs/references/cloud/models/session) | This event triggers on any user's sessions event. |
| `users.*.sessions.*.create` | [Session Object](/docs/models/session) | This event triggers when a session for a user is created. | | `users.*.sessions.*.create` | [Session Object](/docs/references/cloud/models/session) | This event triggers when a session for a user is created. |
| `users.*.sessions.*.delete` | [Session Object](/docs/models/session) | This event triggers when a session for a user is deleted. | | `users.*.sessions.*.delete` | [Session Object](/docs/references/cloud/models/session) | This event triggers when a session for a user is deleted. |
| `users.*.update` | [User Object](/docs/models/user) | This event triggers when a user is updated. | | `users.*.update` | [User Object](/docs/references/cloud/models/user) | This event triggers when a user is updated. |
| `users.*.update.email` | [User Object](/docs/models/user) | This event triggers when a user's email address is updated. | | `users.*.update.email` | [User Object](/docs/references/cloud/models/user) | This event triggers when a user's email address is updated. |
| `users.*.update.name` | [User Object](/docs/models/user) | This event triggers when a user's name is updated. | | `users.*.update.name` | [User Object](/docs/references/cloud/models/user) | This event triggers when a user's name is updated. |
| `users.*.update.password` | [User Object](/docs/models/user) | This event triggers when a user's password is updated. | | `users.*.update.password` | [User Object](/docs/references/cloud/models/user) | This event triggers when a user's password is updated. |
| `users.*.update.prefs` | [User Object](/docs/models/user) | This event triggers when a user's preferences is updated. | | `users.*.update.prefs` | [User Object](/docs/references/cloud/models/user) | This event triggers when a user's preferences is updated. |
| `users.*.update.status` | [User Object](/docs/models/user) | This event triggers when a user's status is updated. | | `users.*.update.status` | [User Object](/docs/references/cloud/models/user) | This event triggers when a user's status is updated. |
| `users.*.verification.*` | [Token Object](/docs/models/token) | This event triggers on any user's verification token event. | | `users.*.verification.*` | [Token Object](/docs/references/cloud/models/token) | This event triggers on any user's verification token event. |
| `users.*.verification.*.create` | [Token Object](/docs/models/token) | This event triggers when a verification token for a user is created. | | `users.*.verification.*.create` | [Token Object](/docs/references/cloud/models/token) | This event triggers when a verification token for a user is created. |
| `users.*.verification.*.update` | [Token Object](/docs/models/token) | This event triggers when a verification token for a user is validated. | | `users.*.verification.*.update` | [Token Object](/docs/references/cloud/models/token) | This event triggers when a verification token for a user is validated. |

View File

@@ -2,21 +2,21 @@
| Name | Payload | Description | | Name | Payload | Description |
| ----------------------------------------- | ------------------------------ | --------------------------------------- | | ----------------------------------------- | ------------------------------ | --------------------------------------- |
| `databases.*` | [Database Object](/docs/models/database) | This event triggers on any database event. | | `databases.*` | [Database Object](/docs/references/cloud/models/database) | This event triggers on any database event. |
| `databases.*.collections.*` | [Collection Object](/docs/models/collection) | This event triggers on any collection event. | | `databases.*.collections.*` | [Collection Object](/docs/references/cloud/models/collection) | This event triggers on any collection event. |
| `databases.*.collections.*.attributes.*` | [Attribute Object](/docs/models/attribute) | This event triggers on any attributes event. | | `databases.*.collections.*.attributes.*` | [Attribute Object](/docs/references/cloud/models/attributeList) | This event triggers on any attributes event. |
| `databases.*.collections.*.attributes.*.create` | [Attribute Object](/docs/models/attribute) | This event triggers when an attribute is created. | | `databases.*.collections.*.attributes.*.create` | [Attribute Object](/docs/references/cloud/models/attributeList) | This event triggers when an attribute is created. |
| `databases.*.collections.*.attributes.*.delete` | [Attribute Object](/docs/models/attribute) | This event triggers when an attribute is deleted. | | `databases.*.collections.*.attributes.*.delete` | [Attribute Object](/docs/references/cloud/models/attributeList) | This event triggers when an attribute is deleted. |
| `databases.*.collections.*.create` | [Collection Object](/docs/models/collection) | This event triggers when a collection is created. | | `databases.*.collections.*.create` | [Collection Object](/docs/references/cloud/models/collection) | This event triggers when a collection is created. |
| `databases.*.collections.*.delete` | [Collection Object](/docs/models/collection) | This event triggers when a collection is deleted. | | `databases.*.collections.*.delete` | [Collection Object](/docs/references/cloud/models/collection) | This event triggers when a collection is deleted. |
| `databases.*.collections.*.documents.*` | [Document Object](/docs/models/document) | This event triggers on any documents event. | | `databases.*.collections.*.documents.*` | [Document Object](/docs/references/cloud/models/document) | This event triggers on any documents event. |
| `databases.*.collections.*.documents.*.create` | [Document Object](/docs/models/document) | This event triggers when a document is created. | | `databases.*.collections.*.documents.*.create` | [Document Object](/docs/references/cloud/models/document) | This event triggers when a document is created. |
| `databases.*.collections.*.documents.*.delete` | [Document Object](/docs/models/document) | This event triggers when a document is deleted. | | `databases.*.collections.*.documents.*.delete` | [Document Object](/docs/references/cloud/models/document) | This event triggers when a document is deleted. |
| `databases.*.collections.*.documents.*.update` | [Document Object](/docs/models/document) | This event triggers when a document is updated. | | `databases.*.collections.*.documents.*.update` | [Document Object](/docs/references/cloud/models/document) | This event triggers when a document is updated. |
| `databases.*.collections.*.indexes.*` | [Index Object](/docs/models/index) | This event triggers on any indexes event. | | `databases.*.collections.*.indexes.*` | [Index Object](/docs/references/cloud/models/index) | This event triggers on any indexes event. |
| `databases.*.collections.*.indexes.*.create` | [Index Object](/docs/models/index) | This event triggers when an index is created. | | `databases.*.collections.*.indexes.*.create` | [Index Object](/docs/references/cloud/models/index) | This event triggers when an index is created. |
| `databases.*.collections.*.indexes.*.delete` | [Index Object](/docs/models/index) | This event triggers when an index is deleted. | | `databases.*.collections.*.indexes.*.delete` | [Index Object](/docs/references/cloud/models/index) | This event triggers when an index is deleted. |
| `databases.*.collections.*.update` | [Collection Object](/docs/models/collection) | This event triggers when a collection is updated. | | `databases.*.collections.*.update` | [Collection Object](/docs/references/cloud/models/collection) | This event triggers when a collection is updated. |
| `databases.*.create` | [Database Object](/docs/models/database) | This event triggers when a database is created. | | `databases.*.create` | [Database Object](/docs/references/cloud/models/database) | This event triggers when a database is created. |
| `databases.*.delete` | [Database Object](/docs/models/database) | This event triggers when a database is deleted. | | `databases.*.delete` | [Database Object](/docs/references/cloud/models/database) | This event triggers when a database is deleted. |
| `databases.*.update` | [Database Object](/docs/models/database) | This event triggers when a database is updated. | | `databases.*.update` | [Database Object](/docs/references/cloud/models/database) | This event triggers when a database is updated. |

View File

@@ -2,15 +2,15 @@
| Name | Payload | Description | | Name | Payload | Description |
| ------------------------------------------- | --------------------------------- | ----------------------------------------- | | ------------------------------------------- | --------------------------------- | ----------------------------------------- |
| `functions.*` | [Function Object](/docs/models/function) | This event triggers on any functions event. | | `functions.*` | [Function Object](/docs/references/cloud/models/function) | This event triggers on any functions event. |
| `functions.*.create` | [Function Object](/docs/models/function) | This event triggers when a function is created. | | `functions.*.create` | [Function Object](/docs/references/cloud/models/function) | This event triggers when a function is created. |
| `functions.*.delete` | [Function Object](/docs/models/function) | This event triggers when a function is deleted. | | `functions.*.delete` | [Function Object](/docs/references/cloud/models/function) | This event triggers when a function is deleted. |
| `functions.*.deployments.*` | [Deployment Object](/docs/models/deployment) | This event triggers on any deployments event. | | `functions.*.deployments.*` | [Deployment Object](/docs/references/cloud/models/deployment) | This event triggers on any deployments event. |
| `functions.*.deployments.*.create` | [Deployment Object](/docs/models/deployment) | This event triggers when a deployment is created. | | `functions.*.deployments.*.create` | [Deployment Object](/docs/references/cloud/models/deployment) | This event triggers when a deployment is created. |
| `functions.*.deployments.*.delete` | [Deployment Object](/docs/models/deployment) | This event triggers when a deployment is deleted. | | `functions.*.deployments.*.delete` | [Deployment Object](/docs/references/cloud/models/deployment) | This event triggers when a deployment is deleted. |
| `functions.*.deployments.*.update` | [Deployment Object](/docs/models/deployment) | This event triggers when a deployment is updated. | | `functions.*.deployments.*.update` | [Deployment Object](/docs/references/cloud/models/deployment) | This event triggers when a deployment is updated. |
| `functions.*.executions.*` | [Execution Object](/docs/models/execution) | This event triggers on any executions event. | | `functions.*.executions.*` | [Execution Object](/docs/references/cloud/models/execution) | This event triggers on any executions event. |
| `functions.*.executions.*.create` | [Execution Object](/docs/models/execution) | This event triggers when an execution is created. | | `functions.*.executions.*.create` | [Execution Object](/docs/references/cloud/models/execution) | This event triggers when an execution is created. |
| `functions.*.executions.*.delete` | [Execution Object](/docs/models/execution) | This event triggers when an execution is deleted. | | `functions.*.executions.*.delete` | [Execution Object](/docs/references/cloud/models/execution) | This event triggers when an execution is deleted. |
| `functions.*.executions.*.update` | [Execution Object](/docs/models/execution) | This event triggers when an execution is updated. | | `functions.*.executions.*.update` | [Execution Object](/docs/references/cloud/models/execution) | This event triggers when an execution is updated. |
| `functions.*.update` | [Function Object](/docs/models/function) | This event triggers when a function is updated. | | `functions.*.update` | [Function Object](/docs/references/cloud/models/function) | This event triggers when a function is updated. |

View File

@@ -2,11 +2,11 @@
| Name | Payload | Description | | Name | Payload | Description |
|---------------------------------|-------------------------------------------------|----------------------------------------------| |---------------------------------|-------------------------------------------------|----------------------------------------------|
| `buckets.*` | [Bucket Object](/docs/models/bucket) | This event triggers on any buckets event. | | `buckets.*` | [Bucket Object](/docs/references/cloud/models/bucket) | This event triggers on any buckets event. |
| `buckets.*.create` | [Bucket Object](/docs/models/bucket) | This event triggers when a bucket is created.| | `buckets.*.create` | [Bucket Object](/docs/references/cloud/models/bucket) | This event triggers when a bucket is created.|
| `buckets.*.delete` | [Bucket Object](/docs/models/bucket) | This event triggers when a bucket is deleted.| | `buckets.*.delete` | [Bucket Object](/docs/references/cloud/models/bucket) | This event triggers when a bucket is deleted.|
| `buckets.*.files.*` | [File Object](/docs/models/file) | This event triggers on any files event. | | `buckets.*.files.*` | [File Object](/docs/references/cloud/models/file) | This event triggers on any files event. |
| `buckets.*.files.*.create` | [File Object](/docs/models/file) | This event triggers when a file is created. | | `buckets.*.files.*.create` | [File Object](/docs/references/cloud/models/file) | This event triggers when a file is created. |
| `buckets.*.files.*.delete` | [File Object](/docs/models/file) | This event triggers when a file is deleted. | | `buckets.*.files.*.delete` | [File Object](/docs/references/cloud/models/file) | This event triggers when a file is deleted. |
| `buckets.*.files.*.update` | [File Object](/docs/models/file) | This event triggers when a file is updated. | | `buckets.*.files.*.update` | [File Object](/docs/references/cloud/models/file) | This event triggers when a file is updated. |
| `buckets.*.update` | [Bucket Object](/docs/models/bucket) | This event triggers when a bucket is updated.| | `buckets.*.update` | [Bucket Object](/docs/references/cloud/models/bucket) | This event triggers when a bucket is updated.|

View File

@@ -50,13 +50,13 @@
<div class="aw-big-padding-section-level-1"> <div class="aw-big-padding-section-level-1">
<div class="aw-big-padding-section-level-2"> <div class="aw-big-padding-section-level-2">
<section class="aw-container aw-u-padding-block-end-0"> <section class="aw-container aw-u-padding-block-end-0">
<button class="aw-hero-banner-button aw-u-margin-block-end-24"> <a href="/blog/post/meet-the-new-appwrite" class="aw-hero-banner-button aw-u-margin-block-end-24">
<span class="aw-icon-star" aria-hidden="true" /> <span class="aw-icon-star" aria-hidden="true" />
<span class="aw-caption-500">New</span> <span class="aw-caption-500">New</span>
<div class="aw-hero-banner-button-sep" /> <div class="aw-hero-banner-button-sep" />
<span class="aw-caption-400">Intorudcing a *brand* new Appwrite</span> <span class="aw-caption-400">Intorudcing a *brand* new Appwrite</span>
<span class="aw-icon-arrow-right" aria-hidden="true" /> <span class="aw-icon-arrow-right" aria-hidden="true" />
</button> </a>
<div class="aw-hero is-horizontal"> <div class="aw-hero is-horizontal">
<h1 class="aw-headline"> <h1 class="aw-headline">
<span class="aw-gradient-text"> <span class="aw-gradient-text">
@@ -180,7 +180,7 @@
<li class="aw-info-boxes-item"> <li class="aw-info-boxes-item">
<img src="/images/icons/gradients/self-hosted.svg" width="40" height="40" alt="" /> <img src="/images/icons/gradients/self-hosted.svg" width="40" height="40" alt="" />
<h3 class="aw-info-boxes-title">Self-Hosted</h3> <h3 class="aw-info-boxes-title">Self-Hosted</h3>
<p class="aw-info-boxes-content">Own your data or host it on a region of choice.</p> <p class="aw-info-boxes-content">Own your data or host it on a cloud region of choice.</p>
</li> </li>
<li class="aw-info-boxes-item"> <li class="aw-info-boxes-item">
<img src="/images/icons/gradients/lock.svg" width="40" height="40" alt="" /> <img src="/images/icons/gradients/lock.svg" width="40" height="40" alt="" />
@@ -191,16 +191,16 @@
</li> </li>
<li class="aw-info-boxes-item"> <li class="aw-info-boxes-item">
<img src="/images/icons/gradients/shield.svg" width="40" height="40" alt="" /> <img src="/images/icons/gradients/shield.svg" width="40" height="40" alt="" />
<h3 class="aw-info-boxes-title">Abuse Protection</h3> <h3 class="aw-info-boxes-title">Abuse protection</h3>
<p class="aw-info-boxes-content"> <p class="aw-info-boxes-content">
Protect users from abuse with built-in protection. Protect your APIs from abuse with built-in protection.
</p> </p>
</li> </li>
<li class="aw-info-boxes-item"> <li class="aw-info-boxes-item">
<img src="/images/icons/gradients/database.svg" width="40" height="40" alt="" /> <img src="/images/icons/gradients/database.svg" width="40" height="40" alt="" />
<h3 class="aw-info-boxes-title">Data Migrations</h3> <h3 class="aw-info-boxes-title">Data migrations</h3>
<p class="aw-info-boxes-content"> <p class="aw-info-boxes-content">
Move data between 3rd parties, cloud or self-hosting. Easily transfer data from 3rd parties or between Cloud and self-hosted.
</p> </p>
</li> </li>
<li class="aw-info-boxes-item"> <li class="aw-info-boxes-item">
@@ -244,74 +244,66 @@
<ul class="aw-multi-columns-1 aw-u-margin-block-start-80"> <ul class="aw-multi-columns-1 aw-u-margin-block-start-80">
<li> <li>
<DeveloperCard <DeveloperCard
name="Eldad Fux" name="Terry Lennon"
tag="@eldadfux" tag="@terry_lennon"
icon="x" icon="product-hunt"
avatarSrc="/images/avatars/eldad.png" avatarSrc="/images/community/avatars/terry.png"
> >
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin in ultrices lacus. Been a huge supporter of Appwrite for over a year, championing
Duis pellentesque quis purus in posuere. it even at the companies I was working at. Their community is second-to-none,
speed of feature release is exceptional, and the support in their Discord is incredible.
</DeveloperCard> </DeveloperCard>
</li> </li>
<li> <li>
<DeveloperCard <DeveloperCard
name="Eldad Fux" name="Varun Dhand"
tag="@eldadfux" tag="@varundhand"
icon="discord"
avatarSrc="/images/avatars/eldad.png"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin in <a
class="aw-link-1"
href="#top">@ultrices lacus</a
>. Duis pellentesque quis purus in posuere Duis pellentesque quis purus in posuere.
</DeveloperCard>
</li>
<li>
<DeveloperCard
name="Eldad Fux"
tag="@eldadfux"
icon="x"
avatarSrc="/images/avatars/eldad.png"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin in ultrices lacus.
Duis pellentesque quis purus in posuere.
</DeveloperCard>
</li>
<li>
<DeveloperCard
name="Eldad Fux"
tag="@eldadfux"
icon="linkedin" icon="linkedin"
avatarSrc="/images/avatars/eldad.png" avatarSrc="/images/community/avatars/varun.png"
> >
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin in ultrices lacus. Recently, I embarked on a journey to create a Real-Time Chat Application that would redefine seamless communication. Along the way, I discovered an incredible tool that transformed my backend game - Appwrite!
Duis pellentesque quis purus in posuere.
</DeveloperCard> </DeveloperCard>
</li> </li>
<li> <li>
<DeveloperCard <DeveloperCard
name="Eldad Fux" name="Kap.ts"
tag="@eldadfux" tag="@Kaperskyguru"
icon="x" icon="x"
avatarSrc="/images/avatars/eldad.png" avatarSrc="/images/community/avatars/kap.png"
> >
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin in <a Backend Engineers, you will agree with me that building the authentication process for your app with each new API development is a pain. Here's my secret: I let <a href="https://twitter.com/appwrite" target="_blank" class="aw-link-1">@appwrite</a> handle my authentication process while I focus on the business logic.
class="aw-link-1"
href="#top">@ultrices lacus</a
>. Duis pellentesque quis purus in posuere Duis pellentesque quis purus in posuere.
</DeveloperCard> </DeveloperCard>
</li> </li>
<li> <li>
<DeveloperCard <DeveloperCard
name="Eldad Fux" name="Stephen Simon"
tag="@eldadfux" tag="@codewithsimon"
icon="linkedin" icon="product-hunt"
avatarSrc="/images/avatars/eldad.png" avatarSrc="/images/community/avatars/stephen.png"
> >
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin in ultrices lacus. Absolutely in love with Appwrite and the commitment to the community!
Duis pellentesque quis purus in posuere.
</DeveloperCard> </DeveloperCard>
</li> </li>
<li>
<DeveloperCard
name="Teri"
tag="@terieyenike"
icon="product-hunt"
avatarSrc="/images/community/avatars/terieyenike.png"
>
I have used Appwrite twice, and the experience of using it was great as I got to build a full-stack application. I would gladly recommend it to anyone looking to explore an alternative database option. Appwrite is simply the best.
</DeveloperCard>
</li>
<li>
<DeveloperCard
name="Souvik Sarkar"
tag="@Jeet_2003"
icon="x"
avatarSrc="/images/community/avatars/souvik.png"
>
If you're looking for a backend server that is both powerful and easy to use, check out <a href="https://twitter.com/appwrite" target="_blank" class="aw-link-1">@appwrite</a>. With its robust feature set and open-source nature, it's the perfect choice for developers who want to build secure and scalable applications.
</DeveloperCard>
</li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -498,26 +490,26 @@
<div class="grid-1-1"> <div class="grid-1-1">
<section class="aw-hero is-align-start"> <section class="aw-hero is-align-start">
<span class="aw-badges aw-eyebrow">Scale_</span> <span class="aw-badges aw-eyebrow">Scale_</span>
<h2 class="aw-display u-max-width-600 aw-u-color-text-primary">We scale for you</h2> <h2 class="aw-display u-max-width-600 aw-u-color-text-primary">We scale for you and your users</h2>
</section> </section>
<ul <ul
class="aw-big-list-info u-margin-inline-start-auto aw-u-inline-width-100-percent-mobile-break1 aw-u-margin-block-start-48" class="aw-big-list-info u-margin-inline-start-auto aw-u-inline-width-100-percent-mobile-break1 aw-u-margin-block-start-48"
> >
<li class="aw-big-list-info-item"> <li class="aw-big-list-info-item">
<div class="aw-headline aw-u-color-text-primary">12</div> <div class="aw-headline aw-u-color-text-primary">90K</div>
<div class="text">Regions served</div> <div class="text">Projects</div>
</li> </li>
<li class="aw-big-list-info-item"> <li class="aw-big-list-info-item">
<div class="aw-headline aw-u-color-text-primary">900TB</div> <div class="aw-headline aw-u-color-text-primary">200M</div>
<div class="text">of data served</div> <div class="text">Requests / month</div>
</li> </li>
<li class="aw-big-list-info-item"> <li class="aw-big-list-info-item">
<div class="aw-headline aw-u-color-text-primary">1 million</div> <div class="aw-headline aw-u-color-text-primary">20K</div>
<div class="text">end users</div> <div class="text">Organizations</div>
</li> </li>
<li class="aw-big-list-info-item"> <li class="aw-big-list-info-item">
<div class="aw-headline aw-u-color-text-primary">999</div> <div class="aw-headline aw-u-color-text-primary">99.99%</div>
<div class="text">total compute time</div> <div class="text">Guaranteed uptime</div>
</li> </li>
</ul> </ul>
</div> </div>

View File

@@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
export let name: string; export let name: string;
export let tag: string; export let tag: string;
export let icon: 'x' | 'linkedin' | 'discord'; export let icon: 'x' | 'linkedin' | 'discord' | 'product-hunt';
export let avatarSrc: string; export let avatarSrc: string;
</script> </script>

View File

@@ -37,25 +37,25 @@ export function load() {
return b.date.getTime() - a.date.getTime(); return b.date.getTime() - a.date.getTime();
}); });
const authors = Object.entries(authorsGlob).map(([_filepath, authorList]) => { const authors = Object.values(authorsGlob).map((authorList) => {
const { frontmatter } = authorList as { const { frontmatter } = authorList as {
frontmatter: AuthorData; frontmatter: AuthorData;
}; };
const name = frontmatter.id ?? frontmatter.name.toLowerCase().replace(' ', '-');
return { return {
name: frontmatter.name, name: frontmatter.name,
slug: frontmatter.slug,
role: frontmatter.role, role: frontmatter.role,
avatar: frontmatter.avatar, avatar: frontmatter.avatar,
bio: frontmatter.bio, bio: frontmatter.bio,
twitter: frontmatter.twitter, twitter: frontmatter.twitter,
linkedin: frontmatter.linkedin, linkedin: frontmatter.linkedin,
github: frontmatter.github, github: frontmatter.github,
href: `${base}/blog/author/${name}` href: `${base}/blog/author/${frontmatter.slug}`
}; };
}); });
const categories = Object.entries(categoriesGlob).map(([_filepath, categoryList]) => { const categories = Object.values(categoriesGlob).map((categoryList) => {
const { frontmatter } = categoryList as { const { frontmatter } = categoryList as {
frontmatter: CategoryData; frontmatter: CategoryData;
}; };

View File

@@ -86,7 +86,7 @@
/> />
<div class="aw-author-info"> <div class="aw-author-info">
<h4 class="aw-sub-body-400 aw-u-color-text-primary">Authors name</h4> <h4 class="aw-sub-body-400 aw-u-color-text-primary">Authors name</h4>
<p class="aw-caption-400 u-hide">Authors role or bio</p> <p class="aw-caption-400 u-hide">Author's role or bio</p>
<ul class="aw-metadata aw-caption-400 aw-is-not-mobile"> <ul class="aw-metadata aw-caption-400 aw-is-not-mobile">
<li>[data]</li> <li>[data]</li>
<li>[time-to-read] min</li> <li>[time-to-read] min</li>
@@ -231,7 +231,7 @@
<ul class="aw-grid-articles"> <ul class="aw-grid-articles">
{#each data.posts as post} {#each data.posts as post}
{@const author = data.authors.find( {@const author = data.authors.find(
(author) => author.name.toLowerCase() === post.author.toLowerCase() (author) => author.slug === post.author
)} )}
{#if author} {#if author}
<Article <Article

View File

@@ -33,22 +33,21 @@ export function load() {
return b.date.getTime() - a.date.getTime(); return b.date.getTime() - a.date.getTime();
}); });
const authors = Object.entries(authorsGlob).map(([_filepath, authorList]) => { const authors = Object.values(authorsGlob).map((authorList) => {
const { frontmatter } = authorList as { const { frontmatter } = authorList as {
frontmatter: AuthorData; frontmatter: AuthorData;
}; };
const name = frontmatter.id ?? frontmatter.name.toLowerCase().replace(' ', '-');
return { return {
name: frontmatter.name, name: frontmatter.name,
slug: frontmatter.slug,
role: frontmatter.role, role: frontmatter.role,
avatar: frontmatter.avatar, avatar: frontmatter.avatar,
bio: frontmatter.bio, bio: frontmatter.bio,
twitter: frontmatter.twitter, twitter: frontmatter.twitter,
linkedin: frontmatter.linkedin, linkedin: frontmatter.linkedin,
github: frontmatter.github, github: frontmatter.github,
href: `${base}/blog/author/${name}` href: `${base}/blog/author/${frontmatter.slug}`
}; };
}); });

View File

@@ -1,7 +1,7 @@
--- ---
layout: author layout: author
name: Arman name: Arman
id: arman slug: arman
role: Frontend Developer role: Frontend Developer
bio: In ♥ with Svelte and Vue, currently working at Appwrite bio: In ♥ with Svelte and Vue, currently working at Appwrite
avatar: /images/avatars/arman.png avatar: /images/avatars/arman.png

View File

@@ -0,0 +1,12 @@
---
layout: author
slug: christy-jacob
name: Christy Jacob
role: Engineering lead
bio: Leading Appwrite's Cloud development.
avatar: /images/avatars/christy.png
twitter: https://twitter.com/christyjacob4
github: https://github.com/christyjacob4
linkedin: https://www.linkedin.com/in/christyjacob4
---

View File

@@ -0,0 +1,12 @@
---
layout: author
name: Eldad Fux
slug: eldad-fux
role: Founder and CEO
bio: Appwrite's first open-source contributor.
avatar: /images/avatars/eldad.png
twitter: https://twitter.com/eldadfux
github: https://github.com/eldadfux
linkedin: https://www.linkedin.com/in/eldadfux
---

View File

@@ -1,12 +0,0 @@
---
layout: author
name: Eldad
id: eldad
role: Big boss
bio: Creator of Appwrite
avatar: /images/avatars/eldad.png
twitter: https://twitter.com/eldadfux
github: https://github.com/eldadfux
linkedin: https://www.linkedin.com/in/eldadfux/
---

View File

@@ -0,0 +1,12 @@
---
layout: author
name: Laura Du Ry
slug: laura-du-ry
role: Growth manager
bio: Managing Appwrite's growth effort.
avatar: /images/avatars/laura.png
twitter: https://twitter.com/LDRVBH
github: https://github.com/LauraDuRy
linkedin: https://www.linkedin.com/in/laura-du-ry-53203b94
---

View File

@@ -0,0 +1,11 @@
---
layout: author
name: Sara Kaandorp
slug: sara-kaandorp
role: Design lead
bio: Leading Appwrite's product and visual design teams.
avatar: /images/avatars/sara.png
twitter: https://twitter.com/sara_k_48
github: https://github.com/sarakaandorp
linkedin: https://www.linkedin.com/in/sara-k-78468a116/
---

View File

@@ -0,0 +1,12 @@
---
layout: author
name: Vincent Ge
slug: vincent-ge
role: Developer Advocate
bio: Focusing on developer experience and documentation.
avatar: /images/avatars/vincent.png
twitter: https://twitter.com/WenYuGe1
github: https://github.com/gewenyu99
linkedin: https://www.linkedin.com/in/wen-yu-ge/
---

View File

@@ -1,6 +1,6 @@
--- ---
layout: category layout: category
name: Design name: Design
description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam euismod, nisl eget aliquam ultricies, nunc nisl aliquet nunc, quis aliquam nisl nunc quis nisl. Nullam euismod, nisl eget aliquam ultricies, nunc nisl aliquet nunc, quis aliquam nisl nunc quis nisl. description: Explore the extensive research and thought that fuel Appwrite's design strategy in this section. Our design team dives deep into understanding user needs, industry standards, and emerging trends. We iterate and refine our designs based on robust feedback and testing to ensure an intuitive and enjoyable developer experience. The insights shared here reflect the blend of creativity and data-driven decisions that shape Appwrite's aesthetic and functionality. Each post offers a glimpse into our design realm, highlighting how research contributes to enhancing Appwrite's interfaces.
--- ---

View File

@@ -5,7 +5,7 @@ description: Lorem Ipsum dolor et amet.
date: 2023-11-14 date: 2023-11-14
cover: /images/pages/homepage/dashboard.svg cover: /images/pages/homepage/dashboard.svg
timeToRead: 3 timeToRead: 3
author: Arman author: arman
category: design, accessibility, appwrite, community, accessiblity category: design, accessibility, appwrite, community, accessiblity
--- ---

View File

@@ -0,0 +1,12 @@
---
layout: post
title: Announcing new docs post by Vincent
description: TBD
date: 2023-05-02
cover: /images/pages/homepage/dashboard.svg
timeToRead: 5
author: vincent-ge
category: docs, devex
---
TODO

View File

@@ -0,0 +1,62 @@
---
layout: post
title: Announcing Cloud pricing plans
description: Appwrite Cloud pricing are now available.
date: 2023-05-02
cover: /images/pages/homepage/dashboard.svg
timeToRead: 5
author: laura-du-ry
category: cloud
---
An important day has come for Appwrite, where we finally announce the pricing for Appwrite Cloud. Many of you mentioned that in order to continue building with Appwrite Cloud it is important to know what the potential costs are. So due to the high number of requests and to provide clarity we decided to share our pricing models before they're live. Please note that Appwrite Cloud continues to be free while in beta and pricing will be effective once we are generally available.
Now let's dive in.
## Building for the future
As part of our mission to make software more accessible, we wanted to make sure our pricing compliments that mission but also enable us to have the resources to continue building a strong company that can reach new levels. We have put a lot of effort into creating Appwrite's pricing that aligns with our values, transparency, ambition, and simplicity.
## Value framework
We created a set of principles to guide us through the pricing process. We like to call this the “Value Framework” as it focuses on delivering the maximum value to our users without compromising on the affordability and accessibility of our products and services.
- Equally plan for being accessible to all and our continued growth.
- Make adoption easy and ensure the developer's growth and success matches pricing.
- The developer's success helps Appwrite grow and deliver better products.
- Features should be consistent across tiers unless they are clearly focused on enterprise.
- Focus on value based profit. Limits should generally be applied to usage. Not functionality.
- Be fair.
## Affordable and accessible
The above framework supports our goal to make Appwrite Cloud affordable and accessible to as many developers as possible. We worked together with developers in the Appwrite community to create a transparent and predictable pricing model. We took insights from current costs made, interviews, surveys, as well as pricing of similar products as a baseline to work towards a fair model. A model where costs should never get in the way of your ambitions, the costs are always transparent, and it is as simple for you to get started as it is to stop. With all this in mind, we believe we will build a strong trust with our community, which will eventually lead to Appwrite's growth.
## Pricing plans
![Appwrite pricing plans](/images/blog/pricing-plans.png)
**Starter Plan** a free tier for every developer working on a side project or SaaS product that can thrive on our starter plan limits.
Free
**Pro Plan** a plan that supports your ambitions to scale your production project and allows you to grow. With flexible budget control tools to ensure you never get a surprise bill.
$15, per month, per member
**Scale plan** a plan that offers more support as you continue to scale your commercial product and team. With higher limits and more support from our team to ensure we support the demand of scaling teams.
$685, per month, per organization
## Business model: Pay per organization member
We chose a model that differs from most in the industry, a business model that focuses on you as a developer instead of a plan around the number of projects you build. We see value in unlimited building, we see value in exploration and in learning. We never want to get in the way of your imagination or ideation.
Our business model is designed to support developers with a lot of freedom to build and explore, as well as to scale. We've designed our pricing model to reflect a shared journey of growth and success. As your organization flourishes and expands, welcoming new team members, our pricing plan mirrors this journey. Instead of viewing it as a simple fee per new member, think of it as a tangible marker of your organization's progress and evolution. Each addition to your team is a sign of your success and, in turn, contributes to our shared advancement. In this way, we evolve together in a business model that's designed to be as fair and as reflective of our collective growth. We believe in growing together because your success is our success.
## Our commitment to the open source community
One thing we cannot dismiss is our OSS program. We strongly believe in helping other Open Source (OSS) maintainers. We know very well where we came from and Appwrite has been built with and by the open-source community. Therefore we have a free program to support the OSS community and show our appreciation. Interested developers can apply on our website once pricing is available.
## Next steps
This is a big step forward for Appwrite and the community and we are excited to see the response to our plans. The coming weeks we will work hard on making our pricing available, but until then developers can continue to build on Appwrite free of charge.
- [Review the pricing comparsion](/pricing)
- [Sign up for Cloud in beta](https://cloud.appwrite.io/)

View File

@@ -5,7 +5,7 @@ description: Lorem Ipsum dolor et amet.
date: 2022-11-12 date: 2022-11-12
cover: /images/blog/placeholder.png cover: /images/blog/placeholder.png
timeToRead: 5 timeToRead: 5
author: Eldad author: eldad-fux
category: design, accessibility, appwrite, community, accessiblity category: design, accessibility, appwrite, community, accessiblity
--- ---

View File

@@ -1,77 +0,0 @@
---
layout: post
title: Example
description: Lorem Ipsum dolor et amet.
date: 2023-11-16
cover: /images/blog/placeholder.png
timeToRead: 15
author: Arman
category: design, accessibility, appwrite, community, accessiblity
---
When creating products, accessibility can be an afterthought. Understandably, we want to ship our products fast and deliver value to our users. We might think that accessibility is needed for edge cases and therefore not prioritize it. It's good to be reminded that the World Health Organization (WHO) estimates that 16% of the global population has some form of disability (Dec 2022).Ignoring such a significant part of your user base simply doesn't create a good user experience.Creating accessible products is everyone's responsibility. Designers, developers, content authors, and whoever else is involved in creating products should do their part and strive towards achieving a better experience for everyone.
It's not always easy to maintain a high level of accessibility, but it's definitely easier with a design system. The components we created in Pink Design, Appwrite's fully open source UI library, have an accessibility level of AA. This is the recommended level of accessibility for most products.
To ensure our products will maintain a high accessibility level, we did the following:
- Use high color contrast
- Not relying on color
- Allow keyboard navigation
- Define font size in REM
- Allow users to reduce motion
## Use high color contrast
Color contrast might be the first thing that comes to mind when thinking about accessibility. A lack of contrast between the text and background might mean some people would be unable or have difficulty reading the text. Similarly, bright colors with high luminance are not readable for others. W3C recommends a contrast ratio between text and background of 4.5 to 1 for conformance level AA.
| Item | Price | # In stock |
|--------------|-----------|------------|
| Apples | 1.99 | *7* |
| Bananas | **1.89** | 5234 |
## Not relying on color
The term “color blindness” is often used to describe people who have trouble identifying and distinguishing between certain colors, but color blindness, the inability to see any color, is extremely rare. According to the United Kingdom National Health Service (NHS), red-green color blindness affects 1 out of 12 men and 1 out of 200 women. People with this color vision deficiency may have difficulty differentiating between reds, oranges, yellows, browns, and greens. They also might find it hard to distinguish between shades of purple and may confuse red with black.Similarly, people with “blue-yellow” color vision deficiency may have difficulty differentiating between blues, greens, and yellows.
BIG LINK
We use four system colors in Pink Design — red, orange, green, and blue. Each of these colors represents a state in the Appwrite console — red indicates an error or danger, orange indicates a warning, green indicates success, and blue indicates information. Knowing the difficulties our users might face while seeing these colors, we don't rely on color to make critical information understandable.
>“Lorem ipsum dolor sit amet consectetur. Diam fermentum tellus ante purus nullam eget sit id ac. Purus viverra ultrices fusce posuere sed enim duis aliquam sit. Vitae fames potenti donec ultricies in. Quis sed iaculis consectetur cras feugiat nibh gravida tincidunt volutpat. Eleifend vel blandit cras tempor sed nam quis aliquet. Facilisi tempor amet id integer gravida duis. Aliquet nulla tellus risus tortor neque vestibulum arcu.” Author
## Allow keyboard navigation
People with fine motor control restrictions or disabled hands or arms will be unable to use a mouse. In Pink Design, we provide distinct states for interactive elements. By designing states like focus, hover, and active, we provide the ability to navigate all interactive elements with a keyboard. This is not only an accessible experience but also a better experience for all users who prefer keyboard navigation, including Appwrite's developer community.
It is possible to enhance accessibility through development as well. In collaboration with our engineering team, we decided to incorporate the following into Pink Design:
![Alt text](/images/pages/homepage/dashboard.svg "a title")
## Define font size in REM
Browsers have a default font size that users can change via the browser setting. A pixel is an absolute unit for fixed sizes and spaces that ignores browser settings. This means that if we are using pixels and a user (with or without vision impairment) changes the font size in their browser settings, their setting won't affect our product. That being said, pixels should not cause any problems if the user zooms in, but we make no assumptions about users' preferences. This is why we decided to define the font size in REM, which is a relative unit.
```js
import { Client, Account } from "appwrite";
const client = new Client()
.setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
const account = new Account(client);
const promise = account.createVerification('https://example.com');
promise.then(function (response) {
console.log(response);
}, function (error) {
console.log(error);
});
```
## Allow users to reduce motion
There is no doubt that animations are a nice addition to every product, but animations can also distract people. In some cases, animations can cause dizziness, vertigo, or epileptic seizures. Users that are sensitive to motion might choose to reduce motion in their operating system settings. In this case, we should skip the animation for them. In Pink Design, we decided to create a big animation to show the functionality of the library on the landing page. The animation is 10 seconds long and is the first thing you see on the page. It starts immediately when the page is loaded, but if “reduce motion” is enabled in the operating system, the animation skips to the end.

View File

@@ -0,0 +1,44 @@
---
layout: post
title: Meet the new Appwrite
description: Unveiling Appwrite's new fresh look and feel with a new brand, website and experience.
date: 2023-09-22
cover: /images/blog/logo.png
timeToRead: 5
author: sara-kaandorp
category: design, brand
---
At Appwrite, we are constantly collaborating with the Appwrite community to improve Appwrite's products, services, and content. All for the sake of improving your developer experience, as well as staying true to the open-source values.
Today, we took another big step in improving this experience by elevating the Appwrite brand. Not only do we have an improved look and feel, but we also focussed on delivering a better experience navigating our website and docs.
We are excited to share our new brand and to see it match the maturity of our products, services, and content. And how, together, and through the power of open source, we have the capabilities of hundreds of developers.
## Aligning visual identity with growth
The very first design of Appwrite was created by our Founder & CEO, Eldad, in 2019 when Appwrite launched as an open-source project. Since then, the Appwrite console has been through a design upgrade, but as Appwrite grew, so did the team. Making it possible to reach new heights with Appwrites overall brand identity.
With the Appwrite team and community growing, our product started to mature, and there was a disconnect between our broader visual identity and our product. Recognizing the need for a fresh and more mature appearance, we worked to align our visual identity with the growing maturity of our product. This rebranding effort represents our commitment to delivering a polished and sophisticated experience to developers, throughout the developer journey. From discovery to scaling in using Appwrite.
## Designed for the community
Our rebranding journey began with a fresh perspective on our logo. We wanted to emphasize the importance of our community, so we redesigned it to feature a globe and lines of code. This represents our global community members, working and coding together to form the letter 'a,' for Appwrite.
![New Appwrite logo](/images/blog/new-logo.png)
Additionally, we've added a new element: glass. This represents our commitment to transparency and openness, echoing our open-source values. It's integrated into our website and brand visuals, highlighting our dedication to collaboration within our global community.
![Appwrite's glass elements](/images/blog/glass-elements.png)
## Introducing our enhanced website and docs
Our upgraded website is the main product of our new brand bringing more pages explaining everything you need to know about Appwrite. We have more webpages to come explaining our products and features in more depth.
![Appwrite's new website](/images/blog/new-website.png)
As part of our rebranding effort, we've revamped not only our website but also our documentation. Recognizing that our documentation plays a pivotal role in a developer's workflow, we've invested in enhancing both its design and content. Our new documentation now features specialized tutorials to guide you through project setup and feature implementation step by step.
## Build like a team of 100
With open source at the heart of everything we do, community plays an important role at Appwrite. We believe that if we stay true to our philosophy, together, we will empower developers with the capabilities of hundreds of developers. Giving them the freedom to build, create, and innovate.

View File

@@ -0,0 +1,61 @@
---
layout: post
title: Appwrite Cloud is now in public beta
description: We're happy to announce Cloud is now available for everyone to signup.
date: 2023-05-02
cover: /images/pages/homepage/dashboard.svg
timeToRead: 5
author: christy-jacob
category: cloud
---
We're thrilled to announce a major step forward for Appwrite Cloud as we transition from our private beta to the public beta today! We're eager to hear your feedback, learn from your experiences, and continually improve Appwrite Cloud to better serve your needs.
We're thrilled to announce a major step forward for Appwrite Cloud as we transition from our private beta to the public beta today! We're eager to hear your feedback, learn from your experiences, and continually improve Appwrite Cloud to better serve your needs.
**TL;DR Sign up at [cloud.appwrite.io/register](https://cloud.appwrite.io/register)**
## Why Appwrite Cloud?
At Appwrite, we are committed to the open-source community and believe that developers should have access to powerful tools and services that are intuitive, developer-centric and affordable. With Appwrite Cloud, we are extending our commitment to provide developers with the best possible experience by offering a fully managed backend solution that simplifies infrastructure management and helps them focus on what they do best - building great applications!
## What was the private beta?
Over the last couple of months, we conducted a successful private beta that allowed us to get Appwrite Cloud in the hands of selected members of the community. This exercise allowed us to learn a lot about usage patterns, infrastructure performance, early feedback and lots more.
We conducted cloud interviews with members of the initial cohort to understand their use cases and identify the most important features for them. These conversations have been invaluable in shaping the direction of Appwrite Cloud, allowing us to prioritize features and improvements.
We also conducted a pricing survey with participants to better understand developer demographics, their needs, their budgets and expectations. This information was instrumental in helping us fine-tune our pricing strategy and deliver the best value for our developers.
## What's new in the public beta?
With the launch of the public beta, we're opening up access to the Appwrite Cloud to a broader audience, allowing more developers to explore and test our platform. The public beta retains all the features and benefits of the private beta while incorporating valuable feedback from our early adopters.
Additionally, we'll continue working closely with the Appwrite community to refine the platform and introduce new features based on user feedback. We also encourage you to join our Discord community where you can get help with anything Appwrite related!
## Whats next?
We have a lot of things planned in the upcoming months while we await Cloud to become publicly available, and wed love to share some highlights with you.
### Cloud interviews and surveys
Were conducting a series of interviews & surveys with participants of the Public Beta to get more insights into their requirements. During these interviews, we focus on understanding their background, their reasons for using a backend server like Appwrite, their use cases, their experience so far, along with their expectations and shortcomings of the platform. These interviews have provided key insights that have prompted us to steer in the right direction.
If youre part of the Beta and would like to participate in these interviews, please reach out to me on our community Discord or my email, and wed be glad to set up a call.
### Pricing
Our goal is to make Appwrite Cloud affordable and accessible to all developers. Weve had some really great feedback from our initial pricing survey and are really close to sharing our model with you all. We will continue working together with the Appwrite community to refine this pricing model. Rest assured, there will be a generous free tier for all the hobby projects youve been wanting to create!
### Self-hosted edition
A lot of us may have questions about the open source version of Appwrite and its future. We can proudly say, we will continue to stand among the handful of companies that have been open-source first. Our vibrant community is a testament that, for the longest time, we have prioritized the open source version, and we will continue to do so. In fact, all major features will roll out to the open source version even before they hit the cloud! Appwrite will forever remain open source!
### Multi-region support
During the Beta, were operating with Frankfurt as our primary region. This is a careful decision to ensure we are geographically centrally located. As we get closer to general availability, we will focus on 3 more regions, namely San Francisco, New York, and Singapore with more regions to follow.
### Compliance
Compliances are frameworks that help organizations ensure they are meeting certain standards and requirements in regard to data security and privacy. For most SaaS/BaaS companies, SOC 2, HIPAA & GDPR are the essential ones. These certifications help companies demonstrate to their customers and stakeholders they are taking data security and privacy seriously, and are committed to protecting their sensitive information.
These usually involve a lot of paperwork, documentation, and administrative processes. Were in the process of ensuring we meet the highest standards for data security and privacy.
### Support for more function runtimes
While in beta, Appwrite Cloud supports five serverless runtimes, namely, Node, Python, PHP, Ruby, and Dart. As we approach general availability, we will continue to add support for our entire suite of runtimes based on the requests and requirements of the beta participants.
## Coming up
Weve set multiple goals and key performance indicators to help us determine the success of this important stage before making the Appwrite Cloud generally available. Those indicators include the feedback and insights we get from beta participants, consumption metrics, and our infrastructure resilience during this time. Once those are achieved, we'll officially announce the release of the Appwrite Cloud platform and reach general availability.
As always, huge thanks to the Appwrite community for your unwavering support. This milestone would not have been possible without your contributions. You're all incredible, and we'll continue working hard to deliver the development platform you deserve.

View File

@@ -18,17 +18,17 @@
</h1> </h1>
<div class=""> <div class="">
<p class="aw-description"> <p class="aw-description">
Appwrite is the open-source development platform developers like you any Inspire and get inspired. Join our community of maintainers and contributors
application at any scale, using the language they want. and help us make Appwrite better for developers all around the world.
</p> </p>
<div class="u-flex u-flex-wrap u-gap-12 u-margin-block-start-32"> <div class="u-flex u-flex-wrap u-gap-12 u-margin-block-start-32">
<button class="aw-button is-full-width-mobile"> <a href="/discord" target="_blank" class="aw-button is-full-width-mobile">
<span class="text">Join our Discord</span> <span class="text">Join our Discord</span>
</button> </a>
<a href="https://github.com/appwrite/appwrite/stargazers" target="_blank" class="aw-button is-secondary is-full-width-mobile"> <a href="https://github.com/appwrite/appwrite/stargazers" target="_blank" class="aw-button is-secondary is-full-width-mobile">
<span aria-hidden="true" class="aw-icon-star"></span> <span aria-hidden="true" class="aw-icon-star"></span>
<span>Star on GitHub</span> <span>Star on GitHub</span>
<span class="aw-inline-tag aw-sub-body-400">33.2k</span> <span class="aw-inline-tag aw-sub-body-400">33.2K</span>
</a> </a>
</div> </div>
</div> </div>
@@ -41,49 +41,49 @@
style="--gap-mobile:1.5rem;"> style="--gap-mobile:1.5rem;">
<li> <li>
<div class="aw-card is-normal"> <div class="aw-card is-normal">
<div class="aw-title aw-u-color-text-primary">32k+</div> <div class="aw-title aw-u-color-text-primary">33K+</div>
<div class="aw-description">GitHub Stars</div> <div class="aw-description">GitHub Stars</div>
</div> </div>
</li> </li>
<li> <li>
<div class="aw-card is-normal"> <div class="aw-card is-normal">
<div class="aw-title aw-u-color-text-primary">8k+</div> <div class="aw-title aw-u-color-text-primary">8K+</div>
<div class="aw-description">Pull Requests</div> <div class="aw-description">Pull Requests</div>
</div> </div>
</li> </li>
<li> <li>
<div class="aw-card is-normal"> <div class="aw-card is-normal">
<div class="aw-title aw-u-color-text-primary">15k+</div> <div class="aw-title aw-u-color-text-primary">15K+</div>
<div class="aw-description">Commits</div> <div class="aw-description">Commits</div>
</div> </div>
</li> </li>
<li> <li>
<div class="aw-card is-normal"> <div class="aw-card is-normal">
<div class="aw-title aw-u-color-text-primary">2.5k+</div> <div class="aw-title aw-u-color-text-primary">2.5K+</div>
<div class="aw-description">Issues</div> <div class="aw-description">Issues</div>
</div> </div>
</li> </li>
<li> <li>
<div class="aw-card is-normal"> <div class="aw-card is-normal">
<div class="aw-title aw-u-color-text-primary">625</div> <div class="aw-title aw-u-color-text-primary">400+</div>
<div class="aw-description">Open Issues</div> <div class="aw-description">Open Issues</div>
</div> </div>
</li> </li>
<li> <li>
<div class="aw-card is-normal"> <div class="aw-card is-normal">
<div class="aw-title aw-u-color-text-primary">1.9k+</div> <div class="aw-title aw-u-color-text-primary">1.9K+</div>
<div class="aw-description">Closed Issues</div> <div class="aw-description">Closed Issues</div>
</div> </div>
</li> </li>
<li> <li>
<div class="aw-card is-normal"> <div class="aw-card is-normal">
<div class="aw-title aw-u-color-text-primary">4.9k+</div> <div class="aw-title aw-u-color-text-primary">4.9K+</div>
<div class="aw-description">Forks</div> <div class="aw-description">Forks</div>
</div> </div>
</li> </li>
<li> <li>
<div class="aw-card is-normal"> <div class="aw-card is-normal">
<div class="aw-title aw-u-color-text-primary">20k+</div> <div class="aw-title aw-u-color-text-primary">20K+</div>
<div class="aw-description">Contributors</div> <div class="aw-description">Contributors</div>
</div> </div>
</li> </li>
@@ -96,18 +96,18 @@
<div class="aw-big-padding-section-level-1"> <div class="aw-big-padding-section-level-1">
<div class="aw-big-padding-section-level-2"> <div class="aw-big-padding-section-level-2">
<div class="aw-container"> <div class="aw-container">
<div class="aw-hero is-mobile-center aw-u-gap-20 aw-u-max-width-800"> <div class="aw-hero is-mobile-center aw-u-gap-20 aw-u-max-width-900">
<h1 class="aw-headline aw-u-color-text-primary"> <h1 class="aw-headline aw-u-color-text-primary">
Appwrite is built by active contributors The power of open source benefits us all
</h1> </h1>
<div class=""> <div class="">
<p class="aw-description"> <p class="aw-description">
Inspire and get inspired. Join our community of maintainers and contributors and help us make Appwrite better for developers all around the world. Appwrite improves daily thanks to our diverse, inspiring contributors. They come from various backgrounds and experience levels, welcoming anyone to join and help us excel.
</p> </p>
<div class="u-flex u-flex-wrap u-main-center u-gap-12 u-margin-block-start-32"> <div class="u-flex u-flex-wrap u-main-center u-gap-12 u-margin-block-start-32">
<button class="aw-button is-secondary is-full-width-mobile"> <a href="https://github.com/appwrite/appwrite/graphs/contributors" target="_blank" class="aw-button is-secondary is-full-width-mobile">
<span>View all contributors</span> <span>View all contributors</span>
</button> </a>
</div> </div>
</div> </div>
</div> </div>
@@ -304,100 +304,133 @@
<div class="aw-grid-articles-scroll"> <div class="aw-grid-articles-scroll">
<ul class="aw-grid-articles aw-u-gap-32 u-margin-block-start-32"> <ul class="aw-grid-articles aw-u-gap-32 u-margin-block-start-32">
<li> <li>
<a class="aw-grid-articles-item" href="#top"> <a class="aw-grid-articles-item" href="/discord" target="_blank">
<div class="aw-grid-articles-item-image"> <div class="aw-grid-articles-item-image">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkAAAAGUCAYAAADd3Z2SAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAjRSURBVHgB7dzdcRNXGIDhswwFkA6UCgwd0ElIBQkVABXEHYRS6ACoIEoFoQPlrH8yCmM8sHtlv88z842Ebe4037w6q9Uy7vdszqs5F3MONzPOHok7nU4DtlqWZcBW9g9njmePn+Z8nvNh7pjjt/7Dt7bPYc6fc14OuIcFxB4CiD3sH77D+znv7gqhJ3f88W9zPg7xAwA8bK/mfJyx/PvXv/g6gN7MuRzXl74AAB66tWn+mBH05vyH5+fP68nP5YAf4AiaPVwCYw/7hw1ez71z1Tq32+cwri97Ofnhh1hA7CGA2MP+YYMvc16snwm6vQS2HguJHwDgMVtbZ73J6+oE6DDnrwEbeAfGHk6A2MP+YYef1hOglwMAoOPVGkDPBwBAx8UaQBcDAKDjsAbQYQAAdByeDACAmPUWDB+jZzN3YbCHu8DYw/5hDydAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgJynp9NpwFbLsgzYyv5hD/uHPZwAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkLHNOAzY6nbx82G5ZlgFb2T/s4QQIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACDn6el0GrDVsiwDtrJ/2MP+YQ8nQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAICcNYCOAwCg4+gECADIcQIEANRcnQD9PQAAOj6vAfRpAAB0fFpOp9Oz+eSfARssyzJgq7l/Bmxl/7DDz0/mC+jLfPJhAAA8fu/nHK/yeb4LO8yHj3OeDfgB3oGxhxMg9rB/2GA99Hkxbm+Dny+i43x4NwAAHq+1dY7rk/++B2hG0OUQQQDA47Q2zuXtP/73RYgzgt7Oh9fj+ogIAOChW5tmbZu35z+88wLqzWeC1j/8ZcA9XINnD58BYg/7h+/wYc6v444vfb731XMTQi/nPJ9zMedw86vDgGEBsY8AYg/7hzPHs8d1Po/ru72+eUXrXzCikBuKJ0jJAAAAAElFTkSuQmCC" class="aw-u-media-ratio-16-9" alt=""> <img src="/images/community/events/office-hours.png" class="aw-u-media-ratio-16-9" alt="">
</div> </div>
<div class="aw-grid-articles-item-content is-no-gap"> <div class="aw-grid-articles-item-content is-no-gap">
<ul class="u-flex u-flex-wrap aw-u-list-inline-dot-sep"> <ul class="u-flex u-flex-wrap aw-u-list-inline-dot-sep">
<li class="u-flex u-cross-baseline u-gap-4"> <li class="u-flex u-cross-baseline u-gap-4">
<span class="aw-icon-calendar aw-u-color-text-tertiary" aria-hidden="true"></span> <span class="aw-icon-calendar aw-u-color-text-tertiary" aria-hidden="true"></span>
<time class="">June 26, 2023</time> <time class="">Sep 28th, 2023</time>
</li> </li>
<li class="u-flex u-cross-baseline u-gap-4"> <li class="u-flex u-cross-baseline u-gap-4">
<span class="aw-icon-location aw-u-color-text-tertiary" aria-hidden="true"></span> <span class="aw-icon-location aw-u-color-text-tertiary" aria-hidden="true"></span>
<span class="">Appwrite Discord</span> <span class="">Discord</span>
</li> </li>
</ul> </ul>
<h5 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-4"> <h5 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-4">
Appwrite Office Hours Office hours
</h5> </h5>
<p class="aw-sub-body-500"> <p class="aw-sub-body-500">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Join us for an exciting hour of technical conversations around Appwrite.
</p> </p>
<div class="u-flex u-flex-wrap u-gap-8 u-margin-block-start-16"> <div class="u-flex u-flex-wrap u-gap-8 u-margin-block-start-16">
<button class="aw-button is-secondary"> <button class="aw-button is-secondary">
<span>View event</span> <span>View event</span>
</button> </button>
<button class="aw-button is-text"> <!-- <button class="aw-button is-text">
<span>Add to calendar</span> <span>Add to calendar</span>
</button> </button> -->
</div> </div>
</div> </div>
</a> </a>
</li> </li>
<li> <li>
<a class="aw-grid-articles-item" href="#top"> <a class="aw-grid-articles-item" href="https://www.twitch.tv/wesscope" target="_blank">
<div class="aw-grid-articles-item-image"> <div class="aw-grid-articles-item-image">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkAAAAGUCAYAAADd3Z2SAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAjRSURBVHgB7dzdcRNXGIDhswwFkA6UCgwd0ElIBQkVABXEHYRS6ACoIEoFoQPlrH8yCmM8sHtlv88z842Ebe4037w6q9Uy7vdszqs5F3MONzPOHok7nU4DtlqWZcBW9g9njmePn+Z8nvNh7pjjt/7Dt7bPYc6fc14OuIcFxB4CiD3sH77D+znv7gqhJ3f88W9zPg7xAwA8bK/mfJyx/PvXv/g6gN7MuRzXl74AAB66tWn+mBH05vyH5+fP68nP5YAf4AiaPVwCYw/7hw1ez71z1Tq32+cwri97Ofnhh1hA7CGA2MP+YYMvc16snwm6vQS2HguJHwDgMVtbZ73J6+oE6DDnrwEbeAfGHk6A2MP+YYef1hOglwMAoOPVGkDPBwBAx8UaQBcDAKDjsAbQYQAAdByeDACAmPUWDB+jZzN3YbCHu8DYw/5hDydAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgJynp9NpwFbLsgzYyv5hD/uHPZwAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkLHNOAzY6nbx82G5ZlgFb2T/s4QQIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACDn6el0GrDVsiwDtrJ/2MP+YQ8nQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAICcNYCOAwCg4+gECADIcQIEANRcnQD9PQAAOj6vAfRpAAB0fFpOp9Oz+eSfARssyzJgq7l/Bmxl/7DDz0/mC+jLfPJhAAA8fu/nHK/yeb4LO8yHj3OeDfgB3oGxhxMg9rB/2GA99Hkxbm+Dny+i43x4NwAAHq+1dY7rk/++B2hG0OUQQQDA47Q2zuXtP/73RYgzgt7Oh9fj+ogIAOChW5tmbZu35z+88wLqzWeC1j/8ZcA9XINnD58BYg/7h+/wYc6v444vfb731XMTQi/nPJ9zMedw86vDgGEBsY8AYg/7hzPHs8d1Po/ru72+eUXrXzCikBuKJ0jJAAAAAElFTkSuQmCC" class="aw-u-media-ratio-16-9" alt=""> <img src="/images/community/events/live-coding.png" class="aw-u-media-ratio-16-9" alt="">
</div> </div>
<div class="aw-grid-articles-item-content is-no-gap"> <div class="aw-grid-articles-item-content is-no-gap">
<ul class="u-flex u-flex-wrap aw-u-list-inline-dot-sep"> <ul class="u-flex u-flex-wrap aw-u-list-inline-dot-sep">
<li class="u-flex u-cross-baseline u-gap-4"> <li class="u-flex u-cross-baseline u-gap-4">
<span class="aw-icon-calendar aw-u-color-text-tertiary" aria-hidden="true"></span> <span class="aw-icon-calendar aw-u-color-text-tertiary" aria-hidden="true"></span>
<time class="">June 26, 2023</time> <time class="">Sep 28th, 2023</time>
</li> </li>
<li class="u-flex u-cross-baseline u-gap-4"> <li class="u-flex u-cross-baseline u-gap-4">
<span class="aw-icon-location aw-u-color-text-tertiary" aria-hidden="true"></span> <span class="aw-icon-location aw-u-color-text-tertiary" aria-hidden="true"></span>
<span class="">Appwrite Discord</span> <span class="">Twitch</span>
</li> </li>
</ul> </ul>
<h5 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-4"> <h5 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-4">
Appwrite Office Hours Live coding with Wess
</h5> </h5>
<p class="aw-sub-body-500"> <p class="aw-sub-body-500">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pluck is going mobile. Join us in building Pluck.io's Flutter app.
</p> </p>
<div class="u-flex u-flex-wrap u-gap-8 u-margin-block-start-16"> <div class="u-flex u-flex-wrap u-gap-8 u-margin-block-start-16">
<button class="aw-button is-secondary"> <button class="aw-button is-secondary">
<span>View event</span> <span>View event</span>
</button> </button>
<button class="aw-button is-text"> <!-- <button class="aw-button is-text">
<span>Add to calendar</span> <span>Add to calendar</span>
</button> </button> -->
</div> </div>
</div> </div>
</a> </a>
</li> </li>
<li> <li>
<a class="aw-grid-articles-item" href="#top"> <a class="aw-grid-articles-item" href="https://lu.ma/hf-kickoff-blr" target="_blank">
<div class="aw-grid-articles-item-image"> <div class="aw-grid-articles-item-image">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkAAAAGUCAYAAADd3Z2SAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAjRSURBVHgB7dzdcRNXGIDhswwFkA6UCgwd0ElIBQkVABXEHYRS6ACoIEoFoQPlrH8yCmM8sHtlv88z842Ebe4037w6q9Uy7vdszqs5F3MONzPOHok7nU4DtlqWZcBW9g9njmePn+Z8nvNh7pjjt/7Dt7bPYc6fc14OuIcFxB4CiD3sH77D+znv7gqhJ3f88W9zPg7xAwA8bK/mfJyx/PvXv/g6gN7MuRzXl74AAB66tWn+mBH05vyH5+fP68nP5YAf4AiaPVwCYw/7hw1ez71z1Tq32+cwri97Ofnhh1hA7CGA2MP+YYMvc16snwm6vQS2HguJHwDgMVtbZ73J6+oE6DDnrwEbeAfGHk6A2MP+YYef1hOglwMAoOPVGkDPBwBAx8UaQBcDAKDjsAbQYQAAdByeDACAmPUWDB+jZzN3YbCHu8DYw/5hDydAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgJynp9NpwFbLsgzYyv5hD/uHPZwAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkLHNOAzY6nbx82G5ZlgFb2T/s4QQIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACDn6el0GrDVsiwDtrJ/2MP+YQ8nQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAICcNYCOAwCg4+gECADIcQIEANRcnQD9PQAAOj6vAfRpAAB0fFpOp9Oz+eSfARssyzJgq7l/Bmxl/7DDz0/mC+jLfPJhAAA8fu/nHK/yeb4LO8yHj3OeDfgB3oGxhxMg9rB/2GA99Hkxbm+Dny+i43x4NwAAHq+1dY7rk/++B2hG0OUQQQDA47Q2zuXtP/73RYgzgt7Oh9fj+ogIAOChW5tmbZu35z+88wLqzWeC1j/8ZcA9XINnD58BYg/7h+/wYc6v444vfb731XMTQi/nPJ9zMedw86vDgGEBsY8AYg/7hzPHs8d1Po/ru72+eUXrXzCikBuKJ0jJAAAAAElFTkSuQmCC" class="aw-u-media-ratio-16-9" alt=""> <img src="/images/community/events/hf-kickoff-bangalore.png" class="aw-u-media-ratio-16-9" alt="Hacktoberfest kickoff event">
</div> </div>
<div class="aw-grid-articles-item-content is-no-gap"> <div class="aw-grid-articles-item-content is-no-gap">
<ul class="u-flex u-flex-wrap aw-u-list-inline-dot-sep"> <ul class="u-flex u-flex-wrap aw-u-list-inline-dot-sep">
<li class="u-flex u-cross-baseline u-gap-4"> <li class="u-flex u-cross-baseline u-gap-4">
<span class="aw-icon-calendar aw-u-color-text-tertiary" aria-hidden="true"></span> <span class="aw-icon-calendar aw-u-color-text-tertiary" aria-hidden="true"></span>
<time class="">June 26, 2023</time> <time class="">Oct 1st, 2023</time>
</li> </li>
<li class="u-flex u-cross-baseline u-gap-4"> <li class="u-flex u-cross-baseline u-gap-4">
<span class="aw-icon-location aw-u-color-text-tertiary" aria-hidden="true"></span> <span class="aw-icon-location aw-u-color-text-tertiary" aria-hidden="true"></span>
<span class="">Appwrite Discord</span> <span class="">Bengaluru</span>
</li> </li>
</ul> </ul>
<h5 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-4"> <h5 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-4">
Appwrite Office Hours Hacktoberfest kickoff event
</h5> </h5>
<p class="aw-sub-body-500"> <p class="aw-sub-body-500">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Join us for our Hacktoberfest kickoff event in Bengaluru.
</p> </p>
<div class="u-flex u-flex-wrap u-gap-8 u-margin-block-start-16"> <div class="u-flex u-flex-wrap u-gap-8 u-margin-block-start-16">
<button class="aw-button is-secondary"> <button class="aw-button is-secondary">
<span>View event</span> <span>View event</span>
</button> </button>
<button class="aw-button is-text"> <!-- <button class="aw-button is-text">
<span>Add to calendar</span> <span>Add to calendar</span>
</button> -->
</div>
</div>
</a>
</li>
<li>
<a class="aw-grid-articles-item" href="https://hacktoberfest.com/">
<div class="aw-grid-articles-item-image">
<img src="/images/community/events/oss-celebration.png" class="aw-u-media-ratio-16-9" alt="Hacktoberfest kickoff event">
</div>
<div class="aw-grid-articles-item-content is-no-gap">
<ul class="u-flex u-flex-wrap aw-u-list-inline-dot-sep">
<li class="u-flex u-cross-baseline u-gap-4">
<span class="aw-icon-calendar aw-u-color-text-tertiary" aria-hidden="true"></span>
<time class="">Oct, 2023</time>
</li>
<li class="u-flex u-cross-baseline u-gap-4">
<span class="aw-icon-location aw-u-color-text-tertiary" aria-hidden="true"></span>
<span class="">Virtual</span>
</li>
</ul>
<h5 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-4">
Hacktoberfest 10
</h5>
<p class="aw-sub-body-500">
Join us for a month long celebration of open source in collaboration with DigitalOcean.
</p>
<div class="u-flex u-flex-wrap u-gap-8 u-margin-block-start-16">
<button class="aw-button is-secondary">
<span>View event</span>
</button> </button>
<!-- <button class="aw-button is-text">
<span>Add to calendar</span>
</button> -->
</div> </div>
</div> </div>
</a> </a>
@@ -409,7 +442,6 @@
</div> </div>
</div> </div>
<div class="aw-big-padding-section-level-1 u-position-relative aw-white-section theme-light"> <div class="aw-big-padding-section-level-1 u-position-relative aw-white-section theme-light">
<div class="aw-big-padding-section-level-2"> <div class="aw-big-padding-section-level-2">
<div class="aw-container"> <div class="aw-container">
@@ -418,45 +450,45 @@
<p class="aw-description"> <p class="aw-description">
Visit our showcase website Built with Appwrite to find inspiration for your projects or to showcase what you have built. Join hundreds of developers. Visit our showcase website Built with Appwrite to find inspiration for your projects or to showcase what you have built. Join hundreds of developers.
</p> </p>
<button class="aw-button is-secondary aw-u-cross-child-center u-margin-block-start-16"> <a href="https://builtwith.appwrite.io" target="_blank" class="aw-button is-secondary aw-u-cross-child-center u-margin-block-start-16">
<span>View all projects</span> <span>View all projects</span>
</button> </a>
</div> </div>
<ul class="aw-grid-3-desktop-1-mobile aw-u-margin-block-start-64"> <ul class="aw-grid-3-desktop-1-mobile aw-u-margin-block-start-64">
<li> <li>
<a class="aw-card is-white aw-u-flex-vertical u-gap-8" href="/" style="--card-padding:0.5rem;"> <a class="aw-card is-white aw-u-flex-vertical u-gap-8" href="https://builtwith.appwrite.io/projects/6467cedd4502d0e29205/" target="_blank" style="--card-padding:0.5rem;">
<div class="u-padding-12"> <div class="u-padding-12">
<h3 class="aw-main-body-500 aw-u-color-text-primary">Glitch</h3> <h3 class="aw-main-body-500 aw-u-color-text-primary">Auth UI</h3>
<p class="u-trim-2 u-break-word"> <p class="u-trim-2">
Appwrite-powered Hackathon Collaboration Tool for streamlined team communication Appwirte-powered authentication screens generator for any application.
</p> </p>
</div> </div>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkAAAAGUCAYAAADd3Z2SAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAjRSURBVHgB7dzdcRNXGIDhswwFkA6UCgwd0ElIBQkVABXEHYRS6ACoIEoFoQPlrH8yCmM8sHtlv88z842Ebe4037w6q9Uy7vdszqs5F3MONzPOHok7nU4DtlqWZcBW9g9njmePn+Z8nvNh7pjjt/7Dt7bPYc6fc14OuIcFxB4CiD3sH77D+znv7gqhJ3f88W9zPg7xAwA8bK/mfJyx/PvXv/g6gN7MuRzXl74AAB66tWn+mBH05vyH5+fP68nP5YAf4AiaPVwCYw/7hw1ez71z1Tq32+cwri97Ofnhh1hA7CGA2MP+YYMvc16snwm6vQS2HguJHwDgMVtbZ73J6+oE6DDnrwEbeAfGHk6A2MP+YYef1hOglwMAoOPVGkDPBwBAx8UaQBcDAKDjsAbQYQAAdByeDACAmPUWDB+jZzN3YbCHu8DYw/5hDydAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgJynp9NpwFbLsgzYyv5hD/uHPZwAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkLHNOAzY6nbx82G5ZlgFb2T/s4QQIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACDn6el0GrDVsiwDtrJ/2MP+YQ8nQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAICcNYCOAwCg4+gECADIcQIEANRcnQD9PQAAOj6vAfRpAAB0fFpOp9Oz+eSfARssyzJgq7l/Bmxl/7DDz0/mC+jLfPJhAAA8fu/nHK/yeb4LO8yHj3OeDfgB3oGxhxMg9rB/2GA99Hkxbm+Dny+i43x4NwAAHq+1dY7rk/++B2hG0OUQQQDA47Q2zuXtP/73RYgzgt7Oh9fj+ogIAOChW5tmbZu35z+88wLqzWeC1j/8ZcA9XINnD58BYg/7h+/wYc6v444vfb731XMTQi/nPJ9zMedw86vDgGEBsY8AYg/7hzPHs8d1Po/ru72+eUXrXzCikBuKJ0jJAAAAAElFTkSuQmCC" <img src="https://cloud.appwrite.io/v1/storage/buckets/thumbnails/files/64803bb4f34eb4b05ee3/preview?width=800&output=webp&project=builtWithAppwrite"
class="u-width-full-line aw-u-block-size-160 aw-u-media-cover aw-u-border-radius-8" alt=""> class="u-width-full-line aw-u-block-size-160 aw-u-media-cover" alt="">
</a> </a>
</li> </li>
<li> <li>
<a class="aw-card is-white aw-u-flex-vertical u-gap-8" href="/" style="--card-padding:0.5rem;"> <a class="aw-card is-white aw-u-flex-vertical u-gap-8" href="https://builtwith.appwrite.io/projects/648bfe0c1d8d70602b0b/" target="_blank" style="--card-padding:0.5rem;">
<div class="u-padding-12"> <div class="u-padding-12">
<h3 class="aw-main-body-500 aw-u-color-text-primary">Glitch</h3> <h3 class="aw-main-body-500 aw-u-color-text-primary">Glitch</h3>
<p class="u-trim-2 u-break-word"> <p class="u-trim-2">
Appwrite-powered Hackathon Collaboration Tool for streamlined team communication Appwrite-powered collaboration Tool for streamlined team communication.
</p> </p>
</div> </div>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkAAAAGUCAYAAADd3Z2SAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAjRSURBVHgB7dzdcRNXGIDhswwFkA6UCgwd0ElIBQkVABXEHYRS6ACoIEoFoQPlrH8yCmM8sHtlv88z842Ebe4037w6q9Uy7vdszqs5F3MONzPOHok7nU4DtlqWZcBW9g9njmePn+Z8nvNh7pjjt/7Dt7bPYc6fc14OuIcFxB4CiD3sH77D+znv7gqhJ3f88W9zPg7xAwA8bK/mfJyx/PvXv/g6gN7MuRzXl74AAB66tWn+mBH05vyH5+fP68nP5YAf4AiaPVwCYw/7hw1ez71z1Tq32+cwri97Ofnhh1hA7CGA2MP+YYMvc16snwm6vQS2HguJHwDgMVtbZ73J6+oE6DDnrwEbeAfGHk6A2MP+YYef1hOglwMAoOPVGkDPBwBAx8UaQBcDAKDjsAbQYQAAdByeDACAmPUWDB+jZzN3YbCHu8DYw/5hDydAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgJynp9NpwFbLsgzYyv5hD/uHPZwAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkLHNOAzY6nbx82G5ZlgFb2T/s4QQIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACDn6el0GrDVsiwDtrJ/2MP+YQ8nQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAICcNYCOAwCg4+gECADIcQIEANRcnQD9PQAAOj6vAfRpAAB0fFpOp9Oz+eSfARssyzJgq7l/Bmxl/7DDz0/mC+jLfPJhAAA8fu/nHK/yeb4LO8yHj3OeDfgB3oGxhxMg9rB/2GA99Hkxbm+Dny+i43x4NwAAHq+1dY7rk/++B2hG0OUQQQDA47Q2zuXtP/73RYgzgt7Oh9fj+ogIAOChW5tmbZu35z+88wLqzWeC1j/8ZcA9XINnD58BYg/7h+/wYc6v444vfb731XMTQi/nPJ9zMedw86vDgGEBsY8AYg/7hzPHs8d1Po/ru72+eUXrXzCikBuKJ0jJAAAAAElFTkSuQmCC" <img src="/images/community/projects/glitch.png"
class="u-width-full-line aw-u-block-size-160 aw-u-media-cover aw-u-border-radius-8" alt=""> class="u-width-full-line aw-u-block-size-160 aw-u-media-cover" alt="">
</a> </a>
</li> </li>
<li> <li>
<a class="aw-card is-white aw-u-flex-vertical u-gap-8" href="/" style="--card-padding:0.5rem;"> <a class="aw-card is-white aw-u-flex-vertical u-gap-8" href="https://builtwith.appwrite.io/projects/648606ad9cd179190b28/" target="_blank" style="--card-padding:0.5rem;">
<div class="u-padding-12"> <div class="u-padding-12">
<h3 class="aw-main-body-500 aw-u-color-text-primary">Glitch</h3> <h3 class="aw-main-body-500 aw-u-color-text-primary">uCanEarn</h3>
<p class="u-trim-2 u-break-word"> <p class="u-trim-2">
Appwrite-powered Hackathon Collaboration Tool for streamlined team communication Appwrite-powered platform where you can sell your digital products online.
</p> </p>
</div> </div>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkAAAAGUCAYAAADd3Z2SAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAjRSURBVHgB7dzdcRNXGIDhswwFkA6UCgwd0ElIBQkVABXEHYRS6ACoIEoFoQPlrH8yCmM8sHtlv88z842Ebe4037w6q9Uy7vdszqs5F3MONzPOHok7nU4DtlqWZcBW9g9njmePn+Z8nvNh7pjjt/7Dt7bPYc6fc14OuIcFxB4CiD3sH77D+znv7gqhJ3f88W9zPg7xAwA8bK/mfJyx/PvXv/g6gN7MuRzXl74AAB66tWn+mBH05vyH5+fP68nP5YAf4AiaPVwCYw/7hw1ez71z1Tq32+cwri97Ofnhh1hA7CGA2MP+YYMvc16snwm6vQS2HguJHwDgMVtbZ73J6+oE6DDnrwEbeAfGHk6A2MP+YYef1hOglwMAoOPVGkDPBwBAx8UaQBcDAKDjsAbQYQAAdByeDACAmPUWDB+jZzN3YbCHu8DYw/5hDydAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgJynp9NpwFbLsgzYyv5hD/uHPZwAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkLHNOAzY6nbx82G5ZlgFb2T/s4QQIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACDn6el0GrDVsiwDtrJ/2MP+YQ8nQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAIAcAQQA5AggACBHAAEAOQIIAMgRQABAjgACAHIEEACQI4AAgBwBBADkCCAAIEcAAQA5AggAyBFAAECOAAIAcgQQAJAjgACAHAEEAOQIIAAgRwABADkCCADIEUAAQI4AAgByBBAAkCOAAICcNYCOAwCg4+gECADIcQIEANRcnQD9PQAAOj6vAfRpAAB0fFpOp9Oz+eSfARssyzJgq7l/Bmxl/7DDz0/mC+jLfPJhAAA8fu/nHK/yeb4LO8yHj3OeDfgB3oGxhxMg9rB/2GA99Hkxbm+Dny+i43x4NwAAHq+1dY7rk/++B2hG0OUQQQDA47Q2zuXtP/73RYgzgt7Oh9fj+ogIAOChW5tmbZu35z+88wLqzWeC1j/8ZcA9XINnD58BYg/7h+/wYc6v444vfb731XMTQi/nPJ9zMedw86vDgGEBsY8AYg/7hzPHs8d1Po/ru72+eUXrXzCikBuKJ0jJAAAAAElFTkSuQmCC" <img src="/images/community/projects/ucanearn.png"
class="u-width-full-line aw-u-block-size-160 aw-u-media-cover aw-u-border-radius-8" alt=""> class="u-width-full-line aw-u-block-size-160 aw-u-media-cover" alt="">
</a> </a>
</li> </li>
</ul> </ul>
@@ -473,37 +505,37 @@
</div> </div>
<ul class="aw-multi-columns-1"> <ul class="aw-multi-columns-1">
<li> <li>
<div <a href="/discord" target="_blank"
class="aw-card is-white aw-u-min-block-size-320 u-flex-vertical" class="aw-card is-white aw-u-min-block-size-320 u-flex-vertical"
style="--card-padding:2rem" style="--card-padding:2rem"
> >
<div class="u-flex-vertical u-main-space-between u-gap-32"> <div class="u-flex-vertical u-main-space-between u-gap-32">
<span <span
class="icon-github aw-u-font-size-40" class="icon-discord aw-u-font-size-40"
aria-hidden="true" aria-hidden="true"
aria-label="GitHub" aria-label="Discord logo"
/> />
</div> </div>
<div class="aw-title u-margin-block-start-auto">125k+ Discord Members</div> <div class="aw-title u-margin-block-start-auto">17K+ members</div>
</div> </a>
</li> </li>
<li> <li>
<div <a href="https://twitter.com/intent/follow?screen_name=appwrite" target="_blank"
class="aw-card is-white aw-u-min-block-size-320 u-flex-vertical" class="aw-card is-white aw-u-min-block-size-320 u-flex-vertical"
style="--card-padding:2rem" style="--card-padding:2rem"
> >
<div class="u-flex-vertical u-main-space-between u-gap-32"> <div class="u-flex-vertical u-main-space-between u-gap-32">
<span <span
class="icon-github aw-u-font-size-40" class="aw-icon-x aw-u-font-size-40"
aria-hidden="true" aria-hidden="true"
aria-label="GitHub" aria-label="X logo"
/> />
</div> </div>
<div class="aw-title u-margin-block-start-auto">125k+ Discord Members</div> <div class="aw-title u-margin-block-start-auto">125K+ followers</div>
</div> </a>
</li> </li>
<li> <li>
<div <a href="https://github.com/appwrite/appwrite" target="_blank"
class="aw-card is-white aw-u-min-block-size-320 u-flex-vertical" class="aw-card is-white aw-u-min-block-size-320 u-flex-vertical"
style="--card-padding:2rem" style="--card-padding:2rem"
> >
@@ -511,26 +543,26 @@
<span <span
class="icon-github aw-u-font-size-40" class="icon-github aw-u-font-size-40"
aria-hidden="true" aria-hidden="true"
aria-label="GitHub" aria-label="GitHub logo"
/> />
</div> </div>
<div class="aw-title u-margin-block-start-auto">125k+ Discord Members</div> <div class="aw-title u-margin-block-start-auto">33K+ stargazers</div>
</div> </a>
</li> </li>
<li> <li>
<div <a href="https://www.youtube.com/c/appwrite?sub_confirmation=1" target="_blank"
class="aw-card is-white aw-u-min-block-size-320 u-flex-vertical" class="aw-card is-white aw-u-min-block-size-320 u-flex-vertical"
style="--card-padding:2rem" style="--card-padding:2rem"
> >
<div class="u-flex-vertical u-main-space-between u-gap-32"> <div class="u-flex-vertical u-main-space-between u-gap-32">
<span <span
class="icon-github aw-u-font-size-40" class="icon-youtube aw-u-font-size-40"
aria-hidden="true" aria-hidden="true"
aria-label="GitHub" aria-label="Youtube logo"
/> />
</div> </div>
<div class="aw-title u-margin-block-start-auto">125k+ Discord Members</div> <div class="aw-title u-margin-block-start-auto">3K+ subscribers</div>
</div> </a>
</li> </li>
</ul> </ul>
</div> </div>

View File

@@ -0,0 +1,5 @@
import { redirect } from '@sveltejs/kit';
export function load() {
throw redirect(301, 'https://discord.gg/GSeTUeA');
}

View File

@@ -1,6 +1,6 @@
<script lang="ts"> <script lang="ts">
import { Carousel } from '$lib/components';
import { Spline } from '$lib/components'; import { Spline } from '$lib/components';
import { Carousel } from '$lib/components';
import Docs from '$lib/layouts/Docs.svelte'; import Docs from '$lib/layouts/Docs.svelte';
import MainFooter from '../../lib/components/MainFooter.svelte'; import MainFooter from '../../lib/components/MainFooter.svelte';
import Sidebar from './Sidebar.svelte'; import Sidebar from './Sidebar.svelte';
@@ -81,140 +81,58 @@
</p> </p>
<ul class="u-flex u-gap-16 aw-u-margin-block-32-mobile aw-u-margin-block-40-not-mobile"> <ul class="u-flex u-gap-16 aw-u-margin-block-32-mobile aw-u-margin-block-40-not-mobile">
<li> <li>
<div class="aw-box-icon"> <a href="/docs/quick-starts/flutter" class="aw-box-icon">
<svg <img src="/images/platforms/dark/flutter.svg" alt="Flutter logo" class="u-only-dark" width="32" height="32" />
xmlns="http://www.w3.org/2000/svg" <img src="/images/platforms/flutter.svg" alt="Flutter logo" class="u-only-light" width="32" height="32" />
width="32" </a>
height="32"
viewBox="0 0 32 32"
fill="none"
>
<path
d="M8.92198 28.2118L8.922 28.2118C10.1507 28.9195 11.5645 28.6104 12.8493 27.953C14.092 27.317 15.2441 26.3408 16.0517 25.5696C16.8544 26.3363 17.9799 27.3147 19.1944 27.9542C20.4507 28.6157 21.8345 28.9308 23.0553 28.225C24.279 27.5174 24.7171 26.1443 24.7903 24.7093C24.8611 23.321 24.593 21.8415 24.3308 20.7613C25.3708 20.449 26.7776 19.947 27.9426 19.2012C29.1474 18.4299 30.125 17.3767 30.125 15.9768C30.125 14.5684 29.1425 13.53 27.9276 12.7756C26.7527 12.0461 25.3306 11.5628 24.2701 11.2533C24.5276 10.1852 24.8058 8.70025 24.7466 7.30393C24.6855 5.86013 24.2613 4.47317 23.0347 3.76683C21.8134 3.06325 20.4219 3.39468 19.1605 4.06928C17.9407 4.7217 16.8108 5.71111 16.0127 6.47432C15.2146 5.71789 14.0654 4.73526 12.8247 4.08886C11.5418 3.42055 10.127 3.09492 8.90162 3.80346L8.96402 3.91137L8.90162 3.80346C7.68069 4.50944 7.27327 5.88006 7.22877 7.30936C7.18575 8.69121 7.47997 10.1634 7.74354 11.2358C6.66739 11.546 5.24137 12.0274 4.06663 12.758C2.85173 13.5137 1.875 14.556 1.875 15.9768C1.875 17.3927 2.84946 18.4623 4.06122 19.246C5.23329 20.0041 6.65512 20.5137 7.72694 20.8261C7.46292 21.9034 7.17672 23.3656 7.22867 24.7357C7.28241 26.1531 7.70034 27.5079 8.92198 28.2118ZM22.8699 10.8917C21.7528 10.6402 20.5469 10.4514 19.2875 10.3311C18.5522 9.28922 17.7916 8.33707 17.0266 7.50469C17.617 6.9384 18.5143 6.10636 19.4708 5.51396C19.9734 5.20264 20.486 4.96166 20.9736 4.85801C21.4596 4.75472 21.9141 4.78898 22.3126 5.0185C22.7152 5.25049 22.9782 5.63297 23.1382 6.11348C23.2986 6.59536 23.3529 7.16894 23.3412 7.76782C23.3189 8.90605 23.0592 10.1091 22.8699 10.8917ZM18.6253 15.9768C18.6253 14.5284 17.4499 13.3544 16 13.3544C14.5503 13.3544 13.3747 14.5284 13.3747 15.9768C13.3747 17.4254 14.5503 18.5994 16 18.5994C17.4499 18.5994 18.6253 17.4254 18.6253 15.9768ZM26.8876 18.214C25.9174 18.7547 24.7583 19.1259 23.937 19.3712C23.5898 18.2948 23.1309 17.156 22.5754 15.9822C23.1053 14.8364 23.546 13.7135 23.8828 12.6454C24.6694 12.8748 25.8391 13.2351 26.8305 13.7663C27.3514 14.0454 27.8162 14.3682 28.1495 14.7381C28.4817 15.1068 28.6789 15.5171 28.6789 15.9768C28.6789 16.909 27.9138 17.6421 26.8876 18.214ZM22.3307 26.9745C21.5278 27.4388 20.5063 27.1263 19.4985 26.5098C18.548 25.9284 17.6559 25.1045 17.0591 24.5334C17.8135 23.6998 18.5661 22.7407 19.3011 21.6817C20.5916 21.5651 21.8146 21.3792 22.9318 21.1278C23.1191 21.9007 23.3684 23.096 23.3807 24.2288C23.3871 24.8252 23.3277 25.3973 23.1634 25.8785C22.9995 26.3584 22.7339 26.7414 22.3307 26.9745ZM9.64443 26.96C8.84154 26.4976 8.60218 25.4573 8.63323 24.2771C8.66252 23.164 8.93125 21.9805 9.12897 21.1801C10.2343 21.4178 11.4489 21.5906 12.7421 21.6975C13.4829 22.735 14.2571 23.6926 15.0385 24.5388C14.5161 25.0368 13.6021 25.8496 12.6098 26.442C12.0843 26.7557 11.5429 27.0039 11.0305 27.1132C10.519 27.2223 10.046 27.1913 9.64443 26.96ZM3.32106 15.9768C3.32106 15.043 4.11274 14.3119 5.1638 13.7472C6.1554 13.2144 7.32989 12.8557 8.1319 12.6272C8.47415 13.7193 8.91507 14.8566 9.44226 16.006C8.90799 17.1729 8.46065 18.3286 8.11501 19.4343C7.34739 19.2106 6.17941 18.8269 5.18533 18.2682C4.66222 17.9742 4.19351 17.6351 3.8568 17.2505C3.52098 16.867 3.32106 16.4439 3.32106 15.9768ZM9.62602 5.05393C10.0286 4.82114 10.4918 4.78455 10.9885 4.88609C11.4866 4.98792 12.0112 5.22748 12.5247 5.53684C13.5006 6.12478 14.4142 6.95072 14.9993 7.5056C14.2222 8.34773 13.4552 9.29813 12.721 10.3294C11.4649 10.4479 10.2598 10.6335 9.14506 10.8799C8.9303 10.0158 8.65051 8.81934 8.61654 7.70901C8.5807 6.53753 8.81984 5.52005 9.62602 5.05393ZM20.3358 11.9057C21.0816 12.0068 21.7994 12.1339 22.4802 12.285C22.2716 12.9382 22.0208 13.6165 21.7313 14.3106C21.2937 13.4936 20.8293 12.6907 20.3358 11.9057ZM14.6138 10.2037C15.0738 9.60925 15.5423 9.05201 16.0132 8.53853C16.4771 9.04701 16.9417 9.60491 17.4007 10.2044C16.4721 10.1676 15.5424 10.1674 14.6138 10.2037ZM11.6659 11.9032C11.1722 12.6855 10.7094 13.4872 10.2787 14.3058C9.99426 13.6142 9.74599 12.9338 9.53645 12.273C10.2124 12.126 10.9257 12.0022 11.6659 11.9032ZM10.2802 17.7046C10.7185 18.5346 11.19 19.347 11.693 20.1395C10.927 20.0472 10.1999 19.9292 9.52015 19.786C9.73386 19.1109 9.98846 18.4136 10.2802 17.7046ZM17.4336 21.8001C16.9722 22.4151 16.5079 22.9834 16.0455 23.4987C15.5675 22.9774 15.0908 22.41 14.6224 21.8048C15.559 21.8356 16.4969 21.8353 17.4336 21.8001ZM21.745 17.6571C22.0525 18.374 22.3169 19.0695 22.5348 19.7359C21.8425 19.889 21.1039 20.0162 20.3297 20.116C20.8297 19.3133 21.3031 18.4936 21.745 17.6571ZM20.9713 15.9891C20.2439 17.4776 19.4111 18.9164 18.4941 20.297C16.8444 20.4119 15.1845 20.4108 13.5337 20.3064C12.5984 18.9365 11.7639 17.4979 11.0407 16.0055C11.7604 14.516 12.589 13.08 13.5199 11.7123C15.1717 11.5905 16.8331 11.5902 18.4848 11.713C19.4075 13.0804 20.2351 14.5125 20.9713 15.9891Z"
fill="#D8D8DB"
stroke="#D8D8DB"
stroke-width="0.25"
/>
</svg>
</div>
</li> </li>
<li> <li>
<div class="aw-box-icon"> <a href="/docs/quick-starts/nextjs" class="aw-box-icon">
<svg <img src="/images/platforms/dark/nextjs.svg" alt="Next.js logo" class="u-only-dark" width="32" height="32" />
xmlns="http://www.w3.org/2000/svg" <img src="/images/platforms/nextjs.svg" alt="Next.js logo" class="u-only-light" width="32" height="32" />
width="32" </a>
height="32"
viewBox="0 0 32 32"
fill="none"
>
<path
d="M17.6263 25.3334H27.5394C27.8543 25.3334 28.1636 25.2472 28.4362 25.0834C28.7089 24.9195 28.9353 24.6838 29.0927 24.4001C29.25 24.1162 29.3328 23.7943 29.3327 23.4667C29.3325 23.139 29.2495 22.8172 29.0919 22.5335L22.4345 10.5335C22.2772 10.2498 22.0508 10.0141 21.7782 9.85032C21.5056 9.68652 21.1963 9.60025 20.8815 9.60025C20.5667 9.60025 20.2575 9.68652 19.9849 9.85032C19.7122 10.0141 19.4859 10.2498 19.3285 10.5335L17.6263 13.6039L14.298 7.59986C14.1406 7.31616 13.9141 7.08056 13.6414 6.91676C13.3687 6.75299 13.0594 6.66675 12.7446 6.66675C12.4297 6.66675 12.1204 6.75299 11.8477 6.91676C11.575 7.08056 11.3486 7.31616 11.1911 7.59986L2.9068 22.5335C2.7492 22.8172 2.66615 23.139 2.66602 23.4667C2.66588 23.7943 2.74866 24.1162 2.90602 24.4001C3.06338 24.6838 3.28979 24.9195 3.56246 25.0834C3.83513 25.2472 4.14445 25.3334 4.45932 25.3334H10.682C13.1474 25.3334 14.9656 24.2064 16.2167 22.0077L19.2541 16.5335L20.881 13.6039L25.7637 22.4038H19.2541L17.6263 25.3334ZM10.5805 22.4008L6.2379 22.3998L12.7475 10.6672L15.9955 16.5335L13.8208 20.4544C12.99 21.881 12.0461 22.4008 10.5805 22.4008Z"
fill="#D8D8DB"
/>
</svg>
</div>
</li> </li>
<li> <li>
<div class="aw-box-icon"> <a href="/docs/quick-starts/react" class="aw-box-icon">
<svg <img src="/images/platforms/dark/react.svg" alt="React logo" class="u-only-dark" width="32" height="32" />
xmlns="http://www.w3.org/2000/svg" <img src="/images/platforms/react.svg" alt="React logo" class="u-only-light" width="32" height="32" />
width="25" </a>
height="22"
viewBox="0 0 25 22"
fill="none"
>
<path
d="M0 0.333252L12.4444 21.6666L24.8889 0.333252H20L12.4444 13.2221L4.88889 0.333252H0Z"
fill="#D8D8DB"
/>
<path
d="M4.88867 0.333252L12.4442 13.2221L19.9998 0.333252H15.5553L12.5022 5.6778L9.33312 0.333252H4.88867Z"
fill="#C3C3C6"
/>
</svg>
</div>
</li> </li>
<li> <li>
<div class="aw-box-icon"> <a href="/docs/quick-starts/sveltekit" class="aw-box-icon">
<svg <img src="/images/platforms/dark/svelte.svg" alt="Svelte logo" class="u-only-dark" width="32" height="32" />
xmlns="http://www.w3.org/2000/svg" <img src="/images/platforms/svelte.svg" alt="Svelte logo" class="u-only-light" width="32" height="32" />
width="32" </a>
height="32"
viewBox="0 0 32 32"
fill="none"
>
<path
d="M15.1261 2.67392C15.0688 2.67914 14.8863 2.69738 14.7221 2.71041C10.9345 3.05184 7.38677 5.0952 5.13979 8.23583C3.88856 9.98207 3.0883 11.9629 2.78592 14.061C2.67905 14.7934 2.66602 15.0097 2.66602 16.0027C2.66602 16.9957 2.67905 17.212 2.78592 17.9444C3.51059 22.9512 7.07397 27.1578 11.9068 28.7164C12.7722 28.9952 13.6846 29.1855 14.7221 29.3002C15.1261 29.3445 16.8726 29.3445 17.2766 29.3002C19.0674 29.1021 20.5846 28.659 22.0808 27.8954C22.3102 27.7781 22.3545 27.7468 22.3232 27.7207C22.3024 27.7051 21.3249 26.3941 20.1518 24.8095L18.0196 21.9295L15.3477 17.9757C13.8775 15.802 12.668 14.0245 12.6575 14.0245C12.6471 14.0219 12.6367 15.7785 12.6315 17.9236C12.6237 21.6793 12.6211 21.8304 12.5741 21.9191C12.5064 22.0468 12.4542 22.0989 12.3447 22.1562C12.2613 22.1979 12.1883 22.2058 11.7947 22.2058H11.3438L11.2239 22.1302C11.1457 22.0807 11.0883 22.0155 11.0492 21.9399L10.9945 21.8226L10.9997 16.5969L11.0075 11.3686L11.0883 11.267C11.13 11.2123 11.2186 11.1419 11.2812 11.108C11.3881 11.0559 11.4298 11.0507 11.8807 11.0507C12.4125 11.0507 12.5011 11.0715 12.6393 11.2227C12.6784 11.2644 14.1251 13.4433 15.856 16.0679C17.5868 18.6924 19.9537 22.2761 21.1163 24.0354L23.2278 27.2334L23.3346 27.163C24.2809 26.5479 25.2819 25.6722 26.0743 24.76C27.7608 22.8235 28.8478 20.4621 29.2128 17.9444C29.3197 17.212 29.3327 16.9957 29.3327 16.0027C29.3327 15.0097 29.3197 14.7934 29.2128 14.061C28.4881 9.05422 24.9247 4.8476 20.0919 3.28902C19.2395 3.01275 18.3324 2.82248 17.3157 2.70781C17.0655 2.68174 15.3425 2.65307 15.1261 2.67392ZM20.5846 10.7379C20.7097 10.8005 20.8113 10.9204 20.8478 11.0455C20.8687 11.1132 20.8739 12.5623 20.8687 15.8281L20.8609 20.5142L20.0345 19.2476L19.2056 17.9809V14.5744C19.2056 12.3721 19.216 11.1341 19.2317 11.0741C19.2734 10.9282 19.3646 10.8135 19.4897 10.7457C19.5966 10.691 19.6357 10.6858 20.045 10.6858C20.4308 10.6858 20.4985 10.691 20.5846 10.7379Z"
fill="#D8D8DB"
/>
</svg>
</div>
</li> </li>
<li> <li>
<div class="aw-box-icon"> <a href="/docs/quick-starts/nuxt" class="aw-box-icon">
<svg <img src="/images/platforms/dark/nuxt.svg" alt="Nuxt logo" class="u-only-dark" width="32" height="32" />
xmlns="http://www.w3.org/2000/svg" <img src="/images/platforms/nuxt.svg" alt="Nuxt logo" class="u-only-light" width="32" height="32" />
width="23" </a>
height="25"
viewBox="0 0 23 25"
fill="none"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M0 4.35897L11.3333 0L22.6667 4.35897L20.9231 19.1795L11.3333 24.4103L1.74359 19.1795L0 4.35897ZM4.24886 18.6251L11.3337 2.69743L18.3942 18.6251H15.7526L14.3283 15.0612H8.31474L6.89046 18.6251H4.24886ZM11.3337 7.8724L9.26426 12.8643H13.4032L11.3337 7.8724Z"
fill="#D8D8DB"
/>
</svg>
</div>
</li> </li>
<li> <li>
<div class="aw-box-icon"> <a href="/docs/quick-starts/vue" class="aw-box-icon">
<svg <img src="/images/platforms/dark/vue.svg" alt="Vue logo" class="u-only-dark" width="32" height="32" />
xmlns="http://www.w3.org/2000/svg" <img src="/images/platforms/vue.svg" alt="Vue logo" class="u-only-light" width="32" height="32" />
width="32" </a>
height="32"
viewBox="0 0 32 32"
fill="none"
>
<path
d="M5.33398 16L9.20495 19.7895L25.334 4H17.592L5.33398 16ZM25.334 15.3684H17.592L11.1404 21.6842L17.592 28H25.334L18.8824 21.6842L25.334 15.3684Z"
fill="#D8D8DB"
/>
</svg>
</div>
</li> </li>
<li> <li>
<div class="aw-box-icon"> <a href="/docs/quick-starts/angular" class="aw-box-icon">
<svg <img src="/images/platforms/dark/angular.svg" alt="Angular logo" class="u-only-dark" width="32" height="32" />
xmlns="http://www.w3.org/2000/svg" <img src="/images/platforms/angular.svg" alt="Angular logo" class="u-only-light" width="32" height="32" />
width="32" </a>
height="32"
viewBox="0 0 32 32"
fill="none"
>
<path
d="M26.1916 23.4482C25.7847 24.3798 25.3029 25.2374 24.7448 26.0259C23.9841 27.1007 23.3612 27.8448 22.8811 28.2579C22.137 28.9361 21.3397 29.2834 20.4859 29.3031C19.873 29.3031 19.1338 29.1303 18.2734 28.7797C17.4101 28.4307 16.6168 28.2579 15.8914 28.2579C15.1307 28.2579 14.3148 28.4307 13.4421 28.7797C12.568 29.1303 11.8639 29.313 11.3256 29.3311C10.5068 29.3657 9.69075 29.0085 8.87617 28.2579C8.35627 27.8085 7.70597 27.0382 6.92693 25.9469C6.09109 24.7815 5.40392 23.4301 4.86557 21.8894C4.28902 20.2252 4 18.6138 4 17.0536C4 15.2665 4.38968 13.7252 5.17021 12.4335C5.78363 11.396 6.59971 10.5776 7.62109 9.97682C8.64246 9.37601 9.74607 9.06985 10.9345 9.05026C11.5848 9.05026 12.4376 9.2496 13.4974 9.64136C14.5541 10.0344 15.2327 10.2338 15.5302 10.2338C15.7526 10.2338 16.5064 10.0007 17.7842 9.53601C18.9926 9.10507 20.0125 8.92664 20.848 8.99693C23.112 9.17799 24.8129 10.0624 25.9441 11.6558C23.9193 12.8715 22.9177 14.5744 22.9376 16.7588C22.9559 18.4603 23.5788 19.8763 24.803 21.0005C25.3578 21.5223 25.9773 21.9256 26.6667 22.212C26.5172 22.6416 26.3594 23.0531 26.1916 23.4482ZM20.9992 3.20023C20.9992 4.53387 20.5075 5.77908 19.5275 6.93164C18.3448 8.30181 16.9143 9.09355 15.3631 8.96862C15.3433 8.80862 15.3318 8.64023 15.3318 8.46328C15.3318 7.18299 15.8943 5.81283 16.8931 4.69253C17.3917 4.12531 18.0259 3.65367 18.795 3.27743C19.5624 2.90681 20.2882 2.70185 20.9709 2.66675C20.9909 2.84503 20.9992 3.02333 20.9992 3.20022V3.20023Z"
fill="#D8D8DB"
/>
</svg>
</div>
</li> </li>
<li> <li>
<div class="aw-box-icon"> <a href="/docs/quick-starts/apple" class="aw-box-icon">
<svg <img src="/images/platforms/dark/apple.svg" alt="Apple logo" class="u-only-dark" width="32" height="32" />
xmlns="http://www.w3.org/2000/svg" <img src="/images/platforms/apple.svg" alt="Apple logo" class="u-only-light" width="32" height="32" />
width="26" </a>
height="15" </li>
viewBox="0 0 26 15" <li>
fill="none" <a href="/docs/quick-starts/android" class="aw-box-icon">
> <img src="/images/platforms/dark/android.svg" alt="Android logo" class="u-only-dark" width="32" height="32" />
<path <img src="/images/platforms/android.svg" alt="Android logo" class="u-only-light" width="32" height="32" />
d="M18.8469 4.61348L20.9484 0.97317C21.067 0.769093 20.9953 0.509856 20.7939 0.391269C20.5926 0.272685 20.3306 0.341628 20.2148 0.545706L18.0858 4.2329C16.4614 3.49105 14.633 3.07737 12.6667 3.07737C10.7003 3.07737 8.8719 3.49105 7.24754 4.2329L5.11851 0.545706C4.99992 0.341628 4.74068 0.272685 4.53661 0.391269C4.33253 0.509856 4.26358 0.769093 4.38217 0.97317L6.48362 4.61348C2.85985 6.57705 0.40539 10.2449 0 14.5388H25.3333C24.9279 10.2449 22.4734 6.57702 18.8469 4.61348ZM6.85042 10.9813C6.263 10.9813 5.78866 10.5042 5.78866 9.91952C5.78866 9.3321 6.26576 8.85776 6.85042 8.85776C7.43783 8.85776 7.91217 9.33486 7.91217 9.91952C7.91494 10.5042 7.43783 10.9813 6.85042 10.9813ZM18.4802 10.9813C17.8927 10.9813 17.4184 10.5042 17.4184 9.91952C17.4184 9.3321 17.8955 8.85776 18.4802 8.85776C19.0676 8.85776 19.5419 9.33486 19.5419 9.91952C19.5447 10.5042 19.0676 10.9813 18.4802 10.9813Z" </a>
fill="#D8D8DB"
/>
</svg>
</div>
</li> </li>
</ul> </ul>
<button class="aw-button is-secondary" style:align-self="start"> <button class="aw-button is-secondary" style:align-self="start">
@@ -242,8 +160,8 @@
> >
<div class="aw-grid-articles-item-image"> <div class="aw-grid-articles-item-image">
<img <img
class="aw-u-media-ratio-16-9" class="aw-articles-item-image"
src="https://pink.appwrite.io/articles/announcement.png" src="/images/tutorials/react.png"
alt="" alt=""
loading="lazy" loading="lazy"
/> />
@@ -269,8 +187,8 @@
> >
<div class="aw-grid-articles-item-image"> <div class="aw-grid-articles-item-image">
<img <img
class="aw-u-media-ratio-16-9" class="aw-articles-item-image"
src="https://unsplash.it/262/146" src="/images/tutorials/android.png"
alt="" alt=""
loading="lazy" loading="lazy"
/> />
@@ -296,8 +214,8 @@
> >
<div class="aw-grid-articles-item-image"> <div class="aw-grid-articles-item-image">
<img <img
class="aw-u-media-ratio-16-9" class="aw-articles-item-image"
src="https://unsplash.it/261/147" src="/images/tutorials/flutter.png"
alt="" alt=""
loading="lazy" loading="lazy"
/> />
@@ -323,8 +241,8 @@
> >
<div class="aw-grid-articles-item-image"> <div class="aw-grid-articles-item-image">
<img <img
class="aw-u-media-ratio-16-9" class="aw-articles-item-image"
src="https://unsplash.it/262/148" src="/images/tutorials/vue.png"
alt="" alt=""
loading="lazy" loading="lazy"
/> />
@@ -350,359 +268,8 @@
> >
<div class="aw-grid-articles-item-image"> <div class="aw-grid-articles-item-image">
<img <img
class="aw-u-media-ratio-16-9" class="aw-articles-item-image"
src="https://unsplash.it/262/147" src="/images/tutorials/svelte.png"
alt=""
loading="lazy"
/>
</div>
<article class="aw-grid-articles-item-content">
<header class="aw-articles-item-header">
<h3 class="aw-sub-body-500 aw-u-color-text-primary">React sign up template</h3>
</header>
<p
class="aw-articles-item-paragraph aw-sub-body-500 u-trim-2 u-margin-block-start-4"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</article>
</a>
</li>
<li>
<a
class="aw-grid-articles-item is-full-color"
href="https://medium.com/appwrite-io/announcing-pink-design-30652e2a2be3"
target="_blank"
rel="noopener noreferrer"
>
<div class="aw-grid-articles-item-image">
<img
class="aw-u-media-ratio-16-9"
src="https://unsplash.it/262/147"
alt=""
loading="lazy"
/>
</div>
<article class="aw-grid-articles-item-content">
<header class="aw-articles-item-header">
<h3 class="aw-sub-body-500 aw-u-color-text-primary">React sign up template</h3>
</header>
<p
class="aw-articles-item-paragraph aw-sub-body-500 u-trim-2 u-margin-block-start-4"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</article>
</a>
</li>
<li>
<a
class="aw-grid-articles-item is-full-color"
href="https://medium.com/appwrite-io/announcing-pink-design-30652e2a2be3"
target="_blank"
rel="noopener noreferrer"
>
<div class="aw-grid-articles-item-image">
<img
class="aw-u-media-ratio-16-9"
src="https://unsplash.it/262/147"
alt=""
loading="lazy"
/>
</div>
<article class="aw-grid-articles-item-content">
<header class="aw-articles-item-header">
<h3 class="aw-sub-body-500 aw-u-color-text-primary">React sign up template</h3>
</header>
<p
class="aw-articles-item-paragraph aw-sub-body-500 u-trim-2 u-margin-block-start-4"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</article>
</a>
</li>
<li>
<a
class="aw-grid-articles-item is-full-color"
href="https://medium.com/appwrite-io/announcing-pink-design-30652e2a2be3"
target="_blank"
rel="noopener noreferrer"
>
<div class="aw-grid-articles-item-image">
<img
class="aw-u-media-ratio-16-9"
src="https://unsplash.it/262/147"
alt=""
loading="lazy"
/>
</div>
<article class="aw-grid-articles-item-content">
<header class="aw-articles-item-header">
<h3 class="aw-sub-body-500 aw-u-color-text-primary">React sign up template</h3>
</header>
<p
class="aw-articles-item-paragraph aw-sub-body-500 u-trim-2 u-margin-block-start-4"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</article>
</a>
</li>
<li>
<a
class="aw-grid-articles-item is-full-color"
href="https://medium.com/appwrite-io/announcing-pink-design-30652e2a2be3"
target="_blank"
rel="noopener noreferrer"
>
<div class="aw-grid-articles-item-image">
<img
class="aw-u-media-ratio-16-9"
src="https://unsplash.it/262/147"
alt=""
loading="lazy"
/>
</div>
<article class="aw-grid-articles-item-content">
<header class="aw-articles-item-header">
<h3 class="aw-sub-body-500 aw-u-color-text-primary">React sign up template</h3>
</header>
<p
class="aw-articles-item-paragraph aw-sub-body-500 u-trim-2 u-margin-block-start-4"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</article>
</a>
</li>
<li>
<a
class="aw-grid-articles-item is-full-color"
href="https://medium.com/appwrite-io/announcing-pink-design-30652e2a2be3"
target="_blank"
rel="noopener noreferrer"
>
<div class="aw-grid-articles-item-image">
<img
class="aw-u-media-ratio-16-9"
src="https://unsplash.it/262/147"
alt=""
loading="lazy"
/>
</div>
<article class="aw-grid-articles-item-content">
<header class="aw-articles-item-header">
<h3 class="aw-sub-body-500 aw-u-color-text-primary">React sign up template</h3>
</header>
<p
class="aw-articles-item-paragraph aw-sub-body-500 u-trim-2 u-margin-block-start-4"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</article>
</a>
</li>
<li>
<a
class="aw-grid-articles-item is-full-color"
href="https://medium.com/appwrite-io/announcing-pink-design-30652e2a2be3"
target="_blank"
rel="noopener noreferrer"
>
<div class="aw-grid-articles-item-image">
<img
class="aw-u-media-ratio-16-9"
src="https://unsplash.it/262/147"
alt=""
loading="lazy"
/>
</div>
<article class="aw-grid-articles-item-content">
<header class="aw-articles-item-header">
<h3 class="aw-sub-body-500 aw-u-color-text-primary">React sign up template</h3>
</header>
<p
class="aw-articles-item-paragraph aw-sub-body-500 u-trim-2 u-margin-block-start-4"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</article>
</a>
</li>
<li>
<a
class="aw-grid-articles-item is-full-color"
href="https://medium.com/appwrite-io/announcing-pink-design-30652e2a2be3"
target="_blank"
rel="noopener noreferrer"
>
<div class="aw-grid-articles-item-image">
<img
class="aw-u-media-ratio-16-9"
src="https://unsplash.it/262/147"
alt=""
loading="lazy"
/>
</div>
<article class="aw-grid-articles-item-content">
<header class="aw-articles-item-header">
<h3 class="aw-sub-body-500 aw-u-color-text-primary">React sign up template</h3>
</header>
<p
class="aw-articles-item-paragraph aw-sub-body-500 u-trim-2 u-margin-block-start-4"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</article>
</a>
</li>
<li>
<a
class="aw-grid-articles-item is-full-color"
href="https://medium.com/appwrite-io/announcing-pink-design-30652e2a2be3"
target="_blank"
rel="noopener noreferrer"
>
<div class="aw-grid-articles-item-image">
<img
class="aw-u-media-ratio-16-9"
src="https://unsplash.it/262/147"
alt=""
loading="lazy"
/>
</div>
<article class="aw-grid-articles-item-content">
<header class="aw-articles-item-header">
<h3 class="aw-sub-body-500 aw-u-color-text-primary">React sign up template</h3>
</header>
<p
class="aw-articles-item-paragraph aw-sub-body-500 u-trim-2 u-margin-block-start-4"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</article>
</a>
</li>
<li>
<a
class="aw-grid-articles-item is-full-color"
href="https://medium.com/appwrite-io/announcing-pink-design-30652e2a2be3"
target="_blank"
rel="noopener noreferrer"
>
<div class="aw-grid-articles-item-image">
<img
class="aw-u-media-ratio-16-9"
src="https://unsplash.it/262/147"
alt=""
loading="lazy"
/>
</div>
<article class="aw-grid-articles-item-content">
<header class="aw-articles-item-header">
<h3 class="aw-sub-body-500 aw-u-color-text-primary">React sign up template</h3>
</header>
<p
class="aw-articles-item-paragraph aw-sub-body-500 u-trim-2 u-margin-block-start-4"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</article>
</a>
</li>
<li>
<a
class="aw-grid-articles-item is-full-color"
href="https://medium.com/appwrite-io/announcing-pink-design-30652e2a2be3"
target="_blank"
rel="noopener noreferrer"
>
<div class="aw-grid-articles-item-image">
<img
class="aw-u-media-ratio-16-9"
src="https://unsplash.it/262/147"
alt=""
loading="lazy"
/>
</div>
<article class="aw-grid-articles-item-content">
<header class="aw-articles-item-header">
<h3 class="aw-sub-body-500 aw-u-color-text-primary">React sign up template</h3>
</header>
<p
class="aw-articles-item-paragraph aw-sub-body-500 u-trim-2 u-margin-block-start-4"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</article>
</a>
</li>
<li>
<a
class="aw-grid-articles-item is-full-color"
href="https://medium.com/appwrite-io/announcing-pink-design-30652e2a2be3"
target="_blank"
rel="noopener noreferrer"
>
<div class="aw-grid-articles-item-image">
<img
class="aw-u-media-ratio-16-9"
src="https://unsplash.it/262/147"
alt=""
loading="lazy"
/>
</div>
<article class="aw-grid-articles-item-content">
<header class="aw-articles-item-header">
<h3 class="aw-sub-body-500 aw-u-color-text-primary">React sign up template</h3>
</header>
<p
class="aw-articles-item-paragraph aw-sub-body-500 u-trim-2 u-margin-block-start-4"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</article>
</a>
</li>
<li>
<a
class="aw-grid-articles-item is-full-color"
href="https://medium.com/appwrite-io/announcing-pink-design-30652e2a2be3"
target="_blank"
rel="noopener noreferrer"
>
<div class="aw-grid-articles-item-image">
<img
class="aw-u-media-ratio-16-9"
src="https://unsplash.it/262/147"
alt=""
loading="lazy"
/>
</div>
<article class="aw-grid-articles-item-content">
<header class="aw-articles-item-header">
<h3 class="aw-sub-body-500 aw-u-color-text-primary">React sign up template</h3>
</header>
<p
class="aw-articles-item-paragraph aw-sub-body-500 u-trim-2 u-margin-block-start-4"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</article>
</a>
</li>
<li>
<a
class="aw-grid-articles-item is-full-color"
href="https://medium.com/appwrite-io/announcing-pink-design-30652e2a2be3"
target="_blank"
rel="noopener noreferrer"
>
<div class="aw-grid-articles-item-image">
<img
class="aw-u-media-ratio-16-9"
src="https://unsplash.it/262/147"
alt="" alt=""
loading="lazy" loading="lazy"
/> />
@@ -732,7 +299,8 @@
<ul class="aw-grid-row-4 aw-grid-row-4-m-1"> <ul class="aw-grid-row-4 aw-grid-row-4-m-1">
<li> <li>
<div class="aw-card is-full-color"> <div class="aw-card is-full-color">
<img src="/images/icons/illustrated/dark/auth.png" alt="" /> <img src="/images/icons/illustrated/dark/auth.png" alt="" class="u-only-dark" width="48" height="48" />
<img src="/images/icons/illustrated/light/auth.png" alt="" class="u-only-light" width="48" height="48" />
<h4 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-8">Auth</h4> <h4 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-8">Auth</h4>
<p class="aw-sub-body-400 u-margin-block-start-4"> <p class="aw-sub-body-400 u-margin-block-start-4">
Sign in users with multiple OAuth providers. Sign in users with multiple OAuth providers.
@@ -741,7 +309,8 @@
</li> </li>
<li> <li>
<div class="aw-card is-full-color"> <div class="aw-card is-full-color">
<img src="/images/icons/illustrated/dark/databases.png" alt="" /> <img src="/images/icons/illustrated/dark/databases.png" alt="" class="u-only-dark" width="48" height="48" />
<img src="/images/icons/illustrated/light/databases.png" alt="" class="u-only-light" width="48" height="48" />
<h4 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-8"> <h4 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-8">
Databases Databases
</h4> </h4>
@@ -752,7 +321,8 @@
</li> </li>
<li> <li>
<div class="aw-card is-full-color"> <div class="aw-card is-full-color">
<img src="/images/icons/illustrated/dark/functions.png" alt="" /> <img src="/images/icons/illustrated/dark/functions.png" alt="" class="u-only-dark" width="48" height="48" />
<img src="/images/icons/illustrated/light/functions.png" alt="" class="u-only-light" width="48" height="48" />
<h4 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-8"> <h4 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-8">
Functions Functions
</h4> </h4>
@@ -763,7 +333,8 @@
</li> </li>
<li> <li>
<div class="aw-card is-full-color"> <div class="aw-card is-full-color">
<img src="/images/icons/illustrated/dark/storage.png" alt="" /> <img src="/images/icons/illustrated/dark/storage.png" alt="" class="u-only-dark" width="48" height="48" />
<img src="/images/icons/illustrated/light/storage.png" alt="" class="u-only-light" width="48" height="48" />
<h4 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-8"> <h4 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-8">
Storage Storage
</h4> </h4>
@@ -774,7 +345,8 @@
</li> </li>
<li> <li>
<div class="aw-card is-full-color"> <div class="aw-card is-full-color">
<img src="/images/icons/illustrated/dark/realtime.png" alt="" /> <img src="/images/icons/illustrated/dark/realtime.png" alt="" class="u-only-dark" width="48" height="48" />
<img src="/images/icons/illustrated/light/realtime.png" alt="" class="u-only-light" width="48" height="48" />
<h4 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-8"> <h4 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-8">
Realtime Realtime
</h4> </h4>
@@ -785,11 +357,12 @@
</li> </li>
<li> <li>
<div class="aw-card is-full-color u-opacity-20"> <div class="aw-card is-full-color u-opacity-20">
<img src="/images/icons/illustrated/dark/messaging.png" alt="" width="48" height="48" />
<h4 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-8"> <h4 class="aw-sub-body-500 aw-u-color-text-primary u-margin-block-start-8">
Messaging Messaging
</h4> </h4>
<p class="aw-sub-body-400 u-margin-block-start-4"> <p class="aw-sub-body-400 u-margin-block-start-4">
Sign in users with multiple OAuth providers. Send email, SMS, push notification and chat messages to your users.
</p> </p>
</div> </div>
</li> </li>

View File

@@ -72,7 +72,7 @@
{ {
label: 'GraphQL', label: 'GraphQL',
href: '/docs/apis/graphql', href: '/docs/apis/graphql',
icon: 'icon-play' icon: 'icon-graphql'
} }
] ]
}, },

View File

@@ -4,7 +4,7 @@ title: Platform
description: Description for SEO. description: Description for SEO.
--- ---
Appwrite is a development platform designed to adapt you unique use cases. Appwrite is a development platform designed to adapt your unique use cases.
Appwrite provides features that help you maintain, scale, and integrate Appwrite with other platforms. Appwrite provides features that help you maintain, scale, and integrate Appwrite with other platforms.
## API keys {% #api-keys %} ## API keys {% #api-keys %}

View File

@@ -6,7 +6,7 @@ description: Placeholder SEO.
Appwrite provides a variety of events that allows your application to react to changes as they happen. Appwrite provides a variety of events that allows your application to react to changes as they happen.
A event will fire when a change occurs in your Appwrite project, like when a new user registers or a new file is uploaded to Appwrite. A event will fire when a change occurs in your Appwrite project, like when a new user registers or a new file is uploaded to Appwrite.
You can subscribe to these events to with Appwrite [Functions](/docs/products/functions), [Realtime](/docs/products/apis), or [Webhooks](/docs/advanced/platform/webhooks). You can subscribe to these events to with Appwrite [Functions](/docs/products/functions), [Realtime](/docs/apis/realtime), or [Webhooks](/docs/advanced/platform/webhooks).
You can subscribe to events for specific resources using their ID or subscribe to changes of all resources of the same type by using a wildcard character * instead of an ID. You can subscribe to events for specific resources using their ID or subscribe to changes of all resources of the same type by using a wildcard character * instead of an ID.
You can also filter for events of specific actions like create, update, or delete. You can also filter for events of specific actions like create, update, or delete.

View File

@@ -55,13 +55,13 @@ In Client and Server SDKs, you will find a **Role** class with helper methods fo
| `Role.team([TEAM_ID])` | Grants access to any member of the specific team. To gain access to this permission, the user must be the team creator (owner), or receive and accept an invitation to join this team. | | `Role.team([TEAM_ID])` | Grants access to any member of the specific team. To gain access to this permission, the user must be the team creator (owner), or receive and accept an invitation to join this team. |
| `Role.team([TEAM_ID], [ROLE])` | Grants access to any member who possesses a specific role in a team. To gain access to this permission, the user must be a member of the specific team and have the given role assigned to them. Team roles can be assigned when inviting a user to become a team member. | | `Role.team([TEAM_ID], [ROLE])` | Grants access to any member who possesses a specific role in a team. To gain access to this permission, the user must be a member of the specific team and have the given role assigned to them. Team roles can be assigned when inviting a user to become a team member. |
| `Role.member([MEMBERSHIP_ID])` | Grants access to a specific member of a team. When the member is removed from the team, they will no longer have access. | | `Role.member([MEMBERSHIP_ID])` | Grants access to a specific member of a team. When the member is removed from the team, they will no longer have access. |
| `Role.label([LABEL_ID])` | Grants access to all accounts with a specific label ID. Once the label is removed from the user, they will no longer have access. [Learn more about labels](/docs/products/auth/user-management#labels). | | `Role.label([LABEL_ID])` | Grants access to all accounts with a specific label ID. Once the label is removed from the user, they will no longer have access. [Learn more about labels](/docs/products/auth/labels). |
## Examples ## Examples
The examples below will show you how you can use the different Appwrite permissions to manage access control to your project resources. The examples below will show you how you can use the different Appwrite permissions to manage access control to your project resources.
The following examples are using the [Appwrite Web SDK](https://github.com/appwrite/sdk-for-js) but can be applied similarly to any of the other [Appwrite SDKs](/docs/sdks). The following examples are using the [Appwrite Web SDK](https://github.com/appwrite/sdk-for-web) but can be applied similarly to any of the other [Appwrite SDKs](/docs/sdks).
### Example #1 - Basic usage ### Example #1 - Basic usage

View File

@@ -12,7 +12,7 @@ You can set your webhook by adding it from your Appwrite project dashboard. You
## Payload {% #payload %} ## Payload {% #payload %}
Each event type has a specific payload format with the relevant event information. All event payloads mirror the payloads for the API payload which parallel to the [event types](/docs/events). Each event type has a specific payload format with the relevant event information. All event payloads mirror the payloads for the API payload which parallel to the [event types](/docs/advanced/platform/events).
## Headers {% #headers %} ## Headers {% #headers %}
@@ -22,7 +22,7 @@ HTTP requests made to your webhook's configured URL endpoint will contain severa
|--------|-------------| |--------|-------------|
| X-Appwrite-Webhook-Id | The ID of the Webhook who triggered the event. | | X-Appwrite-Webhook-Id | The ID of the Webhook who triggered the event. |
| X-Appwrite-Webhook-Events | Names of the events that triggered this delivery. | | X-Appwrite-Webhook-Events | Names of the events that triggered this delivery. |
| X-Appwrite-Webhook-Name | Name of the webhook as specified in your app settings and [events list](/docs/events). | | X-Appwrite-Webhook-Name | Name of the webhook as specified in your app settings and [events list](/docs/advanced/platform/events). |
| X-Appwrite-Webhook-User-Id | The user ID of the user who triggered the event. Returns an empty string if an API key triggered the event. Note that events like `account.create` or `account.sessions.create` are performed by guest users and will not return any user ID. If you still need the user ID for these events, you can find it in the event payload. | | X-Appwrite-Webhook-User-Id | The user ID of the user who triggered the event. Returns an empty string if an API key triggered the event. Note that events like `account.create` or `account.sessions.create` are performed by guest users and will not return any user ID. If you still need the user ID for these events, you can find it in the event payload. |
| X-Appwrite-Webhook-Project-Id | The ID of the project who owns the Webhook and API call. | | X-Appwrite-Webhook-Project-Id | The ID of the project who owns the Webhook and API call. |
| X-Appwrite-Webhook-Signature | The HMAC-SHA1 signature of the payload. This is used to verify the authenticity of the payload. | | X-Appwrite-Webhook-Signature | The HMAC-SHA1 signature of the payload. This is used to verify the authenticity of the payload. |
@@ -30,7 +30,7 @@ HTTP requests made to your webhook's configured URL endpoint will contain severa
## Verification {% #verification %} ## Verification {% #verification %}
Webhooks can be verified by using the [X-Appwrite-Webhook-Signature](/docs/webhooks#headers) header. Webhooks can be verified by using the [X-Appwrite-Webhook-Signature](/docs/advanced/platform/webhooks#headers) header.
This is the HMAC-SHA1 signature of the payload. You can find the signature key in your webhooks properties in the dashboard. This is the HMAC-SHA1 signature of the payload. You can find the signature key in your webhooks properties in the dashboard.
To generate this hash you append the payload to the end of webhook URL (make sure there are no spaces in between) and then use the HMAC-SHA1 algorithm to generate the signature. To generate this hash you append the payload to the end of webhook URL (make sure there are no spaces in between) and then use the HMAC-SHA1 algorithm to generate the signature.
After you've generated the signature, compare it to the `X-Appwrite-Webhook-Signature` header value. After you've generated the signature, compare it to the `X-Appwrite-Webhook-Signature` header value.
@@ -51,4 +51,4 @@ You can specify one or many events to subscribe to with webhooks.
{% partial file="functions-events.md" /%} {% partial file="functions-events.md" /%}
[Learn more about events](/docs/platform/api-keys) [Learn more about events](/docs/advanced/platform/api-keys)

View File

@@ -4,7 +4,7 @@ title: GraphQL
description: Description used for SEO description: Description used for SEO
--- ---
Appwrite supports multiple protocols for accessing the server, including [REST](/docs/rest), [GraphQL](/docs/graphql), and [Realtime](/docs/realtime). Appwrite supports multiple protocols for accessing the server, including [REST](/docs/apis/rest), [GraphQL](/docs/apis/graphql), and [Realtime](/docs/apis/realtime).
The GraphQL API allows you to query and mutate any resource type on your Appwrite server through the endpoint `/v1/graphql`. The GraphQL API allows you to query and mutate any resource type on your Appwrite server through the endpoint `/v1/graphql`.
Every endpoint available through REST is available through GraphQL, except for OAuth. Every endpoint available through REST is available through GraphQL, except for OAuth.
@@ -109,7 +109,7 @@ GraphQL authenticates using Appwrite accounts and sessions.
Both accounts and sessions can be created with GraphQL using the `accountCreate`, `accountCreateEmailSession`, Both accounts and sessions can be created with GraphQL using the `accountCreate`, `accountCreateEmailSession`,
`accountCreateAnonymousSession`, or `accountCreatePhoneSession` mutations. `accountCreateAnonymousSession`, or `accountCreatePhoneSession` mutations.
More information and examples of authenticating users can be found in the dedicated [authentication guide](/docs/authentication). More information and examples of authenticating users can be found in the dedicated [authentication guide](/docs/products/auth).
## GraphQL vs REST {% #graphql-vs-rest %} ## GraphQL vs REST {% #graphql-vs-rest %}

View File

@@ -2,6 +2,7 @@
layout: article layout: article
title: Authentication title: Authentication
description: This is the description used for SEO. description: This is the description used for SEO.
back: /docs
--- ---
Appwrite Authentication delivers more than just user sign up and log in. Appwrite Authentication delivers more than just user sign up and log in.

View File

@@ -1,6 +1,6 @@
--- ---
layout: article layout: article
title: Anonymous title: Anonymous login
description: This is the description used for SEO. description: This is the description used for SEO.
--- ---

View File

@@ -1,6 +1,6 @@
--- ---
layout: article layout: article
title: Email and Password title: Email and password login
description: This is the description used for SEO. description: This is the description used for SEO.
--- ---

View File

@@ -1,6 +1,6 @@
--- ---
layout: article layout: article
title: Magic URL title: Magic URL login
description: This is the description used for SEO. description: This is the description used for SEO.
--- ---

View File

@@ -1,6 +1,6 @@
--- ---
layout: article layout: article
title: OAuth 2 title: OAuth 2 login
description: This is the description used for SEO. description: This is the description used for SEO.
--- ---
@@ -221,7 +221,7 @@ print(session.providerAccessToken);
{% /multicode %} {% /multicode %}
An OAuth 2 [session](https://appwrite.io/docs/models/session) will have the following attributes. An OAuth 2 [session](/docs/references/cloud/models/session) will have the following attributes.
| Property | Description | | Property | Description |
| -------------------------- | --------------------------------------------------------------------------------------------------------- | | -------------------------- | --------------------------------------------------------------------------------------------------------- |

View File

@@ -1,6 +1,6 @@
--- ---
layout: article layout: article
title: Phone and SMS title: Phone and SMS login
description: This is the description used for SEO. description: This is the description used for SEO.
--- ---

View File

@@ -16,6 +16,6 @@ Each function will have its own URL, execute in its own isolated container, and
Appwrite Functions let you build anything you can imagine, but this flexibility makes it difficult to know where to start. Appwrite Functions let you build anything you can imagine, but this flexibility makes it difficult to know where to start.
Start exploring by cloning one of the quick start templates or using a template with pre-built integration to quickly implement features. Start exploring by cloning one of the quick start templates or using a template with pre-built integration to quickly implement features.
[Quick start {% icon icon="cheveron-right" /%}](/docs/products/function/quick-start) [Quick start {% icon icon="cheveron-right" /%}](/docs/products/functions/quick-start)
![](https://appwrite.io/images-ee/docs/functions-starter-dark.png) ![](https://appwrite.io/images-ee/docs/functions-starter-dark.png)

View File

@@ -10,7 +10,7 @@ Appwrite Functions supports an extensive list of runtimes to meet your unique te
Below is a list of available Functions runtimes. The Appwrite team continually adds support for new runtimes. Below is a list of available Functions runtimes. The Appwrite team continually adds support for new runtimes.
{% table %} {% table %}
* &nbsp; {% width=80 %} * &nbsp; {% width=48 %}
* Name {% width=120 %} * Name {% width=120 %}
* Versions * Versions
* Architectures * Architectures

View File

@@ -491,7 +491,221 @@ class MainActivity : AppCompatActivity() {
``` ```
{% /multicode %} {% /multicode %}
## View file {% #view-file%} ## Get File {% #get-file %}
To get a file, use the `getFile` method.
{% multicode %}
```js
import { Client, Storage } from "appwrite";
const client = new Client();
const storage = new Storage(client);
client
.setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
const promise = storage.getFile('[BUCKET_ID]', '[FILE_ID]');
promise.then(function (response) {
console.log(response); // Success
}, function (error) {
console.log(error); // Failure
});
```
```dart
import 'package:appwrite/appwrite.dart';
void main() { // Init SDK
Client client = Client();
Storage storage = Storage(client);
client
.setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
// downloading file
Future result = storage.getFile(
bucketId: '[BUCKET_ID]',
fileId: '[FILE_ID]',
).then((bytes) {
final file = File('path_to_file/filename.ext');
file.writeAsBytesSync(bytes)
}).catchError((error) {
print(error.response);
})
}
//displaying image preview
FutureBuilder(
future: storage.getFile(
bucketId: '[BUCKET_ID]',
fileId: '[FILE_ID]',
), //works for both public file and private file, for private files you need to be logged in
builder: (context, snapshot) {
return snapshot.hasData && snapshot.data != null
? Image.memory(
snapshot.data,
)
: CircularProgressIndicator();
},
);
```
```swift
import Appwrite
func main() async throws {
let client = Client()
.setEndpoint("https://cloud.appwrite.io/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
let storage = Storage(client)
let byteBuffer = try await storage.getFile(
bucketId: "[BUCKET_ID]",
fileId: "[FILE_ID]"
)
print(String(describing: byteBuffer)
}
```
```kotlin
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import io.appwrite.Client
import io.appwrite.services.Storage
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val client = Client(applicationContext)
.setEndpoint("https://cloud.appwrite.io/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
val storage = Storage(client)
GlobalScope.launch {
val result = storage.getFile(
bucketId = "[BUCKET_ID]",
fileId = "[FILE_ID]"
)
println(result); // Resource URL
}
}
}
```
{% /multicode %}
## Get File Preview {% #get-file-preview %}
To get a file preview image , use the `getFilePreview` method.
{% multicode %}
```js
import { Client, Storage } from "appwrite";
const client = new Client();
const storage = new Storage(client);
client
.setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
const result = storage.getFilePreview('[BUCKET_ID]', '[FILE_ID]');
console.log(result); // Resource URL
```
```dart
import 'package:appwrite/appwrite.dart';
void main() { // Init SDK
Client client = Client();
Storage storage = Storage(client);
client
.setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
// downloading file
Future result = storage.getFilePreview(
bucketId: '[BUCKET_ID]',
fileId: '[FILE_ID]',
).then((bytes) {
final file = File('path_to_file/filename.ext');
file.writeAsBytesSync(bytes)
}).catchError((error) {
print(error.response);
})
}
//displaying image preview
FutureBuilder(
future: storage.getFilePreview(
bucketId: '[BUCKET_ID]',
fileId: '[FILE_ID]',
), //works for both public file and private file, for private files you need to be logged in
builder: (context, snapshot) {
return snapshot.hasData && snapshot.data != null
? Image.memory(
snapshot.data,
)
: CircularProgressIndicator();
},
);
```
```swift
import Appwrite
func main() async throws {
let client = Client()
.setEndpoint("https://cloud.appwrite.io/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
let storage = Storage(client)
let byteBuffer = try await storage.getFilePreview(
bucketId: "[BUCKET_ID]",
fileId: "[FILE_ID]"
)
print(String(describing: byteBuffer)
}
```
```kotlin
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import io.appwrite.Client
import io.appwrite.services.Storage
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val client = Client(applicationContext)
.setEndpoint("https://cloud.appwrite.io/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
val storage = Storage(client)
GlobalScope.launch {
val result = storage.getFilePreview(
bucketId = "[BUCKET_ID]",
fileId = "[FILE_ID]"
)
println(result); // Resource URL
}
}
}
```
{% /multicode %}
## View File {% #view-file%}
To view a file, use the `getFileView` method. To view a file, use the `getFileView` method.
@@ -595,110 +809,4 @@ class MainActivity : AppCompatActivity() {
} }
} }
``` ```
{% /multicode %}
## Get file preview {% #get-file-preview %}
To get a file preview image , use the `getFilePreview` method.
You can learn more about the **image manupulation options** in [this guide](/docs/products/storage/images).
{% multicode %}
```js
import { Client, Storage } from "appwrite";
const client = new Client();
const storage = new Storage(client);
client
.setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
const result = storage.getFilePreview('[BUCKET_ID]', '[FILE_ID]');
console.log(result); // Resource URL
```
```dart
import 'package:appwrite/appwrite.dart';
void main() { // Init SDK
Client client = Client();
Storage storage = Storage(client);
client
.setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
// downloading file
Future result = storage.getFilePreview(
bucketId: '[BUCKET_ID]',
fileId: '[FILE_ID]',
).then((bytes) {
final file = File('path_to_file/filename.ext');
file.writeAsBytesSync(bytes)
}).catchError((error) {
print(error.response);
})
}
//displaying image preview
FutureBuilder(
future: storage.getFilePreview(
bucketId: '[BUCKET_ID]',
fileId: '[FILE_ID]',
), //works for both public file and private file, for private files you need to be logged in
builder: (context, snapshot) {
return snapshot.hasData && snapshot.data != null
? Image.memory(
snapshot.data,
)
: CircularProgressIndicator();
},
);
```
```swift
import Appwrite
func main() async throws {
let client = Client()
.setEndpoint("https://cloud.appwrite.io/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
let storage = Storage(client)
let byteBuffer = try await storage.getFilePreview(
bucketId: "[BUCKET_ID]",
fileId: "[FILE_ID]"
)
print(String(describing: byteBuffer)
}
```
```kotlin
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import io.appwrite.Client
import io.appwrite.services.Storage
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val client = Client(applicationContext)
.setEndpoint("https://cloud.appwrite.io/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
val storage = Storage(client)
GlobalScope.launch {
val result = storage.getFilePreview(
bucketId = "[BUCKET_ID]",
fileId = "[FILE_ID]"
)
println(result); // Resource URL
}
}
}
```
{% /multicode %} {% /multicode %}

View File

@@ -1,9 +1,10 @@
<script lang="ts"> <script lang="ts">
import { page } from '$app/stores';
import Docs from '$lib/layouts/Docs.svelte'; import Docs from '$lib/layouts/Docs.svelte';
import Sidebar from '../Sidebar.svelte'; import Sidebar from '../Sidebar.svelte';
</script> </script>
<Docs variant="two-side-navs"> <Docs variant={$page.url.pathname.endsWith('/quick-starts') ? 'default' : 'two-side-navs'}>
<Sidebar /> <Sidebar />
<slot /> <slot />
</Docs> </Docs>

View File

@@ -1,23 +1,121 @@
<script> <script lang="ts">
let qs = [ import { MainFooter } from '$lib/components';
'android',
'angular', type QuickStart = {
'apple', title: string;
'astro', icon: string;
'flutter', image: string;
'nextjs', href: string;
'nuxt', };
'qwik',
'react', type QuickStarts = Array<{
'sveltekit', title: string;
'vuejs' quickStarts: QuickStart[];
}>;
const quickStarts: QuickStarts = [
{
title: 'Web App',
quickStarts: [
{
title: 'Next.js',
icon: 'icon-next_js',
image: '/images/blog/placeholder.png',
href: 'nextjs'
},
{
title: 'Vue.js',
icon: 'icon-vue_js',
image: '/images/blog/placeholder.png',
href: 'vue'
},
{
title: 'SvelteKit',
icon: 'icon-svelte',
image: '/images/blog/placeholder.png',
href: 'sveltekit'
},
{
title: 'Nuxt',
icon: 'icon-nuxt_js',
image: '/images/blog/placeholder.png',
href: 'nuxt'
},
{
title: 'Angular',
icon: 'icon-angular',
image: '/images/blog/placeholder.png',
href: 'angular'
},
{
title: 'Astro',
icon: 'icon-astro',
image: '/images/blog/placeholder.png',
href: 'astro'
}
]
},
{
title: 'Mobile and Native',
quickStarts: [
{
title: 'Flutter',
icon: 'icon-flutter',
image: '/images/blog/placeholder.png',
href: 'flutter'
},
{
title: 'Android',
icon: 'icon-android',
image: '/images/blog/placeholder.png',
href: 'android'
},
]
},
{
title: 'Server',
quickStarts: []
}
]; ];
</script> </script>
<ul class="aw-list"> <main class="aw-main-section">
{#each qs as q} <article class="aw-article">
<li> <header class="aw-article-header">
<a class="aw-link" href={`/docs/quick-starts/${q}`}>{q}</a> <div class="aw-article-header-start u-flex-vertical aw-u-cross-start">
</li> <div class="u-position-relative u-flex u-cross-center">
{/each} <h1 class="aw-title">Quick start</h1>
</ul> </div>
</div>
<div class="aw-article-header-end" />
</header>
<div class="aw-article-content aw-u-gap-80">
{#each quickStarts as category}
<section class="u-flex-vertical u-gap-24">
<h2 class="aw-eyebrow">{category.title}</h2>
<ul class="aw-grid-row-4 aw-grid-row-4-mobile-2">
{#each category.quickStarts as quickStart}
<li class="is-mobile-col-span-2">
<a href={`/docs/quick-starts/${quickStart.href}`}>
<img class="aw-media" src={quickStart.image} alt="" />
<div class="u-flex u-cross-baseline u-gap-4">
<span class="{quickStart.icon} aw-u-font-size-24" aria-hidden="true" />
<h4 class="aw-sub-body-500 aw-u-color-text-primary">{quickStart.title}</h4>
</div>
</a>
</li>
{/each}
</ul>
</section>
{/each}
</div>
</article>
<MainFooter variant="docs" />
</main>
<style lang="scss">
.aw-media {
aspect-ratio: 16/9;
}
</style>

View File

@@ -0,0 +1,202 @@
---
layout: article
title: Start with Dart
description: This is the description used for SEO.
---
Learn to setup your first Dart project powered by Appwrite.
{% section #step-1 step=1 title="Create project" %}
Head to the [Appwrite Console](https://cloud.appwrite.io/console).
![Create project screen](/images/docs/databases/quick-start/create-project.png)
If this is your first time using Appwrite, create an account and create your first project.
Then, under **Integrate with your server**, add an **API Key** with the following scopes.
| Category {% width=120 %} | Required scopes | Purpose |
|-----------|-----------------------|---------|
| Database | `databases.write` | Allows API key to create, update, and delete [databases](/docs/products/databases/databases). |
| | `collections.write` | Allows API key to create, update, and delete [collections](/docs/products/databases/collections). |
| | `attributes.write` | Allows API key to create, update, and delete [attributes](/docs/products/databases/collections#attributes). |
| | `documents.read` | Allows API key to create, update, and delete [documents](/docs/products/databases/documents). |
| | `documents.write` | Allows API key to read [documents](/docs/products/databases/documents). |
Other scopes are optional.
![Add API Key]()
{% /section %}
{% section #step-2 step=2 title="Create Dart project" %}
Create a Dart CLI application.
```sh
dart create -t console my_app
cd my_app
```
After entering the project directory, remove the `lib/` and `test/` directories.
{% /section %}
{% section #step-3 step=3 title="Install Appwrite" %}
Install the Dart Appwrite SDK.
```sh
dart pub add dart_appwrite
```
{% /section %}
{% section #step-4 step=4 title="Import Appwrite" %}
Find your project ID in the **Settings** page. Also, click on the **View API Keys** button to find the API key that was created earlier.
![Settings page in Appwrite Console.](/images/docs/databases/quick-start/project-id.png)
Open `bin/my_app.dart` and initialize the Appwrite Client. Replace `<YOUR_PROJECT_ID>` with your project ID and `<YOUR_API_KEY>` with your API key.
```dart
import 'package:dart_appwrite/dart_appwrite.dart';
var client = Client();
Future<void> main() async {
client
.setEndpoint("https://cloud.appwrite.io/v1")
.setProject("<YOUR_PROJECT_ID>")
.setKey("<YOUR_API_KEY>");
}
```
{% /section %}
{% section #step-5 step=5 title="Initialize database" %}
Once the Appwrite Client is initialized, create a function to configure a todo collection.
```dart
var databases;
var todoDatabase;
var todoCollection;
Future<void> prepareDatabase() async {
databases = Databases(client);
todoDatabase = await databases.create(
databaseId: ID.unique(),
name: 'TodosDB'
);
todoCollection = await databases.createCollection(
databaseId: todoDatabase.$id,
collectionId: ID.unique(),
name: 'Todos'
);
await databases.createStringAttribute(
databaseId: todoDatabase.$id,
collectionId: todoCollection.$id,
key: 'title',
size: 255,
xrequired: true
);
await databases.createStringAttribute(
databaseId: todoDatabase.$id,
collectionId: todoCollection.$id,
key: 'description',
size: 255,
xrequired: false,
xdefault: 'This is a test description'
);
await databases.createBooleanAttribute(
databaseId: todoDatabase.$id,
collectionId: todoCollection.$id,
key: 'isComplete',
xrequired: true
);
}
```
{% /section %}
{% section #step-6 step=6 title="Add documents" %}
Create a function to add some mock data into your new collection.
```dart
Future<void> seedDatabase() async {
var testTodo1 = {
'title': 'Buy apples',
'description': 'At least 2KGs',
'isComplete': true
};
var testTodo2 = {
'title': 'Wash the apples',
'isComplete': true
};
var testTodo3 = {
'title': 'Cut the apples',
'description': 'Don\'t forget to pack them in a box',
'isComplete': false
};
await databases.createDocument(
databaseId: todoDatabase.$id,
collectionId: todoCollection.$id,
documentId: ID.unique(),
data: testTodo1
);
await databases.createDocument(
databaseId: todoDatabase.$id,
collectionId: todoCollection.$id,
documentId: ID.unique(),
data: testTodo2
);
await databases.createDocument(
databaseId: todoDatabase.$id,
collectionId: todoCollection.$id,
documentId: ID.unique(),
data: testTodo3
);
}
```
{% /section %}
{% section #step-7 step=7 title="Retrieve documents" %}
Create a function to retrieve the mock todo data.
```dart
Future<void> getTodos() async {
var todos = await databases.listDocuments(
databaseId: todoDatabase.$id,
collectionId: todoCollection.$id
);
todos.documents.forEach((todo) {
print('Title: ${todo.data['title']}\nDescription: ${todo.data['description']}\nIs Todo Complete: ${todo.data['isComplete']}\n\n');
});
}
```
Finally, revisit the `main()` function and call the functions created in previous steps.
```dart
Future<void> main() async {
client
.setEndpoint("https://cloud.appwrite.io/v1")
.setProject("<YOUR_PROJECT_ID>")
.setKey("<YOUR_API_KEY>");
await prepareDatabase();
await Future.delayed(const Duration(seconds: 1));
await seedDatabase();
await getTodos();
}
```
{% /section %}
{% section #step-8 step=8 title="All set" %}
Run your project with `dart run bin/my_app.dart` and view the response in your console.
{% /section %}

View File

@@ -0,0 +1,191 @@
---
layout: article
title: Start with Node.js
description: This is the description used for SEO.
---
Learn to setup your first Node.js project powered by Appwrite.
{% section #step-1 step=1 title="Create project" %}
Head to the [Appwrite Console](https://cloud.appwrite.io/console).
![Create project screen](/images/docs/databases/quick-start/create-project.png)
If this is your first time using Appwrite, create an account and create your first project.
Then, under **Integrate with your server**, add an **API Key** with the following scopes.
| Category {% width=120 %} | Required scopes | Purpose |
|-----------|-----------------------|---------|
| Database | `databases.write` | Allows API key to create, update, and delete [databases](/docs/products/databases/databases). |
| | `collections.write` | Allows API key to create, update, and delete [collections](/docs/products/databases/collections). |
| | `attributes.write` | Allows API key to create, update, and delete [attributes](/docs/products/databases/collections#attributes). |
| | `documents.read` | Allows API key to create, update, and delete [documents](/docs/products/databases/documents). |
| | `documents.write` | Allows API key to read [documents](/docs/products/databases/documents). |
Other scopes are optional.
![Add API Key]()
{% /section %}
{% section #step-2 step=2 title="Create Node.js project" %}
Create a Node.js CLI application.
```sh
mkdir my-app
cd my-app
npm init
```
{% /section %}
{% section #step-3 step=3 title="Install Appwrite" %}
Install the Node.js Appwrite SDK.
```sh
npm install node-appwrite
```
{% /section %}
{% section #step-4 step=4 title="Import Appwrite" %}
Find your project ID in the **Settings** page. Also, click on the **View API Keys** button to find the API key that was created earlier.
![Settings page in Appwrite Console.](/images/docs/databases/quick-start/project-id.png)
Create a new file `app.js` and initialize the Appwrite Client. Replace `<YOUR_PROJECT_ID>` with your project ID and `<YOUR_API_KEY>` with your API key.
```js
const sdk = require("node-appwrite");
const client = new sdk.Client();
client
.setEndpoint("https://cloud.appwrite.io/v1")
.setProject("<YOUR_PROJECT_ID>")
.setKey("<YOUR_API_KEY>");
```
{% /section %}
{% section #step-5 step=5 title="Initialize database" %}
Once the Appwrite Client is initialized, create a function to configure a todo collection.
```js
const databases = new sdk.Databases(client);
var todoDatabase;
var todoCollection;
async function prepareDatabase() {
todoDatabase = await databases.create(
sdk.ID.unique(),
'TodosDB'
);
todoCollection = await databases.createCollection(
todoDatabase.$id,
sdk.ID.unique(),
'Todos'
);
await databases.createStringAttribute(
todoDatabase.$id,
todoCollection.$id,
'title',
255,
true
);
await databases.createStringAttribute(
todoDatabase.$id,
todoCollection.$id,
'description',
255, false,
'This is a test description'
);
await databases.createBooleanAttribute(
todoDatabase.$id,
todoCollection.$id,
'isComplete',
true
);
}
```
{% /section %}
{% section #step-6 step=6 title="Add documents" %}
Create a function to add some mock data into your new collection.
```js
async function seedDatabase() {
var testTodo1 = {
title: 'Buy apples',
description: 'At least 2KGs',
isComplete: true
};
var testTodo2 = {
title: 'Wash the apples',
isComplete: true
};
var testTodo3 = {
title: 'Cut the apples',
description: 'Don\'t forget to pack them in a box',
isComplete: false
};
await databases.createDocument(
todoDatabase.$id,
todoCollection.$id,
sdk.ID.unique(),
testTodo1
);
await databases.createDocument(
todoDatabase.$id,
todoCollection.$id,
sdk.ID.unique(),
testTodo2
);
await databases.createDocument(
todoDatabase.$id,
todoCollection.$id,
sdk.ID.unique(),
testTodo3
);
}
```
{% /section %}
{% section #step-7 step=7 title="Retrieve documents" %}
Create a function to retrieve the mock todo data and a function to execute the requests in order.
Run the functions to by calling `runAllTasks();`.
```js
async function getTodos() {
var todos = await databases.listDocuments(
todoDatabase.$id,
todoCollection.$id
);
todos.documents.forEach(todo => {
console.log(`Title: ${todo.title}\nDescription: ${todo.description}\nIs Todo Complete: ${todo.isComplete}\n\n`);
});
}
async function runAllTasks() {
await prepareDatabase();
await seedDatabase();
await getTodos();
}
runAllTasks();
```
{% /section %}
{% section #step-8 step=8 title="All set" %}
Run your project with `node app.js` and view the response in your console.
{% /section %}

View File

@@ -9,7 +9,7 @@ Head to the [Appwrite Console](https://cloud.appwrite.io/console).
![Create project screen](/images/docs/databases/quick-start/create-project.png) ![Create project screen](/images/docs/databases/quick-start/create-project.png)
If this is your first time using Appwrite, create an accout and create your first project. If this is your first time using Appwrite, create an account and create your first project.
Then, under **Add a platform**, add a **Web app**. The **Hostname** should be `localhost`. Then, under **Add a platform**, add a **Web app**. The **Hostname** should be `localhost`.

View File

@@ -32,7 +32,7 @@
{/each} {/each}
</Tbody> </Tbody>
</Table> </Table>
<Heading id="properties" level={2}>Example</Heading> <Heading id="example" level={2}>Example</Heading>
<Fence content={JSON.stringify(data.example, null, 4)} language="json" process withLineNumbers /> <Fence content={JSON.stringify(data.example, null, 4)} language="json" process withLineNumbers />
</article> </article>
</Article> </Article>

View File

@@ -13,7 +13,7 @@ We're always working on improving and extending the current stack of available p
Client libraries for integrating with Appwrite to build client-based applications and websites. Read one of the many [quick starts](/docs/quick-starts) guides for your framework of choice to start building your first application. Client libraries for integrating with Appwrite to build client-based applications and websites. Read one of the many [quick starts](/docs/quick-starts) guides for your framework of choice to start building your first application.
{% table %} {% table %}
* &nbsp; {% width=80 %} * &nbsp; {% width=48 %}
* Platform * Platform
* GitHub Repository * GitHub Repository
* &nbsp; {% width=80 %} * &nbsp; {% width=80 %}
@@ -48,7 +48,7 @@ Client libraries for integrating with Appwrite to build client-based application
Server libraries for integrating with Appwrite to build server side integrations or use inside your [Appwrite Functions](/docs/products/functions). Read one of the many [quick starts](/docs/quick-starts) guides for your language/runtime of choice to start building your first server integration. Server libraries for integrating with Appwrite to build server side integrations or use inside your [Appwrite Functions](/docs/products/functions). Read one of the many [quick starts](/docs/quick-starts) guides for your language/runtime of choice to start building your first server integration.
{% table %} {% table %}
* &nbsp; {% width=80 %} * &nbsp; {% width=48 %}
* Platform * Platform
* GitHub Repository * GitHub Repository
* &nbsp; {% width=80 %} * &nbsp; {% width=80 %}

View File

@@ -14,7 +14,7 @@ After you're logged in, the CLI needs to be initialized with your Appwrite proje
appwrite init project appwrite init project
``` ```
The following prompts will guide you through the setup process. The init command also creates an [appwrite.json](/docs/command-line-deployment#appwriteJSON) file representing your Appwrite project. The following prompts will guide you through the setup process. The init command also creates an [appwrite.json](/docs/tooling/command-line/deployment#appwrite-json) file representing your Appwrite project.
You can fetch all the existing databases and collections in your current project using: You can fetch all the existing databases and collections in your current project using:
@@ -64,7 +64,7 @@ appwrite deploy collection
## Deploying Teams {% #deploying-teams %} ## Deploying Teams {% #deploying-teams %}
The Appwrite CLI can create teams to organize users. Teams can be used to grant access permissions to a group of users. [Learn more about permissions](/docs/permissions#permission-roles). The Appwrite CLI can create teams to organize users. Teams can be used to grant access permissions to a group of users. Learn more about permissions.
Deploy teams by running this command in the folder holding your `appwrite.json` file. Deploy teams by running this command in the folder holding your `appwrite.json` file.
@@ -74,7 +74,7 @@ appwrite deploy team
## Deploying Storage {% #deploying-storage %} ## Deploying Storage {% #deploying-storage %}
The Appwrite CLI allows you to configure and deploy buckets across projects. All the bucket's settings are available through the [appwrite.json](/docs/command-line-deployment#appwriteJSON) file. The Appwrite CLI allows you to configure and deploy buckets across projects. All the bucket's settings are available through the [appwrite.json](/docs/tooling/command-line/deployment#appwrite-json) file.
Deploy storage buckets by running this command in the folder holding your `appwrite.json` file. Deploy storage buckets by running this command in the folder holding your `appwrite.json` file.
@@ -98,11 +98,11 @@ Here's a complete list of all configurable options in `appwrite.json`:
| --- | --- | --- | | --- | --- | --- |
| `projectId` | string | ID of your Appwrite Project. | | `projectId` | string | ID of your Appwrite Project. |
| `projectName` | string | Name of your Appwrite Project. | | `projectName` | string | Name of your Appwrite Project. |
| `functions` | array of [functions](/docs/command-line-deployment#function-options) | Configuration of functions in your project. | | `functions` | array of functions | Configuration of functions in your project. |
| `databases` | array of [databases](/docs/command-line-deployment#databases-options) | Configuration of databases in your project. | | `databases` | array of databases | Configuration of databases in your project. |
| `collections` | array of [collections](/docs/command-line-deployment#collection-options) | Configuration of collections in your project. | | `collections` | array of collections | Configuration of collections in your project. |
| `teams` | array of [teams](/docs/command-line-deployment#teams-options) | Configuration of teams in your project. | | `teams` | array of teams | Configuration of teams in your project. |
| `buckets` | array of [buckets](/docs/command-line-deployment#buckets-options) | Configuration of teams in your project. | | `buckets` | array of buckets | Configuration of teams in your project. |
#### Function options #### Function options
@@ -110,13 +110,13 @@ Here's a complete list of all configurable options in `appwrite.json`:
| --- | --- | --- | | --- | --- | --- |
| `$id` | string | Function ID. | | `$id` | string | Function ID. |
| `name` | string | Function Name. | | `name` | string | Function Name. |
| `runtime` | string | Function runtime, must be enabled. [Learn more about runtimes](/docs/functions#supportedRuntimes). | | `runtime` | string | Function runtime, must be enabled. [Learn more about runtimes](/docs/products/functions/runtimes#available-runtimes). |
| `path` | string | Path to folder containing the function's source code. | | `path` | string | Path to folder containing the function's source code. |
| `entrypoint` | string | Entry point of the function relative to the folder specified in path. | | `entrypoint` | string | Entry point of the function relative to the folder specified in path. |
| `ignore` | array of strings | Files to ignore inside the function. [Learn more about ignoring files](/docs/functions#ignoreFiles). | | `ignore` | array of strings | Files to ignore inside the function. [Learn more about ignoring files](/docs). |
| `execute` | array of strings | Grants execute permissions to users. [Learn more about role strings](/docs/rest#permissions). | | `execute` | array of strings | Grants execute permissions to users. [Learn more about role strings](/docs/apis/rest#permissions). |
| `events` | array of strings | Events that trigger the function to execute. [Learn more about events](/docs/events). | | `events` | array of strings | Events that trigger the function to execute. [Learn more about events](/docs). |
| `schedule` | string | Execute schedule for the function. [Learn more about scheduled executions](/docs/functions#scheduled-execution). | | `schedule` | string | Execute schedule for the function. [Learn more about scheduled executions](/docs/products/functions/execution#schedule). |
| `timeout` | int | Execution timeout of the function in seconds, with a maximum configurable limit of 900 seconds. | | `timeout` | int | Execution timeout of the function in seconds, with a maximum configurable limit of 900 seconds. |
| `variables` | JSON object | Variables provided to the function on execution stored as a key-value JSON object. | | `variables` | JSON object | Variables provided to the function on execution stored as a key-value JSON object. |
@@ -136,9 +136,9 @@ Here's a complete list of all configurable options in `appwrite.json`:
| `databaseId` | string | ID of the database to which this collection belongs. | | `databaseId` | string | ID of the database to which this collection belongs. |
| `enabled` | bool | If the collection is enabled. | | `enabled` | bool | If the collection is enabled. |
| `documentSecurity` | bool | If access permissions can be defined at the document level. | | `documentSecurity` | bool | If access permissions can be defined at the document level. |
| `$permissions` | array of strings | Grants access permissions to users at the collection level. [Learn more about permissions](/docs/rest#permissions). | | `$permissions` | array of strings | Grants access permissions to users at the collection level. [Learn more about permissions](/docs/apis/rest#permissions). |
| `attributes` | array of objects | Defines a list of attributes in the collection. [Learn more about the Attributes List Object](/docs/models/attributeList). | | `attributes` | array of objects | Defines a list of attributes in the collection. [Learn more about the Attributes List Object](/docs/references/cloud/models/attributeList). |
| `indexes` | array of objects | Defines a list of indexes in the collection. [Learn more about the Indexes List Object](/docs/models/indexList). | | `indexes` | array of objects | Defines a list of indexes in the collection. [Learn more about the Indexes List Object](/docs/references/cloud/models/indexList). |
#### Buckets options #### Buckets options
@@ -146,8 +146,8 @@ Here's a complete list of all configurable options in `appwrite.json`:
| --- | --- | --- | | --- | --- | --- |
| `$id` | string | Bucket ID. | | `$id` | string | Bucket ID. |
| `name` | string | Bucket Name. | | `name` | string | Bucket Name. |
| `$permissions` | array of strings | Grants access permissions to users at the bucket level. [Learn more about permissions](/docs/rest#permissions). | | `$permissions` | array of strings | Grants access permissions to users at the bucket level. [Learn more about permissions](/docs/apis/rest#permissions). |
| `fileSecurity` | boolean | Whether file-level security is enabled. [Learn more about permissions](/docs/rest#permissions). | | `fileSecurity` | boolean | Whether file-level security is enabled. [Learn more about permissions](/docs/apis/rest#permissions). |
| `enabled` | boolean | Whether the bucket is enabled or disabled. | | `enabled` | boolean | Whether the bucket is enabled or disabled. |
| `maximumFileSize` | integer | Maximum file size supported. | | `maximumFileSize` | integer | Maximum file size supported. |
| `allowedFileExtensions` | string\[\] | List of allowed file extensions. | | `allowedFileExtensions` | string\[\] | List of allowed file extensions. |

View File

@@ -17,7 +17,7 @@ When you set the global configuration parameters using the `appwrite client` com
In this mode, the CLI can only interact with one project at a time. In this mode, the CLI can only interact with one project at a time.
## API Keys {% #api-keys %} ## API Keys {% #api-keys %}
In non-interactive mode, the CLI uses an API key to authenticate. Your API key must have sufficient permissions to execute the commands you plan to use. [Learn more about API Keys](/docs/platform/api-keys). In non-interactive mode, the CLI uses an API key to authenticate. Your API key must have sufficient permissions to execute the commands you plan to use. [Learn more about API Keys](/docs/advanced/platform/api-keys).
## Deployment {% #deployment %} ## Deployment {% #deployment %}
Appwrite's deploy commands can also be executed in a non-interactive mode. This applies to both function and collection deployment. Appwrite's deploy commands can also be executed in a non-interactive mode. This applies to both function and collection deployment.

View File

@@ -1,6 +1,4 @@
<script lang="ts"> <script lang="ts">
import Docs from '$lib/layouts/Docs.svelte';
import Sidebar from '../Sidebar.svelte';
import { MainFooter } from '$lib/components'; import { MainFooter } from '$lib/components';
</script> </script>

View File

@@ -42,7 +42,7 @@
> >
<div class="aw-pricing-cards-item"> <div class="aw-pricing-cards-item">
<header class="aw-pricing-cards-header"> <header class="aw-pricing-cards-header">
<h2 class="aw-label">Free</h2> <h2 class="aw-label">Starter</h2>
<div class="aw-title aw-u-color-text-primary u-margin-block-start-8">$0</div> <div class="aw-title aw-u-color-text-primary u-margin-block-start-8">$0</div>
<div class="u-margin-block-start-4 u-opacity-0">per user/month</div> <div class="u-margin-block-start-4 u-opacity-0">per user/month</div>
<p class="aw-main-body-500 u-margin-block-start-16"> <p class="aw-main-body-500 u-margin-block-start-16">
@@ -85,7 +85,7 @@
</button> </button>
</header> </header>
<div class="aw-pricing-cards-content"> <div class="aw-pricing-cards-content">
<p>Everything in Free plus:</p> <p>Everything in Starter plus:</p>
<ul class="aw-checked-list-circle"> <ul class="aw-checked-list-circle">
<li class=""><span class="">300GB bandwidth</span></li> <li class=""><span class="">300GB bandwidth</span></li>
<li class=""><span class="">Unlimited projects</span></li> <li class=""><span class="">Unlimited projects</span></li>
@@ -124,7 +124,7 @@
</button> </button>
</header> </header>
<div class="aw-pricing-cards-content"> <div class="aw-pricing-cards-content">
<p>Everything in Free & Pro, plus:</p> <p>Everything in Starter & Pro, plus:</p>
<ul class="aw-checked-list-circle"> <ul class="aw-checked-list-circle">
<li class=""><span class="">Extra support log retention days</span></li> <li class=""><span class="">Extra support log retention days</span></li>
<li class=""><span class="">Additional org member roles</span></li> <li class=""><span class="">Additional org member roles</span></li>

View File

@@ -368,7 +368,7 @@
</div> </div>
<div class="aw-mini-card"> <div class="aw-mini-card">
<div class="u-flex u-cross-center u-gap-16 u-flex-wrap u-main-space-between"> <div class="u-flex u-cross-center u-gap-16 u-flex-wrap u-main-space-between">
<h4 class="aw-label aw-u-color-text-primary">Free</h4> <h4 class="aw-label aw-u-color-text-primary">Starter</h4>
<a href="https://cloud.appwrite.io/register" class="aw-button is-secondary"> <a href="https://cloud.appwrite.io/register" class="aw-button is-secondary">
<span class="aw-sub-body-500">Start building</span> <span class="aw-sub-body-500">Start building</span>
</a> </a>

View File

@@ -10,42 +10,42 @@
{ {
question: 'When will Appwrites paid plans be available?', question: 'When will Appwrites paid plans be available?',
answer: answer:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer viverra nulla sit amet sapien sollicitudin, et rutrum ex auctor. Donec fringilla, tellus vitae vestibulum ullamcorper, lectus leo pellentesque arcu, a hendrerit purus tortor sed odio.' 'It is our aim to release pricing in the midst of Q4 2023. Please do note that this timeline is subject to many factors and, therefore, not set in stone. Everyone with an Appwrite Cloud account will receive a notification when our paid plans are available.'
}, },
{ {
question: 'Can I still self-host Appwrite for free?', question: 'Can I still self-host Appwrite for free?',
answer: answer:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer viverra nulla sit amet sapien sollicitudin, et rutrum ex auctor. Donec fringilla, tellus vitae vestibulum ullamcorper, lectus leo pellentesque arcu, a hendrerit purus tortor sed odio.' 'Yes! Appwrite Self Hosted will always be Open Source and free for you to use. You can find the latest version of Appwrite on our GitHub repository.'
}, },
{ {
question: 'What will happen to my current account when pricing is available?', question: 'What will happen to my current account when pricing is available?',
answer: answer:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer viverra nulla sit amet sapien sollicitudin, et rutrum ex auctor. Donec fringilla, tellus vitae vestibulum ullamcorper, lectus leo pellentesque arcu, a hendrerit purus tortor sed odio.' 'All current Cloud users will be notified about the pricing plans being active. Depending on your situation, you will either need to upgrade your account to a pro Plan, or you can happily continue on a Starter plan. You will receive an email once this occurs.'
}, },
{ {
question: 'Does Appwrite have a trial period?', question: 'Does Appwrite have a trial period?',
answer: answer:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer viverra nulla sit amet sapien sollicitudin, et rutrum ex auctor. Donec fringilla, tellus vitae vestibulum ullamcorper, lectus leo pellentesque arcu, a hendrerit purus tortor sed odio.' 'Yes, we offer a 14-day trial period for you to explore Appwrite Pro. After the 14-day trial, you can choose to either subscribe to the Pro plan or continue on a Starter plan.'
}, },
{ {
question: 'What payment methods does Appwrite support?', question: 'What payment methods does Appwrite support?',
answer: answer:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer viverra nulla sit amet sapien sollicitudin, et rutrum ex auctor. Donec fringilla, tellus vitae vestibulum ullamcorper, lectus leo pellentesque arcu, a hendrerit purus tortor sed odio.' 'Appwrite currently supports credit and debit card payments. We will be working to constantly add support for more methods. Please reach out to us in case this is an issue for you.'
}, },
{ {
question: 'What happens if I reach the storage limit in my Pro plan?', question: 'What happens if I reach the storage limit in my Pro plan?',
answer: answer:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer viverra nulla sit amet sapien sollicitudin, et rutrum ex auctor. Donec fringilla, tellus vitae vestibulum ullamcorper, lectus leo pellentesque arcu, a hendrerit purus tortor sed odio.' 'Your project will continue to run, and additional charges will apply. You can find the costs for additional storage under the pricing plans comparsions. We will also notify you when you hit 75% and 100% of your storage with an alert in the dashboard and per email. You can also use our budget tools to avoid unexpected payments.'
}, },
{ {
question: 'How can I get the OSS plan?', question: 'How can I join the OSS program?',
answer: answer:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer viverra nulla sit amet sapien sollicitudin, et rutrum ex auctor. Donec fringilla, tellus vitae vestibulum ullamcorper, lectus leo pellentesque arcu, a hendrerit purus tortor sed odio.' 'The OSS program is exclusively for active open-source maintainers. In case you are liable for the program, you can <a href="/contact-us">apply here</a>.'
}, },
{ {
question: 'I have a Free Plan account, how do I upgrade to a paid plan?', question: 'I have a Starter plan account, how do I upgrade to a paid plan?',
answer: answer:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer viverra nulla sit amet sapien sollicitudin, et rutrum ex auctor. Donec fringilla, tellus vitae vestibulum ullamcorper, lectus leo pellentesque arcu, a hendrerit purus tortor sed odio.' 'In case you want to upgrade to a paid plan, you can do so in your Appwrite dashboard, select your organization and change your plan on the <b>Billing</b> section.'
} }
]; ];
@@ -87,7 +87,7 @@
{#if $isSelected(`${index}`)} {#if $isSelected(`${index}`)}
<div class="collapsible-content" use:melt={$content(`${index}`)} transition:slide> <div class="collapsible-content" use:melt={$content(`${index}`)} transition:slide>
<p class="aw-main-body-400"> <p class="aw-main-body-400">
{faqItem.answer} {@html faqItem.answer}
</p> </p>
</div> </div>
{/if} {/if}
@@ -105,7 +105,7 @@
<div class="collapsible-content"> <div class="collapsible-content">
<p class="aw-main-body-400"> <p class="aw-main-body-400">
{faqItem.answer} {@html faqItem.answer}
</p> </p>
</div> </div>
</details> </details>

View File

@@ -10,9 +10,9 @@ code.line-numbers .line:before {
content: counter(line); content: counter(line);
display: inline-block; display: inline-block;
text-align: right; text-align: right;
padding-right: 8px; padding-right: 1rem;
color: #6C6C71; color: #6C6C71;
width: 2rem; width: 2.5rem;
} }
.hljs-doctag, .hljs-doctag,

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 270 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 275 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 KiB

Some files were not shown because too many files have changed in this diff Show More