reindexer logo

reindexer

Restream/reindexer

Embeddable, in-memory, document-oriented database with a high-level Query builder interface.

GraphCanon updated today · GitHub synced today

810 stars61 forksLast push today C++ Apache-2.0

Decision brief

Reindexer is an embeddable and in-memory document-oriented database designed for rapid vector search and similarity evaluation using a high-level query builder interface.

Good fit when

  • When you need advanced vector search capabilities with fast performance as Reindexer specializes in efficient vector searches.
  • For applications requiring full-text search and hybrid searching options, as Reindexer supports these functionalities natively.

Avoid when

  • When the requirement is for a distributed database system; Reindexer operates as an embeddable solution and does not support distributed configurations out-of-the-box.
  • If your project strictly avoids C++ libraries due to team expertise or environmental restrictions, since Reindexer is primarily developed in C++.
Hosting:
self hosted - Reindexer functions as a self-hosted solution integrated into applications
Pricing:
freemium - As an open-source tool under the Apache-2.0 license, Reindexer is freely available without licensing fees.
Requirements:
Min 1 GB RAM; It is optimized for in-memory operations, so available memory directly impacts performance.

Observed Jul 12, 2026 · Source: enrich:decision_facts

Verify the decision

Maintenance and security

Full trust report
Maintenance
Very active (0d since push)
As of today
Provenance
Not a fork · Organization account
As of today
Security (OSV)
No lockfile
As of 1mo

Public GitHub metadata and optional OSV scans. Signals, not a guarantee. Trust methodology.

Install

git clone https://github.com/Restream/reindexer

Similar tools

Same-category neighbours. No typed graph edges are catalogued for this tool yet.

Evidence and technical details

Sourced facts, taxonomy, compatibility claims, README excerpt, and machine-readable endpoints.

Overview

Reindexer is an embeddable and in-memory document-oriented database offering advanced querying capabilities via a Query builder interface, suitable for applications requiring rapid vector search and similarity evaluation.

Capability facts

Languages
c++

Source: github.language · Aug 23, 2026

Categories

Tags

README

Installation

Reindexer can run in 3 different modes:

  • embedded (builtin) Reindexer is embedded into application as static library, and does not require separate server process.
  • embedded with server (builtinserver) Reindexer is embedded into the application as a static library and starts a server. In this mode, other clients can connect to the application via cproto, cprotos, ucproto, http, or https.
  • standalone Reindexer runs as a standalone server; the application connects to Reindexer via network or Unix domain sockets.

Installation for server mode

In this mode Reindexer's Go-binding does not depend on reindexer's static library.

  1. Install Reindexer Server
  2. go get -a github.com/restream/reindexer/v5

Official docker image

The simplest way to get Reindexer server is to pull and run the Docker image from Docker Hub.

docker run -p9088:9088 -p6534:6534 -it reindexer/reindexer

Dockerfile


Installation for embedded mode

Prerequisites

Reindexer's core is written in C++20 and uses LevelDB as the storage backend, so CMake, a C++20 toolchain, and LevelDB must be installed before installing Reindexer. Also, OpenMP and BLAS/LAPACK libraries may be required for full vector index support.

To build Reindexer, g++ 10+, clang 15+, or mingw64 is required.

In embedded mode, Reindexer's Go binding depends on Reindexer's static libraries (core, server, and resource).

Get Reindexer using go.mod

This way is recommended and will fit for the most scenarios.

Go modules with go.mod do not allow to build C++ libraries in modules' directories. Go-binding will use pkg-config to detect libraries' directories.

Reindexer's libraries must be either installed from sources or from prebuilt package via package manager.

Then get the module:

go get -a github.com/restream/reindexer/v5

Get Reindexer using go.mod and replace

If you need modified Reindexer's sources, you can use replace like that.

  1. Download and build reindexer:

---

## Events subscription

When reindexer used as caching DB by multiple applications, it may be helpful to subscribe on the database updates (for example, if you need to invalidate internal application cache on some database event):

```go

import events "github.com/restream/reindexer/v5/events"

// Create subscription options for the specific event types (any documents modifications + transactions commits)
opts := events.DefaultEventsStreamOptions().WithDocModifyEvents().WithTransactionCommitEvents()
// Create events stream
stream := db.Subscribe(opts)
if err := stream.Error(); err != nil {
	panic(err)
}
// Stream must be finalized. Finalization here basically means 'unsubscribe'
defer stream.Close(context.Background())

for {
	// Reading events
	event, ok := <- stream.Chan()
	if !ok {
		// Events channel is closed
		fmt.Printf("Reindexer events stream was invalidated: %v\n", stream.Error())
		break
	}
	// Event handling logic
	...
}

Single Go binding supports up to 32 simultaneous streams. All the streams are handled together via separated connection (for cproto) or separated goroutine (for builtin/builtinserver).

In case of critical errors Chan() will be closed automatically. New stream must be created to renew events subscription in this case.

To configure subscription EventsStreamOptions-object should be used. It is possible to subscribe for the specific operations types and namespaces. There are predefined events collections in streamopts.go, but any required types may also be specified via WithEvents-option. With default options events stream will receive all

For agents

This page has a .md twin and JSON over the API.

Was this helpful?

Anonymous feedback helps us improve pages and translations.