{"id":13396604,"url":"https://github.com/redux-saga/redux-saga","last_synced_at":"2026-10-18T20:41:14.843Z","repository":{"id":37289146,"uuid":"47071941","full_name":"redux-saga/redux-saga","owner":"redux-saga","description":"An alternative side effect model for Redux apps","archived":false,"fork":false,"pushed_at":"2026-09-13T14:13:14.000Z","size":10571,"stargazers_count":22411,"open_issues_count":24,"forks_count":1931,"subscribers_count":242,"default_branch":"main","last_synced_at":"2026-10-17T23:07:13.193Z","etag":null,"topics":["effects","middleware","redux","redux-saga","sagas"],"latest_commit_sha":null,"homepage":"https://redux-saga.js.org/","language":"JavaScript","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/redux-saga.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null},"funding":{"github":"Andarist","patreon":null,"open_collective":"redux-saga","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2015-11-29T16:58:12.000Z","updated_at":"2026-10-17T01:52:05.000Z","dependencies_parsed_at":"2026-09-29T05:49:51.100Z","dependency_job_id":null,"html_url":"https://github.com/redux-saga/redux-saga","commit_stats":{"total_commits":1521,"total_committers":370,"mean_commits":4.110810810810811,"dds":0.7291255752794215,"last_synced_commit":"9ec63efbffb576a5d2c8b4bbf9df8f020693fdad"},"previous_names":["yelouafi/redux-saga"],"tags_count":117,"template":false,"template_full_name":null,"purl":"pkg:github/redux-saga/redux-saga","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redux-saga%2Fredux-saga","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redux-saga%2Fredux-saga/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redux-saga%2Fredux-saga/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redux-saga%2Fredux-saga/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redux-saga","download_url":"https://codeload.github.com/redux-saga/redux-saga/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redux-saga%2Fredux-saga/sbom","scorecard":{"id":768222,"data":{"date":"2025-08-11","repo":{"name":"github.com/redux-saga/redux-saga","commit":"9a6210bf891d3d74d4bab8d0f55c171e3c68355e"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.9,"checks":[{"name":"Code-Review","score":8,"reason":"Found 20/25 approved changesets -- score normalized to 8","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":"Security-Policy","score":4,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Warn: no linked content found","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/docs.yml:1","Warn: no topLevel permission defined: .github/workflows/nodejs.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Warn: no topLevel permission defined: .github/workflows/size.yml:1","Info: no jobLevel write permissions found"],"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":"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":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","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":"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":"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":"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/redux-saga/redux-saga/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/redux-saga/redux-saga/docs.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docs.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/redux-saga/redux-saga/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/nodejs.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/redux-saga/redux-saga/nodejs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/nodejs.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/redux-saga/redux-saga/nodejs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/redux-saga/redux-saga/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/redux-saga/redux-saga/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/redux-saga/redux-saga/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/size.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/redux-saga/redux-saga/size.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/size.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/redux-saga/redux-saga/size.yml/main?enable=pin","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned"],"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":"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":"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":"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":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 26 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"165 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-c2jc-4fpr-4vhg","Warn: Project is vulnerable to: GHSA-whgm-jr23-g3j9","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-wf5p-g6vw-rhxx","Warn: Project is vulnerable to: GHSA-jr5f-v2jv-69x6","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","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-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-7gc6-qh9x-w6h8","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-mf6x-hrgr-658f","Warn: Project is vulnerable to: GHSA-xrh7-m5pp-39r6","Warn: Project is vulnerable to: GHSA-6h5x-7c5m-7cr7","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-74fj-2j2h-c42q","Warn: Project is vulnerable to: GHSA-pw2r-vq6v-hr8c","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-pfrx-2q88-qq97","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-c7qv-q95q-8v27","Warn: Project is vulnerable to: GHSA-33f9-j839-rf8h","Warn: Project is vulnerable to: GHSA-c36v-fmgq-m8hx","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","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-p6mc-m468-83gw","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-qrpm-p2h7-hrv2","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-r683-j2x4-v87g","Warn: Project is vulnerable to: GHSA-5rrq-pxf6-6jx5","Warn: Project is vulnerable to: GHSA-8fr3-hfg3-gpgp","Warn: Project is vulnerable to: GHSA-gf8q-jrpm-jvxq","Warn: Project is vulnerable to: GHSA-2r2c-g63r-vccr","Warn: Project is vulnerable to: GHSA-cfm4-qjh2-4765","Warn: Project is vulnerable to: GHSA-x4jg-mjrx-434g","Warn: Project is vulnerable to: GHSA-rp65-9cf3-cjxr","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-3949-f494-cm99","Warn: Project is vulnerable to: GHSA-x7hr-w5r2-h6wg","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-76p7-773f-r4q5","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-g4rg-993r-mgx7","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-w5p7-h5w8-2hfq","Warn: Project is vulnerable to: GHSA-fhg7-m89q-25r3","Warn: Project is vulnerable to: GHSA-rqff-837h-mm52","Warn: Project is vulnerable to: GHSA-8v38-pw62-9cw2","Warn: Project is vulnerable to: GHSA-hgjh-723h-mx2j","Warn: Project is vulnerable to: GHSA-jf5r-8hm2-f872","Warn: Project is vulnerable to: GHSA-hc6q-2mpp-qw7j","Warn: Project is vulnerable to: GHSA-4vvj-4cpr-p986","Warn: Project is vulnerable to: GHSA-wr3j-pwj9-hqq6","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-rmvr-2pp2-xj38","Warn: Project is vulnerable to: GHSA-xx4v-prfh-6cgc","Warn: Project is vulnerable to: GHSA-6chw-6frg-f759","Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","Warn: Project is vulnerable to: GHSA-cwfw-4gq5-mrqx","Warn: Project is vulnerable to: GHSA-g95f-p29q-9xw4","Warn: Project is vulnerable to: GHSA-x9w5-v3q2-3rhw","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-3wcq-x3mq-6r9p","Warn: Project is vulnerable to: GHSA-ff7x-qrg7-qggm","Warn: Project is vulnerable to: GHSA-vh7m-p724-62c2","Warn: Project is vulnerable to: GHSA-r9p9-mrjm-926w","Warn: Project is vulnerable to: GHSA-434g-2637-qmqr","Warn: Project is vulnerable to: GHSA-49q7-c7j4-3p7m","Warn: Project is vulnerable to: GHSA-977x-g7h5-7qgw","Warn: Project is vulnerable to: GHSA-f7q4-pwc6-w24p","Warn: Project is vulnerable to: GHSA-fc9h-whq2-v747","Warn: Project is vulnerable to: GHSA-vjh7-7g9h-fjfh","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-8r6j-v8pm-fqw3","Warn: Project is vulnerable to: MAL-2023-462","Warn: Project is vulnerable to: GHSA-8mmm-9v2q-x3f9","Warn: Project is vulnerable to: GHSA-ww39-953v-wcq6","Warn: Project is vulnerable to: GHSA-w457-6q6x-cgp9","Warn: Project is vulnerable to: GHSA-62gr-4qp9-h98f","Warn: Project is vulnerable to: GHSA-f52g-6jhx-586p","Warn: Project is vulnerable to: GHSA-2cf5-4w76-r9qv","Warn: Project is vulnerable to: GHSA-3cqr-58rm-57f8","Warn: Project is vulnerable to: GHSA-g9r4-xpmj-mj65","Warn: Project is vulnerable to: GHSA-q2c6-c6pm-g3gh","Warn: Project is vulnerable to: GHSA-765h-qjxv-5f44","Warn: Project is vulnerable to: GHSA-f2jv-r9rf-7988","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-pfq8-rq6v-vf5m","Warn: Project is vulnerable to: GHSA-6x33-pw7p-hmpq","Warn: Project is vulnerable to: GHSA-pc5p-h8pf-mvwp","Warn: Project is vulnerable to: GHSA-qqgx-2p2h-9c37","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-6c8f-qphg-qjgp","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-4xcv-9jjx-gfj3","Warn: Project is vulnerable to: GHSA-7wpw-2hjm-89gp","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-w7rc-rwvf-8q5r","Warn: Project is vulnerable to: GHSA-92xj-mqp7-vmcj","Warn: Project is vulnerable to: GHSA-wxgw-qj99-44c2","Warn: Project is vulnerable to: GHSA-5fw9-fq32-wv5p","Warn: Project is vulnerable to: GHSA-3j8f-xvm3-ffx4","Warn: Project is vulnerable to: GHSA-4p35-cfcx-8653","Warn: Project is vulnerable to: GHSA-7f3x-x4pr-wqhj","Warn: Project is vulnerable to: GHSA-jpp7-7chh-cf67","Warn: Project is vulnerable to: GHSA-q6wq-5p59-983w","Warn: Project is vulnerable to: GHSA-j9fq-vwqv-2fm2","Warn: Project is vulnerable to: GHSA-pqw5-jmp5-px4v","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-h7cp-r72f-jxh6","Warn: Project is vulnerable to: GHSA-v62p-rq8g-8h59","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-h9rv-jmmf-4pgx","Warn: Project is vulnerable to: GHSA-hxcc-f52p-wc94","Warn: Project is vulnerable to: GHSA-4g88-fppr-53pp","Warn: Project is vulnerable to: GHSA-4jqc-8m5r-9rpr","Warn: Project is vulnerable to: GHSA-c9g6-9335-x697","Warn: Project is vulnerable to: GHSA-vx3p-948g-6vhq","Warn: Project is vulnerable to: GHSA-3jfq-g458-7qm9","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-r628-mhmh-qjhw","Warn: Project is vulnerable to: GHSA-9r2w-394v-53qc","Warn: Project is vulnerable to: GHSA-qq89-hq3f-393p","Warn: Project is vulnerable to: GHSA-29xr-v42j-r956","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-jgrx-mgxx-jf9v","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-7p7h-4mm5-852v","Warn: Project is vulnerable to: GHSA-38fc-wpqx-33j7","Warn: Project is vulnerable to: GHSA-662x-fhqg-9p8v","Warn: Project is vulnerable to: GHSA-394c-5j6w-4xmx","Warn: Project is vulnerable to: GHSA-78cj-fxph-m83p","Warn: Project is vulnerable to: GHSA-46c4-8wrp-j99v","Warn: Project is vulnerable to: GHSA-9m6j-fcg5-2442","Warn: Project is vulnerable to: GHSA-hh27-ffr2-f2jc","Warn: Project is vulnerable to: GHSA-g78m-2chm-r7qv","Warn: Project is vulnerable to: GHSA-6fc8-4gx4-v693","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp"],"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-23T01:28:37.674Z","repository_id":37289146,"created_at":"2025-08-23T01:28:37.674Z","updated_at":"2025-08-23T01:28:37.674Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38336075,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-17T02:00:06.547Z","response_time":57,"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":["effects","middleware","redux","redux-saga","sagas"],"created_at":"2024-07-30T18:00:57.875Z","updated_at":"2026-10-18T20:41:14.832Z","avatar_url":"https://github.com/redux-saga.png","language":"JavaScript","funding_links":["https://github.com/sponsors/Andarist","https://opencollective.com/redux-saga","https://opencollective.com/redux-saga/backer/0/website","https://opencollective.com/redux-saga/backer/1/website","https://opencollective.com/redux-saga/backer/2/website","https://opencollective.com/redux-saga/backer/3/website","https://opencollective.com/redux-saga/backer/4/website","https://opencollective.com/redux-saga/backer/5/website","https://opencollective.com/redux-saga/backer/6/website","https://opencollective.com/redux-saga/backer/7/website","https://opencollective.com/redux-saga/backer/8/website","https://opencollective.com/redux-saga/backer/9/website","https://opencollective.com/redux-saga/backer/10/website","https://opencollective.com/redux-saga/backer/11/website","https://opencollective.com/redux-saga/backer/12/website","https://opencollective.com/redux-saga/backer/13/website","https://opencollective.com/redux-saga/backer/14/website","https://opencollective.com/redux-saga/backer/15/website","https://opencollective.com/redux-saga/backer/16/website","https://opencollective.com/redux-saga/backer/17/website","https://opencollective.com/redux-saga/backer/18/website","https://opencollective.com/redux-saga/backer/19/website","https://opencollective.com/redux-saga/backer/20/website","https://opencollective.com/redux-saga/backer/21/website","https://opencollective.com/redux-saga/backer/22/website","https://opencollective.com/redux-saga/backer/23/website","https://opencollective.com/redux-saga/backer/24/website","https://opencollective.com/redux-saga/backer/25/website","https://opencollective.com/redux-saga/backer/26/website","https://opencollective.com/redux-saga/backer/27/website","https://opencollective.com/redux-saga/backer/28/website","https://opencollective.com/redux-saga/backer/29/website"],"categories":["react","JavaScript","Frontend React","框架","Javascript","数据流","redux 扩展","Redux [🔝](#readme)","目录","⚛️ React","🔧 Utilities \u0026 Miscellaneous","Uncategorized","Other"],"sub_categories":["State Management","React.js","Redux","redux 扩展","\u003ca id=\"state\"\u003e状态管理\u003c/a\u003e","State management","Uncategorized","Mathematics"],"readme":"\u003cimg src='https://redux-saga.js.org/img/Redux-Saga-Logo-Landscape.png' alt='Redux Logo Landscape' width='800px'\u003e\n\n# redux-saga\n\n[![npm version](https://img.shields.io/npm/v/redux-saga.svg)](https://www.npmjs.com/package/redux-saga)\n[![CDNJS](https://img.shields.io/cdnjs/v/redux-saga.svg)](https://cdnjs.com/libraries/redux-saga)\n[![npm](https://img.shields.io/npm/dm/redux-saga.svg)](https://www.npmjs.com/package/redux-saga)\n[![Discord Shield](https://img.shields.io/discord/740090768164651008?label=discord\u0026logo=discord)](https://discord.gg/AKz29HvK2h)\n[![OpenCollective](https://opencollective.com/redux-saga/backers/badge.svg)](#backers)\n[![OpenCollective](https://opencollective.com/redux-saga/sponsors/badge.svg)](#sponsors)\n\n`redux-saga` is a library that aims to make application side effects (i.e. asynchronous things like data fetching and impure things like accessing the browser cache) easier to manage, more efficient to execute, easy to test, and better at handling failures.\n\nThe mental model is that a saga is like a separate thread in your application that's solely responsible for side effects. `redux-saga` is a redux middleware, which means this thread can be started, paused and cancelled from the main application with normal redux actions, it has access to the full redux application state and it can dispatch redux actions as well.\n\nIt uses an ES6 feature called Generators to make those asynchronous flows easy to read, write and test. _(if you're not familiar with them [here are some introductory links](https://redux-saga.js.org/docs/ExternalResources.html))_ By doing so, these asynchronous flows look like your standard synchronous JavaScript code. (kind of like `async`/`await`, but generators have a few more awesome features we need)\n\nYou might've used `redux-thunk` before to handle your data fetching. Contrary to redux thunk, you don't end up in callback hell, you can test your asynchronous flows easily and your actions stay pure.\n\n# Getting started\n\n## Install\n\n```sh\n$ npm install redux-saga\n```\n\nor\n\n```sh\n$ yarn add redux-saga\n```\n\nAlternatively, you may use the provided UMD builds directly in the `\u003cscript\u003e` tag of an HTML page. See [this section](#using-umd-build-in-the-browser).\n\n## Usage Example\n\nSuppose we have a UI to fetch some user data from a remote server when a button is clicked. (For brevity, we'll just show the action triggering code.)\n\n```javascript\nclass UserComponent extends React.Component {\n  ...\n  onSomeButtonClicked() {\n    const { userId, dispatch } = this.props\n    dispatch({type: 'USER_FETCH_REQUESTED', payload: {userId}})\n  }\n  ...\n}\n```\n\nThe Component dispatches a plain Object action to the Store. We'll create a Saga that watches for all `USER_FETCH_REQUESTED` actions and triggers an API call to fetch the user data.\n\n#### `sagas.js`\n\n```javascript\nimport { call, put, takeEvery, takeLatest } from 'redux-saga/effects'\nimport Api from '...'\n\n// worker Saga: will be fired on USER_FETCH_REQUESTED actions\nfunction* fetchUser(action) {\n  try {\n    const user = yield call(Api.fetchUser, action.payload.userId)\n    yield put({ type: 'USER_FETCH_SUCCEEDED', user: user })\n  } catch (e) {\n    yield put({ type: 'USER_FETCH_FAILED', message: e.message })\n  }\n}\n\n/*\n  Starts fetchUser on each dispatched `USER_FETCH_REQUESTED` action.\n  Allows concurrent fetches of user.\n*/\nfunction* mySaga() {\n  yield takeEvery('USER_FETCH_REQUESTED', fetchUser)\n}\n\n/*\n  Alternatively you may use takeLatest.\n\n  Does not allow concurrent fetches of user. If \"USER_FETCH_REQUESTED\" gets\n  dispatched while a fetch is already pending, that pending fetch is cancelled\n  and only the latest one will be run.\n*/\nfunction* mySaga() {\n  yield takeLatest('USER_FETCH_REQUESTED', fetchUser)\n}\n\nexport default mySaga\n```\n\nTo run our Saga, we'll have to connect it to the Redux Store using the `redux-saga` middleware.\n\n#### `main.js`\n\n```javascript\nimport { createStore, applyMiddleware } from 'redux'\nimport createSagaMiddleware from 'redux-saga'\n\nimport reducer from './reducers'\nimport mySaga from './sagas'\n\n// create the saga middleware\nconst sagaMiddleware = createSagaMiddleware()\n// mount it on the Store\nconst store = createStore(reducer, applyMiddleware(sagaMiddleware))\n\n// then run the saga\nsagaMiddleware.run(mySaga)\n\n// render the application\n```\n\n# Documentation\n\n- [Introduction](https://redux-saga.js.org/docs/introduction/BeginnerTutorial.html)\n- [Basic Concepts](https://redux-saga.js.org/docs/basics/DeclarativeEffects)\n- [Advanced Concepts](https://redux-saga.js.org/docs/advanced/Channels)\n- [Recipes](https://redux-saga.js.org/docs/recipes/index.html)\n- [External Resources](https://redux-saga.js.org/docs/ExternalResources.html)\n- [Troubleshooting](https://redux-saga.js.org/docs/Troubleshooting.html)\n- [Glossary](https://redux-saga.js.org/docs/Glossary.html)\n- [API Reference](https://redux-saga.js.org/docs/api/index.html)\n\n# Translation\n\n- [Chinese](https://github.com/superRaytin/redux-saga-in-chinese)\n- [Traditional Chinese](https://github.com/neighborhood999/redux-saga)\n- [Japanese](https://github.com/redux-saga/redux-saga/blob/main/README_ja.md)\n- [Korean](https://github.com/mskims/redux-saga-in-korean)\n- [Portuguese](https://github.com/joelbarbosa/redux-saga-pt_BR)\n- [Russian](https://github.com/redux-saga/redux-saga/blob/main/README_ru.md)\n\n# Using umd build in the browser\n\nThere is also a **umd** build of `redux-saga` available in the `dist/` folder. When using the umd build `redux-saga` is available as `ReduxSaga` in the window object. This enables you to create Saga middleware without using ES6 `import` syntax like this:\n\n```javascript\nvar sagaMiddleware = ReduxSaga.default()\n```\n\nThe umd version is useful if you don't use Webpack or Browserify. You can access it directly from [unpkg](https://unpkg.com/).\n\nThe following builds are available:\n\n- [https://unpkg.com/redux-saga/dist/redux-saga.umd.js](https://unpkg.com/redux-saga/dist/redux-saga.umd.js)\n- [https://unpkg.com/redux-saga/dist/redux-saga.umd.min.js](https://unpkg.com/redux-saga/dist/redux-saga.umd.min.js)\n\n**Important!** If the browser you are targeting doesn't support _ES2015 generators_, you must transpile them (i.e. with [babel plugin](https://github.com/facebook/regenerator/tree/main/packages/regenerator-transform)) and provide a valid runtime, such as [the one here](https://unpkg.com/regenerator-runtime/runtime.js). The runtime must be imported before **redux-saga**:\n\n```javascript\nimport 'regenerator-runtime/runtime'\n// then\nimport sagaMiddleware from 'redux-saga'\n```\n\n# Building examples from sources\n\n```sh\n$ git clone https://github.com/redux-saga/redux-saga.git\n$ cd redux-saga\n$ pnpm install\n$ pnpm test\n```\n\nBelow are the examples ported (so far) from the Redux repos.\n\n### Counter examples\n\nThere are three counter examples.\n\n#### counter-vanilla\n\nDemo using vanilla JavaScript and UMD builds. All source is inlined in `index.html`.\n\nTo launch the example, open `index.html` in your browser.\n\n\u003e Important: your browser must support Generators. Latest versions of Chrome/Firefox/Edge are suitable.\n\n#### counter\n\nDemo using `webpack` and high-level API `takeEvery`.\n\n```sh\n$ npm run counter\n\n# test sample for the generator\n$ npm run test-counter\n```\n\n#### cancellable-counter\n\nDemo using low-level API to demonstrate task cancellation.\n\n```sh\n$ npm run cancellable-counter\n```\n\n### Shopping Cart example\n\n```sh\n$ npm run shop\n\n# test sample for the generator\n$ npm run test-shop\n```\n\n### async example\n\n```sh\n$ npm run async\n\n# test sample for the generators\n$ npm run test-async\n```\n\n### real-world example (with webpack hot reloading)\n\n```sh\n$ npm run real-world\n\n# sorry, no tests yet\n```\n\n### TypeScript\n\nRedux-Saga with TypeScript requires `DOM.Iterable` or `ES2015.Iterable`. If your `target` is `ES6`, you are likely already set, however, for `ES5`, you will need to add it yourself.\nCheck your `tsconfig.json` file, and the official \u003ca href=\"https://www.typescriptlang.org/docs/handbook/compiler-options.html\"\u003ecompiler options\u003c/a\u003e documentation.\n\n### Logo\n\nYou can find the official Redux-Saga logo with different flavors in the [logo directory](https://github.com/redux-saga/redux-saga/tree/main/logo).\n\n## Redux Saga chooses generators over `async/await`\n\nA [few](https://github.com/redux-saga/redux-saga/issues/1373#issuecomment-381320534) [issues](https://github.com/redux-saga/redux-saga/issues/987#issuecomment-301039792) have been raised asking whether Redux saga plans to use `async/await` syntax instead of generators.\n\nWe will continue to use [generators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator). The primary mechanism of `async/await` is Promises and it is very difficult to retain the scheduling simplicity and semantics of existing Saga concepts using Promises. `async/await` simply don't allow for certain things - like i.e. cancellation. With generators we have full power over how \u0026 when effects are executed.\n\n## Backers\n\nSupport us with a monthly donation and help us continue our activities. \\[[Become a backer](https://opencollective.com/redux-saga#backer)\\]\n\n\u003ca href=\"https://opencollective.com/redux-saga/backer/0/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/0/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/1/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/1/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/2/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/2/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/3/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/3/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/4/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/4/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/5/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/5/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/6/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/6/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/7/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/7/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/8/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/8/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/9/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/9/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/10/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/10/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/11/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/11/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/12/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/12/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/13/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/13/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/14/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/14/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/15/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/15/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/16/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/16/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/17/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/17/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/18/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/18/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/19/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/19/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/20/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/20/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/21/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/21/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/22/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/22/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/23/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/23/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/24/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/24/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/25/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/25/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/26/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/26/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/27/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/27/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/28/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/28/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/backer/29/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/backer/29/avatar.svg\"\u003e\u003c/a\u003e\n\n### Sponsors\n\nBecome a sponsor and get your logo on our README on Github with a link to your site. \\[[Become a sponsor](https://opencollective.com/redux-saga#sponsor)\\]\n\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/0/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/0/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/1/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/1/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/2/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/2/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/3/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/3/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/4/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/4/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/5/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/5/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/6/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/6/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/7/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/7/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/8/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/8/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/9/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/9/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/10/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/10/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/11/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/11/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/12/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/12/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/13/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/13/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/14/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/14/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/15/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/15/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/16/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/16/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/17/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/17/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/18/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/18/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/19/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/19/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/20/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/20/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/21/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/21/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/22/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/22/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/23/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/23/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/24/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/24/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/25/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/25/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/26/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/26/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/27/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/27/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/28/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/28/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/redux-saga/sponsor/29/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/redux-saga/sponsor/29/avatar.svg\"\u003e\u003c/a\u003e\n\n## License\n\nCopyright (c) 2015 Yassine Elouafi.\n\nLicensed under The MIT License (MIT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredux-saga%2Fredux-saga","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredux-saga%2Fredux-saga","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredux-saga%2Fredux-saga/lists"}