Cat Type is a desktop companion for Windows, macOS, and Linux that makes a tiny animated cat appear while you type. Its paws follow the side of the keyboard you use, spacebar taps both paws, fast typing makes it excited, and it fades away after you stop.
Cat Type was inspired by Bongo Cat on Steam. I loved the idea of a tiny companion that reacts as you type and wanted to create my own take on it.
On Windows, Cat Type puts the companion beside the place where text is being inserted. On macOS and Linux, it uses pointer placement instead. Its four-frame cat illustrations are original artwork created for this project; it does not extract or redistribute Bongo Cat's game assets.
Download and run Cat Type Setup.exe. The installer adds Cat Type to the Start Menu and can optionally add a desktop shortcut and launch it when you sign in.
You can also use the portable Cat Type.exe without installing it.
When Cat Type is running, its icon lives in the Windows system tray. Double click the tray icon to open Settings, or right click it to enable/disable the cat, open Settings, or quit.
Download Cat-Type-macOS-arm64.dmg for Apple Silicon (M1 and newer), or Cat-Type-macOS-x64.dmg for an Intel Mac. Open the signed and notarized disk image, then drag Cat Type to Applications. On first launch, open Settings and choose Enable Input Monitoring. macOS controls the permission under System Settings > Privacy & Security > Input Monitoring.
Download Cat-Type-Linux-x64.tar.gz for most PCs or
Cat-Type-Linux-arm64.tar.gz for ARM64 devices, extract it, and run
Cat Type. The overlay and global keyboard listener require X11 or XWayland.
A system tray implementation such as AppIndicator is also recommended.
On Windows, Cat Type uses native accessibility APIs to place the cat beside the text caret when that geometry is available, falling back to the current mouse pointer when needed. On macOS, it prefers the latest primary-click position for eight seconds and otherwise uses the current pointer. Linux uses the current pointer directly.
Every settings change is saved automatically for the current user and takes effect as you edit. Size changes save after a short pause while dragging. Close the settings window whenever you're done:
- Enable or pause the typing companion.
- Choose gray, ginger, charcoal, brown-tabby, white, or black-and-white, or cycle through all of them.
- Change the cat size from 60% to 175%.
- Choose which corner of the caret or pointer the cat prefers.
- Adjust how long the cat remains and how quickly it fades.
- Start Cat Type automatically when you sign in.
- View all-time activity and navigate through current or previous 1-day, 7-day, or 30-day trends as an exact line or columns; Cat Type remembers the selected chart view.
- Open Wardrobe to combine hats, glasses, neckwear, back accessories, and ear accessories. Equip one item per category. One outfit applies to every cat, including Mix it up. Select None to remove an item. Outfit changes are applied and saved automatically.
Type while Cat Type is enabled to earn permanent accessories. Open Achievements to see reward requirements and progress. Each item in Wardrobe links to its achievement. New rewards unlock automatically; you choose when to equip them. Existing typing history counts toward every reward.
| Accessory | Achievement | Requirement |
|---|---|---|
| Ribbon clip | A Little Flair | 250 total keystrokes |
| Round glasses | First Steps | 1,000 total keystrokes |
| Bell collar | Bells and Whiskers | 2,500 total keystrokes |
| Bow tie | Helping Paw | 5,000 total keystrokes |
| Beanie | Getting Comfortable | 10,000 total keystrokes |
| Leaf sprout | Growing Together | 15,000 total keystrokes |
| Star glasses | Star Typist | 25,000 total keystrokes |
| Party hat | Cause for Celebration | 50,000 total keystrokes |
| Travel satchel | Packed for Adventure | 75,000 total keystrokes |
| Crown | Keyboard Royalty | 100,000 total keystrokes |
| Pixel glasses | Pixel Purrfect | 150,000 total keystrokes |
| Wizard hat | Spellbound | 250,000 total keystrokes |
| Dragon wings | Here Be Dragons | 500,000 total keystrokes |
| Golden wings | Million Meows | 1,000,000 total keystrokes |
| Royal cape | Legendary Companion | 2,000,000 total keystrokes |
| Daisy clip | Budding Friendship | Type on 3 different days |
| Sunglasses | Regular Companion | Type on 7 different days; they need not be consecutive |
| Aviator goggles | Taking Flight | Type on 14 different days |
| Red bandana | Daily Purr | Type on 30 different days |
| Sailor hat | Steady Sailing | Type on 60 different days |
| Adventure cape | Faithful Feline | Type on 100 different days |
| Laurel wreath | A Year of Purrs | Type on 365 different days |
All active-day achievements count different days, with no consecutive streak required. Progress spans your entire saved activity history.
Some achievements are secret. Their names, requirements, items, and contribution to the displayed total appear only after you earn them. Every achievement unlocks an equippable item, and discoveries appear in both tabs immediately.
Designated beta builds grant Beta Buddy and an exclusive purple bandana with a gold β emblem. This unlock stays with you when you upgrade to a stable build. This stable release preserves earned Beta Buddy rewards without granting new ones.
Rewards are saved locally in achievements.json beside settings.json and
usage.json. They remain unlocked even if activity totals later decrease.
The feature uses existing aggregate counts and does not collect typed text.
Press Ctrl+Alt+Q at any time to quit.
Packaged Windows, macOS, and Linux builds check GitHub for a newer stable release at startup. After a successful check, Cat Type waits at least 24 hours before checking automatically again. You can check at any time with Check for updates in Settings. Windows and Linux ask for confirmation before downloading or installing an available update. macOS reports the new version and links to its GitHub release so the notarized DMG can be installed manually.
Downloads come from the public Cat Type GitHub release and are accepted only
when their SHA-256 digest matches the exact asset entry in the release's
SHA256SUMS.txt. This detects corruption and asset mix-ups, but the checksum
and download have the same GitHub release as their trust source. macOS DMGs are
also signed with Developer ID, notarized by Apple, and stapled before release.
Windows and Linux releases are not currently code-signed.
On Windows, a confirmed update starts the verified installer silently, shuts down Cat Type through its normal cleanup path, and relaunches the new version. When updating an older version that does not support graceful shutdown, the installer may force-close it; the in-app confirmation is the user's consent for that fallback.
On Linux, self-installation is limited to the frozen portable executable from
the published tarball when its containing folder is writable. Cat Type stages
the replacement beside the current executable, atomically keeps the old copy
as a .previous backup, and rolls back and relaunches that backup if the new
copy fails its startup health check. Installations in protected locations are
left unchanged and show instructions to update manually. The replacement
helper requires Linux /proc plus the standard sh, mv, sed, and awk
command-line tools included by mainstream desktop distributions.
macOS and source checkouts never self-install. Checking or downloading contacts GitHub's API and release download hosts; Cat Type does not include keyboard input or local usage metrics in those requests.
On Windows, from PowerShell:
.\start.ps1The first run creates a local Python virtual environment and installs the runtime dependencies. After starting, type in Notepad, Word, a browser text box, or VS Code. The Settings window opens automatically on the first run.
On macOS or Linux:
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements.txt
python cat_type.pyFor diagnostics, run it in a visible terminal:
.\.venv\Scripts\python.exe .\cat_type.py --debugTo preview any shipped SVG cat using the same animation state and keyboard-side classification as the app, run:
.\.venv\Scripts\python.exe .\scripts\preview_svg_cat.pyThe preview defaults to White and reacts only while it has keyboard focus. It does not start a global keyboard hook or change saved settings. Choose any of the six cats, use its pose buttons and 60%, 100%, and 175% size choices, or export all 24 editable posed SVGs and a six-row preview sheet without opening a window:
.\.venv\Scripts\python.exe .\scripts\preview_svg_cat.py --export-dir .\.debug\svg-cat-previewThe packaged Windows build can open the same preview against its bundled artwork and renderer:
& '.\Cat Type.exe' --preview-catsEach master in assets\vector-cats is posed programmatically for idle, left
paw, right paw, and excited states. cat_artwork.py renders those SVG poses at
the requested size and caches the rendered frames; the app, settings preview,
and preview tool all load images through that shared boundary. To revise the
artwork, edit the relevant master SVG's named groups and IDs in a vector editor,
restart Cat Type to clear the in-memory render cache, and rerun the export
command above to regenerate the posed inspection files.
Designate beta builds with IS_BETA_BUILD in app_version.py; set it to False
for stable releases. Beta Buddy eligibility uses this explicit build flag, not
the numeric version or existing installation files.
Create the Windows portable app and installer:
.\build.ps1The outputs are dist\Cat Type.exe and, when Inno Setup 6 is installed,
dist\Cat Type Setup.exe. They bundle Python, the runtime dependencies, the
application icon and six editable SVG cat sources.
Windows may warn about local builds because they are not code-signed.
On Linux:
python scripts/build_icon.py
python -m pip install -r requirements.txt -r requirements-build.txt
python -m PyInstaller --noconfirm --clean CatType.specThe Linux output is dist/Cat Type. Push a tag such as v1.0.44 to build the
Windows, macOS, and Linux architectures and publish those assets on a GitHub
Release.
See docs/macos-release.md for the Developer ID
signing, notarization, and DMG release workflow.
- The keyboard listener classifies each key as left, right, both, or an alternating fallback, then immediately discards the key itself.
- While enabled, Cat Type persists only aggregate keystroke counts by local
day and hour in
usage.json. It never stores key names, typed text, app names, or window titles, and it does not send usage metrics over the network. - On Windows, accessible password fields are detected before showing the cat.
- macOS pointer placement cannot identify password fields, apps, controls, or window titles.
- The overlay is click-through and cannot take focus from the text field.
On Windows, Cat Type combines two mechanisms:
- UI Automation
TextPattern2.GetCaretRangefor modern accessible text controls. GetGUIThreadInfoandrcCaretas a fallback for traditional Win32 controls.
On macOS, Cat Type remembers only the coordinate and time of the latest primary click. If typing starts within eight seconds, the cat anchors beside that click; otherwise it anchors beside the pointer's current position. The anchor remains fixed until that visible typing burst ends. Cat Type never asks which app or control was clicked.
Some canvas-based editors, terminals, games, elevated applications, or other controls do not publish a usable caret. On Windows, Cat Type falls back to the current mouse pointer. Windows password fields detected through UI Automation stay hidden and never use the pointer fallback.
.\.venv\Scripts\python.exe -m unittest discover -s tests -vSee assets/SPRITES.md to edit the SVG artwork while
preserving the IDs used to derive each pose.