{"id":47972531,"url":"https://github.com/sunniesnow/sunniesnow","last_synced_at":"2026-04-04T10:46:51.506Z","repository":{"id":175376874,"uuid":"653810053","full_name":"sunniesnow/sunniesnow","owner":"sunniesnow","description":"An open-source web rhythm game","archived":false,"fork":false,"pushed_at":"2026-04-02T22:18:23.000Z","size":1178,"stargazers_count":13,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-03T08:55:51.870Z","etag":null,"topics":["game","html5","html5-canvas","html5-canvas-game","html5-game","javascript","javascript-game","pixijs","rhythm-game","sunniesnow"],"latest_commit_sha":null,"homepage":"https://sunniesnow.github.io/game/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sunniesnow.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-06-14T19:35:36.000Z","updated_at":"2026-04-02T22:18:32.000Z","dependencies_parsed_at":"2024-04-05T05:27:49.735Z","dependency_job_id":"532e1680-4911-4921-9a6a-1c357e047654","html_url":"https://github.com/sunniesnow/sunniesnow","commit_stats":null,"previous_names":["sunniesnow/sunniesnow"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/sunniesnow/sunniesnow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunniesnow%2Fsunniesnow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunniesnow%2Fsunniesnow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunniesnow%2Fsunniesnow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunniesnow%2Fsunniesnow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sunniesnow","download_url":"https://codeload.github.com/sunniesnow/sunniesnow/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunniesnow%2Fsunniesnow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31397055,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["game","html5","html5-canvas","html5-canvas-game","html5-game","javascript","javascript-game","pixijs","rhythm-game","sunniesnow"],"created_at":"2026-04-04T10:46:51.420Z","updated_at":"2026-04-04T10:46:51.492Z","avatar_url":"https://github.com/sunniesnow.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sunniesnow\n\nA web rhythm game.\nPlay the game online:\n[stable branch](https://sunniesnow.github.io/game),\n[master branch](https://sunniesnow.github.io/game-unstable).\n\n## Browser recommendations\n\nOn desktop, any modern browser should work,\nand any browser-specific issues are considered bugs and should be reported.\n\nOn Android, any modern browser should largely work\nbut may not have good enough WebGL performance for the game to run smoothly.\nRecommended browsers are WebView-based browsers,\nand examples include Fulguris, Via, Opera GX, etc.\n\nOn iOS, any browser that you can get from App Store probably\nhave good enough performance for the game to run smoothly,\nbut there is a bug in the WebKit engine used by Safari and most browsers\non iOS that makes the game hardly playable\n(to elaborate, when a `touchend` event and a `touchstart` event should happen at roughly the same time,\nthe `touchstart` event may not be fired at all).\nFortunately, *some* of the WebView-based browsers on iOS do not have this bug,\nand examples include Via and QQ browser.\nReporting more examples to be included here is appreciated.\n\n## Stable branch vs. master branch\n\nThe master branch is currently under active development,\nso it probably has some undiscovered bugs.\nTo ensure that players' gaming experiences cannot be easily affected by the development,\nthe stable branch is used to keep an old version of the game\nthat has been extensively tested and is considered to have no major bugs.\nBoth versions are live on the website:\n[/game](https://sunniesnow.github.io/game) for the stable branch\nand [/game-unstable](https://sunniesnow.github.io/game-unstable) for the master branch.\n\nNew features and insignificant bug fixes are only added to the master branch.\nOnly significant bug fixes will be backported to the stable branch.\n\n## Serve the game locally\n\n\u003e [!NOTE]\n\u003e If you play the game in this way, you still need internet access.\n\u003e However, a feature to use a vendor in place of a CDN for external scripts\n\u003e may be added in the future to allow full offline usage.\n\n[Install Ruby](https://www.ruby-lang.org/en/documentation/installation), and then run\n\n```shell\ngit clone --recursive https://github.com/sunniesnow/sunniesnow.github.io.git\ncd sunniesnow.github.io\nbundle install # and resolve all errors if there are any\nJEKYLL_ENVIRONMENT=production bundle exec jekyll serve --host 0.0.0.0 --port 4000\n```\n\nNow, visit http://localhost:4000/game/ to see the game.\n\nYou can also build the static files by running `bundle exec jekyll build`.\nYou can see the built files in the `_site` directory.\n\n\u003e [!NOTE]\n\u003e Because Imgur blocks requests with `Origin` being localhost,\n\u003e when testing related features (e.g. Discord Rich Presence),\n\u003e you may want to use a different hostname instead of `localhost`\n\u003e to access the locally served site.\n\n\u003e [!NOTE]\n\u003e You can enable HTTPS support by setting `JEKYLL_SSL=1` and trusting the generated certificate at `_ssl/ca.crt` in the browser.\n\u003e The generated server certificate can be used to enable HTTPS\n\u003e with the hostname `jekyll.local`,\n\u003e which you can use some custom DNS resolver to resolve to `127.0.0.1`.\n\u003e You can change the hostname by modifying `_ssl/*.cnf` files\n\u003e and deleting the previously generated `_ssl/server.*` files.\n\n## Development notes\n\nThe entrypoint script can be found at `_head.html`.\n\nThe reason to use `ScriptsLoader` to load scripts dynamically\ninstead of traditionally using `require` or `import` to manage modular codes\nis to make plugins easier to handle.\nSome scripts need to be evaluated multiple times due to changing plugins,\nand having a `ScriptsLoader` module to manage this makes it easier.\n\nThere are two main logics: the DOM main logic and the game main logic.\nThe main function of the DOM main logic is `Sunniesnow.MiscDom.main()`,\nand the main function of the game main logic is `Sunniesnow.Game.run()`.\n\nI do not think anyone would want to do this,\nbut it is possible to run Sunniesnow in Node.js environment.\nLook at the source codes of\n[sunniesnow-record](https://github.com/sunniesnow/sunniesnow-record) for reference.\n\n## License notice\n\nSunniesnow is licensed under\n[AGPL-3.0-or-later](https://www.gnu.org/licenses/agpl-3.0.en.html).\n\nSunniesnow has no relation to the game\n[Lyrica](https://lyricagame.wixsite.com/lyricagame)\nby any means,\nnor does it contain any proprietary assets from Lyrica.\n\nThe open-source projects used by Sunniesnow:\n\n- [PixiJS](https://pixijs.com) (MIT),\n- [JSZip](https://stuk.github.io/jszip) (MIT or GPL-3.0),\n- [Mime](https://www.skypack.dev/view/mime) (MIT),\n- [audio-decode](https://github.com/audiojs/audio-decode) (MIT),\n- [marked](https://marked.js.org) (MIT),\n- [DOMPurify](https://github.com/cure53/DOMPurify) (Apache-2.0 or MPL-2.0),\n- [LiquidJS](https://liquidjs.com) (MIT),\n- [wangfonts](http://code.google.com/p/wangfonts) (GPL-2.0),\n- [Yuji](https://github.com/Kinutafontfactory/Yuji) (OFL-1.1),\n- [LXGW WenKai](https://github.com/lxgw/LxgwWenKai) (OFL-1.1),\n- [Noto fonts](https://fonts.google.com/noto/use) (OFL-1.1),\n- [vConsole](https://github.com/Tencent/vConsole) (MIT).\n\nSunniesnow's source codes do not contain any files from the above projects.\nSunniesnow uses them by letting the client download needed files\nfrom public CDN sources.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunniesnow%2Fsunniesnow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsunniesnow%2Fsunniesnow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunniesnow%2Fsunniesnow/lists"}