โฌ Download for Mac (Apple Silicon) ยท all formats & checksums
Usagi, Hachiware, and Chiikawa live on your Mac's desktop. If you searched for a "chiikawa desktop pet for Mac" โ this is the native macOS version (Apple Silicon M1/M2/M3/M4, no emulator needed; Intel Macs can build from source). Download from the Releases page.
This is a Mac port of Yaha-Pet by gitChara-dot โ all credit for the original app, art, and sounds goes to them. On Windows? Use the original, it's great.
ใกใใใใปใใใใปใใใฏใฌใฎใในใฏใใใใใใใMac็ใงใ ๐ฐ (macOS ใใคใใฃใใขใใช)
A simple desktop pet application featuring characters from the "Chiikawa" universe, created with Python and PyQt6. The characters will roam your desktop, play animations, and react to your interactions.
- Autonomous Behavior: Characters walk around the screen on their own.
- Interactive: Drag and drop the characters anywhere on your screen.
- Throw Physics: flick a character and it goes flying โ arcing, bouncing off screen edges, and crash-landing if you toss it hard enough. Gentle drops still float politely down.
- Lively Animations: Features several sprite animations for different actions like walking and dancing.
- Sound Effects: Characters have unique sounds for animations and interactions.
- Voice Lines (optional, bring your own): if you drop per-character clips into a local pack, each character greets you, yelps when grabbed, and says goodbye when kicked out. No voice clips ship with the app or live in this repo; see
scripts/install-local-pack.sh. Toggle with Voice Lines in the tray menu. - Together Moment: If Chiikawa and Hachiware touch โ by wandering into each other or being dropped together โ they stroll off together and share a heart or hold hands before separating. Also available on demand via "Bring them together!" in the tray menu. Configurable via
config.json:{"coanimations": {"enabled": true, "cooldown_min_s": 60, "cooldown_max_s": 150}}. - System Tray Control: Manage your spawned characters through a system tray icon menu.
- Customizable: Don't like a certain animation? Sound is too loud? Change it all on the tray control.
Download Yaha-Pet-macOS.dmg from the latest release, open it, and drag Yaha-Pet.app into Applications. The app is signed and notarized by Apple, so it just opens โ no "unidentified developer" warning and no right-click โ Open workaround. Usagi spawns automatically; right-click the Dock icon for the full menu (Spawn Character, Gather everyone!, animations, and more).
Apple Silicon (M1โM4). The release DMG is an
arm64build. On an Intel Mac, build from source (below).
To build from source on macOS:
python3 -m pip install --user PyQt6 pyinstallerpyinstaller --noconfirm --windowed --name Yaha-Pet --icon yaha.icns --add-data assets:assets "Yaha-Pet!.py"- The app appears in
dist/Yaha-Pet.app
The Mac version also includes: a fix for a crash when grabbing characters (double-free of the grab sound player), a fix for the random-behavior roll so characters walk and dance instead of only jumping, a "Gather everyone!" menu action that recalls wandering pets to screen center, pets staying visible while other apps are focused, and a Dock menu.
The original Yaha-Pet is for Windows users.
-
Go to the Releases (https://github.com/gitChara-dot/Yaha-Pet/releases) page of the original repository.
-
Download the latest
.zipfile (e.g.,Yaha-Pet-v1.0.zip). -
Unzip the downloaded file.
-
Run the
.exefile inside the folder. -
Open Window System Tray (The small arrow pointing up on your taskbar), right-click Usagi's Icon. That's it!
-
(OPTIONAL, IMPORTANT FOR WIN11 USERS): If you have Windows 11 and don't have the System Tray on your taskbar, do these steps: a. Right click the Taskbar b. Open taskbar configuration c. Go to "Taskbar Overflow" or "Other Taskbar Icons" d. Enable Yaha-Pet.
Release builds are signed with a Developer ID Application certificate and notarized by Apple, so users can download and open the app with no "unidentified developer" Gatekeeper warning. The whole pipeline is one script:
./scripts/release.sh # full release: build โ sign โ notarize โ staple โ DMG
./scripts/release.sh --dry-run # build + sign + verify + DMG locally, never contacts AppleShip the resulting dist/Yaha-Pet-macOS.dmg.
- A Developer ID Application certificate installed in your login keychain
(verify with
security find-identity -v -p codesigning). - A notarytool keychain profile named
AC_NOTARY, created once:The app-specific password comes from appleid.apple.com (not your Apple ID password). Verify withxcrun notarytool store-credentials "AC_NOTARY" \ --apple-id "<your-apple-id>" --team-id "<TEAMID>" \ --password "<app-specific-password>"
xcrun notarytool history --keychain-profile "AC_NOTARY". brew install create-dmg, plusPyQt6andpyinstaller.
pyinstaller Yaha-Pet.spec --cleanrebuildsdist/Yaha-Pet.app. The spec keepsupx=Falsedeliberately โ UPX rewrites Mach-O binaries in place and corrupts any signature applied afterward. It is the single most common cause of "signed fine, notarization rejected" with PyInstaller.- Inside-out signing. Every nested
.so/.dylib/.framework(there are ~100) is signed first, deepest code before its container, and the.appbundle last. We never usecodesign --deepโ it's deprecated and silently skips nested code. Every call uses--options runtime(hardened runtime, required for notarization) and--timestamp(secure timestamp). - Local verify (
codesign --verify --deep --strict) runs before any Apple round-trip so mistakes are caught for free. (--deepis fine for verifying โ it's only wrong for signing.) - Zip with
ditto -c -k --keepParent, neverzipโ plain zip breaks framework symlinks and signatures. - Notarize the app, then the DMG, with
xcrun notarytool submit --wait. On failure the script auto-runsnotarytool log <id>and prints Apple's actual reason. - Staple the ticket into both the app and the DMG. Stapling the DMG is what makes the very first open-from-download clean, with no network check.
- Gatekeeper gate:
spctlmust reportsource=Notarized Developer IDor the script exits non-zero.
Under the hardened runtime, CPython needs exactly two exceptions. They live in
entitlements.plist, which must be comment-free โ codesign feeds it to
Apple's AMFI parser, which rejects XML comments even though plutil accepts
them.
com.apple.security.cs.allow-unsigned-executable-memoryโ the hardened runtime forbids memory that is both writable and executable. CPython's ctypes/libffi layer writes small machine-code trampolines at runtime and jumps into them; PyQt6'ssipbindings reach that path. Without this exception the kernel kills the process on launch. Load-bearing here.com.apple.security.cs.disable-library-validationโ library validation requires every loaded library to share the main executable's Team ID. PyInstallerdlopens dozens of bundled C extensions and Qt plugins at runtime. Becauserelease.shre-signs all of them with the same Developer ID, this one is a candidate for removal โ try deleting it, re-runrelease.sh, and if the app still notarizes and launches, you didn't need it.
Audio needs no entitlement. The app only plays sound (QSoundEffect); it
never records. No microphone entitlement and no NSMicrophoneUsageDescription
Info.plist key are required. Add both only if a future version captures audio.
This is a non-profit fan project created for entertainment and educational purposes. All characters and associated assets from "Chiikawa" are the intellectual property of their original creator, Nagano. Please support the official work.
This project is licensed under the MIT License. See the LICENSE.md file for details.
Totally optional. Yaha-Pet will always be free, for Chiikawa fans, and made by a Chiikawa fan. Still, you can support its development buying me a Ko-Fi! You should do it only if you can and want to. https://ko-fi.com/gitchara