Skip to content

feat: Android SDK update for version 30.0.0 - #143

Merged
ChiragAgg5k merged 8 commits into
mainfrom
dev
Oct 15, 2026
Merged

ChiragAgg5k merged 8 commits into
mainfrom
dev

Conversation

@ChiragAgg5k

@ChiragAgg5k ChiragAgg5k commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

This PR contains updates to the SDK for version 30.0.0.

What's Changed

  • Breaking: requests send x-appwrite-response-format: 2.5.0; responses follow the 2.5 shapes
  • Breaking: missing response fields map to their documented defaults
  • Breaking: oauth2 resource params now take List<String> on the authorize, PAR, device and token methods
  • Breaking: Push.subscribe takes notifyInForeground before the callback; Java callers must pass it
  • Breaking: removed the Topic.any() and Topic.all() wildcard builders and ResolvedTopic; Push.subscribe takes strings or Topic
  • Added: notifyInForeground option on Push.subscribe
  • Added: PushOpenActivity for opening notifications
  • Added: Query aggregates (count, countDistinct, sum, avg, min, max and more), groupBy, having, distinct, joins, relationship, covers, spatialEquals and page
  • Added: Query.builder() to chain queries; build() returns the query list
  • Added: ExecutionTrigger.EMAIL
  • Updated: Topic.path rejects levels containing a NUL character
  • Fixed: a file exactly CHUNK_SIZE bytes long uploads in a single request

Also in this diff

main was behind the release tags, which were cut from release branches. This PR brings it up to date, so the diff also contains these already-released versions:

29.1.0

  • Added: account passkey methods listPasskeys, createPasskey, getPasskey, updatePasskey, deletePasskey and updatePasskeyVerification
  • Added: account.createPasskeyToken and account.updatePasskeyToken for passkey sign-in
  • Added: Passkey, PasskeyList, PasskeyChallenge and TokenSecret models

29.2.0

  • Added: analytics.createEvent in a new Analytics service to send tracking events
  • Added: optional state on account.createOAuth2Session and account.createOAuth2Token, returned unchanged on the success and failure URLs
  • Added: optional membershipId on teams.createMembership
  • Fixed: avatars.updatePhoto sends PUT, so uploading a profile photo no longer returns 404
  • Fixed: OAuth2 query parameters (success, failure, scopes, state) are URL-encoded, so values containing &, + or # survive the redirect

@ChiragAgg5k ChiragAgg5k changed the title feat: Android SDK update for version 30.0.0 feat: SDK update for version 30.0.0 Oct 14, 2026
@hansi-codes

hansi-codes Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

馃數 Tier A 路 Mergeable after minor fixes

A minor request-serialization bug remains: Client.flatten collapses nested arrays of strings.

This update aligns the Android SDK with Appwrite 2.5 response shapes and adds the corresponding service and model APIs. It also adds query-builder support, OAuth2 resource and state options, passkey and analytics APIs, and push notification options with refreshed documentation and examples.

24 of 130 changed files were too large to include in full.

Verdict New comments Fixed Still open
馃挰 Commented 1 0 0

Note

Not approving while a bug finding is open: Preserve nested string arrays in request parameters

Finding Where
馃煛 Preserve nested string arrays in request parameters library/src/main/java/io/appwrite/Client.kt:875
Fix with agent prompt
### Issue 1
library/src/main/java/io/appwrite/Client.kt:875-879
**Preserve nested string arrays in request parameters**

This branch flattens any nested collection whose elements are strings, not just values produced by a query builder. A valid parameter such as `listOf(listOf("a", "b"))` is therefore serialized as `["a","b"]` instead of `[["a","b"]]`, silently changing the request shape; only query and builder results should be expanded.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
馃搨 Walkthrough 路 6
File Change
CHANGELOG.md, README.md, docs/examples/** Update the release notes, usage guidance, and API examples for version 30.0.0 and the new APIs.
library/src/main/java/io/appwrite/Client.kt, library/src/main/java/io/appwrite/Query.kt Set the 2.5 response format, resolve query values in requests, and add aggregate, join, spatial, pagination, and fluent-query APIs.
library/src/main/java/io/appwrite/Topic.kt, library/src/main/java/io/appwrite/enums/ExecutionTrigger.kt Adjust topic validation and wildcard builders, and add the email execution trigger.
library/src/main/java/io/appwrite/models/** Update response models for new shapes and missing-field defaults, and add passkey-related models.
library/src/main/java/io/appwrite/services/** Update service APIs and push behavior for the release, including OAuth2 resources, passkeys, analytics, and notification options.
library/src/test/java/io/appwrite/QueryTest.kt, library/src/test/java/io/appwrite/TopicTest.kt Cover the added query helpers and topic validation behavior.

Reviewed 445b96e 路 Details 路 Comment @hansi-codes review to re-run, or mention @hansi-codes with a question.

@hansi-codes hansi-codes Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

馃煝 Tier S 路 Looks good to merge. Summary

@ChiragAgg5k ChiragAgg5k changed the title feat: SDK update for version 30.0.0 feat: Android SDK update for version 30.0.0 Oct 14, 2026
@ChiragAgg5k

Copy link
Copy Markdown
Member Author

@hansi-codes review

@hansi-codes hansi-codes Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

馃數 Tier A 路 See the inline comments. Summary

Comment thread library/src/main/java/io/appwrite/Client.kt Outdated
Comment thread library/src/main/java/io/appwrite/Topic.kt

@hansi-codes hansi-codes Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

馃煝 Tier S 路 Looks good to merge. Summary

@ChiragAgg5k

Copy link
Copy Markdown
Member Author

@hansi-codes review

@hansi-codes hansi-codes Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

馃數 Tier A 路 See the inline comments. Summary

Comment on lines +875 to +879
if ((item is Array<*> || item is Collection<*>) && flat is Collection<*> && flat.all { it is String }) {
out.addAll(flat)
changed = true
continue
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Preserve nested string arrays in request parameters

This branch flattens any nested collection whose elements are strings, not just values produced by a query builder. A valid parameter such as listOf(listOf("a", "b")) is therefore serialized as ["a","b"] instead of [["a","b"]], silently changing the request shape; only query and builder results should be expanded.

Prompt To Fix With AI
This is a comment left during a code review.
Path: library/src/main/java/io/appwrite/Client.kt
Line: 875-879

Comment:
**Preserve nested string arrays in request parameters**

This branch flattens any nested collection whose elements are strings, not just values produced by a query builder. A valid parameter such as `listOf(listOf("a", "b"))` is therefore serialized as `["a","b"]` instead of `[["a","b"]]`, silently changing the request shape; only query and builder results should be expanded.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

馃煛 Minor 路 bug 路 Reply if this doesn't apply.

@ChiragAgg5k
ChiragAgg5k merged commit 38dbcfb into main Oct 15, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant