Show HN: hlquery, An open-source C++20 search engine Hlquery, an open-source C++20 search engine, is now available on GitHub under an unstable branch, offering full-text search, hybrid ranking, vector similarity, and AI-assisted search via a REST API and command-line tools. The project is in active development and not recommended for production use, with a live demo at demo.hlquery.com. It targets teams needing lightweight, efficient search with low operational overhead. Development Status: hlquery is currently in active development and should not be used in production environments. The software may contain bugs and incomplete features, and breaking changes may occur without notice. You can explore the live demo at demo.hlquery.com . It runs on the m demo.cpp module, which disables insert, delete, and update operations in demo mode. The demo UI is built with hanalyzer . hlquery is an open-source C++ search engine built to stay lightweight while handling millions of results efficiently. It targets applications that need fast indexing, real-time queries, and a straightforward HTTP/JSON interface with advanced search features. The engine supports full-text search, hybrid ranking, vector similarity, flexible collections, and configurable runtime modules for features such as AI-assisted search. It also includes a REST API for indexing and querying, plus command-line tools for local management and testing. hlquery is built for teams that want strong search without the operational weight of a larger stack. It combines fast indexing, low-latency queries, and a simple HTTP/JSON API with features usually found in more complex systems. You can use hlquery for full-text search, hybrid retrieval, vector similarity, and AI-assisted workflows while keeping deployment straightforward. It ships with client libraries, command-line tools, and modular runtime extensions for local development and production services. hlquery organizes data into collections . A collection is a logical group of related records, such as products, articles, users, or events, and its schema defines the fields that can be indexed, searched, filtered, sorted, or used for faceting. Each collection contains documents . A document is a JSON record identified by a unique ID and made up of fields such as title , content , category , or price . Documents in the same collection follow the same general schema, while each document stores its own values. For example, a products collection can contain one document per product. You can then search the text fields, filter by structured fields such as category or price, and return only the fields needed by your application. Collections keep different types of data organized while allowing each type to have its own schema and search behavior. Debian/Ubuntu: bash $ sudo apt-get install build-essential cmake zlib1g-dev libssl-dev liburing-dev cmake and zlib1g-dev are required to configure and build hlquery and its bundled RocksDB dependency on Debian/Ubuntu. The ./configure script validates CMake, GNU Make, the C++ compiler, and zlib headers/linking, and exits with an installation hint when a requirement is missing. If CMake prints a uring lookup warning during the rocksdb build, it usually means the liburing development package is missing. Installing liburing-dev on Debian/Ubuntu provides the package metadata CMake is looking for and clears the warning. Red Hat/CentOS: bash $ sudo dnf install @development-tools cmake openssl-devel macOS: bash $ xcode-select --install $ brew install cmake openssl On macOS, Xcode Command Line Tools provide the C/C++ compiler and make . Homebrew provides CMake and OpenSSL. FreeBSD: bash $ sudo pkg install gmake cmake openssl Note : This project uses gmake features. On FreeBSD, run gmake instead of make . bash $ wget https://github.com/hlquery/hlquery/archive/refs/heads/unstable.zip $ cd hlquery/ $ ./configure On GNU/Linux: bash $ make -j4 $ make install On FreeBSD, use GNU make for the build and install steps: bash $ gmake -j4 $ gmake install Start the server $ ./run/hlquery start OK Starting hlquery: Jul-12 - 12:37:59 ... Note: hlquery uses port9200by default. Ensure this port is available and not blocked by your firewall. Stop the server $ ./run/hlquery stop INFO Stopping hlquery PID: 27008 ... OK hlquery stopped successfully. Stop the server as JSON $ ./run/hlquery stop --json {"action":"stop","stopped pid":206773,"success":true} Run in foreground for debugging : $ ./run/hlquery start --nofork ... Run the interactive shell $ ./run/hlquery talk localhost:9200 use art Using collection 'art'. Checking uptime's localhost:9200|art uptime Server up for 3 days, 1h 0m 31s Official client libraries are available for popular programming languages: | Client | Description | |---|---| | Native C++ client library for low-level and embedded integrations. | | Go client for indexing, search, and service backends. | | JVM client for Java applications and server-side integrations. | | Async JavaScript client for Node.js services and tools. | | Perl client library for scripts and existing Perl services. | | Composer-ready PHP client for web apps and API integrations. | | Python client for scripts, data workflows, and backend services. | | Ruby client for Rails apps, scripts, and service integrations. | | Rust client library for strongly typed hlquery integrations. | | Typed client for TypeScript applications and SDK-style integrations. | For complete API documentation, visit docs.hlquery.com https://docs.hlquery.com/ . $ ./run/hlquery cli create products title content price Collection 'products' created successfully Using the PHP API: php