#profile #bindings #temp-dir

seshat

A matrix message logger with full text search support

22 stable releases (4 major)

4.0.1 Feb 18, 2025
4.0.0 Jun 7, 2024
3.0.0 Apr 21, 2023
2.4.0 Apr 17, 2023
0.1.0 Aug 22, 2019

#301 in Database interfaces

Download history 553/week @ 2024-12-04 490/week @ 2024-12-11 197/week @ 2024-12-18 29/week @ 2024-12-25 273/week @ 2025-01-01 178/week @ 2025-01-08 170/week @ 2025-01-15 143/week @ 2025-01-22 256/week @ 2025-01-29 207/week @ 2025-02-05 655/week @ 2025-02-12 291/week @ 2025-02-19 510/week @ 2025-02-26 211/week @ 2025-03-05 402/week @ 2025-03-12 160/week @ 2025-03-19

1,341 downloads per month

Apache-2.0

705KB
4K SLoC

Build Status Crates.io Documentation #seshat

Seshat

Seshat is a database and indexer for Matrix events.

Its main use is to be used as a full text search backend for Matrix clients.

JavaScript bindings

Seshat provides JavaScript bindings which can be found in the seshat-node subdir.

Usage

There are two modes of operation for Seshat, adding live events as they come in:

use seshat::{Database, Event, Profile};
use tempfile::tempdir;

let tmpdir = tempdir().unwrap();
let mut db = Database::new(tmpdir.path()).unwrap();

/// Method to call for every live event that gets received during a sync.
fn add_live_event(event: Event, profile: Profile, database: &Database) {
    database.add_event(event, profile);
}
/// Method to call on every successful sync after live events were added.
fn on_sync(database: &mut Database) {
    database.commit().unwrap();
}

The other mode is to add events from the room history using the /room/{room_id}/messages Matrix API endpoint. This method supports storing checkpoints which remember the arguments to continue fetching events from the /room/{room_id}/messages API:

database.add_historic_events(events, old_checkpoint, new_checkpoint)?;

Once events have been added a search can be done:

let result = database.search("test", &SearchConfig::new()).unwrap();

Development

Seshat uses standard cargo commands build and test.

You can install pre-commit and then pre-commit install to ensure your work is linted on commit.

Dependencies

~55MB
~1M SLoC