From 1a1740ac7a8f1af91c7e0488fe8aae633ad16353 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Mon, 23 Mar 2026 17:53:58 +0530 Subject: [PATCH 1/5] feat: add Rust SDK support Add Rust SDK entry to server platform config, wire up the Rust language class in the SDK generation task, update sdk-generator to dev-rust branch, and create the changelog directory. --- app/config/sdks.php | 19 ++++++++++ composer.json | 14 +------ composer.lock | 55 +++++++--------------------- docs/sdks/rust/CHANGELOG.md | 5 +++ src/Appwrite/Platform/Tasks/SDKs.php | 4 ++ 5 files changed, 42 insertions(+), 55 deletions(-) create mode 100644 docs/sdks/rust/CHANGELOG.md diff --git a/app/config/sdks.php b/app/config/sdks.php index 1a808aa10a..13fb444216 100644 --- a/app/config/sdks.php +++ b/app/config/sdks.php @@ -494,6 +494,25 @@ return [ 'gitBranch' => 'dev', 'changelog' => \realpath(__DIR__ . '/../../docs/sdks/swift/CHANGELOG.md'), ], + [ + 'key' => 'rust', + 'name' => 'Rust', + 'version' => '0.1.0', + 'url' => 'https://github.com/appwrite/sdk-for-rust', + 'package' => 'https://crates.io/crates/appwrite', + 'enabled' => true, + 'beta' => true, + 'dev' => true, + 'hidden' => false, + 'family' => APP_SDK_PLATFORM_SERVER, + 'prism' => 'rust', + 'source' => \realpath(__DIR__ . '/../sdks/server-rust'), + 'gitUrl' => 'git@github.com:appwrite/sdk-for-rust.git', + 'gitRepoName' => 'sdk-for-rust', + 'gitUserName' => 'appwrite', + 'gitBranch' => 'dev', + 'changelog' => \realpath(__DIR__ . '/../../docs/sdks/rust/CHANGELOG.md'), + ], [ 'key' => 'graphql', 'name' => 'GraphQL', diff --git a/composer.json b/composer.json index 2448a55522..ebfdce5123 100644 --- a/composer.json +++ b/composer.json @@ -97,15 +97,9 @@ "enshrined/svg-sanitize": "0.22.*", "utopia-php/di": "0.1.0" }, - "repositories": [ - { - "type": "vcs", - "url": "https://github.com/utopia-php/database" - } - ], "require-dev": { "ext-fileinfo": "*", - "appwrite/sdk-generator": "*", + "appwrite/sdk-generator": "dev-rust", "brianium/paratest": "7.*", "phpunit/phpunit": "12.*", "swoole/ide-helper": "6.*", @@ -114,12 +108,6 @@ "czproject/git-php": "4.*", "laravel/pint": "1.*" }, - "repositories": [ - { - "type": "vcs", - "url": "https://github.com/utopia-php/database" - } - ], "provide": { "ext-phpiredis": "*" }, diff --git a/composer.lock b/composer.lock index 50b317c811..3c0a593dae 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "1404c8821e43b3fe92e06a8ed658ed26", + "content-hash": "2151d1eaf65d48acb56e5e8ebdeeab2b", "packages": [ { "name": "adhocore/jwt", @@ -3889,38 +3889,7 @@ "Utopia\\Database\\": "src/Database" } }, - "autoload-dev": { - "psr-4": { - "Tests\\E2E\\": "tests/e2e", - "Tests\\Unit\\": "tests/unit" - } - }, - "scripts": { - "build": [ - "Composer\\Config::disableProcessTimeout", - "docker compose build" - ], - "start": [ - "Composer\\Config::disableProcessTimeout", - "docker compose up -d" - ], - "test": [ - "Composer\\Config::disableProcessTimeout", - "docker compose exec tests vendor/bin/phpunit --configuration phpunit.xml" - ], - "lint": [ - "php -d memory_limit=2G ./vendor/bin/pint --test" - ], - "format": [ - "php -d memory_limit=2G ./vendor/bin/pint" - ], - "check": [ - "./vendor/bin/phpstan analyse --level 7 src tests --memory-limit 2G" - ], - "coverage": [ - "./vendor/bin/coverage-check ./tmp/clover.xml 90" - ] - }, + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -3933,8 +3902,8 @@ "utopia" ], "support": { - "source": "https://github.com/utopia-php/database/tree/5.3.17", - "issues": "https://github.com/utopia-php/database/issues" + "issues": "https://github.com/utopia-php/database/issues", + "source": "https://github.com/utopia-php/database/tree/5.3.17" }, "time": "2026-03-20T01:18:52+00:00" }, @@ -5469,16 +5438,16 @@ "packages-dev": [ { "name": "appwrite/sdk-generator", - "version": "1.11.11", + "version": "dev-rust", "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "cfc37c85161a5515af4cd2f9885a811f51a2483a" + "reference": "0e3195f941a5c415a0f8fe12a3d1c005394f0eae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/cfc37c85161a5515af4cd2f9885a811f51a2483a", - "reference": "cfc37c85161a5515af4cd2f9885a811f51a2483a", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/0e3195f941a5c415a0f8fe12a3d1c005394f0eae", + "reference": "0e3195f941a5c415a0f8fe12a3d1c005394f0eae", "shasum": "" }, "require": { @@ -5514,9 +5483,9 @@ "description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms", "support": { "issues": "https://github.com/appwrite/sdk-generator/issues", - "source": "https://github.com/appwrite/sdk-generator/tree/1.11.11" + "source": "https://github.com/appwrite/sdk-generator/tree/rust" }, - "time": "2026-03-19T16:21:03+00:00" + "time": "2026-03-23T12:05:34+00:00" }, { "name": "brianium/paratest", @@ -8465,7 +8434,9 @@ ], "aliases": [], "minimum-stability": "dev", - "stability-flags": {}, + "stability-flags": { + "appwrite/sdk-generator": 20 + }, "prefer-stable": true, "prefer-lowest": false, "platform": { diff --git a/docs/sdks/rust/CHANGELOG.md b/docs/sdks/rust/CHANGELOG.md new file mode 100644 index 0000000000..bbfc68354e --- /dev/null +++ b/docs/sdks/rust/CHANGELOG.md @@ -0,0 +1,5 @@ +# Change Log + +## 0.1.0 + +* Initial release diff --git a/src/Appwrite/Platform/Tasks/SDKs.php b/src/Appwrite/Platform/Tasks/SDKs.php index 528084f4ea..4ef6ae7ac8 100644 --- a/src/Appwrite/Platform/Tasks/SDKs.php +++ b/src/Appwrite/Platform/Tasks/SDKs.php @@ -21,6 +21,7 @@ use Appwrite\SDK\Language\Python; use Appwrite\SDK\Language\ReactNative; use Appwrite\SDK\Language\REST; use Appwrite\SDK\Language\Ruby; +use Appwrite\SDK\Language\Rust; use Appwrite\SDK\Language\Swift; use Appwrite\SDK\Language\Web; use Appwrite\SDK\SDK; @@ -287,6 +288,9 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND $config = new Kotlin(); $warning = $warning . "\n\n > This is the Kotlin SDK for integrating with Appwrite from your Kotlin server-side code. If you're looking for the Android SDK you should check [appwrite/sdk-for-android](https://github.com/appwrite/sdk-for-android)"; break; + case 'rust': + $config = new Rust(); + break; case 'graphql': $config = new GraphQL(); break; From ce5d5cf6efe08b3c3b7b779aa50229ddcc21c502 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Mon, 23 Mar 2026 17:58:24 +0530 Subject: [PATCH 2/5] docs: add Rust SDK getting started guide --- docs/sdks/rust/GETTING_STARTED.md | 68 +++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 docs/sdks/rust/GETTING_STARTED.md diff --git a/docs/sdks/rust/GETTING_STARTED.md b/docs/sdks/rust/GETTING_STARTED.md new file mode 100644 index 0000000000..123315b442 --- /dev/null +++ b/docs/sdks/rust/GETTING_STARTED.md @@ -0,0 +1,68 @@ +## Getting Started + +### Init your SDK +Initialize your SDK with your Appwrite server API endpoint and project ID which can be found on your project settings page and your new API secret Key from project's API keys section. + +```rust +use appwrite::client::Client; + +let client = Client::new() + .set_endpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint + .set_project("5df5acd0d48c2") // Your project ID + .set_key("919c2d18fb5d4...a2ae413da83346ad2") // Your secret API key + .set_self_signed(true); // Use only on dev mode with a self-signed SSL cert +``` + +### Make Your First Request +Once your SDK object is set, create any of the Appwrite service objects and choose any request to send. Full documentation for any service method you would like to use can be found in your SDK documentation or in the [API References](https://appwrite.io/docs) section. + +```rust +use appwrite::client::Client; +use appwrite::services::users::Users; +use appwrite::id::ID; + +let client = Client::new() + .set_endpoint("https://[HOSTNAME_OR_IP]/v1") + .set_project("5df5acd0d48c2") + .set_key("919c2d18fb5d4...a2ae413da83346ad2") + .set_self_signed(true); + +let users = Users::new(&client); + +let user = users.create( + ID::unique(), + Some("email@example.com"), + Some("+123456789"), + Some("password"), + Some("Walter O'Brien"), +).await?; + +println!("{}", user.name); +println!("{}", user.email); +``` + +### Error Handling +The Appwrite Rust SDK returns `Result` types. You can handle errors using standard Rust error handling patterns. Below is an example. + +```rust +use appwrite::error::AppwriteError; + +match users.create( + ID::unique(), + Some("email@example.com"), + Some("+123456789"), + Some("password"), + Some("Walter O'Brien"), +).await { + Ok(user) => println!("{}", user.name), + Err(AppwriteError { message, code, .. }) => { + eprintln!("Error {}: {}", code, message); + } +} +``` + +### Learn more +You can use the following resources to learn more and get help +- 🚀 [Getting Started Tutorial](https://appwrite.io/docs/getting-started-for-server) +- 📜 [Appwrite Docs](https://appwrite.io/docs) +- 💬 [Discord Community](https://appwrite.io/discord) From ef6fdc6c7258828b7e90b968336476783af07b19 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Thu, 26 Mar 2026 17:47:58 +0530 Subject: [PATCH 3/5] lock file --- composer.json | 2 +- composer.lock | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/composer.json b/composer.json index 664c3f11b7..65838a1615 100644 --- a/composer.json +++ b/composer.json @@ -99,7 +99,7 @@ }, "require-dev": { "ext-fileinfo": "*", - "appwrite/sdk-generator": "dev-rust", + "appwrite/sdk-generator": "*", "brianium/paratest": "7.*", "phpunit/phpunit": "12.*", "swoole/ide-helper": "6.*", diff --git a/composer.lock b/composer.lock index 30e74e8d06..a4d071646a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "84cbcf0617fc2d97e00c855a26afe031", + "content-hash": "f9225f2b580de0ccb796b2fb8c881384", "packages": [ { "name": "adhocore/jwt", @@ -5439,16 +5439,16 @@ "packages-dev": [ { "name": "appwrite/sdk-generator", - "version": "dev-rust", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "0e3195f941a5c415a0f8fe12a3d1c005394f0eae" + "reference": "fe5eebe8c76154a663b098f8d2cecb00ad4aae1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/0e3195f941a5c415a0f8fe12a3d1c005394f0eae", - "reference": "0e3195f941a5c415a0f8fe12a3d1c005394f0eae", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/fe5eebe8c76154a663b098f8d2cecb00ad4aae1e", + "reference": "fe5eebe8c76154a663b098f8d2cecb00ad4aae1e", "shasum": "" }, "require": { @@ -5484,9 +5484,9 @@ "description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms", "support": { "issues": "https://github.com/appwrite/sdk-generator/issues", - "source": "https://github.com/appwrite/sdk-generator/tree/rust" + "source": "https://github.com/appwrite/sdk-generator/tree/1.13.0" }, - "time": "2026-03-23T12:05:34+00:00" + "time": "2026-03-26T06:06:04+00:00" }, { "name": "brianium/paratest", @@ -8435,9 +8435,7 @@ ], "aliases": [], "minimum-stability": "dev", - "stability-flags": { - "appwrite/sdk-generator": 20 - }, + "stability-flags": {}, "prefer-stable": true, "prefer-lowest": false, "platform": { From 196acd45a27b114e180322f401568aee9ae40e20 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Thu, 26 Mar 2026 18:26:17 +0530 Subject: [PATCH 4/5] lock file --- composer.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.lock b/composer.lock index a4d071646a..17305e6a90 100644 --- a/composer.lock +++ b/composer.lock @@ -5439,16 +5439,16 @@ "packages-dev": [ { "name": "appwrite/sdk-generator", - "version": "1.13.0", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "fe5eebe8c76154a663b098f8d2cecb00ad4aae1e" + "reference": "7e7e257b10a8c1384a237e7d8d73452e2108901e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/fe5eebe8c76154a663b098f8d2cecb00ad4aae1e", - "reference": "fe5eebe8c76154a663b098f8d2cecb00ad4aae1e", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/7e7e257b10a8c1384a237e7d8d73452e2108901e", + "reference": "7e7e257b10a8c1384a237e7d8d73452e2108901e", "shasum": "" }, "require": { @@ -5484,9 +5484,9 @@ "description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms", "support": { "issues": "https://github.com/appwrite/sdk-generator/issues", - "source": "https://github.com/appwrite/sdk-generator/tree/1.13.0" + "source": "https://github.com/appwrite/sdk-generator/tree/1.14.0" }, - "time": "2026-03-26T06:06:04+00:00" + "time": "2026-03-26T12:50:11+00:00" }, { "name": "brianium/paratest", From 918f1d37d4068bc6da11c54646576359bc8293ad Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Thu, 26 Mar 2026 18:37:45 +0530 Subject: [PATCH 5/5] phpstan --- phpstan-baseline.neon | 6 ------ 1 file changed, 6 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index eca26955f0..5e5ab5eef4 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -594,12 +594,6 @@ parameters: count: 1 path: src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Update.php - - - message: '#^Variable \$currentDocumentId on left side of \?\? always exists and is always null\.$#' - identifier: nullCoalesce.variable - count: 1 - path: src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Update.php - - message: '#^Offset ''deviceBrand'' does not exist on int\.$#' identifier: offsetAccess.notFound