# nio

nio is a multilayered Matrix client library. The underlying base layer doesn’t do any network IO on its own, but on top of that is a full fledged batteries-included asyncio layer using aiohttp. File IO is only done if you enable end-to-end encryption (E2EE).

## Documentation

The full API documentation for nio can be found at https://matrix-nio.readthedocs.io

## Features

nio has most of the features you’d expect in a Matrix library, but it’s still a work in progress.

- ✅ transparent end-to-end encryption (EE2E)

- ✅ encrypted file uploads & downloads

- ✅ manual and emoji verification

- ✅ custom authentication types

- ✅ well-integrated type system

- ✅ kick, ban and unban

- ✅ typing notifications

- ✅ message redaction

- ✅ token based login

- ✅ user registration

- ✅ read receipts

- ✅ live syncing

- ✅ `m.tag`s

- ❌ python 2.7 support

- ❌ cross-signing support

- ❌ user deactivation (#112)

- ❌ in-room emoji verification

- ❌ room upgrades and `m.room.tombstone` events (#47)

## Installation

To install nio, simply use pip:

    $ pip install matrix-nio

Note that this installs nio without end-to-end encryption support. For e2ee support, python-olm is needed which requires the libolm C library (version 3.x). On Debian and Ubuntu one can use `apt-get` to install package `libolm-dev`. On Fedora one can use `dnf` to install package `libolm-devel`. On MacOS one can use brew to install package `libolm`. Make sure version 3 is installed.

After libolm has been installed, the e2ee enabled version of nio can be installed using pip:

    $ pip install "matrix-nio[e2e]"

Additionally, a docker image with the e2ee enabled version of nio is provided in the `docker/` directory.

## Examples

For examples of how to use nio, and how others are using it, read the docs

# Api Documentation

- API
  - Api
  - nio Clients
  - Rooms
  - Events
  - Building events
  - Exceptions
  - Responses
  - Storage
  - Encryption
- Examples
  - Projects built with nio
  - A basic client
  - Log in using a stored access_token
  - Sending an image
  - Manual encryption key verification
  - Interactive encryption key verification
  - Further reading and exploration
- Contributing
  - Prerequisites
  - Testing
  - Getting ready for a pull request
  - Adding documentation

# Indices and tables

- Index

- Module Index

- Search Page