Model or dataset
tisfeng/Raycast-Easydict avatar
tisfeng/Raycast-Easydict

Raycast Easydict: four commands, two configuration surfaces, one macOS-only OCR path

A Raycast Extension for looking up words or translating text in an easy way. Support 48+ languages, support Linguee and Youdao dictionary, support OpenAI, DeepL, Google, Bing, Apple, Baidu, Tencent, Volcano, Youdao and Caiyun translation.

577 stars44 forksTypeScriptMIT

At a glance

What is it?
Easydict is a Raycast dictionary and translation extension built around ordered providers, an optional AI dictionary mode and saved-word review with Anki export. Its rough edges are a platform-specific command declared for every install, a per-device key migration, and one language setting doing two jobs.
Who is it for?
Raycast Easydict suits someone who lives in Raycast, wants a dictionary one keystroke away with saved words and stroke-order diagrams, and is willing to order providers once and let the extension do the rest. It does not suit a Windows user who needs screenshot translation, or anyone moving keys between several machines expecting the migration to follow them.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
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 13, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • tisfeng/Raycast-Easydict577 ★ · +10
Star history
Repository2026-09-142026-11-13
tisfeng/Raycast-Easydict567577

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

Editorial analysis

Version 3.4.0 shipped a minute before the commit that made it

The release names are the changelog. v3.2.0 is Custom AI Providers and Chinese Stroke Order, published 2026-09-10. v3.3.0 is Optional Query Caching, 2026-09-19. v3.4.0 is Anki Integration, 2026-10-01 at 18:07:17 UTC, and the last push to main is 18:08:11 the same minute. The cadence is one feature per minor release over three weeks, and each release title tells you what to look at without opening a changelog file.

Ownership is split in a way worth knowing about. The repository belongs to tisfeng, the README says the extension was originally developed by tisfeng and is currently maintained by maxchang3, and package.json lists the author as isfeng with ViGeng, maxchang3 and litomore as contributors. The Raycast Store page, which is where users actually install from, sits at raycast.com/isfeng/easydict, under the original author's handle rather than the current maintainer's. Nothing is broken by that, but if you are reporting an issue or following the project for updates, the store page and the repository are two different identities.

The extension itself is small in interface terms and TypeScript in implementation. Its manifest targets the Raycast extension schema, the licence is MIT, and there is a native macOS app in a separate repository that the README points to for anyone who wants an app rather than a launcher extension.

Four commands, and one of them is documented as macOS-only

The manifest declares four commands, and their shapes differ in ways that matter. Search Word is the main one, named `easydict` internally, running in view mode, with a single optional text argument called queryText whose placeholder is simply Query. Manage Providers is also a view command. Favorite Words is a third view command for browsing what you saved. OCR Translate is the odd one out: it runs in no-view mode, carries its own icon, and takes no argument because it reads the screen instead.

That fourth command is where the platform split shows. The README states that OCR screenshot translation is macOS only, while the manifest declares the command unconditionally for every install. A Windows user therefore sees a command in Raycast whose underlying capability is documented as unavailable on their platform, with nothing in the manifest saying so.

The manifest also fixes the taxonomy Raycast uses to list the extension: Applications, Productivity, Developer Tools and Web. Those four categories are a statement about how the extension wants to be found, and for a dictionary tool the Developer Tools entry is doing the work of getting it in front of people who read documentation.

Manage Providers orders what Extension Settings turns on

Provider configuration is deliberately split across two places, and the split is stated rather than hidden. The Manage Providers command exists to order providers and to configure AI providers. Built-in providers appear in that list for ordering only; whether they are enabled, and how they are set up, lives in Extension Settings. So a provider has two independent properties, its position in the query order and its enabled state, and they are edited in different surfaces.

Reordering has its own shortcut vocabulary that changes with the platform: Move Up and Move Down are bound to Cmd+Option+Up/Down on macOS and Ctrl+Alt+Up/Down on Windows. That is a small thing to document and an easy thing to get wrong when following instructions written for the other platform.

AI providers are the part that grew in 3.2.0. They connect either to Raycast AI or to any OpenAI-compatible endpoint, and the extension ships presets for common providers where you pick one, add the API key and adjust the model. When your provider is missing, the project asks for a contribution rather than a config entry, with the shape documented at docs/development/adding-ai-provider.md. That is a deliberate choice about where extensibility lives: in the source, not in a user-supplied preset file.

Legacy keys migrate on first open, once per device

OpenAI and Gemini settings that carry an API key migrate automatically the next time you open Search Word or Manage Providers, preserving the connection settings, the enabled state and the position in the provider order. Nothing has to be triggered by hand, and the ordering survives, which is the part that would otherwise have been lost.

The old settings are not deleted. They remain as import sources only, and a separate action, Add from Legacy OpenAI/Gemini Settings, copies them into a new provider that is created disabled. So there are two mechanisms with different intents: an automatic in-place migration, and a manual copy for people who want to keep both. The manual copy starting disabled is the safer default, since a duplicated provider would otherwise be queried twice.

The constraint to plan around is that migration is per device. Each device needs the legacy API key, and a failure offers a retry rather than a partial result. On a machine that syncs settings between several devices, that means the migration conversation happens once per machine, and anyone troubleshooting a colleague's install should expect to enter the key again rather than assume it propagated.

One preferred-language setting does two different jobs

Preferred Languages defaults to simplified Chinese and English, and the setting is described as having two distinct functions, which is the interesting part of the design. The first is detection priority: the preferred languages are consulted in order during automatic language detection, because some words belong to more than one language at once. The example given is the English word `heel`, which Youdao translation recognises as Dutch, producing a translation nobody asked for; if English is in your preferred list it is detected as English first and translated correctly.

The second function is target selection. Input is translated into the first preferred language, and if the detected language already equals that first preferred language, the second preferred language becomes the target instead. That rule is what lets one setting serve both a monolingual user translating into English and a bilingual user translating out of English, without a separate output picker.

A separate Select Target Language option exists for when that inference is wrong, and it is off by default. With it off, the extension picks the preferred language as the target automatically; with it on, you specify one. The default is therefore the automatic behaviour, and the override is the explicit one, which is the right way round for something you touch rarely.

Dictionary mode is a second output format, and it is slower

The Word and Term Results setting chooses between Plain Translation and an AI-Generated Dictionary Entry. Dictionary mode is structured, building pronunciation, senses, examples and word forms for words and terms, while anything that is not a word or a term is translated normally by the same setting. The extension is candid about the cost: it can be slower and may need a retry. That is the trade for turning a translation model into something that behaves like a dictionary, and the failure mode is a retry rather than an error.

The non-AI path returns its own kind of depth. Dictionary lookup goes to Youdao and Linguee, and results carry translations, pronunciations, exam coverage, parts of speech, tenses and word forms, and web phrases. Exam coverage and inflected forms are the fields that matter to a learner rather than a translator, which is why the extension presents itself as a study tool as much as a lookup tool.

Audio is automatic: the word audio plays after a query, and Youdao text to speech covers the other languages. The study side is saved work rather than live work. Favorite Words stores complete results for offline browsing and management, stroke-order diagrams cover Chinese characters, and v3.4.0 added export of those favorites to Anki for spaced repetition. Show More Details, bound to Cmd + M, is where the longer fields are reached.

Two READMEs, three AI instruction files, and a typos dictionary

The repository carries more configuration than a four-command extension strictly needs, and the shape of it is telling. Documentation is bilingual, README.md and README_ZH.md, with automd.config.ts sitting alongside, which is the generator for keeping generated sections in the markdown in step with the source. Docs live in docs/, and the provider contribution guide is one file inside it.

Agent instructions are not an afterthought here. AGENTS.md, CLAUDE.md, a .agents/ directory and skills-lock.json all sit at the top level, so the repository carries instructions for more than one assistant at once, pinned by a lock file. Whether that is worth the surface is a matter of taste, but it is the kind of thing that tells you the project expects to be worked on with an assistant rather than only read.

The quality tooling is conventional and thorough: eslint.config.ts, .prettierrc with a .prettierignore, commitlint.config.js for conventional commit messages, typos.toml for a spell checker, vitest.config.ts for tests, tsconfig.json, package-lock.json and CHANGELOG.md. SECURITY.md and LICENSE are present too. The one thing to note is the manual install route, which is

bash
git clone https://github.com/tisfeng/Raycast-Easydict.git && cd Raycast-Easydict

npm install && npm run dev

That is a development-mode start, so it suits someone with the Raycast developer tooling rather than an end user; everyone else installs from the Store.

Editorial conclusion

Raycast Easydict suits someone who lives in Raycast, wants a dictionary one keystroke away with saved words and stroke-order diagrams, and is willing to order providers once and let the extension do the rest. It does not suit a Windows user who needs screenshot translation, or anyone moving keys between several machines expecting the migration to follow them. Before adopting it, install from the Store rather than the development-mode clone, decide in Extension Settings which providers are actually enabled since Manage Providers only orders them, keep the AI dictionary mode for words and terms and leave prose on plain translation, and expect to re-enter a legacy OpenAI or Gemini key on each device.

Frequently asked questions

Which translation and dictionary services does Raycast Easydict use?

Dictionary lookup goes to Youdao and Linguee, while translation is available through Apple System Translation, DeepL, Google, Bing, Baidu, Tencent, Volcano, Youdao and Caiyun. AI translation and lookup runs on Raycast AI or any OpenAI-compatible endpoint, and the extension supports 48 or more languages.

Can I use Raycast Easydict on Windows?

The extension itself works on both macOS and Windows, but OCR screenshot translation is documented as macOS only, even though the OCR Translate command is declared in the manifest for every install. The other three commands, Search Word, Manage Providers and Favorite Words, behave the same on both platforms.

How do I add my own AI provider to Raycast Easydict?

AI providers connect to Raycast AI or any OpenAI-compatible endpoint, and built-in presets cover common providers by letting you add the API key and adjust the model. If your provider is missing, the project asks for a contribution, with the expected shape documented at docs/development/adding-ai-provider.md.

What does the AI dictionary mode do in Raycast Easydict?

The Word and Term Results setting chooses between Plain Translation and an AI-Generated Dictionary Entry. Dictionary mode builds a structured entry with pronunciation, senses, examples and word forms for words and terms, and the extension notes it can be slower and may need a retry.

How does Raycast Easydict handle an old OpenAI or Gemini API key?

Those settings migrate automatically the next time you open Search Word or Manage Providers, preserving the connection settings, enabled state and order. The old values stay as import sources, and migration is per device, so each machine needs the legacy key.

Official sources

  1. License: MIT
  2. Project website
  3. README
  4. Releases
  5. tisfeng/Raycast-Easydict 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/tisfeng-raycast-easydict.svg)](https://hysenlabs.com/projects/tisfeng-raycast-easydict)

Star history chart for your README

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

Was this useful?