It's Here! Announcing the Release of Appwrite 0.12!
Tags: javascript, webdev, programming, news
Published: 2022-01-05 10:37:45

We're excited to share that Appwrite 0.12 is now officially available! The new Appwrite version includes our **biggest ever performance improvements**, **enhanced developer experience**, and **many new features** designed to make developers' lives easier. Trust us, this one's a biggie! In addition, the latest release includes over 1,500 commits and contributions from 29 new contributors that have helped make this release possible.

## 🧪 Database on Steroids

In version 0.12, we have **_completely_** rewritten the Appwrite data management layer. We have improved the internal data structures, background workers, and we’ve enabled new concepts such as attributes (instead of rules) and indexes to allow maximum performance and flexibility.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mri55xtzr37e6bz14ocf.png)
 

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

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

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

## 📑 Pagination Just Got A LOT Faster!

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

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

![Cursor vs Offset Pagination](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gy7j3oexkncs4irn1kcc.png)

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

## 🚧 Permissions are Easier and More Flexible

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

![Appwrite's Permission Models](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q7p6tj82pekwivp2iu5c.png)

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

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

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

## 🎛 More Dashboards, and More Control

![Appwrite's Usage Stats](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7htmepbs9quia7lfho36.png)

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

## 🤟 Anyone Ask for Custom IDs?

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

![Appwrite's Custom IDs](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w9g9eor5pqtw6o0mfkme.png)

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

## ✅ Your Services, Your Choice!

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/98grnzummhp5xn9myt8a.png)

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

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

## 🚨 Introducing Logging Providers!

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

![Loggers](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0vp1holzdty548j4ld4e.png)

We're always on the lookout for more logging providers and we'd love your contributions to the [logging library](https://github.com/utopia-php/logger). 


## 📚 Learn More

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

## 🗂⚡️☁️ What's Next?

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

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

Beside the upcoming releases and features, we’ve just recently announced the ability to sign up and be the first to use the upcoming Appwrite Cloud. The **Appwrite Cloud** is already in the works, and once available it will provide the easiest way to build on top of Appwrite and to scale your backend effortlessly. You can learn more on our new dedicated landing page for the [Appwrite Cloud](https://appwrite.io/cloud).