selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

OneSearch logo

Self-host OneSearch

v1.7.1

Self-hosted full-text search for your homelab

ReleaseOpen SourceAGPL-3.0
Updated9 hours ago
LanguagePython
Setup difficultyModerate
ThemeDark mode
Stars
27
CPU
2 CPU cores
RAM
4GB RAM
Storage
10-50% of source data size
Port
8000 (Web UI and API)
Docker
ghcr.io/demigodmode/onesearch
Install with Docker Compose
OneSearch search results page showing file matches with highlighted snippetsDocument preview with extracted text and highlighted search matchesPhoto metadata search showing EXIF data from RAW imagesAdmin status page showing source health and indexing progress

What is OneSearch?

OneSearch is a self-hosted search engine for homelabs that indexes documents, code, images, media, and other files from local directories or NAS shares. It uses Meilisearch for full-text search and provides a web UI with document previews, highlighted snippets, and metadata search for photos and media. The default deployment runs everything in a single Docker container with SQLite for configuration. It supports incremental indexing, scheduled scans, remote agents for indexing files on other machines, and a REST API with a standalone CLI. The project is licensed under AGPL-3.0 with no telemetry or cloud dependencies.

Should you self-host OneSearch?

OneSearch scores 39/100 on selfhost.directory (how scoring works) and ranks #36 of 41 in Search Engines. It has 27 GitHub stars.

It shipped 18 stable releases in the past year. The latest, v1.7.1, came out on 25 October 2026. New versions land roughly every 2 days.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is AGPL-3.0-licensed and written mostly in Python.

Its closest alternative on selfhost.directory is SearXNG (86/100, 38 940 stars). It scores higher overall, so compare the two before you pick. See OneSearch vs SearXNG side by side.

Features

  • Admin Dashboard
  • CLI Tool
  • Document preview with highlighted matches
  • Full-Text Search
  • Image and RAW photo metadata search
  • Incremental indexing
  • Multi-format file support
  • Non-root container
  • Rate-limited authentication
  • Read-only source mounts
  • Remote agents
  • REST API
  • Scheduled scanning

OneSearch README

How to install OneSearch

Install OneSearch with Docker Compose

Environment variables
MEILI_MASTER_KEY, SESSION_SECRET, ONESEARCH_MANAGED_MEILI, DATABASE_URL, LOG_LEVEL, CORS_ORIGINS, ALLOWED_SOURCE_PATHS, PUID, PGID, and many optional settings

mkdir onesearch && cd onesearch curl -O https://raw.githubusercontent.com/demigodmode/OneSearch/main/docker-compose.yml curl -O https://raw.githubusercontent.com/demigodmode/OneSearch/main/.env.example cp .env.example .env

Edit .env and set MEILI_MASTER_KEY and SESSION_SECRET

docker compose up -d

Default managed Meilisearch mode runs everything in one container

How to configure OneSearch

  • ALLOWED_SOURCE_PATHS/dataComma-separated parent directories that sources must live under.

    Comma-separated parent directories that sources must live under.

    values: comma-separated container paths

  • AUTH_RATE_LIMIT5Maximum login attempts per minute from one IP address.

    Maximum login attempts per minute from one IP address.

    values: attempts per minute

  • CORS_ORIGINSlocalhost development originsComma-separated list of browser origins allowed to call the API.

    Comma-separated list of browser origins allowed to call the API.

    values: comma-separated URLs

  • DATABASE_URLsqlite:////app/data/onesearch.dbSQLite database path.

    SQLite database path.

    values: SQLite connection string

  • LOG_LEVELINFOLogging verbosity.

    Logging verbosity.

    values: DEBUG, INFO, WARNING, ERROR

  • MAX_OFFICE_FILE_SIZE_MB50Maximum size for Office files.

    Maximum size for Office files.

    values: megabytes

  • MAX_PDF_FILE_SIZE_MB50Maximum size for PDF files.

    Maximum size for PDF files.

    values: megabytes

  • MAX_TEXT_FILE_SIZE_MB10Maximum size for text files.

    Maximum size for text files.

    values: megabytes

  • MEILI_MASTER_KEYMaster key for the managed or external Meilisearch instance. Required.

    Master key for the managed or external Meilisearch instance. Required.

    values: secure random string (32+ chars)

  • MEILI_URLMeilisearch endpoint for external Meilisearch mode. Required only when ONESEARCH_MANAGED_MEILI=false.

    Meilisearch endpoint for external Meilisearch mode. Required only when ONESEARCH_MANAGED_MEILI=false.

    values: URL like http://meilisearch:7700

  • ONESEARCH_MANAGED_MEILItrueWhether OneSearch starts the bundled Meilisearch process inside the app container.

    Whether OneSearch starts the bundled Meilisearch process inside the app container.

    values: true, false

  • PGID1000GID used by the OneSearch backend process inside the container.

    GID used by the OneSearch backend process inside the container.

    values: numeric GID

  • PUID1000UID used by the OneSearch backend process inside the container.

    UID used by the OneSearch backend process inside the container.

    values: numeric UID

  • SCHEDULER_ENABLEDtrueWhether the background scheduler runs.

    Whether the background scheduler runs.

    values: true, false

  • SCHEDULE_TIMEZONEUTCTimezone for cron schedule calculations.

    Timezone for cron schedule calculations.

    values: IANA timezone names

  • SESSION_EXPIRE_HOURS24How long auth tokens stay valid.

    How long auth tokens stay valid.

    values: hours

  • SESSION_SECREThardcoded fallback (logs a warning)Secret key used for signing JWT tokens. If not set, a hardcoded fallback is used.

    Secret key used for signing JWT tokens. If not set, a hardcoded fallback is used.

    values: secure random string

OneSearch releases & version history

More in Search Engines

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…