Skip to content
Back to skills

Typesense

ASecurity

Stand up a self-hostable, typo-tolerant search environment with Typesense — the open-source Algolia / ElasticSearch alternative (single C++ binary, <50ms instant search, no runtime deps). One routing-first skill: pick a server mode (binary download, official Docker image, or managed Typesense Cloud), install an API client (Python/JS/PHP/Ruby official; Go/Dart/C# community), design a collection schema, index documents, and run searches with typo tolerance, faceting/filtering, geo-search, sorti...

  • 47 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 11, 2026
ai-agentspythongorubyphpc++c#bashnodedockergit

Works with

  • claude code
  • cli
  • api

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 5 files and shows the line behind each finding

Scanned September 11, 2026

npx -y skills add akillness/jeo-skills --skill typesense --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Typesense?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Typesense
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/akillness-typesense/badge)](https://www.skillsdirectory.com/skills/akillness-typesense)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: typesense
description: >
  Stand up a self-hostable, typo-tolerant search environment with Typesense —
  the open-source Algolia / ElasticSearch alternative (single C++ binary,
  <50ms instant search, no runtime deps). One routing-first skill: pick a
  server mode (binary download, official Docker image, or managed Typesense
  Cloud), install an API client (Python/JS/PHP/Ruby official; Go/Dart/C#
  community), design a collection schema, index documents, and run searches
  with typo tolerance, faceting/filtering, geo-search, sorting, grouping,
  synonyms, curation, scoped API keys, and federated multi-search — then wire
  an InstantSearch.js UI and a Raft-based HA cluster for production. Use when
  the user wants to build or operate an installable search backend, add
  site/app/product search, or migrate off Algolia/Elasticsearch. Triggers on:
  typesense, search engine, typo-tolerant search, algolia alternative,
  elasticsearch alternative, instantsearch, faceted search, geo search,
  vector search, self-hosted search, site search, product search.
allowed-tools: Bash Read Write Edit Glob Grep WebFetch
compatibility: >
  Cross-platform search-backend wrapper usable from Claude Code, Codex, Gemini
  CLI, and OpenCode. Wraps the upstream Typesense server (binary / Docker /
  Cloud) and official API clients. Routes LLM-trace/eval observability to
  `opik`/`langsmith`, agent-facing code search to `semble`, and broad service
  telemetry to `monitoring-observability`.
metadata:
  tags: typesense, search-engine, typo-tolerant, algolia-alternative, elasticsearch-alternative, instantsearch, faceted-search, geo-search, self-hosted, plugin
  platforms: Claude, Gemini, Codex, OpenCode, All
  keyword: typesense
  version: "1.0.0"
  upstream: https://github.com/typesense/typesense
  installer: docker run -p 8108:8108 -v /tmp/typesense-data:/data typesense/typesense --data-dir /data --api-key=xyz
  source: akillness/jeo-skills
---

# typesense — Installable Typo-Tolerant Search Environment

[Typesense](https://github.com/typesense/typesense) is a fast, typo-tolerant
open-source search engine — an Algolia alternative and an easier-to-use
ElasticSearch alternative. It is a **single C++ binary with no runtime
dependencies**, architected for low-latency (<50ms) instant search. This skill
is the routing-first wrapper: choose how to run the server, wire a client,
model the data, and drive search + UI + production hardening.

## When to use this skill

- The user wants to **stand up a search backend** for a site, app, catalog,
  docs, or product browsing experience
- The user asks to install/run Typesense (binary, Docker, or Typesense Cloud)
- The user wants **typo tolerance, faceting/filtering, geo-search, sorting,
  grouping, synonyms, curation, scoped API keys, or federated multi-search**
- The user wants to **migrate off Algolia or Elasticsearch** to a self-hosted
  or managed open-source engine
- The user wants an **InstantSearch.js UI** or a **Raft HA cluster** in front
  of / around Typesense

## When not to use this skill

- The user wants **LLM trace/eval observability** (hallucination, prompt
  scoring) → use `opik` / `langsmith`
- The user wants **token-efficient code search for agents** over a repo →
  use `semble`
- The user wants **generic service dashboards / uptime alerts** (non-search
  telemetry) → use `monitoring-observability`
- The user wants a **vector database** purpose-built for embeddings only —
  Typesense does vector + hybrid search, but a dedicated store may fit better
  for pure ANN at extreme scale; confirm the workload first

## Prerequisites

| Requirement | Notes |
|-------------|-------|
| Docker (recommended) | Simplest local + prod path via the official image |
| or a binary host | Linux (x86-64) / macOS binary packages from typesense.org/downloads |
| or Typesense Cloud | Zero-ops managed cluster (fixed hourly + bandwidth, not per-record) |
| An API client | Python / JS / PHP / Ruby official; Go / Dart / C# community |
| An API key | Set at server start (`--api-key`); generate scoped keys per tenant |

## Instructions

### Step 1 — Choose the server mode

| Mode | When | Entry point |
|------|------|-------------|
| **Docker** (recommended) | Local dev → prod, single command | `docker run typesense/typesense …` |
| **Binary** | Bare-metal / no Docker | Download from <https://typesense.org/downloads> |
| **Typesense Cloud** | Zero-ops managed, HA | <https://cloud.typesense.org> |

Local Docker server (pin a real version tag, set a strong key):

```bash
docker run -p 8108:8108 -v /tmp/typesense-data:/data \
  typesense/typesense:27.1 --data-dir /data --api-key=CHANGE_ME_STRONG_KEY
```

The skill ships [`scripts/install.sh`](scripts/install.sh) to start a local
Docker server and install the Python client in one shot.

### Step 2 — Install an API client

```bash
pip install typesense        # Python (official)
npm install typesense        # JS/TS (official)
# PHP: composer require typesense/typesense-php   Ruby: gem install typesense
```

Prefer an official client over raw CURL — they ship a smart retry strategy
for HA setups. See [`references/commands.md`](references/commands.md) for the
full client + integration matrix.

### Step 3 — Design the collection schema

A collection is an index with a typed schema. Mark fields `facet: true` to
filter/drill-down, and set `default_sorting_field` for ranking:

```python
import typesense
client = typesense.Client({
    "api_key": "CHANGE_ME_STRONG_KEY",
    "nodes": [{"host": "localhost", "port": "8108", "protocol": "http"}],
    "connection_timeout_seconds": 2,
})
client.collections.create({
    "name": "companies",
    "fields": [
        {"name": "company_name", "type": "string"},
        {"name": "num_employees", "type": "int32"},
        {"name": "country", "type": "string", "facet": True},
    ],
    "default_sorting_field": "num_employees",
})
```

Unlike Algolia, most settings (searchable fields, facets, ranking) are set at
**query time**, so one collection serves many sort orders — less memory, more
flexibility.

### Step 4 — Index documents

```python
client.collections["companies"].documents.create({
    "id": "124", "company_name": "Stark Industries",
    "num_employees": 5215, "country": "USA",
})
# Bulk import (JSONL) for large datasets:
# client.collections["companies"].documents.import_(jsonl_lines, {"action": "upsert"})
```

### Step 5 — Search (typo tolerance + facets + filters + geo)

```python
client.collections["companies"].documents.search({
    "q": "stork",                       # typo of "stark" — handled out of the box
    "query_by": "company_name",
    "filter_by": "num_employees:>100",
    "sort_by": "num_employees:desc",
    "facet_by": "country",
})
```

Capabilities to reach for: faceting/filtering, geo-search (sort by distance),
grouping & distinct, synonyms, curation/merchandizing (pin records),
federated **multi-search** across collections in one request, and vector /
hybrid search. Details in [`references/commands.md`](references/commands.md).

### Step 6 — Search UI + production

- **UI**: the [InstantSearch.js adapter](https://github.com/typesense/typesense-instantsearch-adapter)
  gives filtering, sorting, pagination, and as-you-type UI fast.
- **Multi-tenant**: generate **scoped API keys** that restrict access to
  certain records — never ship the admin key to the client.
- **HA**: run a **Raft-based cluster** (typically 3 nodes) for high
  availability; upgrades are a binary swap + restart.

### Step 7 — Plugin-style installation alongside jeo-skills

This skill folder is plugin-installable through the standard jeo-skills
flow so the wrapper, references, and installer land on disk for any supported
agent runtime:

```bash
# Project install (writes into .agents/skills/typesense/)
npx skills add https://github.com/akillness/jeo-skills --skill typesense

# Global install for every detected agent
npx skills add -g https://github.com/akillness/jeo-skills --skill typesense

# Target specific agents
npx skills add -g https://github.com/akillness/jeo-skills --skill typesense -a claude-code -a codex -y
```

## Output format

When the user asks `typesense` for help, return a compact brief:

```markdown
# typesense Routing Brief

## Scope
- Server mode: docker | binary | cloud | undecided
- Client: python | js | php | ruby | community
- Stage: install-server | install-client | schema-design | index | search | ui | production-ha

## Recommended next move
- start-docker-server | install-client | create-collection | import-docs | run-search | wire-instantsearch | scoped-keys | cluster

## Why
- 2-3 bullets grounded in the user's packet

## Route-outs
- `opik` / `langsmith` for LLM trace/eval observability
- `semble` for agent-facing code search over a repo
- `monitoring-observability` for non-search service telemetry
```

## Best practices

1. **Pin a version tag, never `latest`** — `typesense/typesense:27.1`, and
   keep the data dir on a real volume so restarts don't lose the index.
2. **Set settings at query time** — searchable fields, facets, sort, and
   ranking are per-query; you rarely need multiple collections for sort orders.
3. **Mark facets in the schema** — `facet: true` is required for filtering /
   drill-down on a field.
4. **Use scoped API keys for clients** — the admin key stays server-side;
   scoped keys enforce per-tenant record access.
5. **Bulk import as JSONL with `upsert`** — far faster than per-document
   creates for large datasets; size RAM to the index (memory-resident).
6. **License awareness** — the **server is GPL**, the **client libraries are
   Apache-2.0**; run the server as a separate daemon (the intended use).

## References

- Upstream repo: <https://github.com/typesense/typesense>
- API docs: <https://typesense.org/api>
- Guide / walk-through: <https://typesense.org/guide>
- Downloads (binary): <https://typesense.org/downloads>
- Docker image: <https://hub.docker.com/r/typesense/typesense>
- Typesense Cloud: <https://cloud.typesense.org>
- InstantSearch adapter: <https://github.com/typesense/typesense-instantsearch-adapter>
- Installer script: [`scripts/install.sh`](scripts/install.sh)
- Client + integration matrix: [`references/commands.md`](references/commands.md)
- Adjacent skills: `../opik/SKILL.md`, `../semble/SKILL.md`,
  `../monitoring-observability/SKILL.md`
- License: GPL-3.0 (server); API clients Apache-2.0

Files in this skill

  • SKILL.md10.3 KB
  • SKILL.toon1.8 KB
  • evals/evals.json2 KB
  • references/commands.md3.7 KB
  • scripts/install.sh3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…