Announcing Appwrite 0.8 - an open-source, self-hosted BaaS
Tags: javascript, flutter, webdev, news
Published: 2021-05-19 16:11:20

We're incredibly excited to announce the release of Appwrite 0.8, packed with a ton of cool new features like **JWT support**, **ARM support**, **Anonymous Login**, and more! Last month, we gave a [sneak peek](https://medium.com/appwrite-io/appwrite-0-8-is-coming-soon-and-this-is-what-you-can-expect-fa8cbed1c0eb) of some of the changes, and we're back today to keep you waiting no longer. Let's dive in! 🤿

> Appwrite is an open-source, self-hosted Backend-as-a-Service that aims to make app development **easier** with SDKs available in a variety of programming languages. Come hang out with us on [Discord](https://appwrite.io/discord).

## Anonymous Login and JWT 🔐

Not every app needs users to create an account right away. With **Anonymous Login**, save sessions without asking for email addresses, and convert those users to registered accounts later with ease. The implementation is just like creating a normal user session via the [`createSession`](https://appwrite.io/docs/client/account?sdk=web#accountCreateSession) method:

```js
let sdk = new Appwrite();

sdk
    .setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
    .setProject('5df5acd0d48c2') // Your project ID
;

let promise = sdk.account.createAnonymousSession();

promise.then(function (response) {
    console.log(response); // Success
}, function (error) {
    console.log(error); // Failure
});
```

 Also, if you've ever needed to act as a user from a [server SDK](https://appwrite.io/docs/sdks), Appwrite now supports authentication via JSON Web Tokens ([JWT](https://jwt.io/)). This change allows Appwrite to work with the server-side rendering capabilities of frameworks like [Next.js](https://nextjs.org/), [Nuxt.js](https://nuxtjs.org/), and [Gatsby.js](https://www.gatsbyjs.com/), as well as unlock user actions from server-side SDKs.

First, a JWT is created for the user from a Client SDK:

```js
appwrite
    .account.createJWT()
    .then(function (response) {
        console.log(response);
    }, function (error) {
        console.log(error);
    });
```

Then, the JWT is used to act on behalf of the user server-side:

```js
const sdk = require('node-appwrite');

let client = new sdk.Client();

client
    .setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
    .setProject('5df5acd0d48c2') // Your project ID
    .setJWT('919c2d18fb5d4...a2ae413da83346ad2') // Your JWT
```

## ARM Support 🦾

The ARM ecosystem has been booming since Apple's M1 processors landed in their new lineup of devices. Starting with 0.8, install Appwrite on your favorite 64-bit ARM device, from Amazon Graviton2 down to the Raspberry Pi 4! [1] ARM support falls in line with our mission to make Appwrite **technology agnostic**, and we're excited to hear all of the new places where Appwrite can run. 

To celebrate this milestone, we have ARM systems to give away as a part of [#30DaysofAppwrite](https://30days.appwrite.io/)! 🥳 Through the month of May, we're building a Medium.com blog clone to demonstrate how **easy** the developer experience is with Appwrite, and we invite you to build alongside us. Eligible submissions get some cool 😎 swag, and the best projects will receive Raspberry Pi 4 development kits. 😍

> [1] For both Graviton2 servers and Raspberry Pis, we recommend at least 2GB of RAM for the best Appwrite experience.

## Control your Console 🖥️

We've updated the console with a few new goodies. First, if you enable the new "root" account setting, only a single admin account can be created on your Appwrite server. If you need to share access to the Appwrite console, you can restrict account creation to specific IP addresses with the `_APP_CONSOLE_WHITELIST_IPS` environment variable. 

Additionally, Appwrite 0.8 brings new settings to users - now, you can choose which of our growing authentication methods you'd like to use for your apps: email/password login, anonymous login, JWT auth, and more! 

![Control Auth Methods](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hl8sa1dyish9bkx0d7hn.png)

## New Cloud Function Runtimes 🏃

Appwrite 0.8 introduces **Python 3.9**, **Deno 1.8**, and **Dart 2.12** as new runtimes for Cloud Functions. Upgrade existing functions or write new ones! If you're using Cloud Functions in a cool way, let us know on [Discord](https://appwrite.io/discord).

## Slimmer and Faster ⏩

You'll notice Appwrite 0.8 is a bit slimmer on system resources out-of-the-box. We found that the SMTP and antivirus services weren't helping new developers, so we've toggled off ClamAV and the included SMTP server for development. Because of these changes, we have been able to reduce our minimum requirements to **1GB of RAM** (though we recommend 2GB for the better experience).

We also updated our codebase to take advantage of the increased performance of some of our under the hood technologies. Based on our testing, we're seeing improved performance of about 8% compared to previous Appwrite versions 🚀

![Benchmarks](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pgfyhk1szev9gyew9gxg.png)

## Breaking Changes ⚒️

Before you upgrade your Appwrite server to 0.8, check out the breaking changes that were introduced to see if you need to update any code.

- The [`deleteUser` method](https://appwrite.io/docs/server/users#usersDeleteUser) in the Users API has been renamed to `delete` to remain consistent with the rest of the API.
- Only logged in users [with active sessions](https://appwrite.io/docs/client/account?sdk=web#accountCreateSession) can execute functions. If your app relies on this behavior, check out Anonymous Login.
- Only the user who [triggers an execution](https://appwrite.io/docs/client/functions?sdk=web#functionsCreateExecution) gets access to the relevant execution logs.
- The [`createMembership` method](https://appwrite.io/docs/client/teams?sdk=web#teamsCreateMembership) has a new rate limit of 10 requests per 60 minutes per IP address.
- The [environment variable](https://appwrite.io/docs/environment-variables) `_APP_FUNCTIONS_ENVS` has been renamed to `APP_FUNCTIONS_RUNTIMES`.
- Several function execution environment variables have been renamed:
  - `APPWRITE_FUNCTION_EVENT_PAYLOAD` is now `APPWRITE_FUNCTION_EVENT_DATA`
  - `APPWRITE_FUNCTION_ENV_NAME` is now `APPWRITE_FUNCTION_RUNTIME_NAME`
  - `APPWRITE_FUNCTION_ENV_VERSION` is now `APPWRITE_FUNCTION_RUNTIME_VERSION`

## And More! 😍

That's not all! To get all the details on Appwrite 0.8, check out all the changes in the [changelog on GitHub](https://github.com/appwrite/appwrite/blob/master/CHANGES.md). Are you curious about the big ideas we have up next, or have a great idea for Appwrite's future? Check out the [RFC Repo](https://github.com/appwrite/rfc) for more details. Also, our [awesome-appwrite repo](https://github.com/appwrite/awesome-appwrite) keeps growing with new tutorials, videos, and demos.

If you've just discovered Appwrite and would like to get started, check out out our [30 Days of Appwrite](https://30days.appwrite.io/) series where we explain step-by-step everything you need to know to build awesome Appwrite-powered apps. Follow us on [Twitter](https://twitter.com/appwrite_io), [Dev.to](https://dev.to/appwrite), or anywhere you find your friendly neighborhood Appwrite.