#suffix-array #bioinformatics #bwt #saca #lcp

libsais

Bindings to the C library libsais for suffix array construction

3 unstable releases

Uses new Rust 2024

0.2.0 Sep 4, 2025
0.1.3 Sep 1, 2025
0.1.2 Aug 28, 2025

#113 in Biology

Download history 107/week @ 2025-08-25 246/week @ 2025-09-01 28/week @ 2025-09-08 58/week @ 2025-09-15 45/week @ 2025-09-22 65/week @ 2025-09-29 49/week @ 2025-10-06 22/week @ 2025-10-13 22/week @ 2025-10-20 4/week @ 2025-10-27 5/week @ 2025-11-10 3/week @ 2025-11-17 16/week @ 2025-11-24 75/week @ 2025-12-01

95 downloads per month
Used in 2 crates

MIT/Apache

2MB
31K SLoC

C 27K SLoC // 0.0% comments Rust 4K SLoC // 0.1% comments

libsais-rs

Build Status Crates.io Documentation

An idiomatic and mostly safe API wrapper for the awesome and very fast library libsais by Ilya Grebnov.

⚠️ Warning: this crate is not yet battle-tested, there might be bugs. The API is still subject to small changes. Any kind of feedback and suggestions via the issue tracker is highly appreciated!⚠️

Functionality

This crate exposes the whole functionality of libsais. It might be useful to also check out the documentation of the original library.

  • Suffix array construction for u8/u16/i32/i64 texts and i32/i64 output arrays
  • Generalized suffix arrays
  • Longest common prefix arrays and permuted longest common prefix arrays
  • Burrows-Wheeler-Transform and reversal
  • Optional multithreading support via the openmp feature (enabled by default)

Usage

This crate provides generic builder-like APIs for the whole functionality listed above. The following is a simple example of how to use this library to construct a suffix array in parallel:

use libsais::{SuffixArrayConstruction, ThreadCount};

let text = b"barnabasbabblesaboutbananas";
let suffix_array: Vec<i32> = SuffixArrayConstruction::for_text(text)
    .in_owned_buffer()
    .multi_threaded(ThreadCount::openmp_default())
    .run()
    .expect("The example in the README should really work")
    .into_vec();

Please consult the documentation and the examples for more details on how to use this library.

Performance and benchmarks

This library only adds a few safety checks, which should not impact performance in a relevant way. A notable exception is the suffix array construction for i32 and i64 inputs. Please consult the documentation for details.

Below are the results of a small benchmark of suffix array construction algorithms available on crates.io. The input was the human genome, truncated to 2 GB. Details about this benchmark can be found here.

The excellent performance of libsais is one of the main reasons why this API wrapper crate was created.

Dependencies

~240–560KB