{"id":50500670,"url":"https://github.com/orangecoding/nanosearch","last_synced_at":"2026-06-02T11:02:22.598Z","repository":{"id":351771820,"uuid":"1211357548","full_name":"orangecoding/nanosearch","owner":"orangecoding","description":"A web-based full-text search tool for local directories. Easy indexing of your files, then search them instantly via a browser. Without bullshit, extremely lightweight.","archived":false,"fork":false,"pushed_at":"2026-04-17T10:52:34.000Z","size":1161,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-18T11:08:44.652Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://orange-coding.net","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/orangecoding.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-15T10:06:51.000Z","updated_at":"2026-04-17T10:52:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/orangecoding/nanosearch","commit_stats":null,"previous_names":["orangecoding/nanosearch"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/orangecoding/nanosearch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orangecoding%2Fnanosearch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orangecoding%2Fnanosearch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orangecoding%2Fnanosearch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orangecoding%2Fnanosearch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/orangecoding","download_url":"https://codeload.github.com/orangecoding/nanosearch/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orangecoding%2Fnanosearch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33818568,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-02T11:02:21.677Z","updated_at":"2026-06-02T11:02:22.589Z","avatar_url":"https://github.com/orangecoding.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nanosearch\n\n\u003cp align=\"center\"\u003e\n\n\u003ca href=\"https://orange-coding.net/\"\u003e\n\u003cpicture\u003e\n  \u003cimg alt=\"Logo\" src=\"https://github.com/orangecoding/nanosearch/blob/master/media/logo.png\" width=\"200\"\u003e\n\u003c/picture\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\nA web-based full-text search tool for local directories. Easy indexing of your files, then search them instantly via a browser. Without bullshit, extremely lightweight.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/orangecoding/nanosearch/actions/workflows/ci.yml/badge.svg\" alt=\"Tests\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-Apache--2.0-blue\" alt=\"License\" /\u003e\n  \u003cimg src=\"https://github.com/orangecoding/nanosearch/actions/workflows/docker.yml/badge.svg\" alt=\"Docker\" /\u003e\n\u003c/p\u003e\n\n---\n\n## Features\n\n- Full-text search with SQLite FTS5 (BM25 ranking, highlighted snippets)\n- Incremental re-indexing, only new or changed files are processed\n- OCR for scanned PDFs and images (Tesseract.js locally, Tesseract CLI in Docker)\n- Supports all sorts of files, e.g. PDF, DOCX, TXT, Markdown, JPG, PNG, TIFF\n- Real-time indexing progress\n- Rendering your files directly in the browser if possible\n\n---\n\n## Screenshots\n\n| Search                       | Rendering View                       |\n| ---------------------------- | ------------------------------------ |\n| ![Search](media/screen1.png) | ![Rendering View](media/screen2.png) |\n\n---\n\n# Quick Start\n\n## \"Bare Metal\"\n\n**Prerequisites:** Node 22\n\n```bash\n# 1. Install dependencies + download Tesseract language data (~25 MB, once)\nyarn inst\n\n# 2. Configure\ncp .env.example .env\n\n# 4. Start the app\nyarn start\n```\n\nOpen `http://localhost:3000`, click **Create Index**, then search.\n\n## Development\n\n**Prerequisites:** Node 22\n\n```bash\n# 1. Install dependencies + download Tesseract language data (~25 MB, once)\nyarn inst\n\n# 2. Configure\ncp .env.example .env\n\n# 3. Start the backend (Terminal 1)\ncd lib/backend\nnode --no-deprecation --watch src/server.js\n\n# 4. Start the frontend (Terminal 2)\nyarn dev\n```\n\nOpen `http://localhost:5173`, click **Create Index**, then search.\n\n---\n\n## Docker\n\n```bash\n# 2. Configure\ncp .env.example .env\n\n# 2. Add volume mounts to docker-compose.yml for each directory in SEARCH_DIRS\n# See the comment block in docker-compose.yml\n\n# 3. Start\ndocker compose up -d\n```\n\nOpen `http://localhost:3000`, click **Create Index**, then search.\n\n---\n\n## Configuration\n\nAll options are set via environment variables (or `.env` at the project root):\n\n| Variable                | Default              | Description                                                                          |\n| ----------------------- | -------------------- | ------------------------------------------------------------------------------------ |\n| `SEARCH_DIRS`           | _(required)_         | Comma-separated list of directories to index                                         |\n| `DB_PATH`               | `./db/nanosearch.db` | Path to the SQLite database file                                                     |\n| `OCR_BACKEND`           | `js`                 | `js` (Tesseract.js) or `cli` (Tesseract CLI)                                         |\n| `PORT`                  | `3000`               | Backend port                                                                         |\n| `LOG_LEVEL`             | `info`               | Pino log level                                                                       |\n| `RESCAN_INTERVAL_HOURS` | `0`                  | Automatically re-scan and re-index new/changed files every X hours. `0` disables it. |\n| `EXTENSIONS`            | _(see .env.example)_ | Complete list of extensions to index. Nothing is indexed unless listed here.         |\n\n---\n\n## OCR Backends\n\n| Backend | How                                      | When to use              |\n| ------- | ---------------------------------------- | ------------------------ |\n| `js`    | Tesseract.js (pure Node, no system deps) | Local development        |\n| `cli`   | System `tesseract` binary                | Docker (default), faster |\n\nBoth backends recognise German and English simultaneously (`deu+eng`).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forangecoding%2Fnanosearch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Forangecoding%2Fnanosearch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forangecoding%2Fnanosearch/lists"}