DEV Community πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»

DEV Community πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» is a community of 966,904 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

Create account Log in
Cover image for Announcing Appwrite 0.13 with Major Upgrades to Storage and Functions
Eldad A. Fux for Appwrite

Posted on

Announcing Appwrite 0.13 with Major Upgrades to Storage and Functions

Only one month after the release of Appwrite 0.12, we’re excited to announce the release of Appwrite 0.13. The new release includes multiple major features to take your Appwrite experience to the extreme and help you implement some new and exciting use cases on top of your shiny, open-source, and self-hosted backend-as-a-service.

⏰ TL;DR

TLDR

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

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

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

New to Appwrite?

Appwrite is an open-source back-end-as-a-service that abstracts all the complexity of building a modern application by providing you with a set of REST APIs for your core back-end needs. Appwrite takes the heavy lifting for developers and handles user authentication and authorization, databases, file storage, cloud functions, webhooks, and much more!

πŸ“¦ Storage Buckets

Storage Buckets

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

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

πŸ—„ Storage Adapters and S3 Support

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

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

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

πŸ“ˆ Support for (VERY) Big Files

Large Files

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

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

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

πŸ§‘β€πŸ’» CLI v2.0 and a new Build Worker

Appwrite CLI

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

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

⚑️ Improved and (WAY) Faster Runtimes for Cloud Functions

Improved Functions

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

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

🀩 Many More Features

OAuth Providers

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

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

πŸ“š Learn More

Appwrite 0.13 includes many more features, bug fixes, and security patches you should really care about that just can’t fit in one blog post. You can learn more by reviewing our official release notes. In the next couple of weeks, we will continue the Appwrite 0.13 release party with more content, events, and demos created by the core team to highlight the different features and powerful capabilities in this new version of Appwrite. Stay tuned!

Top comments (8)

Collapse
 
pavelloz profile image
PaweΕ‚ Kowalski • Edited on

Good job on functions performance. I need to take a closer look now.

Quick questions:

  1. Are functions more or less as powerful as AWS Lambda?
  2. Could i run puppeteer inside a function?
  3. Is it scaling concurrently if my load spikes to 100req/s once a while?
  4. Is it possible to interact with storage from a function (ie. get file, transform it, put it back) without going into the internet - meaning: insite virtual network, for speed (and security) of interaction between both services?

PS. Is there any full-text search capability in appwrite (ala elasticsearch)?

Edit:
I think i found answer for 4 :)

Collapse
 
eldadfux profile image
Eldad A. Fux Author
  1. YES
  2. Theoretically, you can use any NPM package.
  3. We use multithreaded runtimes, but auto-scaling is still not available out of the box, that said, you can easily scale your Appwrite function's executor to scale up.
  4. Yes, you can interact with an API or service form a function, especially the Appwrite API.
Collapse
 
gevera profile image
Denis Donici • Edited on

What to expect in future from Appwrite?

Collapse
 
eldadfux profile image
Eldad A. Fux Author

We have many more surprises coming soon 🀩

Collapse
 
bigfish258 profile image
hutu zhu

awesome !

Collapse
 
eldadfux profile image
Eldad A. Fux Author

Thank you!!!

Collapse
 
haitacnj profile image
haitacnj

awesome

Collapse
 
davidjeba profile image
davidjeba

modules required

1.Inventory
|____ bookable inventory [space rent, vehicle rent, ticket bookings]
|____ shippable inventory [retail items]
|____ digital services [subscription services]
+ Rearrangeable Category/Subscategory/Groups etc [Tree Hierarchy design]

2.Payments
|____ Partial payment + recurring remaining payment
|____ Fixed Recurring payment [monthly, quarterly, semi-annually, annual]
|____ one time payment
|____ crowdsourced payment [payment done by multiple people] eg: donations

What image format should you use in your next project? πŸ€”