GitHub - Shadi/docs-search: Desktop App for full-text search over PDFs and scanned images

GitHub

3 min read Original article ↗

Small app that indexes PDFs and scanned images, and allow you to do a text search over them, there are 2 binaries available for each OS, the *-ocr version is slower and more resource intensive, so if you don't have PDFs or scanned images and instead just normal document PDF avoid it.


Download

Grab the latest build from the Releases page

OS Non-OCR (default) OCR
Linux (x86-64) docs-search-linux-amd64.zip docs-search-linux-amd64-ocr.zip
macOS (Apple Silicon) docs-search-darwin-arm64.zip docs-search-darwin-arm64-ocr.zip
macOS (Intel) docs-search-darwin-amd64.zip docs-search-darwin-amd64-ocr.zip
Windows (x86-64) docs-search-windows-amd64.zip docs-search-windows-amd64-ocr.zip (experimental)

Choose OCR only if your PDFs are scanned/image-only or you want to search inside image files (see OCR below).

Binaries are unsigned, so the first launch needs the one-time step noted below.


Run

Linux

unzip docs-search-linux-amd64.zip
chmod +x docs-search-fyne
./docs-search-fyne

macOS

unzip docs-search-darwin-arm64.zip
xattr -dr com.apple.quarantine docs-search-fyne   # clear the "unidentified developer" flag
./docs-search-fyne

Or right-click the binary → Open the first time and confirm.

Windows

Unzip and double-click docs-search-fyne.exe. For the OCR build, keep the bundled *.dll files and the tessdata folder next to the .exe.


Requirements for the OCR build

The OCR build needs Tesseract and at least one language pack installed at runtime. Install the language packs that match your documents.

OS Install
Linux sudo apt install tesseract-ocr tesseract-ocr-eng tesseract-ocr-ara, tesseract-ocr-chi-sim
macOS brew install tesseract tesseract-lang (installs Tesseract + all language data)
Windows The zip already bundles the Tesseract DLLs and an English tessdata/ keep them next to the .exe. For more languages, install Tesseract (UB Mannheim) and point TESSDATA_PREFIX at its tessdata.

If Tesseract (or any language data) is missing, the OCR build will report an error instead of indexing. The non-OCR build never touches Tesseract.

Windows OCR is experimental, if you need OCR on Windows and the artifact isn't there, build from source.


Build from source

Requires Go 1.26+ and a C toolchain (the GUI uses OpenGL via cgo).

Install the build dependencies:

  • Linux: gcc pkg-config libgl1-mesa-dev xorg-dev libxkbcommon-dev, OCR also g++ libtesseract-dev libleptonica-dev tesseract-ocr tesseract-ocr-eng
  • macOS: Xcode Command Line Tools (xcode-select --install), for OCR also brew install tesseract leptonica
  • Windows: MSYS2 with mingw-w64-x86_64-gcc, for OCR also mingw-w64-x86_64-tesseract-ocr

Then build the app:

# non-OCR (self-contained)
go build -o docs-search-fyne ./cmd/ui

# OCR (links Tesseract; on Apple Silicon add:
#   CGO_CPPFLAGS=-I/opt/homebrew/include CGO_LDFLAGS=-L/opt/homebrew/lib )
go build -tags ocr -o docs-search-fyne-ocr ./cmd/ui

There's also a CGO-free command-line tool that prints matches as JSON:

go build -o docs-search .
./docs-search -q "your query" /path/to/folder

Acknowledgements

docs-search is built on these open-source projects:

  • Fyne (BSD-3-Clause) — the desktop GUI toolkit.
  • Bleve (Apache-2.0) — the full-text search index.
  • PDFium (BSD-3-Clause, © The Chromium Authors) via go-pdfium (MIT) — PDF text extraction and page rendering.
  • wazero (Apache-2.0) — the pure-Go WebAssembly runtime that runs PDFium (so the non-OCR build needs no native PDF library).
  • Tesseract (Apache-2.0) with Leptonica (BSD-2-Clause), via gosseract (MIT) — OCR in the -ocr builds.
  • golang.org/x/image (BSD-3-Clause) — image format decoders.

Full license texts for every bundled dependency (direct and transitive) are in THIRD_PARTY_LICENSES.md.

Thanks to their authors and contributors.