{"id":31939645,"url":"https://github.com/alibaba/schema-plugin-flow","last_synced_at":"2025-10-14T08:44:32.839Z","repository":{"id":54971305,"uuid":"290690885","full_name":"alibaba/schema-plugin-flow","owner":"alibaba","description":"A highly extensible JavaScript library, abbreviated as Sifo. 一个高扩展性、可二开的插件式前端开发框架","archived":false,"fork":false,"pushed_at":"2023-01-16T08:22:59.000Z","size":2968,"stargazers_count":425,"open_issues_count":1,"forks_count":51,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-10-11T12:07:37.654Z","etag":null,"topics":["ant-design","ant-design-vue","drag-and-drop","extend-plugins","extensible","form","fusion","js-framework","low-code","plugin","react","react-drag-and-drop","schema","schema-plugin-flow","schema-render","sifo","vue","vue-drag-and-drop"],"latest_commit_sha":null,"homepage":"","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/alibaba.png","metadata":{"files":{"readme":"README-zh_CN.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}},"created_at":"2020-08-27T06:06:53.000Z","updated_at":"2025-07-18T17:12:22.000Z","dependencies_parsed_at":"2023-02-10T02:01:42.021Z","dependency_job_id":null,"html_url":"https://github.com/alibaba/schema-plugin-flow","commit_stats":null,"previous_names":[],"tags_count":224,"template":false,"template_full_name":null,"purl":"pkg:github/alibaba/schema-plugin-flow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Fschema-plugin-flow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Fschema-plugin-flow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Fschema-plugin-flow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Fschema-plugin-flow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alibaba","download_url":"https://codeload.github.com/alibaba/schema-plugin-flow/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Fschema-plugin-flow/sbom","scorecard":{"id":183705,"data":{"date":"2025-08-11","repo":{"name":"github.com/alibaba/schema-plugin-flow","commit":"1c26de1018824c249a97269daca9603ba4ebd667"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"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":"Code-Review","score":0,"reason":"Found 1/29 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":"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":"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":"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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"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":"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":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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 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"}}]},"last_synced_at":"2025-08-16T19:22:21.191Z","repository_id":54971305,"created_at":"2025-08-16T19:22:21.191Z","updated_at":"2025-08-16T19:22:21.191Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279013621,"owners_count":26085298,"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-10-12T02:00:06.719Z","response_time":53,"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":["ant-design","ant-design-vue","drag-and-drop","extend-plugins","extensible","form","fusion","js-framework","low-code","plugin","react","react-drag-and-drop","schema","schema-plugin-flow","schema-render","sifo","vue","vue-drag-and-drop"],"created_at":"2025-10-14T08:44:31.441Z","updated_at":"2025-10-14T08:44:32.834Z","avatar_url":"https://github.com/alibaba.png","language":"JavaScript","readme":"# schema-plugin-flow \n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://github.com/alibaba/schema-plugin-flow/blob/master/image/logo.png?raw=true\" width=\"60px\" height=\"60px\"\u003e\u003c/img\u003e\u003c/p\u003e\n\n简体中文 | [English](./README.md)\n## 介绍\nschema-plugin-flow，简称 Sifo ([sɪfɔ])，是一个高扩展性、可二开的插件式前端开发框架。     \n\n* 导读\n  * 这里的高扩展包括但不限于页面结构的修改、渲染组件的替换、组件属性的变更、组件事件的监听与阻断等。      \n  * 可二次开发（简称可二开）主要体现在：使用 Sifo 开发，使得开发者可以在不接触源代码的情况下，对业务逻辑和页面布局进行高扩展。     \n  * Sifo 是开发框架，本身是与 UI 框架解耦的，React 框架下可以使用 sifo-react ，Vue 框架下可以使用 sifo-vue 。结合不同的模型插件，可以实现丰富的个性功能。       \n  * Sifo 的另一个特点是插件式开发，这使得不论是在 React 下还是 Vue 下，开发者写的逻辑代码几乎是一样的 ，二次开发者同样如此。     \n\n* [sifo-model](./packages/sifo-model) 是 Sifo 的内核，它使用 JSON （称为 schema）来描述页面结构，使用插件来控制逻辑。有三类插件：模型插件、页面插件和组件插件。关于 Sifo 的基础信息和使用方法请阅读此包的 README。\n* [sifo-react](./packages/sifo-react) 是封装了 sifo-model 和 sifo-singleton 的一个React 组件。sifo-react 还提供了 `sifoAppDecorator` 功能，可以使一个普通的 React 组件拥有扩展能力，详情请见 README 或在线示例。\n* [sifo-vue](./packages/sifo-vue) 是封装了 sifo-model 和 sifo-singleton 的一个 Vue 组件。sifo-vue 还提供了 `sifoAppDecorator` 功能，可以使一个普通的 Vue 组件拥有扩展能力，详情请见 README 或在线示例。\n* [sifo-singleton](./packages/sifo-singleton) 是一个全局扩展容器。所有的扩展插件和扩展组件都注册到这里。\n\n## Sifo 三要素\n* schema\n* components\n* plugins\n![](https://raw.githubusercontent.com/alibaba/schema-plugin-flow/master/image/sifo-elements.png)\n\n## SifoApp (sifo-react/sifo-vue) Demo\n* form-extend-demo\n\n  [sifo-react-extends-demo](https://codesandbox.io/s/sifo-react-extends-demo-bg2py)\n\n* simple demo\n\n  In this demo, there are seven extend-plugins in seven independent js. The checkbox set which plugin should be registered. Each plugin control different logic and all registered plugins make up a integrated page.    \n\n  ![demo](https://img.alicdn.com/tfs/TB1HOQYe6MZ7e4jSZFOXXX7epXa-1264-698.gif)\n\n### 模型插件\n* [sifo-mplg-react-optimize](./packages/sifo-mplg-react-optimize) 是一个对 sifo-react 进行渲染优化的模型插件。\n* [sifo-mplg-form-core](./packages/sifo-mplg-form-core) 是表单内核模型插件，通过简单的 schema 配置，实现了对表单字段的统一管理，并提供了一系列表单操作 api。\n* [sifo-mplg-form-antdv](./packages/sifo-mplg-form-antdv) 是以 Ant-Design-Vue 为 UI 层的表单，与 sifo-mplg-form-core 和 sifo-vue 一起使用。\n* [sifo-mplg-form-antd](./packages/sifo-mplg-form-antd) 是以 Ant-Design 为 UI 层的表单， 与 sifo-mplg-form-core 和 sifo-react 一起使用。\n* [sifo-mplg-form-fusion](./packages/sifo-mplg-form-fusion) 是以 Fusion 为 UI 层的表单， 与 sifo-mplg-form-core 和 sifo-react 一起使用。\n* [sifo-mplg-form-antd-mobile](./packages/sifo-mplg-form-antd-mobile) 是以 Ant-Design-Mobile 为 UI 层的表单， 与 sifo-mplg-form-core 和 sifo-react 一起使用。\n* [sifo-mplg-drag](./packages/sifo-mplg-drag) Sifo 拖拽模型插件，在以自定义组件与初始 Schema 渲染的基础上，支持对组件进行即时拖拽，构建出新的 Schema。具体请参照 sifo-mplg-drag-react 和 sifo-mplg-drag-vue。\n* [sifo-mplg-drag-react](./packages/sifo-mplg-drag-react) 对 React 支持的Sifo 拖拽模型插件。\n* [sifo-mplg-drag-vue](./packages/sifo-mplg-drag-vue) 对 Vue 支持的Sifo 拖拽模型插件。\n\n## Sifo 家族\n* `sifo-model` + `react` = `sifo-react`\n* `sifo-model` + `vue` = `sifo-vue`\n* `sifo-react` + `sifo-mplg-form-core` + `ant-design` = `sifo-mplg-form-antd`\n* `sifo-react` + `sifo-mplg-form-core` + `fusion` = `sifo-mplg-form-fusion`\n* `sifo-vue` + `sifo-mplg-form-core` + `ant-design-vue` = `sifo-mplg-form-antdv`\n![](https://raw.githubusercontent.com/alibaba/schema-plugin-flow/master/image/sifo-family.png)\n\n## 安装\n\n```shell\n$ npm i @schema-plugin-flow/sifo-model --save\n$ npm i @schema-plugin-flow/sifo-react --save\n$ npm i @schema-plugin-flow/sifo-vue --save\n```\n\n## Sifo 二开扩展模式\n![](https://raw.githubusercontent.com/alibaba/schema-plugin-flow/master/image/how-sifo-extensions-work.png)\n\n## 如何使用\n* 项目\n\n  * extend.js\n    ```javascript\n    import SifoSingleton from '@schema-plugin-flow/sifo-singleton';\n    const singleton = new SifoSingleton('quick-start'); // target namespace\n    singleton.registerItem('testExtendId', () =\u003e {\n      return {\n        plugins,\n        components\n      }\n    });\n    ```\n\n  * app.js\n    ```javascript\n    import React from 'react';\n    import ReactDOM from \"react-dom\";\n    import SifoApp from '@schema-plugin-flow/sifo-react';\n    const plugins = [{ modelPlugin, componentPlugin, pagePlugin }];\n    class App extends React.Component {\n      render() {\n        return (\n          \u003cSifoApp\n            namespace='quick-start'\n            components={components}\n            schema={schema}\n            plugins={plugins}\n          /\u003e\n        );\n      }\n    }\n    ReactDOM.render(\n      \u003cApp /\u003e\n      rootElement\n    );\n    ```\n\n* runtime\n  * load extend js\n  * load app js\n\n    你应该在 sifoApp 渲染前加载扩展 js 资源\n\n    ```html\n    \u003cscript src=\"extend.js\"\u003e\u003c/script\u003e\n    \u003cscript src=\"app.js\"\u003e\u003c/script\u003e\n    ```\n\n## 本地尝试\n* React\n  *  clone code and start\n  ```shell\n  $ git clone https://github.com/alibaba/schema-plugin-flow.git\n  $ cd schema-plugin-flow\n  $ npm run i\n  $ npm run start\n  ```\n  *  then visit `http://localhost:8000`.\n\n* Vue\n  *  clone code and start\n  ```shell\n  $ git clone https://github.com/alibaba/schema-plugin-flow.git\n  $ cd schema-plugin-flow\n  $ npm run i\n  $ npm run i-vue\n  $ npm run start-vue\n  ```\n  *  then visit `http://localhost:8080`.\n\n## 在线尝试（codesandbox.io）\n* sifo-react\n  * [sifo-react-quick-start](https://codesandbox.io/s/sifo-react-quick-start-lhmyu)    \n  * [sifo-react-decorator](https://codesandbox.io/s/sifo-react-test-decorator-sef79)    \n  * [sifo-mplg-form-antd](https://codesandbox.io/s/sifo-react-form-antd-o0hoq)     \n  * [sifo-react-mplg-optimize](https://codesandbox.io/s/sifo-react-mplg-optimize-sfmts) \n  * [sifo-mplg-drag-react](https://codesandbox.io/s/sifo-drag-react-yr3t4)      \n\n* sifo-vue\n  * [sifo-vue-quick-start](https://codesandbox.io/s/sifo-vue-quick-start-7668x)    \n  * [sifo-vue-decorator](https://codesandbox.io/s/sifo-vue-test-decorator-4b9j4)    \n  * [sifo-vue-use-optimize](https://codesandbox.io/s/sifo-vue-use-optimize-4n6nz)    \n  * [sifo-mplg-form-antdv](https://codesandbox.io/s/sifo-vue-form-antdv-q4yc4)   \n  * [sifo-mplg-drag-vue](https://codesandbox.io/s/sifo-drag-vue-6q5oz) \n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falibaba%2Fschema-plugin-flow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falibaba%2Fschema-plugin-flow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falibaba%2Fschema-plugin-flow/lists"}