Open-source search.

Drop-in Algolia replacement. Self-host in 60 seconds.

$ docker run -p 7700:7700 flapjack/flapjack
// Your Algolia code works. Just point to Flapjack.
const client = algoliasearch('my-app', 'my-key', {
  hosts: [{ url: 'localhost:7700' }]
});
MIT License
Algolia-compatible API
Self-host anywhere

Why Flapjack

Drop-in Algolia replacement

Your existing Algolia client libraries and InstantSearch widgets work out of the box. Change one line of config.

Self-host in 60 seconds

Single binary. No dependencies. docker run and you're searching. Runs on any Linux box, any cloud, your laptop.

Fast

Built in Rust on Tantivy. Sub-millisecond search across millions of documents. Instant results, not "fast enough."

Your data, your rules

Open source. MIT licensed. No vendor lock-in. No surprise bills. Your infrastructure, your data, forever.

Works with your stack

# Index documents
curl -X POST 'http://localhost:7700/1/indexes/movies/batch' \
  -H 'X-Algolia-Application-Id: flapjack' \
  -H 'X-Algolia-API-Key: your-admin-key' \
  -d '{"requests": [
    {"action": "addObject", "body": {"title": "The Matrix", "year": 1999}},
    {"action": "addObject", "body": {"title": "Inception", "year": 2010}}
  ]}'

# Search
curl -X POST 'http://localhost:7700/1/indexes/movies/query' \
  -H 'X-Algolia-Application-Id: flapjack' \
  -H 'X-Algolia-API-Key: your-admin-key' \
  -d '{"query": "matrix"}'
import algoliasearch from 'algoliasearch';

const client = algoliasearch('flapjack', 'your-admin-key', {
  hosts: [{ url: 'localhost:7700', protocol: 'http' }]
});

// Index documents
await client.batch('movies', {
  requests: [
    { action: 'addObject', body: { title: 'The Matrix', year: 1999 } },
    { action: 'addObject', body: { title: 'Inception', year: 2010 } },
  ]
});

// Search
const { hits } = await client.search({
  requests: [{ indexName: 'movies', query: 'matrix' }]
});
console.log(hits); // [{ title: "The Matrix", year: 1999 }]
import algoliasearch from 'algoliasearch';
import instantsearch from 'instantsearch.js';
import { searchBox, hits } from 'instantsearch.js/es/widgets';

const client = algoliasearch('flapjack', 'your-search-key', {
  hosts: [{ url: 'localhost:7700', protocol: 'http' }]
});

const search = instantsearch({
  indexName: 'movies',
  searchClient: client
});

search.addWidgets([
  searchBox({ container: '#searchbox' }),
  hits({ container: '#hits', templates: {
    item: (hit) => `<p>${hit.title} (${hit.year})</p>`
  }})
]);

search.start();

Don't want to manage infrastructure?

Flapjack Cloud gives you a dedicated instance in any AWS region. Same Algolia-compatible API, zero ops. Provisioned in under a minute.

Try Flapjack Cloud

Pricing

Dedicated instance. No shared resources. Pay for infrastructure, not searches.

Micro

$9/mo
  • 1 GB RAM
  • 2 vCPU (ARM)
  • 5 GB disk included
  • 10 GB bandwidth included
Get started

Small

$19/mo
  • 2 GB RAM
  • 2 vCPU (ARM)
  • 5 GB disk included
  • 10 GB bandwidth included
Get started

Large

$79/mo
  • 8 GB RAM
  • 2 vCPU (ARM)
  • 5 GB disk included
  • 10 GB bandwidth included
Get started

All plans include a dedicated instance. Additional disk $0.50/GB/mo. Additional bandwidth $0.10/GB. Or self-host for free.