DEV Community

Cover image for Announcing Appwrite 0.9: The open source Firebase alternative
Christy Jacob for Appwrite

Posted on • Updated on

Announcing Appwrite 0.9: The open source Firebase alternative

The last month was a crazy one. We've put together over 250 commits, 20k lines of code and countless hours to bring you the best Appwrite version ever! With that, we're incredibly excited to announce the release of Appwrite 0.9, packed with a ton of cool new features like Android support, Kotlin Server SDK, Flutter Desktop Support, and much more! Without spending any more time, 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.

πŸ€– Android Support

It's finally here πŸ“Œ Appwrite now has official support for Android! Our SDK has been out in the wild for over 2 weeks now - we've gathered some amazing feedback from the community, and we're now ready to present it to all of you! We've got all the setup instructions in our new Getting Started Guide, but here's what you'll need to do, in a nutshell πŸ₯œ.

Include the mavenCentral() repository in your project's build.gradle(.kts) file

repositories {      
    mavenCentral()
}
Enter fullscreen mode Exit fullscreen mode

Add the Android SDK in your app's build.gradle(.kts) file.

dependencies {
    implementation("io.appwrite:sdk-for-android:0.0.1")
}
Enter fullscreen mode Exit fullscreen mode

🀩 Then make your first request using

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import io.appwrite.Client
import io.appwrite.services.Account

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val client = Client(applicationContext)
            .setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
            .setProject("5df5acd0d48c2") // Your project ID

        val account = Account(client)

        GlobalScope.launch {
            val response = account.create(
                email = "email@example.com",
                password = "password",
            )      
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

We also have some example apps to help you get started

🦾 Kotlin Server SDK

We also released a brand new Kotlin Server SDK to go along with the Android one! Setting up the Kotlin SDK is a similar drill. You can check out our Getting Started Guide or follow along for a quick summary.

Add the dependency to your pom.xml file.

<dependencies>
    <dependency>
        <groupId>io.appwrite</groupId>
        <artifactId>sdk-for-kotlin</artifactId>
        <version>0.0.1</version>
    </dependency>
</dependencies>
Enter fullscreen mode Exit fullscreen mode

Or your build.gradle(.kts) file if using Gradle as your build system.

dependencies {
    implementation("io.appwrite:sdk-for-kotlin:0.0.1")
}
Enter fullscreen mode Exit fullscreen mode

πŸš€ Then make your first request using

import io.appwrite.Client
import io.appwrite.services.Users

suspend fun main() {
    val client = Client(context)
      .setEndpoint("https://[HOSTNAME_OR_IP]/v1") 
      .setProject("5df5acd0d48c2")
      .setKey("919c2d18fb5d4...a2ae413da83346ad2")

    val users = Users(client)
    val response = users.create(
        email = "email@example.com",
        password = "password",
    )

    val json = response.body?.string()
}
Enter fullscreen mode Exit fullscreen mode

We also have some example apps to help you get started

πŸ–₯️ Flutter Desktop Support

With Appwrite 0.9, we've enabled platform wide support for your Flutter Desktop Apps! You can now register your Linux, Windows and Mac apps from the Dashboard!

Flutter Desktop

πŸƒ New Cloud Function Runtimes

Our Cloud Function runtimes list continues to grow with over 20+ (!) runtimes. This time we've added support for deno-1.10, deno-1.11, dart 2.13, node-16.0 , java-11.0 and java-16.0. We've got you covered πŸ’ͺ no matter what your favourite language is! If you're looking for some creative ways to get started with Cloud Functions, feel free to check out our demos.

βš’οΈ Breaking Changes

Breaking changes are hard, but unfortunately, they're a necessary evil! We've kept those nasty breaking changes to a bare minimum with this release and only made changes to our Server SDKs:

  • env has been renamed to runtime in the POST v1/functions endpoint. If you're using named parameters in your server SDKs, you will need to update them.

  • deleteUser has been replaced in favour of the delete method in all our Server SDKs.

πŸš€ Everything else

  • Our Image Preview πŸ“Έ endpoint now let's you specify a gravity giving you much more control when cropping your images!

  • One of our community members @Meldiron, helped speed up our Cloud Function executions by upto a whopping 4s 🀯 in some cases.

  • We revamped our User Sessions UI in the Dashboard to give you more fine grained information about a user's session.
    sessions

  • We've added some additional metadata in our File Preview Dialog to make it easier to view your file types, file size and the creation date.
    meta-data

  • Internally, we've optimized our database connection pools for overall improved server performance 🀩

  • Gone are the days of running multiple migration scripts to upgrade to the latest version of Appwrite! From Appwrite 0.9, it's just a single script!

  • Based on popular demand, we've added a new endpoint to get a session by ID and another endpoint to force update the user verification status from Server Side SDKs.

  • Last but not the least, we've overhauled our Email Templates in an attempt to offer lot more customization in the future!

  • Let's not forget, you also helped us reach a major milestone of 10k Github stars ⭐️ making us one of the top 2000 projects in Github history! We also crossed a landmark 2.2M Docker pulls and over 40k reads on our blog posts! Thank you so much for all your support!
    star

😍 And More!

We still haven't covered everything! There's lots more bug fixes and other micro optimizations we made under the hood to make your experience with Appwrite better! To get all the details on Appwrite 0.9, check out all the changes in the changelog on GitHub.

If you're upgrading from an older version of Appwrite, be sure to follow our Upgrading guide so that you don't loose your way in uncharted territories πŸ˜‰.

Are you curious about the big ideas we have up next, or have a great idea for Appwrite's future? Check out the RFC Repository for more details. Also, our awesome-appwrite repository 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 series where we explain step-by-step everything you need to know to build awesome Appwrite-powered apps. Follow us on Twitter, Dev.to, or anywhere you find your friendly neighbourhood Appwrite.

Top comments (3)

Collapse
 
egorsmkv profile image
Yehor Smoliakov

Thanks to all team members!

Collapse
 
jagaryousef profile image
Jagar

Good work, but you will need more to work on the security concern since saving strings in android is not safe and if anyone can conncet the API using these strings only, it could be an issue.

Collapse
 
christyjacob4 profile image
Christy Jacob • Edited

Thanks a lot but you can add these strings as part of your build config and access them inside your code using BuildConfig.[your string name]

This is a pretty standard practice 😊