{"id":40420668,"url":"https://github.com/scriptcoded/raindeer","last_synced_at":"2026-01-20T15:07:44.725Z","repository":{"id":65480009,"uuid":"346379625","full_name":"scriptcoded/raindeer","owner":"scriptcoded","description":"Because websites aren't bloated enough as it is","archived":false,"fork":false,"pushed_at":"2023-04-30T20:07:33.000Z","size":48,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-05T18:46:54.801Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://codepen.io/scriptcoded/pen/ZEqJPKd","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scriptcoded.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-03-10T14:17:03.000Z","updated_at":"2023-04-30T20:07:43.000Z","dependencies_parsed_at":"2023-01-25T08:45:19.436Z","dependency_job_id":null,"html_url":"https://github.com/scriptcoded/raindeer","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/scriptcoded/raindeer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scriptcoded%2Fraindeer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scriptcoded%2Fraindeer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scriptcoded%2Fraindeer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scriptcoded%2Fraindeer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scriptcoded","download_url":"https://codeload.github.com/scriptcoded/raindeer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scriptcoded%2Fraindeer/sbom","scorecard":{"id":806324,"data":{"date":"2025-08-11","repo":{"name":"github.com/scriptcoded/raindeer","commit":"cc22c3cdd72556478c39a382ff5a29dfb94732c7"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Code-Review","score":0,"reason":"Found 0/16 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"22 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-ww39-953v-wcq6","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-4rq4-32rv-6wp6","Warn: Project is vulnerable to: GHSA-64g7-mvw6-v9qj","Warn: Project is vulnerable to: GHSA-4wf5-vphf-c2xc","Warn: Project is vulnerable to: GHSA-hc6q-2mpp-qw7j","Warn: Project is vulnerable to: GHSA-4vvj-4cpr-p986","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T11:51:46.458Z","repository_id":65480009,"created_at":"2025-08-23T11:51:46.458Z","updated_at":"2025-08-23T11:51:46.458Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28606139,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T14:45:23.139Z","status":"ssl_error","status_checked_at":"2026-01-20T14:44:16.929Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":[],"created_at":"2026-01-20T15:07:44.663Z","updated_at":"2026-01-20T15:07:44.719Z","avatar_url":"https://github.com/scriptcoded.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Raindeer\n\u003e Because websites aren't bloated enough as it is\n\n[![NPM Version][npm-version-badge]][npm-url]\n[![Downloads Stats][npm-downloads-badge]][npm-url]\n\n## What's it all about?\nRaindeer (not to be confused with\n[reindeer](https://en.wikipedia.org/wiki/Reindeer)) is a rather small package\nthat takes a list of emojis and make them rain all over your website.\n\nDemo: https://codepen.io/scriptcoded/pen/ZEqJPKd\n\n## Installation\n\nInstall with Yarn:\n```bash\nyarn add raindeer\n```\nInstall with NPM:\n```bash\nnpm install raindeer\n```\nUMD script:\n```html\n\u003cscript src=\"https://unpkg.com/raindeer\"\u003e\u003c/script\u003e\n```\n\n## Usage\n\nA simple and pretty \"useful\" use case is to make things rain whenever anything\nis clicked.\n\n```js\ndocument.addEventListener('click', function () {\n  EmojiRain.start(document.body, {\n    duration: 2,\n    dropSize: 40,\n    emoji: {\n      '😄': 5,\n      '🍰': 1\n    }\n  })\n})\n```\n\nThese are the options that can be given to `EmojiRain.start`:\n\n| Option | Default value | Type | Description |\n| ------ | ------------- | ---- | ----------- |\n| `emoji` | *Required* | `String \\| Array \\| Object` | Set to a single emoji as a string to make only that emoji rain. Set to an array of emoji strings to make those emoji rain equally much. Set to an object where the keys are emoji and the value is the likeliness of that emoji raining. |\n| `duration` | `0` | `Number` | The duration of the rain. If set to 0 the rain will go on until `EmojiRain.stop()` is called. |\n| `dropsPerSecond` | `10` | `Number` | How many drops to create per second |\n| `dropSize` | `20` | `Number` | The size of the drops. This actually controls the font size in `px` of the emoji. |\n| `speedMin` | `500` | `Number` | The minimum time allowed for a drop to travel across the screen. |\n| `speedMax` | `1000` | `Number` | The minimum time allowed for a drop to travel across the screen. |\n| `rotationStartMin` | `-90` | `Number` | The minimum allowed start rotation for a drop. |\n| `rotationStartMax` | `-180` | `Number` | The maximum allowed start rotation for a drop. |\n| `rotationDistanceMin` | `0` | `Number` | The minimum allowed rotation distance for a drop. |\n| `rotationDistanceMax` | `45` | `Number` | The maximum allowed rotation distance for a drop. |\n| `resolution` | `2` | `Number` | The amount of times that new drops will be created each second. This shouldn't need to be increased and could potentially have a high performance impact. |\n\n## Contributing\n\nSee the [contribution guidelines](CONTRIBUTING.md).\n\n## Tests\n\nThere are currently no tests. I'll make sure to add some when I get the time.\n\n## Code style\n\nWe use [ESLint](https://eslint.org/) for making sure that our code remains pretty and consistent throughout the project. If your editor doesn't automatically pick up our config you can lint the code using `npm run lint`.\n\n## Additional information\n\nMalcolm Nihlén - malcolm.nihlen@gmail.com\n\nDistributed under the MIT licence. See `LICENCE` for more information.\n\nhttps://github.com/scriptcoded\n\n[npm-version-badge]: https://img.shields.io/npm/v/raindeer.svg\n[npm-downloads-badge]: https://img.shields.io/npm/dm/raindeer.svg\n[npm-url]: https://npmjs.org/package/raindeer\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscriptcoded%2Fraindeer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscriptcoded%2Fraindeer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscriptcoded%2Fraindeer/lists"}