---
title: "Deploy Manticore Search"
description: "Open-source database for full-text and vector search"
category: "Storage"
url: https://railway.com/deploy/manticore
---

# Deploy Manticore Search

Open-source database for full-text and vector search

**[Deploy Manticore Search on Railway](https://railway.com/template/manticore)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/manticore/manifest.json

- **Creator:** A3A
- **Category:** Storage
- **Total deploys:** 1

## Template content

### dashboard https://cdn.simpleicons.org/grafana/F46800.svg

- **Source:** https://github.com/gridalpha/manticore-search-railway
- **Health check:** /api/health
- **Public domain:** Yes

### manticore https://raw.githubusercontent.com/gridalpha/manticore-search-railway/main/assets/manticore-icon.png

- **Source:** https://github.com/gridalpha/manticore-search-railway
- **Health check:** /healthz
- **Public domain:** Yes

## Buckets

- **manticore-backups**

## Documentation

# Deploy and Host Manticore Search on Railway

Manticore Search is an open-source database built for search. It handles full-text ranking, vector search, filtering, faceting and analytics over the same tables, and it speaks two protocols developers already have clients for: SQL over the MySQL wire protocol, and JSON over HTTP with an Elasticsearch-compatible mode. Teams reach for it when Postgres full-text search stops being good enough and a full Elasticsearch cluster is more machinery than the problem deserves. It is written in C++, keeps its indexes on disk, and runs happily in a few hundred megabytes of RAM.

This template runs two services. `manticore` is the search daemon itself, with a volume for its tables, a public HTTPS endpoint for the JSON API and a TCP proxy for MySQL clients. `dashboard` runs the Grafana and Prometheus image the Manticore team publish, so you get their monitoring dashboard and their 21 alert rules without configuring anything. The dashboard scrapes the daemon's metrics endpoint over Railway's private network and also queries your tables directly through a MySQL data source. Manticore's built-in authentication is switched on before the daemon ever accepts a connection, and the first administrator is created on the first boot from the password you supply, so nothing is ever exposed unauthenticated.

![Diagram of the Manticore and dashboard services on Railway](https://res.cloudinary.com/rroe4rtk/image/upload/v1788934817/manticore-search-architecture.png)

## Getting Started with Manticore Search on Railway

Deploy the template, then set a password for the Manticore administrator and one for the Grafana administrator. Both services come up in under a minute. The `manticore` URL is the JSON API, not a web interface: every request needs HTTP Basic credentials, and an anonymous one is answered `401` with a `WWW-Authenticate` header, which is the quickest way to confirm the daemon is enforcing authentication. Create your first table and insert a document with two `curl` calls against `/sql?mode=raw`, then search it with `MATCH()` or through the `/search` endpoint. Open the `dashboard` URL, sign in with the Grafana credentials, and the Manticore dashboard loads as the home page showing uptime, queries per second, search latency percentiles and worker saturation. To query your own data, build a panel on the pre-configured **Manticore Search** data source, which talks to the daemon over the MySQL protocol.

![Manticore health and query latency panels in Grafana](https://res.cloudinary.com/rroe4rtk/image/upload/v1788934819/manticore-search-monitoring-dashboard.png)

![Full-text search results from a Manticore table in Grafana](https://res.cloudinary.com/rroe4rtk/image/upload/v1788934821/manticore-search-fulltext-search-panel.png)

![Manticore alert rules listed in Grafana alerting](https://res.cloudinary.com/rroe4rtk/image/upload/v1788934822/manticore-search-alert-rules.png)

## About Hosting Manticore Search

Manticore Search grew out of Sphinx and is now a general-purpose search database rather than an add-on index. Self-host it when you want search you can reason about: one process, one data directory, no JVM, no cluster to babysit, and a query language your team already knows.

- Full-text search with BM25 ranking, stemming, wildcards, fuzzy matching and highlighting
- Vector search for embeddings, alongside the text index in the same table
- Real-time inserts, updates and deletes; no reindex step
- SQL over MySQL, JSON over HTTP, and an Elasticsearch-compatible write API

The `manticore` service holds all the state on its volume: tables, binary log and the authentication store. The `dashboard` service holds none of your data — its volume is only Prometheus' time series and Grafana's own settings — so it can be redeployed or removed freely.

## Why Deploy Manticore Search on Railway

Railway removes the parts of running a search database that are not search.

- One click brings up the daemon, its volume and its monitoring
- Authentication is on from the first boot, with no unauthenticated window
- A private network link between the daemon and its dashboard, with no ports exposed
- A TCP proxy for MySQL clients, provisioned automatically
- Scheduled snapshots to Railway's object storage, kept to a fixed count

## Common Use Cases

- Product, document or listing search for a web app that has outgrown `LIKE` and `tsvector`
- Log and event search where you want SQL aggregations over the same rows you full-text query
- Retrieval for a RAG pipeline, mixing vector similarity with keyword filters in one query

## Dependencies for Manticore Search

- `manticoresearch/manticore:29.0.2` — the search daemon, from [github.com/manticoresoftware/manticoresearch](https://github.com/manticoresoftware/manticoresearch)
- `manticoresearch/dashboard:1.2.1` — Grafana and Prometheus, from [github.com/manticoresoftware/grafana-dashboard](https://github.com/manticoresoftware/grafana-dashboard)
- A Railway volume on each service, and one object storage bucket for snapshots

Both images are extended by a small source repository, [github.com/gridalpha/manticore-search-railway](https://github.com/gridalpha/manticore-search-railway), which adds the boot-time administrator bootstrap, the IPv6 listener the private network needs, an anonymous health endpoint, and the backup loop.

### Environment Variables Reference

| Variable | Service | Purpose |
|---|---|---|
| `MANTICORE_PASSWORD` | manticore | Password for the first administrator, created on first boot |
| `MANTICORE_USER` | manticore | Name of that administrator; defaults to `admin` |
| `BACKUP_INTERVAL_SECONDS` | manticore | Seconds between snapshots; defaults to daily |
| `BACKUP_KEEP` | manticore | Snapshots retained in the bucket; defaults to 7 |
| `GF_SECURITY_ADMIN_PASSWORD` | dashboard | Grafana administrator password |
| `MANTICORE_TARGETS` | dashboard | Daemon endpoints Prometheus scrapes |

Any Manticore setting can be passed as `searchd_` or `common_`, which the official image writes into the generated configuration file.

### Deployment Dependencies

- Manual: [manual.manticoresearch.com](https://manual.manticoresearch.com)
- Docker Hub: [manticoresearch/manticore](https://hub.docker.com/r/manticoresearch/manticore)
- Clients for PHP, Python, Java, Go, JavaScript, Rust and Elixir, plus any MySQL driver

## Hardware Requirements for Self-Hosting Manticore Search

| | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 2–4 vCPU |
| RAM | 512 MB | 2 GB and up, sized to your index |
| Storage | 1 GB volume | 2–4× the raw size of the data you index |
| Runtime | Linux container | Linux container |

Memory matters most: Manticore memory-maps its disk chunks, so search stays fast while the working set fits in page cache.

## Self-Hosting Manticore Search with Docker

The daemon is a single container with a data directory. This starts it locally:

```
docker run --name manticore -d \
  -p 9306:9306 -p 9308:9308 \
  -v manticore-data:/var/lib/manticore \
  manticoresearch/manticore:29.0.2
```

Every setting is an environment variable prefixed `searchd_` or `common_`, so turning authentication on and capping the thread pool needs no configuration file:

```
docker run --name manticore -d \
  -e searchd_auth=1 -e searchd_threads=4 \
  -v manticore-data:/var/lib/manticore \
  manticoresearch/manticore:29.0.2
```

With authentication enabled, create the first administrator by piping the name and password twice into `searchd --auth-non-interactive` against the running daemon. After that, `CREATE USER`, `GRANT` and `TOKEN` manage accounts, per-table permissions and bearer tokens over SQL.

## How Much Does Manticore Search Cost to Self-Host?

Manticore Search is free and open source under GPLv3, with no paid edition gating features, no node limit and no licence key. Grafana and Prometheus are open source too. The only cost is the infrastructure: on Railway you pay for the CPU, memory and storage the two services actually use, which for a small index is a few dollars a month.

## FAQ

**What is Manticore Search?**
An open-source database designed for search. It stores your rows, indexes them for full-text and vector search, and answers queries in SQL over the MySQL protocol or JSON over HTTP.

**What does this Railway template deploy?**
Two services: `manticore`, the search daemon with a volume and both protocols exposed, and `dashboard`, the Grafana and Prometheus monitoring stack that the Manticore project publishes for it.

**Why does the template include a monitoring service?**
Search behaviour degrades quietly — a slow p99, a saturated worker pool, a growing queue. The bundled dashboard and its 21 alert rules make those visible from the first minute rather than after a user complains.

**Why is an object storage bucket included?**
The daemon runs as a single node, so its volume is the only copy of your index. The template takes a consistent snapshot on a schedule and uploads it to the bucket, keeping the most recent few.

**How do I connect to self-hosted Manticore Search from my application?**
Point any MySQL client at the private hostname on port 9306, or send JSON to the HTTPS endpoint with HTTP Basic credentials. Both are authenticated; there is no anonymous access.

**Can Manticore Search replace Elasticsearch?**
For text search, filtering and aggregations it usually can, and it accepts a subset of the Elasticsearch write API to ease the move. Distributed sharding across many nodes is where Elasticsearch remains ahead.


## Similar templates

- [Garage S3 Storage](https://railway.com/deploy/garage-s3-storage) — Ultra-light S3 server: fast, open-source, plug-and-play.
- [Redis](https://railway.com/deploy/redis-1) — Self Host Latest Redis with Railway
- [EasyImg](https://railway.com/deploy/easyimg) — Simple self-hostable Nuxt.js personal image hosting system.

Open this page in a browser: https://railway.com/deploy/manticore
