{"id":24919321,"url":"https://github.com/deepfunc/redux-balloon","last_synced_at":"2026-04-02T16:19:38.838Z","repository":{"id":57350311,"uuid":"155514777","full_name":"deepfunc/redux-balloon","owner":"deepfunc","description":"Lightweight business framework for Redux apps.","archived":false,"fork":false,"pushed_at":"2023-08-07T05:57:58.000Z","size":152,"stargazers_count":14,"open_issues_count":0,"forks_count":8,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-12-25T16:33:43.598Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/deepfunc.png","metadata":{"files":{"readme":"README-en.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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}},"created_at":"2018-10-31T07:15:20.000Z","updated_at":"2023-08-07T05:58:04.000Z","dependencies_parsed_at":"2025-04-09T17:53:32.766Z","dependency_job_id":null,"html_url":"https://github.com/deepfunc/redux-balloon","commit_stats":null,"previous_names":["iamsupermonkey/redux-balloon"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/deepfunc/redux-balloon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepfunc%2Fredux-balloon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepfunc%2Fredux-balloon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepfunc%2Fredux-balloon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepfunc%2Fredux-balloon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deepfunc","download_url":"https://codeload.github.com/deepfunc/redux-balloon/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepfunc%2Fredux-balloon/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31309834,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"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":"2025-02-02T10:17:55.365Z","updated_at":"2026-04-02T16:19:38.803Z","avatar_url":"https://github.com/deepfunc.png","language":"TypeScript","readme":"# Redux Balloon\n\n[![npm version](https://img.shields.io/npm/v/redux-balloon)](https://badge.fury.io/js/redux-balloon)\n[![Build Status](https://travis-ci.org/deepfunc/redux-balloon.svg?branch=master)](https://travis-ci.org/deepfunc/redux-balloon)\n[![Coverage Status](https://coveralls.io/repos/github/deepfunc/redux-balloon/badge.svg?branch=master)](https://coveralls.io/github/deepfunc/redux-balloon?branch=master)\n[![Dependencies Status](https://david-dm.org/deepfunc/redux-balloon.svg)](https://david-dm.org/deepfunc/redux-balloon)\n\nLightweight front-end business framework based on [redux](https://github.com/reduxjs/redux), [redux-saga](https://github.com/redux-saga/redux-saga), [redux-actions](https://github.com/redux-utilities/redux-actions), [reselect](https://github.com/reduxjs/reselect).(Inspired by redux ducks style and DvaJS)\n\n---\n\n\n\n## Features\n\n- **Based on redux community best practices** (redux-saga, redux-actions, reselect, etc.)\n- **Model concepts**: organize model with `reducers`, `actions`, `selectors` and `sagas`\n- **You can organize Redux State Object as a tree**\n  - support merging state between parent model and child model\n- **Optimize file fragmentation**: one business, one model file\n- **Define sagas of model flexibility**\n- **Support multiple UI frameworks**: e.g., `React` and `Wechat Mini Program(WePY)`   \n\n\n\n## Browsers support\n\nModern browsers and IE9.\n\n| [\u003cimg src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"IE / Edge\" width=\"24px\" height=\"24px\" /\u003e](http://godban.github.io/browsers-support-badges/)\u003c/br\u003eIE / Edge | [\u003cimg src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /\u003e](http://godban.github.io/browsers-support-badges/)\u003c/br\u003eFirefox | [\u003cimg src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /\u003e](http://godban.github.io/browsers-support-badges/)\u003c/br\u003eChrome | [\u003cimg src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /\u003e](http://godban.github.io/browsers-support-badges/)\u003c/br\u003eSafari |\n| --------- | --------- | --------- | --------- |\n| IE9, IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions |\n\n\n\n## Getting started\n\n### Install\n\n```bash\n$ npm install --save redux-balloon\n```\n\n\n\n### Usage Example\n\nSuppose we have a UI to fetch user data and display them (use `react` and `react-redux`).\n\n#### `UserList.js`\n\n```react\n// ...\nimport biz from '../biz';\n\nclass UserList extends React.Component {\n  componentDidMount() {\n    this.initData();\n  }\n\n  initData() {\n    const { fetchUsers } = this.props;\n    fetchUsers();\n  }\n  \n  render() {\n    const { users } = this.props;\n    // display users data ...\n  }\n}\n  \nconst mapStateToProps = (state) =\u003e ({\n  users: biz.selectors.getUsers(state)\n});\n\nconst mapDispatchToProps = {\n  fetchUsers: biz.actions.fetchUsers\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UserList);\n```\n\n\n\nWhat is `biz` ? It is our business code by using `redux-balloon`.\n\n#### `biz.js`\n\n```javascript\nimport balloon from 'redux-balloon';\nimport * as types from './types';\nimport * as api from './api';\n\nconst users = {\n  namespace: 'users',\n  state: [],\n  reducers: {\n    [types.USERS_PUT]: (state, { payload }) =\u003e payload\n  },\n  actions: () =\u003e ({\n    fetchUsers: types.USERS_GET\n  }),\n  selectors: () =\u003e ({\n    getUsers: (state) =\u003e state.users\n  }),\n  sagas: ({ call, put }) =\u003e ({\n    // saga effects are treated as parameter injection.\n    *[types.USERS_FETCH]() {\n      const users = yield call(api.fetchUsers);\n      yield put({ type: types.USERS_PUT, payload: users });\n    }\n  })\n};\n\nconst biz = balloon();\nbiz.model(users);\n\nbiz.run();\n\nexport default biz;\n```\n\n\n\nTo run our app, we'll connect it.\n\n#### `app.js`\n\n```react\n// ...\nimport biz from './biz';\nimport UserList from './components/UserList';\n\nconst App = () =\u003e {\n  return (\n    \u003cProvider store={biz.store}\u003e\n      \u003cUserList/\u003e\n    \u003c/Provider\u003e\n  );\n};\n\nReactDOM.render(\u003cApp/\u003e, document.getElementById('app'));\n```\n\n\n\nYou don't need to import redux, redux-saga (and redux-actions, reselect) in your js files; and you don't need initialize redux or redux-saga. By using `redux-balloon`, you can write business codes in easy way and run them in some different UI frameworks. :smile:\n\n\n\n## Documentation\n\n[API.md](docs/en/API.md)\n\n\n\n## Complete Examples\n\n[React example](examples/react)\n\nWePY example making...\n\n\n\n## Change Log\n\n[CHANGELOG.md](CHANGELOG.md)\n\n\n\n## Directory\n\n```\n├── __tests__             - unit tests\n├── examples              - how to use it\n├── docs                  - documents\n├── src                   - source codes\n└── CHANGELOG.md          - change log\n```\n\n\n\n## License\n\n[MIT](https://tldrlegal.com/license/mit-license)\n\n\n\n## Contribution Guide\n\n[CONTRIBUTING.md](CONTRIBUTING.md)\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeepfunc%2Fredux-balloon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeepfunc%2Fredux-balloon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeepfunc%2Fredux-balloon/lists"}