Types and traits for working with the Matrix protocol.
This crate re-exports things from all of the other ruma crates so you don’t have to manually keep all the versions in sync.
Which crates are re-exported can be configured through cargo features.
⚠ Some details might be missing because rustdoc has trouble with re-exports so you may need to refer to other crates’ documentations.
Depending on which parts of Matrix are relevant to you, activate the following features:
appservice-api– Application Service API.
client-api– Client-Server API.
federation-api– Server-Server (Federation) API.
identity-service-api– Identity Service API.
push-gateway-api– Push Gateway API.
These features have
server-optimized variants that are enabled respectively
-s suffixes. For example:
client-api-c– The Client-Server API optimized for the client side.
client-api-s– The Client-Server API optimized for the server side.
compatincreases compatibility with other parts of the Matrix ecosystem, at the expense of deviating from the specification.
These features are only useful if you want to use a method that requires it:
By using these features, you opt out of all semver guarantees Ruma otherwise provides:
unstable-exhaustive-types– Most types in Ruma are marked as non-exhaustive to avoid breaking changes when new fields are added in the specification. This feature compiles all types as exhaustive.
unstable-pre-spec– Upcoming Matrix features that may be subject to change or removal.
These submodules are usually activated by the API features when needed:
client feature activates
client-api feature. All other
client-* features activate the same feature
client- prefix on
ruma-client. See the crate’s documentation for the effect of
If you are viewing this on
docs.rs, you can have a look at the feature dependencies by
clicking Feature flags in the toolbar at the top.
pub use assign::assign;
pub use js_int::int;
pub use js_int::uint;
pub use js_int::Int;
pub use js_int::UInt;
(De)serializable types for various Matrix APIs requests and responses and abstractions for them.
Common types for authentication.
A minimal Matrix client library.
Common types for room directory endpoints.
Common types for encryption related tasks.
(De)serializable types for the events in the Matrix specification. These types are used by other ruma crates.
Types for Matrix identifiers for devices, events, keys, rooms, servers, users and URIs.
Common types for the
Common types for the presence module.
Common types for the push notifications module.
Common types for receipts.
(De)serialization helpers for other ruma crates.
Digital signatures according to the Matrix specification.
Common types for the third party networks module.
Common types for the Send-To-Device Messaging
Matrix user identifiers.
A client secret.
A Matrix key ID.
A key algorithm and a device id, combined with a ‘:’.
A Matrix event ID.
A key algorithm and key name delimited by a colon
A Matrix key identifier.
A timestamp represented as the number of milliseconds since the unix epoch.
A URI that should be a Matrix-spec compliant MXC URI.
A Matrix room alias ID.
A Matrix room ID.
A Matrix room ID or a Matrix room alias ID.
A timestamp represented as the number of seconds since the unix epoch.
A Matrix-spec compliant server name.
A session ID.
Map of all signatures, grouped by entity
A Matrix user ID.
The basic key algorithms in the specification.
An encryption algorithm to be used to encrypt messages sent to a room.
A Matrix room version ID.
The signing key algorithms defined in the Matrix spec.
A type that can be sent to another party that understands the matrix protocol.
An owned ClientSecret.
An owned DeviceId.
Map of device signatures for an event, grouped by user.
Algorithm + key name for device keys.
Map of key identifier to signature values.
An owned KeyName.
An owned ServerName.
Map of server signatures for an event, grouped by server.
Algorithm + key name for homeserver signing keys.
An owned SessionId.
Outgoing trait, possibly generating an ‘Incoming’ version of the struct this
derive macro is used on. Specifically, if no lifetime variables are used on any of the fields
of the struct, this simple implementation will be generated: