{"data":{"slug":"restream-reindexer","name":"reindexer","tagline":"Embeddable, in-memory, document-oriented database with a high-level Query builder interface.","github_url":"https://github.com/Restream/reindexer","owner":"Restream","repo":"reindexer","owner_avatar_url":"https://avatars.githubusercontent.com/u/15815128?v=4","primary_language":"C++","stars":811,"forks":61,"topics":["ann-search","cpp","cpp-library","database","document-oriented-database","embedable","fulltext-search","go","hybrid-search","in-memory","knn-search","vector-search","vector-similarity"],"archived":false,"github_pushed_at":"2026-09-19T02:54:00+00:00","maintenance_label":"Very active","stars_delta_30d":5,"url":"https://www.graphcanon.com/tools/restream-reindexer","markdown_url":"https://www.graphcanon.com/tools/restream-reindexer.md","api_url":"https://www.graphcanon.com/api/graphcanon/tools/restream-reindexer","graph_url":"https://www.graphcanon.com/api/graphcanon/graph?tool=restream-reindexer","description":"Embeddable, in-memory, document-oriented database with a high-level Query builder interface.","homepage_url":"https://reindexer.io","license":"Apache-2.0","open_issues":20,"watchers":44,"ai_summary":"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.","readme_excerpt":"## Installation\n\nReindexer can run in 3 different modes:\n\n- `embedded (builtin)` Reindexer is embedded into application as static library, and does not require separate server process.\n- `embedded with server (builtinserver)` Reindexer is embedded into the application as a static library and starts a server. In this mode, other\n  clients can connect to the application via cproto, cprotos, ucproto, http, or https.\n- `standalone` Reindexer runs as a standalone server; the application connects to Reindexer via network or Unix domain sockets.\n\n---\n\n### Installation for server mode\n\nIn this mode Reindexer's Go-binding does not depend on reindexer's static library.\n\n1.  [Install Reindexer Server](cpp_src/readme.md#installation)\n2.  go get -a github.com/restream/reindexer/v5\n\n#### Official docker image\n\nThe simplest way to get Reindexer server is to pull and run the Docker image from [Docker Hub](https://hub.docker.com/r/reindexer/reindexer/).\n\n```bash\ndocker run -p9088:9088 -p6534:6534 -it reindexer/reindexer\n```\n\n[Dockerfile](cpp_src/cmd/reindexer_server/contrib/Dockerfile)\n\n---\n\n### Installation for embedded mode\n\n#### Prerequisites\n\nReindexer'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.\n\nTo build Reindexer, g++ 10+, clang 15+, or [mingw64](https://sourceforge.net/projects/mingw-w64/) is required.\n\nIn embedded mode, Reindexer's Go binding depends on Reindexer's static libraries (core, server, and resource).\n\n#### Get Reindexer using go.mod\n\nThis way is recommended and will fit for the most scenarios.\n\nGo modules with go.mod do not allow to build C++ libraries in modules' directories. Go-binding will use [pkg-config](https://pkg.go.dev/github.com/rjeczalik/pkgconfig/cmd/pkg-config) to detect libraries' directories.\n\nReindexer's libraries must be either installed from [sources](cpp_src/readme.md#installation-from-sources) or from [prebuilt package via package manager](cpp_src/readme.md#linux).\n\nThen get the module:\n\n```bash\ngo get -a github.com/restream/reindexer/v5\n```\n\n#### Get Reindexer using go.mod and replace\n\nIf you need modified Reindexer's sources, you can use `replace` like that.\n\n1. Download and build reindexer:\n```bash\n\n---\n\n## Events subscription\n\nWhen 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):\n\n```go\n\nimport events \"github.com/restream/reindexer/v5/events\"\n\n// Create subscription options for the specific event types (any documents modifications + transactions commits)\nopts := events.DefaultEventsStreamOptions().WithDocModifyEvents().WithTransactionCommitEvents()\n// Create events stream\nstream := db.Subscribe(opts)\nif err := stream.Error(); err != nil {\n\tpanic(err)\n}\n// Stream must be finalized. Finalization here basically means 'unsubscribe'\ndefer stream.Close(context.Background())\n\nfor {\n\t// Reading events\n\tevent, ok := <- stream.Chan()\n\tif !ok {\n\t\t// Events channel is closed\n\t\tfmt.Printf(\"Reindexer events stream was invalidated: %v\\n\", stream.Error())\n\t\tbreak\n\t}\n\t// Event handling logic\n\t...\n}\n```\n\nSingle 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`).\n\nIn case of critical errors `Chan()` will be closed automatically. New stream must be created to renew events subscription in this case.\n\nTo configure subscription `EventsStreamOptions`-object should be used. It is possible to subscribe for the specific operations types and namespaces.\nThere are predefined events collections in [streamopts.go](#events/streamopts.go), but any required types may also be specified via `WithEvents`-option. With default options events stream will receive all","github_created_at":"2017-07-07T14:14:38+00:00","created_at":"2026-07-11T11:34:53.437869+00:00","updated_at":"2026-09-20T06:23:14.139151+00:00","categories":[{"slug":"data-retrieval","name":"Data & Retrieval","url":"https://www.graphcanon.com/categories/data-retrieval","markdown_url":"https://www.graphcanon.com/categories/data-retrieval.md","api_url":"https://www.graphcanon.com/api/graphcanon/categories/data-retrieval"},{"slug":"vector-databases","name":"Vector Databases","url":"https://www.graphcanon.com/categories/vector-databases","markdown_url":"https://www.graphcanon.com/categories/vector-databases.md","api_url":"https://www.graphcanon.com/api/graphcanon/categories/vector-databases"}],"tags":[{"slug":"ann-search","name":"ann-search"},{"slug":"cpp-library","name":"cpp-library"},{"slug":"document-oriented-database","name":"document-oriented-database"},{"slug":"embedable","name":"embedable"},{"slug":"fulltext-search","name":"fulltext-search"},{"slug":"hybrid-search","name":"hybrid-search"},{"slug":"in-memory","name":"in-memory"},{"slug":"knn-search","name":"knn-search"}],"trust":{"provenance":{"is_fork":false,"github_id":96545309,"owner_type":"Organization","methodology":"github_public_v1","parent_repo":null,"near_duplicate_slugs":[]},"computed_at":"2026-09-20T06:23:12.441Z","maintenance":{"label":"Very active","score":96,"methodology":"github_public_v1","releases_90d":2,"days_since_push":1,"last_release_at":"2026-08-19T09:44:34Z","stars_delta_30d":5,"open_issues_delta_30d":-2},"security_summary":{"status":"no_lockfile","scanner":null,"low_count":0,"high_count":0,"last_scan_at":"2026-07-11T11:34:54.791Z","medium_count":0,"scan_profile":"none","critical_count":0}},"capability_facts":{"scan":{"source":"repo_scan","observed_at":"2026-09-20T06:23:13.484Z"},"languages":{"value":["c++"],"source":"github.language","observed_at":"2026-09-20T06:23:13.484Z"},"license_spdx":{"value":"Apache-2.0","source":"github.license","observed_at":"2026-09-20T06:23:13.484Z"}},"decision_facts":{"hosting":{"model":"self_hosted","summary":"Reindexer functions as a self-hosted solution integrated into applications"},"pricing":{"model":"freemium","summary":"As an open-source tool under the Apache-2.0 license, Reindexer is freely available without licensing fees."},"requirements":{"notes":["It is optimized for in-memory operations, so available memory directly impacts performance."],"min_ram_gb":1},"constraints":{"min_ram_gb":1,"hosting_model":"self_hosted","pricing_model":"freemium"},"when_to_use":["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.","If your application must remain lightweight and operate efficiently within memory constraints, leveraging Reindexer's in-memory design."],"when_not_to_use":["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++."],"source":"enrich:decision_facts","observed_at":"2026-07-12T11:05:34.968Z"},"constraint_facets":{"min_ram_gb":1,"hosting_model":"self_hosted","pricing_model":"freemium"},"decision_summary":[{"label":"Hosting","value":"self hosted - Reindexer functions as a self-hosted solution integrated into applications"},{"label":"Pricing","value":"freemium - As an open-source tool under the Apache-2.0 license, Reindexer is freely available without licensing fees."},{"label":"Requirements","value":"Min 1 GB RAM; It is optimized for in-memory operations, so available memory directly impacts performance."},{"label":"Adopt for","value":"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."}]}}