Skip to content

Latest commit

 

History

170 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cat Type

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.

Install on Windows

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.

Install on macOS

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.

Install on Linux

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.

Settings

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.

Accessory achievements

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.

Automatic updates

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.

Run from source

On Windows, from PowerShell:

.\start.ps1

The 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.py

For diagnostics, run it in a visible terminal:

.\.venv\Scripts\python.exe .\cat_type.py --debug

To 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.py

The 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-preview

The packaged Windows build can open the same preview against its bundled artwork and renderer:

& '.\Cat Type.exe' --preview-cats

Each 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.

Build

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.ps1

The 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.spec

The 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.

Privacy behavior

  • 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.

How caret tracking works

On Windows, Cat Type combines two mechanisms:

  1. UI Automation TextPattern2.GetCaretRange for modern accessible text controls.
  2. GetGUIThreadInfo and rcCaret as 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.

Tests

.\.venv\Scripts\python.exe -m unittest discover -s tests -v

See assets/SPRITES.md to edit the SVG artwork while preserving the IDs used to derive each pose.

About

A tiny animated cat that appears beside your text caret while you type

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages