matrix-rust-sdk

Matrix Client-Server SDK for Rust

APACHE-2.0 License

Downloads
11.3K
Stars
1.1K
Committers
91

Bot releases are hidden (Show)

matrix-rust-sdk - matrix-sdk-crypto-ffi-0.1.6-alpha

Published by Anderas almost 2 years ago

Experimental release to house some precompiled binaries, not production ready.

matrix-rust-sdk - matrix-sdk-crypto-ffi-0.1.5-alpha

Published by Anderas almost 2 years ago

Experimental release to house some precompiled binaries, not production ready.

Changes

  • expose device / session verification state
matrix-rust-sdk - matrix-sdk-crypto-ffi-0.1.4-alpha

Published by Anderas almost 2 years ago

Experimental release to house some precompiled binaries, not production ready.

Changes

  • do not send keys to unverified users
matrix-rust-sdk - matrix-sdk 0.6.2

Published by jplatte almost 2 years ago

Fix the access token being printed in tracing span fields.

matrix-rust-sdk - matrix-sdk 0.6.1

Published by jplatte almost 2 years ago

Fixes a bug where the access token used for Matrix requests was added as a field to a tracing span.

There was another such bug, fixed by version 0.6.2.

matrix-rust-sdk - matrix-sdk-base 0.6.1

Published by jplatte almost 2 years ago

Fixes a bug where some Debug impls would print secrets like an access token.

matrix-rust-sdk - matrix-sdk-crypto-ffi-0.1.3-alpha

Published by Anderas almost 2 years ago

Experimental release to house some precompiled binaries, not production ready.

Changes

  • set local trust
matrix-rust-sdk - matrix-sdk-crypto-ffi-0.1.2-alpha

Published by Anderas about 2 years ago

Experimental release to house some precompiled binaries, not production ready.

Changes

  • includes macOS libraries
  • fixes verification bugs
matrix-rust-sdk - 2022-09-28 - Matrix SDK 0.6.0

Published by gnunicorn about 2 years ago

We are proud to announce the release of the next major milestone of matrix development in rust: matrix-sdk 0.6.0 (and matrix-sdk-base, matrix-sdk-crypto, matrix-sdk-common, matrix-sdk-test @0.6.0, [email protected], [email protected] , [email protected], [email protected] and [email protected] respectively), available on crates.io for your convenience.

There are a few major API changes since the 0.5.0 release, listed below. You can find the full list and another troubleshooting section helping you fix common errors you will see when upgrading from 0.5.x to this release in the UPGRADING-0.5-to-0.6.md in the root of the tarball.

Upgrades 0.5 ➜ 0.6

This is a rough migration guide to help you upgrade your code using matrix-sdk 0.5 to the newly released matrix-sdk 0.6 . While it won't cover all edge cases and problems, we are trying to get the most common issues covered. If you experience any other difficulties in upgrade or need support with using the matrix-sdk in general, please approach us in our matrix-sdk channel on matrix.org.

Minimum Supported Rust Version Update: 1.60

We have updated the minimal rust version you need in order to build matrix-sdk, as we require some new dependency resolving features from it:

These crates are built with the Rust language version 2021 and require a minimum compiler version of 1.60

Dependencies

Many dependencies have been upgraded. Most notably, we are using ruma at version 0.7.0 now. It has seen some renamings and restructurings since our last release, so you might find that some Types have new names now.

Repo Structure Updates

If you are looking at the repository itself, you will find we've rearranged the code quite a bit: we have split out any bindings-specific and testing related crates (and other things) into respective folders, and we've moved all examples into its own top-level-folder with each example as their own crate (rendering them easier to find and copy as starting points), all in all slimming down the crates folder to the core aspects.

Architecture Changes / API overall

Builder Pattern

We are moving to the builder pattern (familiar from e.g. std::io:process:Command) as the main configurable path for many aspects of the API, including to construct Matrix-Requests and workflows. This has been and is an on-going effort, and this release sees a lot of APIs transitioning to this pattern, you should already be familiar with from the matrix_sdk::Client::builder() in 0.5. This pattern been extended onto:

Most have fallback (though maybe with deprecation warning) support for an existing code path, but these are likely to be removed in upcoming releases.

Splitting of concerns: Media

In an effort to declutter the Client API dedicated types have been created dealing with specific concerns in one place. In 0.5 we introduced client.account(), and client.encryption(), we are doing the same with client.media() to manage media and attachments in one place with the [media::Media type][media typ] now.

The signatures of media uploads, have also changed slightly: rather than expecting a reader R: Read + Seek, it now is a simple &[u8]. Which also means no more unnecessary seek(0) to reset the cursor, as we are just taking an immutable reference now.

Event Handling & sync updaes

If you are using the client.register_event_handler function to receive updates on incoming sync events, you'll find yourself with a deprecation warning now. That is because we've refactored and redesigned the event handler logic to allowing removing of event handlers on the fly, too. For that the new add_event_handler() (and add_room_event_handler) will hand you an EventHandlerHandle (pardon the pun), which you can pass to remove_event_handler, or by using the convenient client.event_handler_drop_guard to create a DropGuard that will remove the handler when the guard is dropped. While the code still works, we recommend you switch to the new one, as we will be removing the register_event_handler and register_event_handler_context in a coming release.

Secondly, you will find a new sync_with_result_callback sync function. Other than the previous sync functions, this will pass the entire Result to your callback, allowing you to handle errors or even raise some yourself to stop the loop. Further more, it will propagate any unhandled errors (it still handles retries as before) to the outer caller, allowing the higher level to decide how to handle that (e.g. in case of a network failure). This result-returning-behavior also punshes through the existing sync and sync_with_callback-API, allowing you to handle them on a higher level now (rather than the futures just resolving). If you find that warning, just adding a ? to the .await of the call is probably the quickest way to move forward.

Refresh Tokens

This release now supports refresh_tokens as part of the Session. It is implemented with a default-flag in serde so deserializing a previously serialized Session (e.g. in a store) will work as before. As part of refresh_token support, you can now configure the client via ClientBuilder.request_refresh_token() to refresh the access token automagically on certain failures or do it manually by calling client.refresh_access_token() yourself. Auto-refresh is off by default.

You can stay informed about updates on the access token by listening to client.session_tokens_signal().

Further changes

  • MessageOptions has been updated to Matrix 1.3 by making the from parameter optional (and function signatures have been updated, too). You can now request the server sends you messages from the first one you are allowed to have received.
  • client.user_id() is not a future anymore. Remove any .await you had behind it.
  • verified(), blacklisted() and deleted() on matrix_sdk::encryption::identities::Device have been renamed with a is_ prefix.
  • verified() on matrix_sdk::encryption::identities::UserIdentity, too has been prefixed with is_ and thus is onw called is_verified().
  • The top-level crypto and state-store types of Indexeddb and Sled have been renamed to unique types>
  • state_store and crypto_store do not need to be boxed anymore when passed to the StoreConfig
  • Indexeddb's SerializationError is now IndexedDBStoreError
  • Javascript specific features are now behind the js feature-gate
  • The new experimental next generation of sync ("sliding sync"), with a totally revamped api, can be found behind the optional sliding-sync-feature-gate
matrix-rust-sdk - Matrix-Rust-SDK Node.js Bindings 0.1.0 beta.0

Published by gnunicorn over 2 years ago

0.1.0-beta.0 - 2022-07-21

Welcome to the first release of matrix-sdk-crypto-nodejs. This is a Node.js binding for the Rust matrix-sdk-crypto library. This is a no-network-IO implementation of a state machine, named OlmMachine, that handles E2EE (End-to-End Encryption) for Matrix clients.

The goal of this binding is not to cover the entirety of the matrix-sdk-crypto API, but only what's required to build Matrix bots or Matrix bridges (i.e. to connect different networks together via the Matrix protocol).

This project replaces and deprecates a previous project, with the same name and same goals, inside the matrix-rust-sdk-bindings repository, with the NPM package name @turt2live/matrix-sdk-crypto-nodejs. The new official package name is @matrix-org/matrix-sdk-crypto-nodejs.

Note: All bindings are now part of the matrix-rust-sdk repository (see the bindings/ root directory).

A documentation is available inside the new matrix-sdk-crypto-nodejs project.

matrix-rust-sdk - matrix-sdk-crypto-ffi-0.1.0-alpha

Published by Anderas over 2 years ago

Experimental release to house some precompiled binaries, not production ready.

matrix-rust-sdk -

Published by gnunicorn over 2 years ago

Right after releasing 0.5.0 we've discovered a significant flaw in the way that push rules checks are filtered, introduced very recently. A fix was made available within minutes and the decision was taken to release a patch release of the matrix-sdk-base to avoid people running into that annoying bug when trying the new release.

Changelog

Bug Fixes

  • #664: Fix regression with push rules being applied to the own user_id only instead of all but the own user_id
matrix-rust-sdk - SDK 0.5.0 - stores and native crypto

Published by gnunicorn over 2 years ago

The @matrix-org/rust team is excited to present to the wider public version 0.5 of the matrix-rust-sdk, now available on crates.io for your convenience. This marks an important milestone after over half a year of work since the latest release (0.4) and with many new team members working on it. It comes with many bug fixes, improvements and updates, but a few we'd like to highlight here:

Better, safer, native-er crypto

One of the biggest improvements under the hood is the replacement of the former crypto core written in C, libolm, with the fully rustic, fully audited Vodozemac. Vodozemac is a much more robust new implementation of the olm crypto primitives and engines with all the learning included and pitfalls from the previous C implementation avoided in a freshly baked, very robust library. With this release both matrix-sdk-crypto and matrix-sdk (when the e2e-encryption is enabled, which it is by default) use vodozemac to handle all crypto needs.

Stores, stores, stores

This release has also seen a major refactoring around the state and crypto store primitives and implementations. From this release forward, the implementation of the storage layer is truly modular and pluggable, with the default implementation (based on sled) even being a separate crate. Furthermore this release has also additional support for the indexeddb-storage layer for in-browser WASM needs. As before, the base still ships with an in-memory store, but if none of them fits your needs, you are very much invited to build your own - we recommend looking at the implementation of the existing matrix-sdk-sled to understand what is needed.

We've further extended and cleaned up the storage API and hardened the two existing implementations: both sled and indexeddb will now encrypt all metadata, including all keys, if a passphrase is given. Even a core dump of a database won't show any strings or other identifiable data. Both implementation also hold a database version string now, allowing future migrations of the database schema while we move forward.

WebAssembly

It already came through in the previous paragraph: we now fully support wasm as a primary target for the main sdk and its dependencies (browser for now). While it was already possible to build the SDK for wasm before, if you were lucky and had the specific emscripten setup, even crypto didn't always fail to compile, our move to vodozemac frees us from these problems and our CI now makes sure all our PRs will continue to build on WebAssembly, too. And with the indexeddb-store, we also have a fully persistent storage layer implementation for all your in-browser matrix needs built in.

More features

Of course a lot more has happened over the last few months as we've ramped up our work on the SDK. Most notably, you can now check whether a room has been created as a space, and we offer nice automatic thumbnailing and resizing support if you enable image. Additionally, there is a very early event-timeline API behind the experimental-timeline-feature-flag. Just to name a few. We really recommend you migrate from the older version to this one.

Process and Workflow

We've also ramped up our CI, parallelized it a lot, while adding more tests. In general we don't merge anything breaking the tests, thus our main can also be considered stable to build again, though things might be changed without prior notice. We recommend keeping an eye out in our team chat to stay current.

Versions

This and all future releases of matrix-sdk adhere to semver and we do our best to stick to it for the default-feature-set. As you will see only the main crate matrix-sdk is actually versioned at 0.5, while other crates - especially newer ones - have different versions attached. We recommend to sticking to the high-level matrix-sdk-crate wherever reasonable as lower level crates might change more often, also in breaking fashion.

With this release all our crates are build with rust v2021 and need a rust compiler of at least 1.60 (due to our need for weak-dependencies).

Conventional Commit

We also want to make it easier for external parties to follow changes and stay up to date with what's-what, so, with this release, we are implementing the conventional commits standard for our commits and will start putting in automatic changelog generation. Which makes it easier for us to create comprehensive changelogs for releases, but also for anyone following main to figure out what changed.