Open-source project
xushengfeng/eSearch avatar
xushengfeng/eSearch

eSearch puts OCR behind a screenshot, and the tray is the whole UI

Screenshot, offline OCR, search, translate, reverse image search, paste image on screen, screen recorder, omnidirectional scrolling screenshot, and screen translator. Supports Windows, Linux and macOS.

7,430 stars531 forksTypeScriptGPL-3.0

At a glance

What is it?
eSearch is an Electron desktop tool that turns a screen selection into recognized text, a translation and a search, on Windows, Linux and macOS. It grew out of a Python project, bundles the onnx runtime and three AI models in its installer, and has no Homebrew package.
Who is it for?
eSearch earns a place on a Linux desktop that lacks a good screenshot plus OCR loop, and on Windows if you want Snipaste's capture and pin with OCR and translation attached. It is the wrong choice if you need a package manager on macOS, if you run GNOME and will not install the appindicator extension, or if you need rare characters or languages beyond Chinese and English without downloading extra models.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • xushengfeng/eSearch7,430 ★ · +227
Star history
Repository2026-09-232026-11-14
xushengfeng/eSearch7.2k7.4k

227 Stars in the last 52 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

Information-portal rewritten in Electron, and why not Qt

eSearch is a desktop screenshot tool that keeps OCR, translation and search inside the same selection gesture, packaged as an Electron application for Windows, Linux and macOS. It began as a different program, Information-portal, written in Python with PyQt, which the author walked away from because he was not comfortable with PyQt. The current tree is TypeScript built with electron-vite, packaged by electron-builder, formatted and linted with biome, and released under GPL-3.0.

The choice of Electron is argued in the project's own answers rather than guessed at. Qt pulls in C++ and the learning cost was judged too high, Flutter's desktop side was not mature enough, screenshot work depends on the native system in ways a browser cannot reach, and among JavaScript options Electron was the most used and the most mature. The goal never moved: the desktop counterpart of the phone screen search that Smartisan's Big Bang and Xiaomi's transfer portal do.

Flameshot and Snipaste are the baseline, OCR is the addition

The comparison the author draws is with the two tools he actually used. On Windows he ran Snipaste, described as screenshot plus pin. Moving to Linux in 2019 he switched to Flameshot, and the specific complaint that started this project was that Flameshot has no intuitive color picker. He also wanted the instant search he enjoyed on the phone from Smartisan's Big Bang and Xiaomi's transfer portal, and had found no desktop equivalent.

So the difference in approach is what happens inside the selection rectangle. Snipaste and Flameshot stop at capturing the image and pasting it. eSearch continues into PaddleOCR based recognition, translation through engines you choose, and reverse image search in Google, Baidu or Yandex. That continuation is where the size and the dependencies come from, and the project is unusually blunt about it.

Tray resident, Alt+C, then arrow keys or an arithmetic expression

Launch behaviour is deliberately quiet. eSearch starts from your launcher, appears in the tray, and does nothing on screen until you press the shortcut. The default is Alt+C, and the hotkey can be changed in settings. Pressing it starts a selection, and the selection is the control surface: arrow keys resize it, or you type a four-operation arithmetic expression to set the size, which beats dragging when the region has known dimensions.

The second half of the loop is that a selection can carry an action. A screenshot selection can be set to run OCR immediately, so capture and recognition happen in one gesture instead of two.

Offline OCR is PaddleOCR in esearch-ocr, and the v5 model is a separate download

Offline recognition is the part that keeps screenshots off the network. It comes from a separate project, eSearch-OCR, built on PaddleOCR, and package.json pins esearch-ocr 8.5.2. The flow is short: select the text region, press Enter, and the recognized text lands in an editable box.

Basic offline OCR works out of the box, but large character sets, rare characters and special symbols need the v5 model downloaded in settings, and the languages beyond Chinese and English (Korean, Japanese, Telugu, Kannada, Tamil, Latin, Arabic, Cyrillic, Devanagari) are described as extra downloads too. Paragraph recognition is available offline, or segmentation by punctuation through esearch-seg; vertical text and rotated images are handled. Baidu and Youdao online OCR sit alongside as fallbacks.

Four install routes, and no Homebrew package

Four documented routes reach a build, and they are not equivalent. The project site carries a download page, the releases page holds a package per system, ghfast.top is offered as a GitHub mirror for users in China, Arch Linux users can install e-search or e-search-git from the AUR, and Windows users have one command:

bash
winget install esearch

macOS is the gap. The README says there is no Homebrew package yet and invites volunteer maintainers, so a Mac user downloads a disk image and deals with what follows. Building from source has its own wrinkle: the documented commands use npm while the repository commits pnpm-lock.yaml and package.json declares [email protected] as the package manager, so following the README with npm leaves the committed lockfile unused.

bash
git clone https://github.com/xushengfeng/eSearch.git
cd eSearch
npm install

Then npm run dist to package, npm run start to run the built output, and npm run dev for the debug session.

The installer carries onnx, three models and FFmpeg

Installer size has a documented breakdown, and none of it is mystery padding. Besides Electron the bundle carries the onnx runtime that executes the AI models, the offline text recognition model, the portrait recognition model used while recording, and the object removal model behind the advanced editing tools.

The author also names the storage trade-off: platforms other than Arch Linux do not package this kind of software as a standalone library, so an installed eSearch occupies more disk than a natively packaged tool, while adding a few dozen lines of JavaScript costs almost nothing next to it. On a machine with a small disk, that comparison is the one to make before installing.

Platform rough edges: dropped Win7, GNOME appindicator, a mac dmg refused

The Q&A section is the most useful part of the documentation, because every entry is a failure someone hit. Windows 7 and Windows 8 are gone: Electron no longer supports them, so eSearch dropped them too, and the documented workaround is to compile it yourself with the warning that some features may not work. Most Windows installations then ask to download a dependency, because the screenshot library needs it; that download opens Microsoft's site and a restart may be required afterwards.

Two more look cosmetic until they block you. On GNOME the tray icon does not appear unless the appindicator extension is installed, which reads as a failed launch. On macOS the downloaded dmg can be reported as damaged, because mac restricts disk images fetched from the internet, and the workaround differs by system version.

Version 15.6.0 and the stale settings problem after an update

Maintenance is fast and visible. Releases 15.5.1 on 2026-09-13, 15.6.0 on 2026-10-03 and 15.6.1 on 2026-10-24 line up with version 15.6.1 in package.json, and the last push was on 2026-11-02. That cadence is also a support cost, and the project has a standard answer for the errors that show up only after an update: configuration written by an older version may be incompatible, so restore defaults under Settings, Advanced, Advanced settings, and file an issue if that does not help.

The tree itself is conventional for an Electron project: src/, test/, script/, lib/, docs/, biome.json, electron-builder.config.js and four tsconfig files, including node, web and test targets.

Editorial conclusion

eSearch earns a place on a Linux desktop that lacks a good screenshot plus OCR loop, and on Windows if you want Snipaste's capture and pin with OCR and translation attached. It is the wrong choice if you need a package manager on macOS, if you run GNOME and will not install the appindicator extension, or if you need rare characters or languages beyond Chinese and English without downloading extra models. Verify first that the release matches your OS, and read the platform notes before treating a missing tray icon as a bug.

Frequently asked questions

What is eSearch?

eSearch is a cross-platform desktop tool that combines screenshot, offline OCR, search, translation, image pinning, screen recording and scrolling screenshots in one Electron application. It runs on Windows, Linux and macOS, with packages published as GitHub releases.

How do you install eSearch on Windows?

The README gives one winget command, winget install esearch, and otherwise points at the project site or the releases page for a package matching your system. Most Windows installations then prompt to download a dependency library, because the screenshot library needs it, and a restart may be needed after the install finishes.

Is there a Homebrew package for eSearch?

No. The README says there is no Homebrew package yet and welcomes volunteer maintainers to add one. macOS users download the disk image from the releases page instead, and mac may report that downloaded image as damaged.

Why does the eSearch tray icon not appear on GNOME?

GNOME needs the appindicator extension installed for the tray to work at all. Without it eSearch looks as if it failed to launch, even though the process is running.

Official sources

  1. License: GPL-3.0
  2. Project website
  3. README
  4. Releases
  5. xushengfeng/eSearch on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/xushengfeng-esearch.svg)](https://hysenlabs.com/projects/xushengfeng-esearch)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/xushengfeng-esearch.svg)](https://hysenlabs.com/projects/xushengfeng-esearch)

Was this useful?