Merge branch 'main' of https://github.com/appwrite/website into feat-music-generation-with-huggingface

This commit is contained in:
loks0n
2024-05-01 12:14:49 +01:00
69 changed files with 738 additions and 187 deletions

4
pnpm-lock.yaml generated
View File

@@ -3473,7 +3473,7 @@ packages:
/fsevents@2.3.2: /fsevents@2.3.2:
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} engines: {node: ^8.16.0 || ^10.6.0 || >=12.0.3}
os: [darwin] os: [darwin]
requiresBuild: true requiresBuild: true
dev: true dev: true
@@ -3481,7 +3481,7 @@ packages:
/fsevents@2.3.3: /fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} engines: {node: ^8.16.0 || ^10.6.0 || >=12.0.3}
os: [darwin] os: [darwin]
requiresBuild: true requiresBuild: true
dev: true dev: true

View File

@@ -119,7 +119,7 @@
{bio} {bio}
</p> </p>
{/if} {/if}
<ul class="u-flex u-main-center u-gap-8"> <ul class="u-flex u-main-center u-gap-8 u-margin-block-start-16">
{#if github} {#if github}
<li> <li>
<a <a

View File

@@ -96,9 +96,10 @@
<img <img
class="web-author-image" class="web-author-image"
src={authorData.avatar} src={authorData.avatar}
alt={authorData.name}
loading="lazy"
width="44" width="44"
height="44" height="44"
alt=""
/> />
{/if} {/if}
<div class="u-flex-vertical"> <div class="u-flex-vertical">
@@ -116,7 +117,7 @@
class="web-icon-button" class="web-icon-button"
aria-label="Author twitter" aria-label="Author twitter"
target="_blank" rel="noopener noreferrer" target="_blank" rel="noopener noreferrer"
> >
<span class="web-icon-x" aria-hidden="true" /> <span class="web-icon-x" aria-hidden="true" />
</a> </a>
@@ -129,7 +130,7 @@
class="web-icon-button" class="web-icon-button"
aria-label="Author LinkedIn" aria-label="Author LinkedIn"
target="_blank" rel="noopener noreferrer" target="_blank" rel="noopener noreferrer"
> >
<span class="web-icon-linkedin" aria-hidden="true" /> <span class="web-icon-linkedin" aria-hidden="true" />
</a> </a>
@@ -142,7 +143,7 @@
class="web-icon-button" class="web-icon-button"
aria-label="Author GitHub" aria-label="Author GitHub"
target="_blank" rel="noopener noreferrer" target="_blank" rel="noopener noreferrer"
> >
<span class="web-icon-github" aria-hidden="true" /> <span class="web-icon-github" aria-hidden="true" />
</a> </a>

View File

@@ -76,13 +76,13 @@
<div class="web-big-padding-section-level-2"> <div class="web-big-padding-section-level-2">
<section class="web-container web-u-padding-block-end-0"> <section class="web-container web-u-padding-block-end-0">
<a <a
href="/blog/post/introducing-appwrite-react-native-sdk" href="/blog/post/appwrite-1.5-now-available-on-cloud"
class="web-hero-banner-button web-u-margin-block-end-24" class="web-hero-banner-button web-u-margin-block-end-24"
> >
<span class="web-icon-star" aria-hidden="true" /> <span class="web-icon-star" aria-hidden="true" />
<span class="web-caption-500">New</span> <span class="web-caption-500">New</span>
<div class="web-hero-banner-button-sep" /> <div class="web-hero-banner-button-sep" />
<span class="web-caption-400 web-u-trim-1">Introducing Appwrite's React Native SDK</span> <span class="web-caption-400 web-u-trim-1">Appwrite 1.5 is now available on Cloud</span>
<span class="web-icon-arrow-right" aria-hidden="true" /> <span class="web-icon-arrow-right" aria-hidden="true" />
</a> </a>
<div class="web-hero is-horizontal"> <div class="web-hero is-horizontal">

View File

@@ -97,7 +97,7 @@
{@const author = data.authors.find((author) => author.slug === featured.author)} {@const author = data.authors.find((author) => author.slug === featured.author)}
<article class="web-feature-article u-margin-block-start-48"> <article class="web-feature-article u-margin-block-start-48">
<a href={featured.href} class="web-feature-article-image"> <a href={featured.href} class="web-feature-article-image">
<img src={featured.cover} class="web-image-ratio-4/3" alt="cover" /> <img src={featured.cover} class="web-image-ratio-4/3" loading="lazy" alt="cover" />
</a> </a>
<div class="web-feature-article-content"> <div class="web-feature-article-content">
<header class="web-feature-article-header"> <header class="web-feature-article-header">
@@ -118,9 +118,10 @@
<img <img
class="web-author-image" class="web-author-image"
src={author?.avatar} src={author?.avatar}
alt={author?.name}
loading="lazy"
width="24" width="24"
height="24" height="24"
alt=""
/> />
<div class="web-author-info"> <div class="web-author-info">
<a href={author?.href} class="web-sub-body-400 web-link" <a href={author?.href} class="web-sub-body-400 web-link"

View File

@@ -7,7 +7,7 @@ cover: /images/blog/a-recap-of-init/the-recap.png
timeToRead: 12 timeToRead: 12
author: laura-du-ry author: laura-du-ry
category: OSS category: OSS
featured: true featured: false
--- ---
Init has come to an end, and were happy how all of you showed up and made it an amazing week filled with product announcements, events, content, celebrations, a release, and most of all, community fun! Init has come to an end, and were happy how all of you showed up and made it an amazing week filled with product announcements, events, content, celebrations, a release, and most of all, community fun!

View File

@@ -0,0 +1,295 @@
---
layout: post
title: Appwrite 1.5 is now available on Cloud
description: This release was highly anticipated by the community, and we're very happy to finally share the great news.
date: 2024-04-29
cover: /images/blog/appwrite-1.5-now-available-on-cloud/cloud15.png
timeToRead: 8
author: eldad-fux
category: product
featured: true
---
After announcing many new products and features during [Init](https://appwrite.io/init) as part of the 1.5 release, we saw great excitement within the community to get started with the newly presented Appwrite 1.5. Although already available on self-hosted, the new Appwrite products and features were yet to be released to Cloud. Today, we are excited to say the wait is finally over as we announce the release of Appwrite 1.5 to the Cloud.
To refresh your mind, here is an overview of all products and features released to Cloud and how you can get started.
# Messaging
With just a few lines of backend code, you can now set up a full-functioning messaging service for your application that covers three significant communication channels under one unified API using Cloud. You can send SMS, email, and push notifications through popular third-party providers like [Twilio](https://appwrite.io/blog/post/simplify-messaging-twilio), APNS, Firebase Cloud Messaging, Vonage, Sendgrid, and Mailgun.
## Highlights
- Unified platform for SMS, email, and push notifications.
- Integration with leading third-party messaging services.
- Simplified backend code for messaging services.
- A fully functional Messaging Console for organizing messages, recipients, and providers.
## Emails
With Appwrite Messaging you can send custom email messages to your app's users. Appwrite supports [Mailgun](https://appwrite.io/docs/products/messaging/mailgun/) and [Sendgrid](https://appwrite.io/docs/products/messaging/sendgrid/) as SMTP providers. You must configure one of them as a provider before you can get started.
Once you have finished the setup, you can send emails using a Server SDK. To send an email immediately, you can call the `createEmail` endpoint with the schedule left empty.
Here is what this would look like using Swift.
```swift
import Appwrite
let client = Client()
.setEndpoint("https://cloud.appwrite.io/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2") // Your secret API key
let messaging = Messaging(client)
let message = try await messaging.createEmail(
messageId: ID.unique(),
subject: "April's Newsletter",
content: newsletterContent,
topics: ["news-letter"]
draft: xfalse,
html: xtrue,
scheduledAt: "2024-04-29T20:55:41+0000"
)
```
Learn how to get started with [email in our documentation](https://appwrite.io/docs/products/messaging/send-email-messages).
## SMS
To send SMS messages to you users you will need to add SMPT provider. Appwrite supports [Twilio](https://appwrite.io/docs/products/messaging/twilio/), [MSG91](https://appwrite.io/docs/products/messaging/msg91/), [Telesign](https://appwrite.io/docs/products/messaging/telesign/), [TextMagic](https://appwrite.io/docs/products/messaging/textmagic/), and [Vonage](https://appwrite.io/docs/products/messaging/vonage/).
You can send SMS messages using a Server SDK. To send SMS messages immediately, you can call the `createSMS` endpoint without passing either the draft or `scheduled` parameters.
```swift
import Appwrite
let client = Client()
.setEndpoint("https://cloud.appwrite.io/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2") // Your secret API key
let messaging = Messaging(client)
let message = try await messaging.createSMS(
messageId: ID.unique(),
content: "Don't forget your Wednesday meeting at 10am!",
users: ["413da83346a"]
)
```
Learn how to get started with [SMS in our documentation](https://appwrite.io/docs/products/messaging/send-sms-messages).
## Push notifications
If you're building a mobile app, note that push notifications must be sent through third-party providers, like Apple Push Notification service and Firebase Cloud Messaging. The push notification APIs for Apple and Android devices can only be accessed through these services.
You must configure these services before you can send your first push notification.
To send with APNS, you must first register for remote notifications in your app delegate's application using the (_:didFinishLaunchingWithOptions:) method.
```swift
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
) -> Bool {
// Register for remote notifications
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: { granted, error in
DispatchQueue.main.async {
if granted {
application.registerForRemoteNotifications()
}
}
}
)
return true
}
```
Learn how to set up push notifications for both Apple and Android in our docs.
{% cards %}
{% cards_item href="/docs/products/messaging/apns" title="APNS" icon="icon-apple" %}
Configure APNs for push notification to Apple devices.
{% /cards_item %}
{% cards_item href="/docs/products/messaging/fcm" title="FCM" icon="web-icon-firebase" %}
Configure FCM for push notification to Android and Apple devices.
{% /cards_item %}
{% /cards %}
Read the [Messaging announcement](https://appwrite.io/blog/post/announcing-appwrite-messaging) for a full overview of capabilities.
# Improved support for Server-Side Rendering (SSR)
Appwrite Cloud 1.5 brings enhanced support for SSR authentication patterns, optimizing the platform for use with frameworks like [NextJS](https://appwrite.io/docs/tutorials/nextjs-ssr-auth/step-1), [SvelteKit](https://appwrite.io/docs/tutorials/sveltekit-ssr-auth/step-1), and [Nuxt](https://appwrite.io/docs/tutorials/nuxt-ssr-auth/step-1). This update introduces official methods for generating and accessing sessions server-side, allowing for seamless session cookies management and authorized requests, thus bridging the gap between client and server-side rendering.
## Highlights
- Enhanced SSR authentication support.
- Improved session management for SSR frameworks.
- Official methods for session generation and access.
The big change is that Appwrite now allows you to generate and access sessions server side to set session cookies and use these sessions to authorize future requests.
```tsx
const session = account.createEmailPasswordSession(email, password)
console.log(session.secret) // Output: 'eyJpZCI...sdfahfkjjy'
```
Using the new `setSession` method, we can now retrieve a session secret from our cookies and authorize users to perform authenticated request to our server.
```tsx
client.setSession(session.secret)
const currentUser = await account.get()
```
Read the [SSR announcement](https://appwrite.io/blog/post/introducing-support-for-server-side-rendering) to get a full overview of capabilities or visit our documentation to get started.
# Two-Factor Authentication (2FA)
Security takes a front seat with the addition of Two-Factor Authentication (2FA). This new feature enables an additional layer of security by requiring a second form of authentication. You can easily implement 2FA using Appwrite's straightforward methods for challenge creation and solution, offering users the option to authenticate via phone, email, or TOTP with authenticator apps.
## Highlights
- Enhanced security with Two-Factor Authentication.
- Easy implementation of 2FA challenges.
- Support for multiple authentication methods, including phone, email, and TOTP.
- Can be used in conjunction with any existing authentication method you have implemented using Appwrite Auth.
## Enabling 2FA
To use 2FA, it needs to be enabled on a user's account. This can be achieved by calling account.updateMFA().
```js
import { Client, Account } from "appwrite";
// Init SDK
const client = new Client();
client
.setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
const account = new Account(client);
// Include any account creation/management steps
const mfa = await account.updateMFA(true); // Enables 2FA
```
Read the [2FA announcement](https://appwrite.io/blog/post/announcing-two-factor-authentication) for a full overview of capabilities, or visit our [documentation](https://appwrite.io/docs/products/auth/mfa) to get started.
# New Database operators
New Database operators `contains` and `or`, providing greater control and flexibility for database queries. These operators allow for partial text matches, array element matching, and logical OR queries, significantly enhancing the capability to handle complex data retrieval and manipulation tasks.
## Highlights
- New `contains` and `or` database operators.
- Enhanced query flexibility and control.
- Support for complex data retrieval and manipulation.
## Adding operators
The contains operator is a great addition to the existing text search operators such as startsWith & endsWith, and can be used in combination with these two.
```js
db.listDocuments(
'<DATABASE_ID>',
'<COLLECTION_ID>',
[
Query.contains('content', ['happy', 'love']),
]
)
```
To use the OR operator pass Query.or([...]) to the queries array and provide at least two queries within the nested array.
```js
db.listDocuments(
'<DATABASE_ID>',
'<COLLECTION_ID>',
[
Query.or([
Query.contains('name','ivy'),
Query.greaterThan('age',30)
])
]
)
```
Read the [Database operators announcement](https://appwrite.io/blog/post/introducing-new-database-operators) for a full overview of capabilities, or visit our [documentation](https://appwrite.io/docs/products/databases/queries) to get started.
# Enum SDK Support
Enum SDK support expands the versatility and usability of Appwrite's SDKs across different programming scenarios.
## Highlights
- Enum support improves type safety and code readability.
## Enums and OAuth
One of the most common examples of SDK Enums is OAuth providers. To log in with Apple, you must pass the Apple string as the provider. With enums, you'll be able to pass OAuthProvider.Apple instead.
```js
import { Client, Account, OAuthProvider } from "appwrite";
const client = new Client()
.setEndpoint('https://cloud.appwrite.io/v1')
.setProject('<PROJECT_ID>');
const account = new Account(client);
account.createOAuth2Session(OAuthProvider.Apple);
```
Read the [Enum SDK support](https://appwrite.io/blog/post/introducing-enum-sdk-support) announcements for a full overview of capabilities, and visit our [Enum](https://appwrite.io/docs/sdks#enums) documentation to get started.
# Custom token login
One feature that was not announced during Init but was recently released is custom token login. Tokens are short-lived secrets created by an [Appwrite Server SDK](https://appwrite.io/docs/sdks#server) that can be exchanged for a session by a [Client SDK](https://appwrite.io/docs/sdks#client) to log in users. You may already be familiar with tokens if you checked out [Magic URL login](https://appwrite.io/docs/products/auth/magic-url), [Email OTP login](https://appwrite.io/docs/products/auth/email-otp), or [Phone (SMS) login](https://appwrite.io/docs/products/auth/phone-sms).
Custom token allows you to use a [Server SDK](https://appwrite.io/docs/sdks#server) to generate tokens for your own auth implementations. This allows you to code your own authentication methods using Appwrite Functions or your own backend. You could implement username and password sign-in, captcha-protected authentication, phone call auth, and much more. Custom tokens also allow you to integrate Appwrite with external authentication providers such as Auth0, TypingDNA, or any provider trusted by your users.
## Creating your custom token
Once you have prepared your own login flow in an Appwrite Function or a server integration, you can use the [Create token](https://appwrite.io/docs/references/1.5.x/server-nodejs/users#createToken) endpoint of the [Users API](https://appwrite.io/docs/products/auth/users) to generate a token.
```swift
// Server-side code
let users = Users(client)
let token = try await users.createToken("[USER_ID]")
let secret = token.secret
```
Then, pass this token to the client through email, magic links, texts, or other methods so they can login on their client app.
```swift
// Client-side code
let account = Account(client);
let session = try await account.createSession(
userId: "[USER_ID]",
secret: "[SECRET]");
```
Visit our [documentation](https://appwrite.io/docs/products/auth/custom-token) to learn more.
# Get started with Appwrite 1.5 on Cloud
This release brings you more flexibility, security, and safety when building with the Cloud. With the introduction of Messaging, we deliver a highly requested product and fulfill developer needs. As we continue to evolve Appwrite, we strive to deliver the best backend for your product, no matter your needs. We thank you for your support and look forward to building the future together.
To get started, visit our documentation, YouTube channel, or get support on Discord.
- [Documentation](https://appwrite.io/docs)
- [Discord](https://appwrite.io/discord)
- [YouTube](https://www.youtube.com/channel/UCtBJ1v69gm8NgbCju_03Fiw)

View File

@@ -0,0 +1,132 @@
---
layout: post
title: State of audio processing
description: An overview of the latest developments in audio processing with AI and their impact on various industries.
date: 2024-03-27
cover: /images/blog/state-of-audio-processing/cover.png
timeToRead: 15
category: product
featured: false
draft: true
---
Audio processing is a rapidly advancing field within artificial intelligence where algorithms are designed to interpret and manipulate audio signals. From the early days of basic sound synthesis to today's voice assistants and automatic music generation, AI in audio processing has undergone significant development. Let's explore the history of this field and the key concepts and innovations that have shaped it.
# A (not so) brief history of AI in audio processing
AI in audio processing began in the mid-20th century with work on sound synthesis methods. [Max Mathews at Bell Labs in the 1950s](https://en.wikipedia.org/wiki/Max_Mathews) laid the groundwork for digital audio synthesis.
In the late 1970s, the potential of AI in understanding and changing audio started to be explored. Early projects like the ['Talking Typewriter' by Kurzweil and Shrobe in 1978](https://ieeexplore.ieee.org/document/1454357) demonstrated the possibilities of speech synthesis.
The 1990s saw the introduction of machine learning techniques like hidden Markov models (HMMs) for speech recognition. [Rabiner's 1989 paper "A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition"](https://ieeexplore.ieee.org/document/18626) was influential. HMMs had limitations, requiring substantial manual work and struggling with complex speech patterns.
# The deep learning revolution
A major breakthrough in audio processing came with deep learning in the 2010s. Convolutional neural networks (CNNs) and recurrent neural networks (RNNs), particularly Long Short-Term Memory (LSTM) networks, revolutionized speech recognition.
The 2014 paper ["Deep Speech: Scaling up end-to-end speech recognition" by Hannun et al.](https://arxiv.org/abs/1412.5567) showed the power of CNNs in learning from raw audio data, improving speech recognition performance. LSTMs, introduced by [Hochreiter and Schmidhuber in 1997](https://www.bioinf.jku.at/publications/older/2604.pdf), proved effective in handling temporal dependencies in audio.
These techniques enhanced speech recognition and enabled audio generation. Models like [WaveNet from DeepMind in 2016](https://arxiv.org/abs/1609.03499) generated lifelike speech and music by learning from large audio datasets.
# Key concepts in modern audio processing
## Fourier transforms and spectral analysis
When you have a recording of a sound, it's a mix of many different frequencies (pitches) playing together. Fourier transforms are a way to separate these frequencies so you can see how much of each frequency is present in the sound.
This is useful because:
- You can see which notes are being played by different instruments
- You can remove frequencies you don't want, like noise or certain instruments
- You can change the volume of specific frequencies to alter the balance of the sound
Here's a simple code example:
```python
import numpy as np
# Make a simple sound wave
t = np.linspace(0, 1, 500)
f = 10 # Frequency in Hz
y = np.sin(2*np.pi*f*t)
# Apply Fourier transform
Y = np.fft.fft(y)
# Plot the frequency content
import matplotlib.pyplot as plt
plt.plot(np.abs(Y))
plt.show()
```
This code makes a simple sound wave, applies a Fourier transform to it, and plots the amount of each frequency present in the sound.
![Fourier transform plot](/images/blog/state-of-audio-processing/fourier.png)
## Deep neural networks
Deep neural networks (DNNs) are a way to make computers learn to recognize patterns in data, like recognizing different instruments in a piece of music. They work by passing the data through several layers that gradually pick out more and more complex features.
For example, to train a DNN to recognize musical instruments:
1. You give it many recordings of each instrument
2. The DNN learns patterns unique to each instrument
3. After training, the DNN can recognize the instrument in new recordings it hasn't heard before
Here's a simple DNN in code:
```python
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Dense(64, activation='relu', input_shape=(500,)),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(train_data, train_labels, epochs=10, batch_size=32)
```
This code makes a simple DNN. It expects 500 input features (which could be the frequency content of a sound clip). It has two layers that process the data, and an output layer that predicts which of 10 possible instruments the sound is.
The model is trained on labeled data (recordings where we know what instrument is playing) using the `fit()` function. After training, it can predict the instrument for new recordings.
DNNs are useful in audio for things like:
- Converting speech to text
- Identifying the genre of a piece of music
- Detecting emotions in speech
- Removing background noise from recordings
The ability of DNNs to learn complex patterns makes them very useful for modern audio processing tasks.
## Automatic speech recognition (ASR)
ASR systems convert spoken words into written text. They're incredibly useful for dictating messages, giving voice commands, or automatically transcribing meetings or lectures. ASR has improved dramatically thanks to deep learning, which allows these systems to learn patterns from vast amounts of speech data.
One of the best ASR systems is DeepSpeech, developed by Mozilla. It uses a deep neural network architecture called a recurrent neural network (RNN), which is particularly good at handling sequential data like speech. DeepSpeech 2, released in 2017, achieved a word error rate of just 5.5% on a standard benchmark, which was a significant milestone. Google's recent Conformer model has pushed the state of the art even further.
## Sound generation and music composition
Generative AI models can create new sounds and music by learning patterns from existing audio data. This opens up exciting possibilities for music creation, sound design, and personalized audio content.
[WaveNet, developed by DeepMind in 2016](https://arxiv.org/abs/1609.03499), was a breakthrough in audio generation. It can generate realistic speech and musical sounds by predicting the next sample in an audio waveform based on the samples that came before it. [Google's Tacotron 2](https://arxiv.org/abs/1712.05884) built upon WaveNet to create high-quality synthetic speech that's nearly indistinguishable from human speech.
For music composition, [OpenAI's MuseNet](https://openai.com/blog/musenet) and [Jukebox](https://arxiv.org/abs/2005.00341) models are important developments. MuseNet can generate 4-minute musical compositions with 10 different instruments, while Jukebox can generate music in the style of popular genres and artists. These models demonstrate the potential for AI to be a powerful tool for musicians and composers.
# Get started with audio processing in Appwrite
Appwrite provides a platform to build your own audio processing applications. With our AI function templates and tutorials, you can quickly get started with voice recognition, music generation, and more.
{% cards %}
{% cards_item href="/docs/products/ai/tutorials/speech-recognition" title="Speech recongition" %}
Efficiently convert speech to text
{% /cards_item %}
{% cards_item href="/docs/products/ai/tutorials/text-to-speech" title="Text to speech" %}
Generate music from a text prompt
{% /cards_item %}
{% /cards %}

View File

@@ -8,7 +8,6 @@ timeToRead: 15
author: bradley-schofield author: bradley-schofield
category: product category: product
featured: false featured: false
draft: true
--- ---
# Introduction # Introduction

View File

@@ -0,0 +1,14 @@
---
layout: changelog
title: Appwrite 1.5 is now available on Cloud
date: 2024-04-29
cover: /images/changelog/2024-04-22.png
---
After announcing many new products and features during Init as part of the 1.5 release, we saw great excitement within the community to get started with the newly presented Appwrite 1.5. Although already available on self-hosted, the new Appwrite products and features were yet to be released to Cloud.
Today, we are excited to say the wait is finally over as we announce the release of Appwrite 1.5 to the Cloud.
{% arrow_link href="/blog/post/appwrite-1.5-now-available-on-cloud" %}
Read the announcement to learn more
{% /arrow_link %}

View File

@@ -103,6 +103,10 @@
{ {
label: 'LangChain', label: 'LangChain',
href: '/docs/products/ai/integrations/langchain' href: '/docs/products/ai/integrations/langchain'
},
{
label: 'fal.ai',
href: '/docs/products/ai/integrations/fal-ai'
} }
] ]
} }

View File

@@ -0,0 +1,217 @@
---
layout: article
title: Integrating fal.ai
description: Learn how to integrate fal.ai into your Appwrite project.
difficulty: intermediate
readtime: 15
---
fal.ai is an AI inference platform with popular models such as Stable Diffusion XL, ControlNet, Whisper available as ready-to-use APIs so that you can easily integrate them into your applications.
This tutorial will guide you through the process of setting up the fal.ai API to generate an image using the SDXL model and integrating it into your Appwrite project.
# Prerequisites {% #prerequisites %}
- An Appwrite Project
- A [fal.ai API Key](https://fal.ai/docs/authentication/key-based)
{% section #step-1 step=1 title="Create new function" %}
Head to the [Appwrite Console](https://cloud.appwrite.io/console) then click on **Functions** in the left sidebar and then click on the **Create Function** button.
{% only_dark %}
![Create function screen](/images/docs/functions/dark/template.png)
{% /only_dark %}
{% only_light %}
![Create function screen](/images/docs/functions/template.png)
{% /only_light %}
1. In the Appwrite Console's sidebar, click **Functions**.
1. Click **Create function**.
1. Under **Connect Git repository**, select your provider.
1. After connecting to GitHub, under **Quick start**, select the **Node.js** starter template.
1. In the **Variables** step, add the `FAL_API_KEY`, generate it [here](https://fal.ai/docs/authentication/key-based).
1. Follow the step-by-step wizard and create the function.
{% /section %}
{% section #step-2 step=2 title="Add fal.ai SDK" %}
Once the function is created, clone the function and open it in your development environment.
Once you have the repository open, you can install the fal.ai SDK by running the following command in your terminal:
```bash
npm install @fal-ai/serverless-client
```
{% /section %}
{% section #step-3 step=3 title="Create utility function" %}
In this example, the function will be able to accept both `GET` and `POST` requests.
For the `GET` request, return a static HTML page. It will use AlpineJS to make a `POST` request to the function.
The `POST` request will use the fal.ai SDK to make a request to the fal.ai API.
Write the code to return a static HTML page. Create a new `src/utils.js` file with the following code:
```js
import path from 'path';
import { fileURLToPath } from 'url';
import fs from 'fs';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const staticFolder = path.join(__dirname, '../static');
export function getStaticFile(fileName) {
return fs.readFileSync(path.join(staticFolder, fileName)).toString();
}
```
{% /section %}
{% section #step-4 step=4 title="Handle GET request" %}
Write our `GET` request handler in the `src/main.js` file. This handler will return the static HTML page.
```js
import { getStaticFile } from './utils.js';
export default async ({ req, res, error }) => {
if (req.method === 'GET') {
return res.send(getStaticFile('index.html'), 200, {
'Content-Type': 'text/html; charset=utf-8',
});
}
};
```
{% /section %}
{% section #step-5 step=5 title="Create static page" %}
Create the static HTML page that the function will serve. Create a new file at `static/index.html` with some HTML boilerplate:
```html
<!doctype html>
<html lang="en">
</html>
```
Within the `<html>` tag, add a `<head>` tag with the necessary meta tags, stylesheets, and scripts:
```html
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>fal.ai Demo</title>
<script>
async function onSubmit(prompt, type) {
const response = await fetch('/', {
method: 'POST',
body: JSON.stringify({ prompt, type }),
headers: {
'Content-Type': 'application/json',
},
});
const json = await response.json();
if (!json.ok || json.error) {
alert(json.error);
}
return json;
}
</script>
<script src="//unpkg.com/alpinejs" defer></script>
<link rel="stylesheet" href="https://unpkg.com/@appwrite.io/pink" />
<link rel="stylesheet" href="https://unpkg.com/@appwrite.io/pink-icons" />
</head>
```
And after the `</head>` tag, add our `<body>` tag with the following content:
```html
<body class="theme-dark">
<main class="main-content">
<div class="top-cover u-padding-block-end-56">
<div class="container">
<div class="u-flex u-gap-16 u-flex-justify-center u-margin-block-start-16">
<h1 class="heading-level-1">fal.ai demo</h1>
<code class="u-un-break-text"></code>
</div>
<p class="body-text-1 u-normal u-margin-block-start-8" style="max-width: 50rem">
Use this page to test your implementation with fal.ai. Enter
text and receive the model output as a response.
</p>
</div>
</div>
<div class="container u-margin-block-start-negative-56"
x-data="{ prompt: '', result: { src: '' }, loading: false }">
<div class="card u-flex u-gap-24 u-flex-vertical">
<div class="u-flex u-cross-center u-gap-8">
<div class="input-text-wrapper is-with-end-button u-width-full-line">
<input x-model="prompt" type="search" placeholder="Prompt" />
<div class="icon-search" aria-hidden="true"></div>
</div>
<button class="button" x-bind:disabled="loading"
x-on:click="async () => { loading = true; result = { src: '' }; try { result = await onSubmit(prompt) } catch(err) { console.error(err); } finally { loading = false; } }">
<span class="text">Generate</span>
</button>
</div>
<template x-if="answer.type">
<div class="u-flex u-flex-vertical u-gap-12">
<div class="u-flex u-flex-vertical u-gap-12 card">
<div class="u-flex u-gap-12">
<h5 class="eyebrow-heading-2">Result:</h5>
</div>
<img class="u-max-width-400" x-bind:src="result.src" alt="fal.ai output" />
</div>
</div>
</template>
</div>
</div>
</main>
</body>
```
This HTML form will allow users to input a prompt and generate an image using the fal.ai API. The AlpineJS script handles the form submission and display the result.
{% /section %}
{% section #step-6 step=6 title="Handle POST Request" %}
Add methods necessary to integrate with fal.ai's API.
Import the fal.ai SDK at the top of the `main.js` file:
```js
import * as fal from '@fal-ai/serverless-client';
```
Handle the `POST` requests to the function. Initialize the fal.ai SDK at the end of the handler function:
```js
fal.config({ credentials: process.env.FAL_API_KEY });
```
Make the request to generate an image using the SDXL model, and return the result:
```js
const result = await fal.subscribe('fal-ai/fast-sdxl', {
input: {
prompt: req.body.prompt,
},
});
return res.json({ ok: true, src: result.images[0].url });
```
With the function complete, deploy it to Appwrite by pushing the changes to your repository.
Additional models can be found in the [fal.ai model catalogue](https://fal.ai/models).
{% /section %}
{% section #step-7 step=7 title="Test the function" %}
Now that the function is deployed, test it by visiting the function URL in a browser. The UI created earlier will be visible. To test it, write a prompt and click the submit button, after a brief the completion should appear below the input.
![Testing the function](/images/docs/ai/integrations/fal-ai/demo.png)
{% /section %}

View File

@@ -189,7 +189,7 @@ And after the `</head>` tag we're going to add our `<body>` which will contain t
</body> </body>
``` ```
All of this together will render a form that will submit your question to the Appwrite Function through a POST request which we'll create next. The Appwrite Function will call Perplexity's API and return the response, which will be displayed on your page using different conditional statements depending on the output media type. All of this together will render a form that will submit your question to the Appwrite Function through a POST request which we'll create next. The Appwrite Function will call Replicate's API and return the response, which will be displayed on your page using different conditional statements depending on the output media type.
{% /section %} {% /section %}
{% section #step-6 step=6 title="Handle POST Request" %} {% section #step-6 step=6 title="Handle POST Request" %}

View File

@@ -3,17 +3,14 @@ layout: article
title: Custom token login title: Custom token login
description: Limitless authentication flow in Appwrite. Find out how to implement custom authentication flow or connect to 3rd party authentication providers. description: Limitless authentication flow in Appwrite. Find out how to implement custom authentication flow or connect to 3rd party authentication providers.
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.13`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Tokens are short-lived secrets created by an [Appwrite Server SDK](/docs/sdks#server) that can be exchanged for session by a [Client SDK](/docs/sdks#client) to log in users. You may already be familiar with tokens if you checked out [Magic URL login](/docs/products/auth/magic-url), [Email OTP login](/docs/products/auth/email-otp) or [Phone (SMS) login](/docs/products/auth/phone-sms). Tokens are short-lived secrets created by an [Appwrite Server SDK](/docs/sdks#server) that can be exchanged for session by a [Client SDK](/docs/sdks#client) to log in users. You may already be familiar with tokens if you checked out [Magic URL login](/docs/products/auth/magic-url), [Email OTP login](/docs/products/auth/email-otp) or [Phone (SMS) login](/docs/products/auth/phone-sms).
Custom token allows you to use [Server SDK](/docs/sdks#server) to generate tokens for your own implementations. This allows you to code your own authentication methods using Appwrite Functions or your own backend. You could implement username and password sign-in, captcha-protected authentication, phone call auth, and much more. Custom tokens also allow you to skip authentication which is useful when you integrate Appwrite with external authenticaion providers such as Auth0, TypingDNA, or any provider trusted by your users. Custom token allows you to use [Server SDK](/docs/sdks#server) to generate tokens for your own implementations. This allows you to code your own authentication methods using Appwrite Functions or your own backend. You could implement username and password sign-in, captcha-protected authentication, phone call auth, and much more. Custom tokens also allow you to skip authentication which is useful when you integrate Appwrite with external authenticaion providers such as Auth0, TypingDNA, or any provider trusted by your users.
# Create custom token {% #create-custom-token %} # Create custom token {% #create-custom-token %}
Once you have your server endpoint prepared either in an Appwrite Function or a server integration, you can use the [Create token](/docs/references/1.5.x/server-nodejs/users#createToken) endpoint of the [Users API](/docs/products/auth/users) to generate a token. Once you have your server endpoint prepared either in an Appwrite Function or a server integration, you can use the [Create token](/docs/references/cloud/server-nodejs/users#createToken) endpoint of the [Users API](/docs/products/auth/users) to generate a token.
{% multicode %} {% multicode %}
```server-nodejs ```server-nodejs
@@ -161,7 +158,7 @@ If the client doesn't know the user's ID during authentication, we recommend to
# Login {% #login %} # Login {% #login %}
Once the client receives a token secret, we can use it to authenticate the user in the application. Use the [Client SDK's](/docs/sdks#client) [Create session endpoint](/docs/references/1.5.x/server-nodejs/account#createSession) to exchange the token secret for a valid session, which logs the user. Once the client receives a token secret, we can use it to authenticate the user in the application. Use the [Client SDK's](/docs/sdks#client) [Create session endpoint](/docs/references/cloud/server-nodejs/account#createSession) to exchange the token secret for a valid session, which logs the user.
{% multicode %} {% multicode %}

View File

@@ -3,10 +3,6 @@ layout: article
title: Email OTP title: Email OTP
description: Seamless sign in with Email OTP authentication in Appwrite. Learn how to provide simple and secure passwordless user accounts. description: Seamless sign in with Email OTP authentication in Appwrite. Learn how to provide simple and secure passwordless user accounts.
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Email OTP (one-time password) authentication lets users create accounts using their email address and log in using a 6 digit code delivered to their email inbox. This method is similar to [Magic URL login](/docs/products/auth/magic-url), but can provide better user experience in some scenarios. Email OTP (one-time password) authentication lets users create accounts using their email address and log in using a 6 digit code delivered to their email inbox. This method is similar to [Magic URL login](/docs/products/auth/magic-url), but can provide better user experience in some scenarios.

View File

@@ -4,11 +4,6 @@ title: Multi-factor authentication
description: Add multiple layers of authentication to your applications powered by Appwrite Authentication. description: Add multiple layers of authentication to your applications powered by Appwrite Authentication.
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Multi-factor authentication (MFA) greatly increases the security of your apps by adding additional layers of protection. Multi-factor authentication (MFA) greatly increases the security of your apps by adding additional layers of protection.
When MFA is enabled, a malicious actor needs to compromise multiple authentication factors to gain unauthorized access. When MFA is enabled, a malicious actor needs to compromise multiple authentication factors to gain unauthorized access.
Appwrite Authentication lets you easily implement MFA in your apps, letting you build more securely and quickly. Appwrite Authentication lets you easily implement MFA in your apps, letting you build more securely and quickly.

View File

@@ -3,11 +3,6 @@ layout: article
title: SSR login title: SSR login
description: How to implement SSR authentication with Appwrite description: How to implement SSR authentication with Appwrite
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Server-side rendering (SSR) is fully supported with Appwrite. You can use Appwrite with many SSR-oriented frameworks, such as Next.js, SvelteKit, Nuxt, Gatsby, Remix, and more. Server-side rendering (SSR) is fully supported with Appwrite. You can use Appwrite with many SSR-oriented frameworks, such as Next.js, SvelteKit, Nuxt, Gatsby, Remix, and more.
SSR is a technique where the server renders a web page and sending the fully rendered page to the client's web browser. This is in contrast to client-side rendering (CSR), where the client's web browser renders the page using JavaScript. SSR is a technique where the server renders a web page and sending the fully rendered page to the client's web browser. This is in contrast to client-side rendering (CSR), where the client's web browser renders the page using JavaScript.

View File

@@ -3,11 +3,6 @@ layout: article
title: Tokens title: Tokens
description: What are tokens and how to use them in Appwrite description: What are tokens and how to use them in Appwrite
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Tokens are short-lived secrets created by an [Appwrite Server SDK](/docs/sdks#server) that can be exchanged for session by a [Client SDK](/docs/sdks#client) to log in users. Tokens are short-lived secrets created by an [Appwrite Server SDK](/docs/sdks#server) that can be exchanged for session by a [Client SDK](/docs/sdks#client) to log in users.
Some auth methods like [Magic URL login](/docs/products/auth/magic-url), Some auth methods like [Magic URL login](/docs/products/auth/magic-url),
[Email OTP login](/docs/products/auth/email-otp), or [Phone (SMS) login](/docs/products/auth/phone-sms) already generate tokens. [Email OTP login](/docs/products/auth/email-otp), or [Phone (SMS) login](/docs/products/auth/phone-sms) already generate tokens.

View File

@@ -102,7 +102,7 @@
items: [ items: [
{ {
label: 'API reference', label: 'API reference',
href: '/docs/references/1.5.x/client-web/messaging' href: '/docs/references/cloud/client-web/messaging'
}, },
] ]
}, },

View File

@@ -5,11 +5,6 @@ description: Send push notifications, text, or emails to users or groups of user
back: /docs back: /docs
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Appwrite Messaging helps you communicate with your users through push notifications, emails, and SMS text messages. Appwrite Messaging helps you communicate with your users through push notifications, emails, and SMS text messages.
Sending personalized communication for marketing, updates, and realtime alerts can increase user engagement and retention. Sending personalized communication for marketing, updates, and realtime alerts can increase user engagement and retention.
You can also use Appwrite Messaging to implement security checks and custom authentication flows. You can also use Appwrite Messaging to implement security checks and custom authentication flows.

View File

@@ -4,11 +4,6 @@ title: Apple Push Notification service
description: Send push notifications to apps on Apple devices through Apple Push Notification service (APNs) using Appwrite Messaging. description: Send push notifications to apps on Apple devices through Apple Push Notification service (APNs) using Appwrite Messaging.
back: /docs/ back: /docs/
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Apple Push Notification service (APNs) lets you send push notifications to Apple devices like macOS, iOS, tvOS, iPadOS, and watchOS devices. Apple Push Notification service (APNs) lets you send push notifications to Apple devices like macOS, iOS, tvOS, iPadOS, and watchOS devices.
APNs is a best-effort service, and will attempt to deliver you messages to your device when it's online and available again. APNs is a best-effort service, and will attempt to deliver you messages to your device when it's online and available again.
APNs will save the last message for 30 days or less and attempt delivery as soon as it's online. APNs will save the last message for 30 days or less and attempt delivery as soon as it's online.

View File

@@ -4,11 +4,6 @@ title: Firebase Cloud Messaging
description: Send push notifications to Android, Apple, or Web app with Firebase Cloud Messaging (FCM). description: Send push notifications to Android, Apple, or Web app with Firebase Cloud Messaging (FCM).
back: /docs/ back: /docs/
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Firebase Cloud Messaging (FCM) lets you send push notifications to your iOS, Android, and web apps through Appwrite Messaging. Firebase Cloud Messaging (FCM) lets you send push notifications to your iOS, Android, and web apps through Appwrite Messaging.
Before you can deliver messages, you must connect to a messaging provider. Before you can deliver messages, you must connect to a messaging provider.

View File

@@ -4,11 +4,6 @@ title: Mailgun
description: Send emails to your Appwrite users using Mailgun and Appwrite Messaging. description: Send emails to your Appwrite users using Mailgun and Appwrite Messaging.
back: /docs/ back: /docs/
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Mailgun lets you send customized email messages to your users. Mailgun lets you send customized email messages to your users.
These emails can be sent immediately or scheduled. These emails can be sent immediately or scheduled.
You can send emails for purposes like reminders, promotions, announcements, and even custom authentication flows. You can send emails for purposes like reminders, promotions, announcements, and even custom authentication flows.

View File

@@ -4,11 +4,6 @@ title: Messages
description: Learn about Appwrite messages, the different types of messages, what can be sent in different message types. description: Learn about Appwrite messages, the different types of messages, what can be sent in different message types.
back: /docs back: /docs
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Each time you send or schedule a push notification, email, or SMS text, it's recorded in Appwrite Each time you send or schedule a push notification, email, or SMS text, it's recorded in Appwrite
as a **message** is displayed in the **Messages** tab. as a **message** is displayed in the **Messages** tab.

View File

@@ -4,11 +4,6 @@ title: MSG91
description: Send SMS messages to your Appwrite users using MSG91 and Appwrite Messaging. description: Send SMS messages to your Appwrite users using MSG91 and Appwrite Messaging.
back: /docs/ back: /docs/
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
MSG91 lets you send customized SMS messages to your users. MSG91 lets you send customized SMS messages to your users.
These SMS messages can be sent immediately or scheduled. These SMS messages can be sent immediately or scheduled.
You can send SMS messages for purposes like reminders, promotions, announcements, and even custom authentication flows. You can send SMS messages for purposes like reminders, promotions, announcements, and even custom authentication flows.

View File

@@ -3,11 +3,6 @@ layout: article
title: Send email messages title: Send email messages
description: Send email messages to your users using Appwrite Messaging. description: Send email messages to your users using Appwrite Messaging.
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
You can send custom email messages to your app's users using Appwrite Messaging and a connected SMTP service. You can send custom email messages to your app's users using Appwrite Messaging and a connected SMTP service.
This guide takes you through the implementation path of adding email messaging to your app. This guide takes you through the implementation path of adding email messaging to your app.
@@ -44,7 +39,7 @@ During development, you can add targets to existing accounts by navigating to **
![Add a target](/images/docs/messaging/targets/add-targets.png) ![Add a target](/images/docs/messaging/targets/add-targets.png)
{% /only_light %} {% /only_light %}
You can also implement forms in your app to collect contact information and add it as a target with the [createTarget](/docs/references/1.5.x/server-nodejs/users#createTarget) endpoint. You can also implement forms in your app to collect contact information and add it as a target with the [createTarget](/docs/references/cloud/server-nodejs/users#createTarget) endpoint.
{% multicode %} {% multicode %}
```server-nodejs ```server-nodejs
const sdk = require('node-appwrite'); const sdk = require('node-appwrite');
@@ -281,7 +276,7 @@ To create a topic in the Appwrite Console, navigate to **Messaging** > **Topics*
![Add a target](/images/docs/messaging/topics/create-topics.png) ![Add a target](/images/docs/messaging/topics/create-topics.png)
{% /only_light %} {% /only_light %}
You can also create topics programmatically using an [Appwrite Server SDK](/docs/references/1.5.x/server-nodejs/messaging#createTopic). You can also create topics programmatically using an [Appwrite Server SDK](/docs/references/cloud/server-nodejs/messaging#createTopic).
{% multicode %} {% multicode %}
```server-nodejs ```server-nodejs
const sdk = require('node-appwrite'); const sdk = require('node-appwrite');

View File

@@ -3,11 +3,6 @@ layout: article
title: Send push notification title: Send push notification
description: Send push notification to your users using Appwrite Messaging. description: Send push notification to your users using Appwrite Messaging.
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
You can send, schedule, and manage push notifications to your apps using Appwrite Messaging. You can send, schedule, and manage push notifications to your apps using Appwrite Messaging.
Push notifications can be used to deliver new message notifications, app updates, promotional offers, Push notifications can be used to deliver new message notifications, app updates, promotional offers,
and other messages straight to your user's devices. and other messages straight to your user's devices.

View File

@@ -3,11 +3,6 @@ layout: article
title: Send SMS messages title: Send SMS messages
description: Send SMS messages to your users using Appwrite Messaging. description: Send SMS messages to your users using Appwrite Messaging.
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
You can send custom sms messages to your app's users using Appwrite Messaging and a connected SMTP service. You can send custom sms messages to your app's users using Appwrite Messaging and a connected SMTP service.
This guide takes you through the implementation path of adding sms messaging to your app. This guide takes you through the implementation path of adding sms messaging to your app.
@@ -52,7 +47,7 @@ During development, you can add targets to existing accounts by navigating to **
![Add a target](/images/docs/messaging/targets/add-targets.png) ![Add a target](/images/docs/messaging/targets/add-targets.png)
{% /only_light %} {% /only_light %}
You can also implement forms in your app to collect contact information and add it as a target with the [createSubscriber](/docs/references/1.5.x/server-nodejs/messaging#createSubscriber) endpoint. You can also implement forms in your app to collect contact information and add it as a target with the [createSubscriber](/docs/references/cloud/server-nodejs/messaging#createSubscriber) endpoint.
{% multicode %} {% multicode %}
```server-nodejs ```server-nodejs
@@ -291,7 +286,7 @@ To create a topic in the Appwrite Console, navigate to **Messaging** > **Topics*
![Add a target](/images/docs/messaging/topics/create-topics.png) ![Add a target](/images/docs/messaging/topics/create-topics.png)
{% /only_light %} {% /only_light %}
You can also create topics programmatically using an [Appwrite Server SDK](/docs/references/1.5.x/server-nodejs/messaging#createTopic). You can also create topics programmatically using an [Appwrite Server SDK](/docs/references/cloud/server-nodejs/messaging#createTopic).
{% multicode %} {% multicode %}
```server-nodejs ```server-nodejs
const sdk = require('node-appwrite'); const sdk = require('node-appwrite');

View File

@@ -4,11 +4,6 @@ title: Sendgrid
description: Send emails to your Appwrite users using Sendgrid and Appwrite Messaging. description: Send emails to your Appwrite users using Sendgrid and Appwrite Messaging.
back: /docs/ back: /docs/
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Sendgrid lets you send customized email messages to your users. Sendgrid lets you send customized email messages to your users.
These emails can be sent immediately or scheduled. These emails can be sent immediately or scheduled.
You can send emails for purposes like reminders, promotions, announcements, and even custom authentication flows. You can send emails for purposes like reminders, promotions, announcements, and even custom authentication flows.

View File

@@ -4,11 +4,6 @@ title: SMTP
description: Send emails to your Appwrite users using SMTP and Appwrite Messaging. description: Send emails to your Appwrite users using SMTP and Appwrite Messaging.
back: /docs/ back: /docs/
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
If you wish to use a third-party SMTP provider that Appwrite doesn't yet support or host your own SMTP If you wish to use a third-party SMTP provider that Appwrite doesn't yet support or host your own SMTP
server, you can setup a custom SMTP provider for your project. server, you can setup a custom SMTP provider for your project.

View File

@@ -3,11 +3,6 @@ layout: article
title: Targets title: Targets
description: Manage avenues of communication by targetting user's device, email, or phone number in your notification and messages. description: Manage avenues of communication by targetting user's device, email, or phone number in your notification and messages.
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Targets are different ways a user can be reached. Targets are different ways a user can be reached.
For example, a user might have two emails, a phone number as well as a phone and a tablet with your app installed. For example, a user might have two emails, a phone number as well as a phone and a tablet with your app installed.
This means, the user has five different targets that you can deliver messages to. This means, the user has five different targets that you can deliver messages to.

View File

@@ -4,11 +4,6 @@ title: Telesign
description: Send SMS messages to your Appwrite users using Telesign and Appwrite Messaging. description: Send SMS messages to your Appwrite users using Telesign and Appwrite Messaging.
back: /docs/ back: /docs/
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Telesign lets you send customized SMS messages to your users. Telesign lets you send customized SMS messages to your users.
These SMS messages can be sent immediately or scheduled. These SMS messages can be sent immediately or scheduled.
You can send SMS messages for purposes like reminders, promotions, announcements, and even custom authentication flows. You can send SMS messages for purposes like reminders, promotions, announcements, and even custom authentication flows.

View File

@@ -4,11 +4,6 @@ title: TextMagic
description: Send SMS messages to your Appwrite users using TextMagic and Appwrite Messaging. description: Send SMS messages to your Appwrite users using TextMagic and Appwrite Messaging.
back: /docs/ back: /docs/
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
TextMagic lets you send customized SMS messages to your users. TextMagic lets you send customized SMS messages to your users.
These SMS messages can be sent immediately or scheduled. These SMS messages can be sent immediately or scheduled.
You can send SMS messages for purposes like reminders, promotions, announcements, and even custom authentication flows. You can send SMS messages for purposes like reminders, promotions, announcements, and even custom authentication flows.

View File

@@ -3,11 +3,6 @@ layout: article
title: Topics title: Topics
description: Allow groups of users to subscribe to a common topic and receive the same notifications. description: Allow groups of users to subscribe to a common topic and receive the same notifications.
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
In Appwrite Messaging, you can use topics to deliver messages to groups of users at once. In Appwrite Messaging, you can use topics to deliver messages to groups of users at once.
{% only_dark %} {% only_dark %}

View File

@@ -5,11 +5,6 @@ description: Send SMS messages to your Appwrite users using Twilio and Appwrite
back: /docs/ back: /docs/
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Twilio lets you send customized SMS messages to your users. Twilio lets you send customized SMS messages to your users.
These SMS messages can be sent immediately or scheduled. These SMS messages can be sent immediately or scheduled.
You can send SMS messages for purposes like reminders, promotions, announcements, and even custom authentication flows. You can send SMS messages for purposes like reminders, promotions, announcements, and even custom authentication flows.

View File

@@ -5,11 +5,6 @@ description: Send SMS messages to your Appwrite users using Vonage and Appwrite
back: /docs/ back: /docs/
--- ---
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
Vonage lets you send customized SMS messages to your users. Vonage lets you send customized SMS messages to your users.
These SMS messages can be sent immediately or scheduled. These SMS messages can be sent immediately or scheduled.
You can send SMS messages for purposes like reminders, promotions, announcements, and even custom authentication flows. You can send SMS messages for purposes like reminders, promotions, announcements, and even custom authentication flows.

View File

@@ -49,7 +49,7 @@ You can skip optional steps.
To add the Appwrite SDK for Android as a dependency, add the following to your app-level **build.gradle.kts** file inside the **dependencies** block. To add the Appwrite SDK for Android as a dependency, add the following to your app-level **build.gradle.kts** file inside the **dependencies** block.
```kotlin ```kotlin
implementation("io.appwrite:sdk-for-android:4.0.1") implementation("io.appwrite:sdk-for-android:5.1.0")
``` ```
In order to allow creating OAuth sessions, the following activity needs to be added inside the `<application>` tag, along side the existing `<activity>` tags in your [AndroidManifest.xml](https://github.com/appwrite/playground-for-flutter/blob/master/android/app/src/main/AndroidManifest.xml). In order to allow creating OAuth sessions, the following activity needs to be added inside the `<application>` tag, along side the existing `<activity>` tags in your [AndroidManifest.xml](https://github.com/appwrite/playground-for-flutter/blob/master/android/app/src/main/AndroidManifest.xml).

View File

@@ -54,7 +54,7 @@ cd my-app
Install the JavaScript Appwrite SDK. Install the JavaScript Appwrite SDK.
```sh ```sh
npm install appwrite@13.0.2 npm install appwrite@14.0.1
``` ```
{% /section %} {% /section %}
{% section #step-4 step=4 title="Import Appwrite" %} {% section #step-4 step=4 title="Import Appwrite" %}

View File

@@ -52,7 +52,7 @@ To add the Appwrite SDK for Apple as a dependency, open the **File** menu and cl
In the **Package URL** search box, enter https://github.com/appwrite/sdk-for-apple. In the **Package URL** search box, enter https://github.com/appwrite/sdk-for-apple.
Once the SDK is found, use `4.0.0` as version, select **Up to Next Major Version** as your **Dependency Rule** and click **Add Package**. Once the SDK is found, use `5.0.0` as version, select **Up to Next Major Version** as your **Dependency Rule** and click **Add Package**.
When dependency resolution is complete, click **Add Package** again to add the SDK package to your target. When dependency resolution is complete, click **Add Package** again to add the SDK package to your target.

View File

@@ -53,7 +53,7 @@ After entering the project directory, remove the `lib/` and `test/` directories.
Install the Dart Appwrite SDK. Install the Dart Appwrite SDK.
```sh ```sh
dart pub add dart_appwrite 10.0.0 dart pub add dart_appwrite 11.0.2
``` ```
{% /section %} {% /section %}
{% section #step-4 step=4 title="Import Appwrite" %} {% section #step-4 step=4 title="Import Appwrite" %}

View File

@@ -55,7 +55,7 @@ Install the Deno Appwrite SDK by importing it `deno.land/x` at the top of your f
``` ```
// import all as sdk // import all as sdk
import * as sdk from "https://deno.land/x/appwrite@9.1.0/mod.ts"; import * as sdk from "https://deno.land/x/appwrite@10.0.1/mod.ts";
// import only what you need // import only what you need
import { Client, ... other imports } from "https://deno.land/x/appwrite/mod.ts"; import { Client, ... other imports } from "https://deno.land/x/appwrite/mod.ts";

View File

@@ -59,7 +59,7 @@ cd MyApp
Install the .NET Appwrite SDK. Install the .NET Appwrite SDK.
```sh ```sh
dotnet add package Appwrite --version 0.7.1 dotnet add package Appwrite --version 0.8.1
``` ```
{% /section %} {% /section %}
{% section #step-4 step=4 title="Import Appwrite" %} {% section #step-4 step=4 title="Import Appwrite" %}

View File

@@ -158,7 +158,7 @@ You can skip optional steps.
Install the Appwrite SDK for Flutter. Install the Appwrite SDK for Flutter.
```sh ```sh
flutter pub add appwrite:11.0.1 flutter pub add appwrite:12.0.3
``` ```
{% /section %} {% /section %}

View File

@@ -64,7 +64,7 @@ Open your `build.gradle.kts` file and implement the following dependency.
```groovy ```groovy
dependencies { dependencies {
... other dependencies ... other dependencies
implementation("io.appwrite:sdk-for-kotlin:4.1.0") implementation("io.appwrite:sdk-for-kotlin:5.0.1")
} }
``` ```

View File

@@ -43,7 +43,7 @@ npx create-next-app@latest && cd my-app
Install the JavaScript Appwrite SDK. Install the JavaScript Appwrite SDK.
```sh ```sh
npm install appwrite@13.0.2 npm install appwrite@14.0.1
``` ```
{% /section %} {% /section %}
{% section #step-4 step=4 title="Define Appwrite service" %} {% section #step-4 step=4 title="Define Appwrite service" %}

View File

@@ -46,7 +46,7 @@ npx nuxi@latest init my-app && cd my app
Install the JavaScript Appwrite SDK. Install the JavaScript Appwrite SDK.
```sh ```sh
npm install appwrite@13.0.2 npm install appwrite@14.0.1
``` ```
{% /section %} {% /section %}
{% section #step-4 step=4 title="Import Appwrite" %} {% section #step-4 step=4 title="Import Appwrite" %}

View File

@@ -54,7 +54,7 @@ composer init
Install the PHP Appwrite SDK. Install the PHP Appwrite SDK.
```sh ```sh
composer require appwrite/appwrite:10.1.0 composer require appwrite/appwrite:11.0.1
``` ```
{% /section %} {% /section %}
{% section #step-4 step=4 title="Import Appwrite" %} {% section #step-4 step=4 title="Import Appwrite" %}

View File

@@ -44,7 +44,7 @@ npm create vite@latest my-app -- --template react && cd my-app
Install the JavaScript Appwrite SDK. Install the JavaScript Appwrite SDK.
```sh ```sh
npm install appwrite@13.0.2 npm install appwrite@14.0.1
``` ```
{% /section %} {% /section %}
{% section #step-4 step=4 title="Import Appwrite" %} {% section #step-4 step=4 title="Import Appwrite" %}

View File

@@ -51,7 +51,7 @@ bundle init
{% /section %} {% /section %}
{% section #step-3 step=3 title="Install Appwrite" %} {% section #step-3 step=3 title="Install Appwrite" %}
Install the Ruby Appwrite SDK. Make sure to lock your SDK to version `10.1.2` to avoid breaking changes. Install the Ruby Appwrite SDK. Make sure to lock your SDK to version `10.0.0` to avoid breaking changes.
```sh ```sh
bundle add appwrite bundle add appwrite

View File

@@ -47,7 +47,7 @@ npm create vite@latest my-app -- --template solid && cd my-app
Install the JavaScript Appwrite SDK. Install the JavaScript Appwrite SDK.
```sh ```sh
npm install appwrite@13.0.2 npm install appwrite@14.0.1
``` ```
{% /section %} {% /section %}

View File

@@ -43,7 +43,7 @@ npm create svelte@next my-app && cd my-app && npm install
Install the JavaScript Appwrite SDK. Install the JavaScript Appwrite SDK.
```sh ```sh
npm install appwrite@13.0.2 npm install appwrite@14.0.1
``` ```
{% /section %} {% /section %}
{% section #step-4 step=4 title="Import Appwrite" %} {% section #step-4 step=4 title="Import Appwrite" %}

View File

@@ -63,7 +63,7 @@ Follow the wizard and open your new project.
Install the Swift Appwrite SDK by going to **File** > **Add Packages...** and search for the repo url Install the Swift Appwrite SDK by going to **File** > **Add Packages...** and search for the repo url
`https://github.com/appwrite/sdk-for-swift` and select `sdk-for-swift`. `https://github.com/appwrite/sdk-for-swift` and select `sdk-for-swift`.
Specify version as `4.0.0` with rule **Up to Next Major Version**. Specify version as `5.0.1` with rule **Up to Next Major Version**.
{% /section %} {% /section %}
{% section #step-4 step=4 title="Import Appwrite" %} {% section #step-4 step=4 title="Import Appwrite" %}

View File

@@ -44,7 +44,7 @@ npm init vue@latest my-app && cd my-app
Install the JavaScript Appwrite SDK. Install the JavaScript Appwrite SDK.
```sh ```sh
npm install appwrite@13.0.2 npm install appwrite@14.0.1
``` ```
{% /section %} {% /section %}
{% section #step-4 step=4 title="Import Appwrite" %} {% section #step-4 step=4 title="Import Appwrite" %}

View File

@@ -36,13 +36,13 @@ You can skip optional steps.
{% section #step-2 step=2 title="Create project" %} {% section #step-2 step=2 title="Create project" %}
You can install the Appwrite Web SDK using a package manager. You can install the Appwrite Web SDK using a package manager.
```sh ```sh
npm install appwrite@13.0.2 npm install appwrite@14.0.1
``` ```
You can also add the Appwrite Web SDK using CDN with a script tag. You can also add the Appwrite Web SDK using CDN with a script tag.
```html ```html
<script src="https://cdn.jsdelivr.net/npm/appwrite@13.0.1"></script> <script src="https://cdn.jsdelivr.net/npm/appwrite@14.0.1"></script>
``` ```
{% /section %} {% /section %}
{% section #step-3 step=3 title="Import Appwrite" %} {% section #step-3 step=3 title="Import Appwrite" %}

View File

@@ -18,7 +18,7 @@ export const entries: EntryGenerator = () => {
export const load: PageServerLoad = async ({ params }) => { export const load: PageServerLoad = async ({ params }) => {
const { platform, service } = params; const { platform, service } = params;
const version = params.version === 'cloud' ? '1.4.x' : params.version; const version = params.version === 'cloud' ? '1.5.x' : params.version;
if (!versions.includes(version)) error(404, 'Invalid version'); if (!versions.includes(version)) error(404, 'Invalid version');
if (!services.includes(service as Service)) error(404, 'Invalid service'); if (!services.includes(service as Service)) error(404, 'Invalid service');
if (!platforms.includes(platform as Platform)) error(404, 'Invalid platform'); if (!platforms.includes(platform as Platform)) error(404, 'Invalid platform');

View File

@@ -1,5 +1,5 @@
The Account service allows you to authenticate and manage a user account. You can use the account service to update user information, retrieve the user sessions across different devices, and fetch the user security logs with his or her recent activity. The Account service allows you to authenticate and manage a user account. You can use the account service to update user information, retrieve the user sessions across different devices, and fetch the user security logs with his or her recent activity.
Register new user accounts with the [Create Account](/docs/references/cloud/client-web/account#create), [Create Magic URL session](/docs/references/1.5.x/client-web/account#createMagicURLToken), or [Create Phone session](/docs/references/1.5.x/client-web/account#createPhoneToken) endpoint. You can authenticate the user account by using multiple sign-in methods available. Once the user is authenticated, a new session object will be created to allow the user to access his or her private data and settings. Register new user accounts with the [Create Account](/docs/references/cloud/client-web/account#create), [Create Magic URL session](/docs/references/cloud/client-web/account#createMagicURLToken), or [Create Phone session](/docs/references/cloud/client-web/account#createPhoneToken) endpoint. You can authenticate the user account by using multiple sign-in methods available. Once the user is authenticated, a new session object will be created to allow the user to access his or her private data and settings.
This service also exposes an endpoint to save and read the [user preferences](/docs/references/cloud/client-web/account#updatePrefs) as a key-value object. This feature is handy if you want to allow extra customization in your app. Common usage for this feature may include saving the user's preferred locale, timezone, or custom app theme. This service also exposes an endpoint to save and read the [user preferences](/docs/references/cloud/client-web/account#updatePrefs) as a key-value object. This feature is handy if you want to allow extra customization in your app. Common usage for this feature may include saving the user's preferred locale, timezone, or custom app theme.

View File

@@ -19,7 +19,7 @@ type Example = {
} }
export const load: PageServerLoad = async ({ params }) => { export const load: PageServerLoad = async ({ params }) => {
const version = params.version === 'cloud' ? '1.4.x' : params.version; const version = params.version === 'cloud' ? '1.5.x' : params.version;
const api = await getApi(version, 'console-web'); const api = await getApi(version, 'console-web');
const schema = getSchema(params.model, api); const schema = getSchema(params.model, api);
const props = Object.entries(schema.properties ?? {}); const props = Object.entries(schema.properties ?? {});

View File

@@ -20,25 +20,25 @@ Client libraries for integrating with Appwrite to build client-based application
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/javascript.svg" alt="Javascript logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/javascript.svg" alt="Javascript logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/javascript.svg" alt="Javascript logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/javascript.svg" alt="Javascript logo" size="m" /%}{% /only_light %}
* Web SDK `13.0.1` * Web SDK `14.0.1`
* [appwrite/sdk-for-web](https://github.com/appwrite/sdk-for-web) * [appwrite/sdk-for-web](https://github.com/appwrite/sdk-for-web)
* *
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/flutter.svg" alt="Flutter logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/flutter.svg" alt="Flutter logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/flutter.svg" alt="Flutter logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/flutter.svg" alt="Flutter logo" size="m" /%}{% /only_light %}
* Flutter SDK `11.0.0` * Flutter SDK `12.0.3`
* [appwrite/sdk-for-flutter](https://github.com/appwrite/sdk-for-flutter) * [appwrite/sdk-for-flutter](https://github.com/appwrite/sdk-for-flutter)
* *
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/apple.svg" alt="Apple logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/apple.svg" alt="Apple logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/apple.svg" alt="Apple logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/apple.svg" alt="Apple logo" size="m" /%}{% /only_light %}
* Apple SDK `4.0.0` * Apple SDK `5.0.0`
* [appwrite/sdk-for-apple](https://github.com/appwrite/sdk-for-apple) * [appwrite/sdk-for-apple](https://github.com/appwrite/sdk-for-apple)
* *
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/android.svg" alt="Android logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/android.svg" alt="Android logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/android.svg" alt="Android logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/android.svg" alt="Android logo" size="m" /%}{% /only_light %}
* Android SDK `4.0.0` * Android SDK `5.1.0`
* [appwrite/sdk-for-android](https://github.com/appwrite/sdk-for-android) * [appwrite/sdk-for-android](https://github.com/appwrite/sdk-for-android)
* *
--- ---
@@ -61,55 +61,55 @@ Server libraries for integrating with Appwrite to build server side integrations
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/nodejs.svg" alt="Node.js logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/nodejs.svg" alt="Node.js logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/nodejs.svg" alt="Node.js logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/nodejs.svg" alt="Node.js logo" size="m" /%}{% /only_light %}
* Node.js SDK `11.0.0` * Node.js SDK `12.0.1`
* [appwrite/sdk-for-node](https://github.com/appwrite/sdk-for-node) * [appwrite/sdk-for-node](https://github.com/appwrite/sdk-for-node)
* *
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/dart.svg" alt="Dart logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/dart.svg" alt="Dart logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/dart.svg" alt="Dart logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/dart.svg" alt="Dart logo" size="m" /%}{% /only_light %}
* Dart SDK `10.0.0` * Dart SDK `11.0.2`
* [appwrite/sdk-for-dart](https://github.com/appwrite/sdk-for-dart) * [appwrite/sdk-for-dart](https://github.com/appwrite/sdk-for-dart)
* *
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/python.svg" alt="Python logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/python.svg" alt="Python logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/python.svg" alt="Python logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/python.svg" alt="Python logo" size="m" /%}{% /only_light %}
* Python SDK `4.0.0` * Python SDK `5.0.2`
* [appwrite/sdk-for-python](https://github.com/appwrite/sdk-for-python) * [appwrite/sdk-for-python](https://github.com/appwrite/sdk-for-python)
* *
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/php.svg" alt="PHP logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/php.svg" alt="PHP logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/php.svg" alt="PHP logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/php.svg" alt="PHP logo" size="m" /%}{% /only_light %}
* PHP SDK `10.0.0` * PHP SDK `11.0.1`
* [appwrite/sdk-for-php](https://github.com/appwrite/sdk-for-php) * [appwrite/sdk-for-php](https://github.com/appwrite/sdk-for-php)
* *
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/ruby.svg" alt="Ruby logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/ruby.svg" alt="Ruby logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/ruby.svg" alt="Ruby logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/ruby.svg" alt="Ruby logo" size="m" /%}{% /only_light %}
* Ruby SDK `10.0.0` * Ruby SDK `11.0.1`
* [appwrite/sdk-for-ruby](https://github.com/appwrite/sdk-for-ruby) * [appwrite/sdk-for-ruby](https://github.com/appwrite/sdk-for-ruby)
* *
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/dotnet.svg" alt=".NET logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/dotnet.svg" alt=".NET logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/dotnet.svg" alt=".NET logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/dotnet.svg" alt=".NET logo" size="m" /%}{% /only_light %}
* .NET SDK `0.6.0` * .NET SDK `0.8.1`
* [appwrite/sdk-for-dotnet](https://github.com/appwrite/sdk-for-dotnet) * [appwrite/sdk-for-dotnet](https://github.com/appwrite/sdk-for-dotnet)
* `beta` * `beta`
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/deno.svg" alt="Deno logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/deno.svg" alt="Deno logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/deno.svg" alt="Deno logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/deno.svg" alt="Deno logo" size="m" /%}{% /only_light %}
* Deno SDK `9.1.0` * Deno SDK `10.0.1`
* [appwrite/sdk-for-deno](https://github.com/appwrite/sdk-for-deno) * [appwrite/sdk-for-deno](https://github.com/appwrite/sdk-for-deno)
* *
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/kotlin.svg" alt="Kotlin logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/kotlin.svg" alt="Kotlin logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/kotlin.svg" alt="Kotlin logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/kotlin.svg" alt="Kotlin logo" size="m" /%}{% /only_light %}
* Kotlin SDK `4.1.0` * Kotlin SDK `5.0.1`
* [appwrite/sdk-for-kotlin](https://github.com/appwrite/sdk-for-kotlin) * [appwrite/sdk-for-kotlin](https://github.com/appwrite/sdk-for-kotlin)
* *
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/swift.svg" alt="Swift logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/swift.svg" alt="Swift logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/swift.svg" alt="Swift logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/swift.svg" alt="Swift logo" size="m" /%}{% /only_light %}
* Swift SDK `4.0.0` * Swift SDK `5.0.1`
* [appwrite/sdk-for-swift](https://github.com/appwrite/sdk-for-swift) * [appwrite/sdk-for-swift](https://github.com/appwrite/sdk-for-swift)
* *
{% /table %} {% /table %}
@@ -274,11 +274,6 @@ Appwrite IDs combine a timestamp prefix based on microseconds and a random UID s
## Enums {% #enums %} ## Enums {% #enums %}
Appwrite has enumeration classes for predefined strings used different parameters used for the Appwrite APIs. Appwrite has enumeration classes for predefined strings used different parameters used for the Appwrite APIs.
{% info title="Unreleased on Cloud" %}
This feature is not yet released on Cloud, which is on Appwrite `1.4.x`.
This is a feature available in Appwrite `1.5.x` and will be available on Appwrite Cloud later.
{% /info %}
These enums are available for authenticator type, name, OAuth provider, These enums are available for authenticator type, name, OAuth provider,
password hash types, browsers, authentication factors, index types, credit cards, password hash types, browsers, authentication factors, index types, credit cards,
image gravity, image format, relationship types, SMTP encryption, Function runtime, image gravity, image format, relationship types, SMTP encryption, Function runtime,
@@ -294,22 +289,22 @@ You can discover the available enums in each SDK at the source.
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/javascript.svg" alt="Javascript logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/javascript.svg" alt="Javascript logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/javascript.svg" alt="Javascript logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/javascript.svg" alt="Javascript logo" size="m" /%}{% /only_light %}
* Web SDK `13.0.1` * Web SDK `14.0.1`
* [appwrite/sdk-for-web](https://github.com/appwrite/sdk-for-web/tree/dev/src/enums) * [appwrite/sdk-for-web](https://github.com/appwrite/sdk-for-web/tree/dev/src/enums)
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/flutter.svg" alt="Flutter logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/flutter.svg" alt="Flutter logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/flutter.svg" alt="Flutter logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/flutter.svg" alt="Flutter logo" size="m" /%}{% /only_light %}
* Flutter SDK `11.0.1` * Flutter SDK `12.0.3`
* [appwrite/sdk-for-flutter](https://github.com/appwrite/sdk-for-flutter/tree/dev/lib/src/enums) * [appwrite/sdk-for-flutter](https://github.com/appwrite/sdk-for-flutter/tree/dev/lib/src/enums)
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/apple.svg" alt="Apple logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/apple.svg" alt="Apple logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/apple.svg" alt="Apple logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/apple.svg" alt="Apple logo" size="m" /%}{% /only_light %}
* Apple SDK `4.0.0` * Apple SDK `5.0.0`
* [appwrite/sdk-for-apple](https://github.com/appwrite/sdk-for-apple/tree/dev/Sources/AppwriteEnums) * [appwrite/sdk-for-apple](https://github.com/appwrite/sdk-for-apple/tree/dev/Sources/AppwriteEnums)
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/android.svg" alt="Android logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/android.svg" alt="Android logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/android.svg" alt="Android logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/android.svg" alt="Android logo" size="m" /%}{% /only_light %}
* Android SDK `4.0.0` * Android SDK `5.1.0`
* [appwrite/sdk-for-android](https://github.com/appwrite/sdk-for-android/tree/dev/library/src/main/java/io/appwrite/enums) * [appwrite/sdk-for-android](https://github.com/appwrite/sdk-for-android/tree/dev/library/src/main/java/io/appwrite/enums)
{% /table %} {% /table %}
{% /tabsitem %} {% /tabsitem %}
@@ -324,7 +319,7 @@ You can discover the available enums in each SDK at the source.
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/nodejs.svg" alt="Node.js logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/nodejs.svg" alt="Node.js logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/nodejs.svg" alt="Node.js logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/nodejs.svg" alt="Node.js logo" size="m" /%}{% /only_light %}
* Node.js SDK `11.0.0` * Node.js SDK `12.0.1`
* [appwrite/sdk-for-node](https://github.com/appwrite/sdk-for-node/tree/dev/lib/enums) * [appwrite/sdk-for-node](https://github.com/appwrite/sdk-for-node/tree/dev/lib/enums)
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/dart.svg" alt="Dart logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/dart.svg" alt="Dart logo" size="m" /%}{% /only_dark %}
@@ -334,37 +329,37 @@ You can discover the available enums in each SDK at the source.
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/python.svg" alt="Python logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/python.svg" alt="Python logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/python.svg" alt="Python logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/python.svg" alt="Python logo" size="m" /%}{% /only_light %}
* Python SDK `4.0.0` * Python SDK `5.0.2`
* [appwrite/sdk-for-python](https://github.com/appwrite/sdk-for-python/tree/dev/appwrite/enums) * [appwrite/sdk-for-python](https://github.com/appwrite/sdk-for-python/tree/dev/appwrite/enums)
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/php.svg" alt="PHP logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/php.svg" alt="PHP logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/php.svg" alt="PHP logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/php.svg" alt="PHP logo" size="m" /%}{% /only_light %}
* PHP SDK `10.0.0` * PHP SDK `11.0.1`
* [appwrite/sdk-for-php](https://github.com/appwrite/sdk-for-php/tree/dev/src/Appwrite/Enums) * [appwrite/sdk-for-php](https://github.com/appwrite/sdk-for-php/tree/dev/src/Appwrite/Enums)
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/ruby.svg" alt="Ruby logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/ruby.svg" alt="Ruby logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/ruby.svg" alt="Ruby logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/ruby.svg" alt="Ruby logo" size="m" /%}{% /only_light %}
* Ruby SDK `10.0.0` * Ruby SDK `11.0.1`
* [appwrite/sdk-for-ruby](https://github.com/appwrite/sdk-for-ruby/tree/dev/lib/appwrite/enums) * [appwrite/sdk-for-ruby](https://github.com/appwrite/sdk-for-ruby/tree/dev/lib/appwrite/enums)
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/dotnet.svg" alt=".NET logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/dotnet.svg" alt=".NET logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/dotnet.svg" alt=".NET logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/dotnet.svg" alt=".NET logo" size="m" /%}{% /only_light %}
* .NET SDK `0.6.0` * .NET SDK `0.8.1`
* [appwrite/sdk-for-dotnet](https://github.com/appwrite/sdk-for-dotnet/tree/dev/src/Appwrite/Enums) * [appwrite/sdk-for-dotnet](https://github.com/appwrite/sdk-for-dotnet/tree/dev/src/Appwrite/Enums)
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/deno.svg" alt="Deno logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/deno.svg" alt="Deno logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/deno.svg" alt="Deno logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/deno.svg" alt="Deno logo" size="m" /%}{% /only_light %}
* Deno SDK `9.0.0` * Deno SDK `10.0.1`
* [appwrite/sdk-for-deno](https://github.com/appwrite/sdk-for-deno/tree/dev/src/enums) * [appwrite/sdk-for-deno](https://github.com/appwrite/sdk-for-deno/tree/dev/src/enums)
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/kotlin.svg" alt="Kotlin logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/kotlin.svg" alt="Kotlin logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/kotlin.svg" alt="Kotlin logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/kotlin.svg" alt="Kotlin logo" size="m" /%}{% /only_light %}
* Kotlin SDK `4.0.0` * Kotlin SDK `5.0.1`
* [appwrite/sdk-for-kotlin](https://github.com/appwrite/sdk-for-kotlin/tree/dev/src/main/kotlin/io/appwrite/enums) * [appwrite/sdk-for-kotlin](https://github.com/appwrite/sdk-for-kotlin/tree/dev/src/main/kotlin/io/appwrite/enums)
--- ---
* {% only_dark %}{% icon_image src="/images/platforms/dark/swift.svg" alt="Swift logo" size="m" /%}{% /only_dark %} * {% only_dark %}{% icon_image src="/images/platforms/dark/swift.svg" alt="Swift logo" size="m" /%}{% /only_dark %}
{% only_light %}{% icon_image src="/images/platforms/swift.svg" alt="Swift logo" size="m" /%}{% /only_light %} {% only_light %}{% icon_image src="/images/platforms/swift.svg" alt="Swift logo" size="m" /%}{% /only_light %}
* Swift SDK `4.0.0` * Swift SDK `5.0.1`
* [appwrite/sdk-for-swift](https://github.com/appwrite/sdk-for-swift/tree/dev/Sources/AppwriteEnums) * [appwrite/sdk-for-swift](https://github.com/appwrite/sdk-for-swift/tree/dev/Sources/AppwriteEnums)
{% /table %} {% /table %}
{% /tabsitem %} {% /tabsitem %}

View File

@@ -16,7 +16,7 @@ Install the Android Appwrite SDK.
Add the following to your dependencies in the `app/build.gradle` file: Add the following to your dependencies in the `app/build.gradle` file:
```groovy ```groovy
implementation("io.appwrite:sdk-for-android:4.0.1") implementation("io.appwrite:sdk-for-android:5.1.0")
``` ```
In case you need to create OAuth 2 sessions in the future, the following activity needs to be added inside the `<application>` tag, along side the existing `<activity>` tags in your [AndroidManifest.xml](https://developer.android.com/guide/topics/manifest/manifest-intro). In case you need to create OAuth 2 sessions in the future, the following activity needs to be added inside the `<application>` tag, along side the existing `<activity>` tags in your [AndroidManifest.xml](https://developer.android.com/guide/topics/manifest/manifest-intro).

View File

@@ -20,7 +20,7 @@ Once the project is created, change your current working directory and install t
```sh ```sh
cd ideas-tracker cd ideas-tracker
npm install appwrite@13.0.2 npm install appwrite@14.0.1
npm install "@appwrite.io/pink" npm install "@appwrite.io/pink"
``` ```

View File

@@ -18,7 +18,7 @@ npm create vite@latest --template react ideas-tracker && cd ideas-tracker
Install the JavaScript Appwrite SDK. Install the JavaScript Appwrite SDK.
```sh ```sh
npm install appwrite@13.0.2 npm install appwrite@14.0.1
``` ```
You can start the development server to watch your app update in the browser as you make changes. You can start the development server to watch your app update in the browser as you make changes.

View File

@@ -48,5 +48,5 @@ npm install
Appwrite provides a Web SDK that can be used in your Svelte apps. You can use Appwrite by installing the Web SDK as an NPM package. Appwrite provides a Web SDK that can be used in your Svelte apps. You can use Appwrite by installing the Web SDK as an NPM package.
```sh ```sh
npm install appwrite@13.0.2 npm install appwrite@14.0.1
``` ```

View File

@@ -20,7 +20,7 @@ npm install
Install the JavaScript Appwrite SDK. Install the JavaScript Appwrite SDK.
```sh ```sh
npm install appwrite@13.0.2 npm install appwrite@14.0.1
``` ```
You can start the development server to watch your app update in the browser as you make changes. You can start the development server to watch your app update in the browser as you make changes.

View File

@@ -18,7 +18,7 @@ npm create vite@latest --template vue ideas-tracker && cd ideas-tracker
Install the JavaScript Appwrite SDK. Install the JavaScript Appwrite SDK.
```sh ```sh
npm install appwrite@13.0.2 npm install appwrite@14.0.1
``` ```
You can start the development server to watch your app update in the browser as you make changes. You can start the development server to watch your app update in the browser as you make changes.

Binary file not shown.

After

Width:  |  Height:  |  Size: 860 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 860 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 876 KiB