Skip to content

Repository files navigation

OpenDesktopPets app icon

OpenDesktopPets

A lightweight, privacy-first desktop pet for macOS.

macOS 14+ Swift 6.1 MIT License

OpenDesktopPets tuxedo cat following the cursor on a macOS desktop

OpenDesktopPets places a bundled cat or dog directly over the existing macOS wallpaper. The pet follows the cursor, stays behind desktop icons, and ignores clicks so the desktop remains fully usable.

Everything runs locally. OpenDesktopPets has no account, analytics, network dependency, downloadable content, or runtime AI.

Highlights

  • Six bundled pets: Orange Tabby, Tuxedo Cat, Siamese Cat, Shiba Inu, Golden Retriever, and Pembroke Corgi.
  • Smooth cursor following across a directional 5×5 gaze grid.
  • Transparent, click-through windows on every connected display.
  • Lightweight menu-bar controls for showing, hiding, and switching pets.
  • Reduce Motion support and display-aware animation.
  • Fully offline runtime with pre-rendered transparent assets.

Requirements

  • macOS 14 Sonoma or newer
  • Apple Silicon Mac
  • Xcode 16 or newer when building from source

Install

Download the latest archive from GitHub Releases.

The v0.1.1 binary is an unsigned, unnotarized preview. Verify the published SHA-256 checksum before opening it. On first launch, macOS may require you to Control-click OpenDesktopPets.app, choose Open, and confirm.

For a trustable production installation, build the reviewed source locally until a signed and notarized release is available.

Use

OpenDesktopPets starts immediately and adds a paw icon to the menu bar.

Menu item Action
Hide OpenDesktopPets / Show OpenDesktopPets Toggle the desktop overlay
Choose Pet Switch among the six bundled pets
Quit OpenDesktopPets Stop the app and remove the overlay

Pet selection persists between launches. The app does not modify the system wallpaper.

Build from source

  1. Clone the repository.
  2. Open OpenDesktopPets.xcworkspace.
  3. Select the OpenDesktopPets scheme.
  4. Build and run the macOS target.

Repository defaults:

Setting Value
Workspace OpenDesktopPets.xcworkspace
Scheme OpenDesktopPets
Minimum deployment target macOS 14.0
Architecture arm64

The Swift package has no remote dependencies.

Architecture

OpenDesktopPets/
├── OpenDesktopPets/                         App entry point, icon, and Xcode resources
├── OpenDesktopPetsPackage/
│   ├── Sources/OpenDesktopPetsFeature/
│   │   ├── App/                         Lifecycle and menu-bar controls
│   │   ├── Desktop/                     Per-display click-through windows
│   │   ├── Tracking/                    Shared display-link cursor sampling
│   │   └── Rendering/                   Manifests, pose selection, and image cache
│   └── Tests/OpenDesktopPetsFeatureTests/   Runtime contract tests
├── Resources/Desktop/Pet/               Six bundled pet packages
└── Scripts/                             Asset generation, validation, and release tools

One display-link source samples the cursor at the active display's native cadence. Each display advances a critically damped spring while motion is unsettled, maps the gaze to the selected pet's 5×5 grid, and assigns a shared decoded pose. Inactive displays return to center after 300 ms.

Bundled pet format

Resources/Desktop/Pet/<pet-id>/
├── manifest.json
└── Runtime/
    └── 60 transparent 1536×1536 PNG poses

Each package contains 25 directional gaze poses plus gaze-matched blink, breathing, ear-twitch, and reaction frames. Startup fails closed when a required asset is missing.

Tests

Run the Swift package tests:

swift test --package-path OpenDesktopPetsPackage

The suite covers:

  • all six complete 60-pose packages;
  • 25 distinct directional gaze images for every alternate pet;
  • resource loading and shared image caching;
  • startup ordering and duplicate layer suppression;
  • display reconciliation and cursor sampling;
  • stable spring behavior at 30, 60, and 120 Hz.

Asset tooling has its own tests:

swift test --package-path Tools/AssetValidator
python3 -m unittest Scripts/generate/test_generate_cat_poses.py

Privacy

OpenDesktopPets reads the global cursor position to select a local pose. It does not record input, capture screen contents, contact a server, or transmit data. All runtime images ship inside the app bundle.

Contributing

Issues and focused pull requests are welcome. Before submitting a change:

  1. Keep runtime behavior offline and click-through.
  2. Do not add telemetry, accounts, or remote asset loading.
  3. Run the relevant Swift and asset-tool tests.
  4. Include visual evidence for rendering or pet-asset changes.

Use GitHub Issues for reproducible bugs and narrowly scoped feature proposals.

License

OpenDesktopPets is available under the MIT License.

About

A lightweight, privacy-first macOS desktop pet that follows your cursor using bundled offline pose assets.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages