{"id":30218998,"url":"https://github.com/Gualor/garmin-gotchi","last_synced_at":"2025-08-14T07:05:09.091Z","repository":{"id":304497057,"uuid":"991303116","full_name":"Gualor/garmin-gotchi","owner":"Gualor","description":"Tamagotchi Gen 1 Emulator for Garmin Instinct 3.","archived":false,"fork":false,"pushed_at":"2025-07-13T12:24:06.000Z","size":2151,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-13T14:31:18.712Z","etag":null,"topics":["garmin","garmin-connect-iq","monkey-c","tamagotchi"],"latest_commit_sha":null,"homepage":"","language":"Monkey C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Gualor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-27T12:29:47.000Z","updated_at":"2025-07-13T12:24:10.000Z","dependencies_parsed_at":"2025-07-13T14:31:26.574Z","dependency_job_id":"83f2e125-381d-4a6e-9fb7-f33272a40d52","html_url":"https://github.com/Gualor/garmin-gotchi","commit_stats":null,"previous_names":["gualor/garmin-gotchi"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Gualor/garmin-gotchi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gualor%2Fgarmin-gotchi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gualor%2Fgarmin-gotchi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gualor%2Fgarmin-gotchi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gualor%2Fgarmin-gotchi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Gualor","download_url":"https://codeload.github.com/Gualor/garmin-gotchi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gualor%2Fgarmin-gotchi/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270378854,"owners_count":24573456,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-14T02:00:10.309Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["garmin","garmin-connect-iq","monkey-c","tamagotchi"],"created_at":"2025-08-14T07:03:01.203Z","updated_at":"2025-08-14T07:05:09.038Z","avatar_url":"https://github.com/Gualor.png","language":"Monkey C","funding_links":[],"categories":["Device Apps"],"sub_categories":["Older resources"],"readme":"# 🐣 garmin-gotchi\n## Tamagotchi Gen 1 Emulator for Garmin Instinct 3\n\n**GarminGotchi** is a complete rewrite of the original [tamalib](https://github.com/jcrona/tamalib) project (portable Tamagotchi emulator) from C to Garmin's [Monkey C](https://developer.garmin.com/connect-iq/monkey-c/) language, developed specifically for the [Garmin Instinct 3 Solar 45mm](https://www.garmin.com/p/1315317/) smartwatch. It brings your nostalgic digital pet back to life right on your wrist.\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./images/ciq_recording.gif\" width=\"32.8%\"\u003e\n\u003c/p\u003e\n\n## 🎮 Features\n\n- Faithful emulation of Tamagotchi Gen 1 behaviors\n- Watch-native graphics with custom black and white bitmaps\n- Button-controlled user interface using Garmin's physical buttons\n- Sound effects support using Garmin's attention notifications\n- Menu to `toggle sound`, `save`, `load`, `restart`, and `exit`\n- Persistent pet data via Garmin storage APIs\n- Optimized for Garmin's constrained execution model\n\n## 📦 Project Structure\n\n```txt\n.\n├── Makefile                        * Makefile script for build and simulation\n├── manifest.xml                    * Connect IQ manifest\n├── monkey.jungle                   * Project configuration\n├── resources                       * Shared resources\n│   ├── drawables                     \u003e Launcher icon bitmap\n│   ├── menus                         \u003e Main menu configuration\n│   └── strings                       \u003e String resources\n├── resources-instinct3solar45mm    * Device-specific resources\n│   ├── drawables                     \u003e Custom background and icon bitmaps\n│   └── layouts                       \u003e Layout rendering configuration\n└── source                          * Monkey C source code\n    ├── GarminGotchiApp.mc            \u003e Application entry point\n    ├── GarminGotchiDelegate.mc       \u003e Application button controls\n    ├── GarminGotchiMenuDelegate.mc   \u003e Application menu for save/load/etc.\n    ├── GarminGotchiView.mc           \u003e Application graphics rendering\n    ├── programs                      \u003e Tamalib emulator programs\n    │   ├── tama.mc                     - Tamagotchi rom\n    │   └── test.mc                     - Test rom\n    └── tamalib                       \u003e Tamalib code rewrite in Monkey C\n```\n\n## ⚙️ Build \u0026 Flash Instructions\n\n### 📋 Prerequisites\n\n- [Garmin Connect IQ SDK](https://developer.garmin.com/connect-iq/sdk/)\n- [Java Runtime Environment](https://www.java.com/en/download/manual.jsp)\n- [Monkey C command line tools](https://developer.garmin.com/connect-iq/reference-guides/monkey-c-command-line-setup/)\n- [OpenSSL](https://www.openssl.org/)\n- [GNU make](https://www.gnu.org/software/make/)\n\nAlternatively, VSCode IDE with the Monkey C extension can be used instead of the CLI; follow this [guide](https://developer.garmin.com/connect-iq/connect-iq-basics/getting-started/) for step-by-step instructions.\n\n### 🛠️ First-Time Setup\n\nBuild and sign executable:\n\n```sh\nmake all\n# or, equivalently\nmake key # Generates the developer key\nmake app # Compiles the watch application\n```\n\n(Optional) Run in the simulator:\n\n```sh\nmake ciq # Launches Connect IQ simulator\n# wait CIQ to open\nmake sim # Runs the app in Connect IQ simulator\n```\n\n### ⌚ Deploying to Watch\n\nFor app deployement on the watch you must sideload the .prg file onto your Garmin device using [Garmin Express](https://www.garmin.com/it-IT/software/express/windows/) or copy it to the device storage manually in developer mode, like so:\n\n1. Enable Developer Mode on your watch.\n2. Connect it via USB.\n3. Copy bin/garmingotchi.prg to the `GARMIN/APPS/` directory.\n4. Restart the watch to launch the app.\n\n### ⚠️ Limitations\n\n- 🧠 **Memory Constraints**: The app operates under tight memory limits, adding even one more class or making too many static variables/methods could result in the app not fitting RAM anymore at some point during execution. ROM is also an issue when adding emulator programs, but this is mostly avoidable using `Lang.ByteArray` instead of `Lang.Array\u003cLang.Number\u003e` which will cut down size by 4.\n\n- 🧵 **Thread Watchdog Timer**: The Garmin Monkey C VM enforces a watchdog timer on each thread to prevent them from hanging and crashing the system; therefore, there are only so many emulator steps that we could fit in that time frame. Optimizing the code further could enable us to increase `GarminGotchiApp.RUN_MAX_STEPS` and make the game run smoother.\n\nDespite these constraints, the game can be enjoyed at a slightly reduced cycle speed with all original functionalities.\n\n### 📸 Screenshots\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./images/ciq_screenshot_1.png\" width=\"32.8%\"\u003e\n    \u003cimg src=\"./images/ciq_screenshot_2.png\" width=\"32.8%\"\u003e\n    \u003cimg src=\"./images/ciq_screenshot_3.png\" width=\"32.8%\"\u003e\n    \u003cimg src=\"./images/ciq_screenshot_4.png\" width=\"32.8%\"\u003e\n    \u003cimg src=\"./images/ciq_screenshot_5.png\" width=\"32.8%\"\u003e\n\u003c/p\u003e\n\n### ⚠️ Disclamer\n\nI am not a Garmin software developer and I mostly work with low-level languages, so a lot of stuff I had to figure out myself and hack my way around to make this port work; most likely there are better ways for running the game smoothly on the watch without issues, I am just not aware of them.\n\nIf you are a professional Garmin SW dev and want to share your knowledge or even contribute to the project, it would be very much appreciated!\n\n### 📞 Support\n\nFor bug reports or contributions, feel free to open issues and PRs, I will review and respond to them as soon as I can.\n\nFor any questions, you can also reach me at: lorenzo.gualniera@gmail.com\n\n### 📜 License\n\nThis project is a rewrite of [tamalib](https://github.com/jcrona/tamalib) that is distributed under `GPLv2` license; therefore, all modifications to the original source code require this project to be released under the same terms which you can find [here](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGualor%2Fgarmin-gotchi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FGualor%2Fgarmin-gotchi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGualor%2Fgarmin-gotchi/lists"}