Open-source project
tisfeng/Easydict avatar
tisfeng/Easydict

Easydict: a macOS dictionary that queries Apple Dictionary, DeepL and LLMs side by side

macOS App OCR OpenAI Gemini DeepL Google Bing A concise and elegant Dictionary and Translator macOS App for looking up words and translating text.

15,304 stars813 forksSwiftGPL-3.0

At a glance

What is it?
Easydict is a GPL-3.0 Swift app for macOS 13.0+ that sends one lookup to several dictionary, translation, AI and CLI services at once and adds OCR screenshot translation. It is a strong fit for Mac users who read across languages, with a single busy maintainer and a macOS-only footprint as the main costs.
Who is it for?
Easydict is the right choice for a Mac user on macOS 13.0 or later who wants Apple Dictionary, MDict, DeepL, Google, Bing and LLM services answering the same lookup from a shortcut, and who is comfortable configuring individual services from SERVICES.md. It is the wrong choice for anyone on Windows, anyone stuck below macOS 13.0 who needs current features, or anyone who expects fast replies to issue reports.
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 Swift, according to GitHub's language statistics.

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

From daily snapshots

Star history

  • tisfeng/Easydict15,304 ★ · +1,248
Star history
Repository2026-07-302026-11-13
tisfeng/Easydict14.1k15.3k

1,248 Stars in the last 106 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

One lookup fans out to many services at the same time

The central idea in Easydict is that a single query does not go to a single engine. You type or select a word, the app detects the language of the input automatically, and it shows results from several dictionary and translation services at the same time. The project counts more than 20 dictionary, translation, AI, local-model and CLI services, and offers 52 selectable translation languages.

The named services span very different kinds of backends. Apple Dictionary and MDict are dictionary sources. Apple Translate, DeepL, Google and Bing are translation services. OpenAI, Gemini, Claude and DeepSeek are hosted AI models. Ollama covers local models, and Claude Code and Codex CLI appear as CLI services. Putting a word through a dictionary, a machine translator and a language model in one window is the reason to pick Easydict over a single-engine tool: you can compare a dictionary definition with a model's paraphrase without switching apps.

The consequence is that the result window is only as useful as the set of services you enable. A long list of parallel results helps when you are checking nuance in a phrase and gets in the way when you only want a quick gloss, so the service selection is something to tune rather than leave untouched.

Five entry points, each bound to an Option-key shortcut

Easydict exposes five ways to start a query, and four of them have default shortcuts built on the Option key.

Input Translate opens a box with `⌥ + A`; you enter text and press `Enter` to translate. Mouse Select Translate needs no key at all: after you select a word, a query icon appears, and hovering the mouse over it runs the lookup. Shortcut Select Translate works on text you have already selected and fires on `⌥ + D`. Screenshot Translate starts an area capture with `⌥ + S` and translates whatever text is inside the captured region. Silent Screenshot OCR uses `⌥ + ⇧ + S`.

The practical effect is that Easydict can sit in the background and be reached from any app, which is the difference between a translator you open and one you use mid-sentence. The select-text behaviour is referenced from PopClip, so readers who already use PopClip will recognise the pattern of an icon appearing next to a selection.

The cost is that four global shortcuts are claimed by default. If another app you use already binds any of these Option combinations, one of the two will not get the keystroke, so review the defaults against your existing shortcuts before you rely on them. The Complete Usage Guide in docs/user-docs/en/GUIDE.md is where configuration and tips are collected.

Silent Screenshot OCR skips the translation window entirely

Most of Easydict revolves around showing results in its own window, but Silent Screenshot OCR is deliberately different. Press `⌥ + ⇧ + S`, capture an area of the screen, and the recognised text is copied straight to the clipboard. No translation runs and no result panel appears.

This makes Easydict useful even when you are not translating anything. Text locked inside an image, a video frame, a non-selectable dialog or a scanned page can be pulled out with one shortcut and pasted wherever you need it. Regular Screenshot Translate, on `⌥ + S`, is the variant that does push the captured text through the translation services.

The screenshot capture itself is based on isee15's Capture-Screen-For-Multi-Screens-On-Mac project and has been optimised inside Easydict, which is why the capture is built to work across multiple screens.

There is a trade-off in the silent mode: because results go directly to the clipboard, whatever you had copied before is replaced, and you get no on-screen preview to check whether recognition was accurate before you paste. For short snippets this is fine; for anything where a misread character matters, use Screenshot Translate instead so you can see the recognised text before acting on it.

Out of the box does not mean every service is ready

Easydict calls itself ready to use out of the box, and the basics hold up that claim: automatic language recognition, the shortcuts and the built-in sources start working after installation. The broader service catalogue is a different matter. The main README names services such as OpenAI, Gemini, Claude, DeepSeek, DeepL and Ollama in one breath with Apple Dictionary, then sends you to docs/user-docs/en/SERVICES.md for the complete list and the access requirements of each.

Those requirements differ by kind of service. A local-model service through Ollama depends on what you run on your own machine. CLI services such as Claude Code and Codex CLI depend on those tools. Hosted AI and translation services have their own access conditions, which SERVICES.md spells out per service.

The Apple sources have dedicated how-to pages: How-to-use-macOS-system-dictionary-in-Easydict.md for Apple Dictionary and How-to-use-macOS-system-translation-in-Easydict.md for Apple Translate. MDict, which lets you load your own dictionary files, has How-to-use-MDict-in-Easydict.md.

The consequence for a new user is that the headline figure of 20+ services overstates what you get on first launch. Plan a short setup pass for the specific services you care about, and read their access requirements first so you are not surprised by an account or a local tool you did not expect to need.

macOS 13.0 is the floor, and 2.7.2 is the fallback

Easydict is a macOS app written in Swift, and its install paths are macOS-only. The recommended route is the Homebrew cask:

bash
brew install --cask easydict

The alternative is downloading the latest release from the GitHub releases page at github.com/tisfeng/Easydict/releases. Recent tags are 2.26.0 (27 October 2026), 2.25.0 (19 October 2026) and 2.24.0 (27 September 2026).

The latest version supports macOS 13.0 and later. On an older system the project points you to version 2.7.2 instead. That is a hard cut: a Mac that cannot run macOS 13.0 is stuck on a release far behind the 2.2x line, and it misses everything added since, including newer services. If you manage several Macs, check the macOS version on each before standardising on Easydict.

This also answers several common searches. Easydict here is a Mac app, so searches for Easydict for Windows, easydict python or PIP install easydict are about something else. The Homebrew cask and the release downloads are the install routes this repository offers, and there is no Python package in its install instructions. Readers who reached this project looking for a Python dictionary utility are in the wrong place, and Windows users will not find a build here.

A Bob-derived codebase under GPL-3.0

Easydict has an unusually explicit lineage. It was inspired by saladict and Bob, and the initial version was built on a GPL-3.0 fork of Bob. The project states that it has made many improvements and optimisations since, while many features and parts of the UI are still referenced from Bob. This is the most direct answer to the easydict vs bob question: Easydict started from Bob's code and design and has grown its own feature set on top, including the service list and OCR modes covered above.

The licence follows from that history. Easydict is GPL-3.0, free to obtain along with its source code. You can use the source freely, but you must attach the corresponding licence and copyright. The project statement also frames it as for learning and communication only, and invites anyone who believes their legal rights have been violated to contact the author.

For end users this changes little: the app is free and the source is public, so you can inspect what it does. For developers it matters more. Any fork or redistribution inherits GPL-3.0 obligations, and code borrowed from Easydict cannot be folded into a closed-source product. The app signing also has a history: an Apple Developer account provided by CanglongCl resolved the signature problem tracked in issue 2, which the author credits with letting more people use Easydict conveniently.

One busy maintainer and weekend-only issue triage

The repository is active: the last push landed on 2 November 2026 on the default branch, dev, and three releases shipped between late September and late October 2026. Development pace is not the problem.

Responsiveness is. Easydict is mainly developed and maintained by one author, who states plainly that he has been busy and triages issues mostly on weekends. PRs, and bugfix PRs in particular, get priority, and because of an overloaded inbox some messages may not be seen or answered promptly. A bug report filed on a Monday can sit for days, and a feature request with no attached code has no guarantee of a reply.

The practical route to getting something fixed is a pull request. The contribution guide, CONTRIBUTING.md, sets out the development workflow and pull request requirements, and it is written in Chinese, which raises the bar for contributors who do not read it. The project explicitly welcomes changes made with coding agents such as Codex and Claude, asks contributors to use a recent model suited to complex coding work, and expects the final changes to be reviewed and tested carefully. The repository root carries AGENTS.md, a .claude/ directory and an .agents/ directory to support that workflow. Sponsorship through afdian is the channel offered for supporting the author's time.

Building from source runs through Xcode and CocoaPods

If you want to build Easydict yourself, the repository layout tells you what toolchain to expect. The root holds Easydict.xcodeproj and Easydict.xcworkspace, a Podfile with Podfile.lock and a committed Pods/ directory, and a Gemfile with Gemfile.lock. Swift style is enforced through .swiftlint.yml and .swiftformat, and the Swift version is pinned in .swift-version. Build configuration is split between Easydict.xcconfig and Easydict-debug.xcconfig. Source sits in Easydict/, tests in EasydictTests/, and there are BuildTools/, scripts/ and changelog/ directories alongside docs/. An appcast.xml file sits at the root as well.

The step-by-step build procedure is in the Developer Build Guide section of docs/user-docs/en/GUIDE.md rather than on the front page, so read that before opening the workspace. Because the project uses a workspace with CocoaPods, opening the .xcodeproj on its own is not the intended entry point.

Translators of the interface have their own path: How-to-translate-Easydict.md covers localising the app itself. A Chinese README, README_ZH.md, sits next to the English one, which reflects where much of the user base and the contribution guide come from.

Editorial conclusion

Easydict is the right choice for a Mac user on macOS 13.0 or later who wants Apple Dictionary, MDict, DeepL, Google, Bing and LLM services answering the same lookup from a shortcut, and who is comfortable configuring individual services from SERVICES.md. It is the wrong choice for anyone on Windows, anyone stuck below macOS 13.0 who needs current features, or anyone who expects fast replies to issue reports. Before installing, check the access requirements for the services you actually plan to use, and if you intend to fork or redistribute it, check what GPL-3.0 and the Bob lineage require of you.

Frequently asked questions

How do I install Easydict?

The recommended method is Homebrew with brew install --cask easydict. You can also download the latest release from github.com/tisfeng/Easydict/releases; the latest version needs macOS 13.0 or later, and older systems should use 2.7.2.

Is Easydict safe to use?

Easydict is free and open source under GPL-3.0, so anyone can read the source code. The app is signed using an Apple Developer account provided by CanglongCl, which resolved the earlier signature issue.

How does Easydict compare with Bob?

Easydict was inspired by Bob and its initial version was built on a GPL-3.0 version of Bob. It has since added many improvements, while many features and parts of the UI are still referenced from Bob.

What are alternatives to Easydict?

The Easydict project itself names saladict and Bob as the projects that inspired it. Bob is the closest relative, since Easydict's first version was based on Bob's GPL-3.0 code.

Official sources

  1. Official README
  2. Project repository
  3. Release notes
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/tisfeng-easydict.svg)](https://hysenlabs.com/projects/tisfeng-easydict)

Star history chart for your README

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

Was this useful?