An AI-powered desktop tool that refines your selected text with smart suggestions and corrections.
screen.mp4
.
├── .agents/skills/ # Reusable skills for AI agents
├── .github/workflows/ # CI pipelines
├── apps/ # Client-facing apps
│ ├── desktop/ # Tauri + Vue 3 (main product)
│ └── www/ # Astro (marketing / SEO)
├── packages/ # Shared code across apps
│ ├── languages/ # i18n utilities and translation bundles
│ └── utils/ # Shared helpers and constants
├── scripts/ # Repo-wide automation scripts
├── package.json # Workspaces and top-level scripts
└── README.md
Follow the setup skill to install Node.js (from .nvmrc), pnpm (via Corepack, pinned in package.json), workspace dependencies, and the Rust toolchain for the Tauri desktop app.
/setup # run this skill/command in AI coding agentpnpm desktop:dev- Select any text you want to improve.
- Press
Ctrl/Cmd + Shift + Xto activate the application. - Wait for the AI response and let it replace the selected content automatically.
typo uses the OAuth 2.0 Device Authorization Grant (RFC 8628) flow for desktop login.
- Initiate: Click Login in the desktop app. It will display a user code and open your default browser.
- Authorize: Log in to your account in the browser and enter/confirm the code.
- Success: The desktop app will automatically detect the approval and establish a secure session.
- Capture: Gets the currently selected text.
- AI processing: Sends it to AI with a custom prompt (configurable in settings).
- Replacement: Copies the AI's response to the clipboard, then pastes it at the current cursor position (using the clipboard helps avoid input method issues).
- Multi-Model Support: Works with DeepSeek and local Ollama models.
- Global Hotkeys: Quick activation with
Ctrl/Cmd + Shift + X. - Intelligent Pasting: Uses clipboard-based replacement for maximum compatibility.
- Customizable: Tailor the AI behavior via system prompts.
You can define up to 5 custom prompt shortcuts in Settings -> Prompts.
- Each shortcut has a
key(for example/tr:zhor/prompt) and an instructionvalue. - Trigger it from selected text with one of these forms:
- Leading: first line starts with
/command - Trailing: last line starts with
/command
- Leading: first line starts with
- Template placeholders in shortcut values:
{{args}}: arguments after the command on the same line, e.g./prompt xxx{{text}}: cleaned selected text after command line is removed
Example:
/prompt Translate to Japanese in polite style
你好啊
- Run:
xattr -cr /Applications/typo.app - Enable Accessibility Permission for the app in System Settings.
For installation and auto-updates, we recommend using the AppImage version:
# Move the downloaded AppImage to a permanent location
mv ~/Downloads/typo_*.AppImage ~/Applications/typo.appimage
# Make it executable
chmod +x ~/Applications/typo.appimageCreate a desktop entry for easy access:
sudo vim /usr/share/applications/typo.desktopAdd the following content (replace <$USER> with your username):
[Desktop Entry]
Name=Typo
Comment=AI-powered text improvement tool
Exec=env GDK_BACKEND=x11 /home/<$USER>/Applications/typo.appimage --no-sandbox
Icon=typo
Type=Application
Categories=Utility;TextEditor;
Terminal=falseDownload the icon:
sudo curl -L -o /usr/share/icons/hicolor/256x256/apps/typo.png https://raw.githubusercontent.com/yuler/typo/main/resources/logo.pngWayland restricts global hotkey listeners for security. Use a System Shortcut instead of the app-level internal hotkey.
- Open
Settings -> Keyboard -> Custom Shortcuts. - Add a command:
typo --selection(or the full path to your AppImage). - Set keys to:
Ctrl + Shift + X.
To ensure reliable selection capture and pasting on Wayland, we highly recommend using ydotool for keyboard simulation:
-
ydotool: Fast keyboard simulation but requires manual setup.
Setup ydotool
Add your user to group input
sudo usermod -aG input $USERAdd udev rule for
uinputecho '## ydotoold fix
KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput" ' | sudo tee /etc/udev/rules.d/80-uinput.rules > /dev/null
Autostart ydotool daemon
Create ~/.config/autostart/ydotoold.desktop:
[Desktop Entry]
Type=Application
Name=ydotool daemon
Exec=/usr/bin/ydotooldIf selection capture still fails in specific apps (like some Electron apps), running them in X11 mode can help:
# Force VS Code to use X11
code --ozone-platform=x11On Wayland/GNOME environments (like Ubuntu 24.04 or Omakub), the system tray icon might be hidden by default.
We recommend using the Status Tray GNOME extension to enable system tray support.
You can verify if autostart is correctly configured:
- macOS: System Settings -> General -> Login Items.
- Linux: Check if
~/.config/autostart/typo.desktopexists. - Windows: Task Manager -> Startup.
- Ensure Ollama is running (
ollama serve). - See the Ollama API Documentation for more details.
pnpm bumpto version and tag the release.pnpm release:notesto update the release notes inlatest.json.pnpm releases:pulltopackages/releases, edit the data, thenpnpm releases:pushto update the marketing website.pnpm www:deployto deploy the www website