https://github.com/genogrove/genogrove
Modern C++ genome indexing library
https://github.com/genogrove/genogrove
bplustree cpp data-structures genogrove genome genomics graph indexing intervals
Last synced: 21 days ago
JSON representation
Modern C++ genome indexing library
- Host: GitHub
- URL: https://github.com/genogrove/genogrove
- Owner: genogrove
- License: gpl-3.0
- Created: 2025-10-01T06:10:40.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2026-01-26T21:45:34.000Z (about 2 months ago)
- Last Synced: 2026-01-27T08:46:33.567Z (about 2 months ago)
- Topics: bplustree, cpp, data-structures, genogrove, genome, genomics, graph, indexing, intervals
- Language: C++
- Homepage: https://genogrove.readthedocs.io
- Size: 99 MB
- Stars: 2
- Watchers: 1
- Forks: 2
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# genogrove
[](https://github.com/genogrove/genogrove/actions/workflows/ci-ubuntu.yml)
[](https://github.com/genogrove/genogrove/actions/workflows/ci-macos.yml)

[](https://github.com/genogrove/genogrove/releases/latest)

[](https://github.com/genogrove/genogrove/releases)
[](http://www.gnu.org/licenses/gpl-3.0)
[](https://github.com/genogrove/genogrove/stargazers)
[](https://github.com/genogrove/genogrove/issues)

A C++20 library for efficient genomic interval storage and querying using a specialized B+ tree data structure (grove). Supports BED, GFF/GTF, and SAM/BAM formats with an optional CLI.
## Quick Start
```bash
git clone https://github.com/genogrove/genogrove.git
cd genogrove
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
```
For testing, add `-DBUILD_TESTING=ON`. For the CLI, add `-DBUILD_CLI=ON`.
## Example
```cpp
#include
#include
namespace ggs = genogrove::structure;
namespace gio = genogrove::io;
namespace gdt = genogrove::data_type;
// Load intervals from a BED file
ggs::grove grove;
gio::bed_reader reader("regions.bed");
for (const auto& entry : reader) {
grove.insert_data(entry.chrom, gdt::interval(entry.start, entry.end - 1), entry);
}
// Query overlapping intervals
gdt::interval query(1000, 2000);
auto results = grove.intersect(query, "chr1");
for (auto* key : results.get_keys()) {
auto& data = key->get_data();
// data.chrom, data.start, data.end, data.name, ...
}
```
## Language Bindings
- [pygenogrove](https://github.com/genogrove/pygenogrove) (python)
- [genogrove-r](https://github.com/genogrove/genogrove-r) (R)
- [genogrove-rs](https://github.com/genogrove/genogrove-rs) (Rust)
## Compiler Support
| Platform | Compiler | Versions |
|----------|----------|----------|
| Ubuntu 24.04 | GCC | 13, 14 |
| Ubuntu 24.04 | Clang (LLVM) | 16, 17, 18 |
| macOS 14 | Apple Clang | 15 (Xcode 15.4) |
| macOS 15 | Apple Clang | 16 (Xcode 16.x) |
All configurations are tested in both Debug and Release modes.
## Documentation
Full documentation is available at [www.genogrove.com](https://www.genogrove.com).
## License
[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)