{"id":33211888,"url":"https://corpusculejs.github.io/corpuscule/","last_synced_at":"2025-11-21T05:03:35.551Z","repository":{"id":57104054,"uuid":"130839920","full_name":"corpusculejs/corpuscule","owner":"corpusculejs","description":"Lightweight framework based on WebComponents and decorators","archived":false,"fork":false,"pushed_at":"2020-09-06T21:54:02.000Z","size":2842,"stargazers_count":28,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-10-17T10:39:12.501Z","etag":null,"topics":["decorators","final-form","redux","web-components"],"latest_commit_sha":null,"homepage":"https://corpusculejs.github.io/corpuscule","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/corpusculejs.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}},"created_at":"2018-04-24T10:54:39.000Z","updated_at":"2020-11-25T19:46:30.000Z","dependencies_parsed_at":"2022-08-20T17:10:42.995Z","dependency_job_id":null,"html_url":"https://github.com/corpusculejs/corpuscule","commit_stats":null,"previous_names":[],"tags_count":53,"template":false,"template_full_name":null,"purl":"pkg:github/corpusculejs/corpuscule","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corpusculejs%2Fcorpuscule","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corpusculejs%2Fcorpuscule/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corpusculejs%2Fcorpuscule/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corpusculejs%2Fcorpuscule/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/corpusculejs","download_url":"https://codeload.github.com/corpusculejs/corpuscule/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corpusculejs%2Fcorpuscule/sbom","scorecard":{"id":305252,"data":{"date":"2025-08-11","repo":{"name":"github.com/corpusculejs/corpuscule","commit":"c5ae95f97386dd5e915ab9729f8a452ed22835eb"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.5,"checks":[{"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":"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":"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":"Code-Review","score":0,"reason":"Found 0/2 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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.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":"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/ci.yml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/corpusculejs/corpuscule/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/corpusculejs/corpuscule/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/corpusculejs/corpuscule/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:80: update your workflow using https://app.stepsecurity.io/secureworkflow/corpusculejs/corpuscule/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:84: update your workflow using https://app.stepsecurity.io/secureworkflow/corpusculejs/corpuscule/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:86: update your workflow using https://app.stepsecurity.io/secureworkflow/corpusculejs/corpuscule/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:91: update your workflow using https://app.stepsecurity.io/secureworkflow/corpusculejs/corpuscule/ci.yml/master?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/ci.yml:57","Warn: npmCommand not pinned by hash: .github/workflows/ci.yml:97","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 npmCommand 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":"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":"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":"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 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":"119 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-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-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","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-x9w5-v3q2-3rhw","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","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-j4f2-536g-r55m","Warn: Project is vulnerable to: GHSA-r7qp-cfhv-p84w","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-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-ww39-953v-wcq6","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-vfrc-7r7c-w9mx","Warn: Project is vulnerable to: GHSA-7wwv-vh3v-89cq","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-6x33-pw7p-hmpq","Warn: Project is vulnerable to: GHSA-qqgx-2p2h-9c37","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-gxr4-xjj5-5px2","Warn: Project is vulnerable to: GHSA-jpcq-cgw6-v4j6","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-7x7c-qm48-pq9c","Warn: Project is vulnerable to: GHSA-rc3x-jf5g-xvc5","Warn: Project is vulnerable to: GHSA-6c8f-qphg-qjgp","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-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-82v2-mx6x-wq7q","Warn: Project is vulnerable to: GHSA-5v2h-r2cx-5xgj","Warn: Project is vulnerable to: GHSA-rrrm-qjm4-v8hf","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-w7rc-rwvf-8q5r","Warn: Project is vulnerable to: GHSA-r683-j2x4-v87g","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-6fx8-h7jm-663j","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-h7cp-r72f-jxh6","Warn: Project is vulnerable to: GHSA-v62p-rq8g-8h59","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-h9rv-jmmf-4pgx","Warn: Project is vulnerable to: GHSA-hxcc-f52p-wc94","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-fxwf-4rqh-v8g3","Warn: Project is vulnerable to: GHSA-25hc-qcg6-38wj","Warn: Project is vulnerable to: GHSA-xfhh-g9f5-x4m4","Warn: Project is vulnerable to: GHSA-qm95-pgcg-qqfq","Warn: Project is vulnerable to: GHSA-cqmj-92xf-r6r9","Warn: Project is vulnerable to: GHSA-vx3p-948g-6vhq","Warn: Project is vulnerable to: GHSA-3jfq-g458-7qm9","Warn: Project is vulnerable to: GHSA-r628-mhmh-qjhw","Warn: Project is vulnerable to: GHSA-9r2w-394v-53qc","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-qq89-hq3f-393p","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-4wf5-vphf-c2xc","Warn: Project is vulnerable to: GHSA-29xr-v42j-r956","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","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-cf4h-3jhx-xvhq","Warn: Project is vulnerable to: GHSA-mgfv-m47x-4wqp","Warn: Project is vulnerable to: GHSA-wr3j-pwj9-hqq6","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-72mh-269x-7mh5","Warn: Project is vulnerable to: GHSA-h4j5-c7cj-74xg","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-17T21:52:10.239Z","repository_id":57104054,"created_at":"2025-08-17T21:52:10.239Z","updated_at":"2025-08-17T21:52:10.239Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":285560057,"owners_count":27192467,"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-11-21T02:00:06.175Z","response_time":61,"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":["decorators","final-form","redux","web-components"],"created_at":"2025-11-16T12:00:20.549Z","updated_at":"2025-11-21T05:03:35.547Z","avatar_url":"https://github.com/corpusculejs.png","language":"TypeScript","funding_links":[],"categories":["Web Components"],"sub_categories":["Tools"],"readme":"\u003e ## 🛠 Status: In Development\n\u003e Corpuscule is currently under heavy development. Feedback is always welcome, but be careful with\nusing it in production. API is not ready yet and can receive large changes.\n\n# Corpuscule\n\n[![CI Status](https://github.com/corpusculejs/corpuscule/workflows/CI/badge.svg)](https://github.com/corpusculejs/corpuscule/actions)\n[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=corpusculejs_corpuscule\u0026metric=coverage)](https://sonarcloud.io/dashboard?id=corpusculejs_corpuscule)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=corpusculejs_corpuscule\u0026metric=bugs)](https://sonarcloud.io/dashboard?id=corpusculejs_corpuscule)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=corpusculejs_corpuscule\u0026metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=corpusculejs_corpuscule)\n\nCorpuscule is a set of libraries built on top of Web Components standard. It provides all necessary\ntools to built whole application from scratch including redux connector, router and form utils.\n\n## Principles\n\n### Be universal\nYou can use almost all Corpuscule tools with any Web Component based system, like [Polymer](https://www.polymer-project.org/),\n[LitElement](https://lit-element.polymer-project.org/) or [SkateJS](https://skatejs.netlify.com/).\nThey are not bound to `@corpuscule/element` and implemented with only web components lifecycle\nhooks. Also, `@corpuscule/element` can use any renderer you want: [lit-html](https://lit-html.polymer-project.org/),\n[hyperHTML](https://github.com/WebReflection/hyperHTML), [preact](https://preactjs.com/) or even\n[React](https://reactjs.org/).\n\n### Be small yet powerful\nBundle size matters. It becomes critical for people with a slow internet connection. Corpuscule\nalready uses Web Components standard that takes care of the component system, so everything it needs\nis to have as many useful features as possible in smallest size as possible. \n\n### Be at the bleeding edge of JavaScript\nFeatures adding to the JavaScript language simplify developer's life, give new opportunities and\nsolve problems like security holes. That's why Corpuscule is trying to be on the bleeding edge of\nlanguage development and use the latest features.\n\n### Separate semantics from logic\nSemantics is a keystone of the web for a long time now. We used to make our markup as meaningful as\npossible. We use `\u003carticle\u003e` instead of `\u003cdiv\u003e` to wrap our articles because `\u003carticle\u003e` makes way\nmore sense than a simple `\u003cdiv\u003e`. We have `\u003cheader\u003e`, `\u003csection\u003e` and `\u003cfooter\u003e` tags to split our\nlayout to parts properly.\n\nHowever, with the React popularity growing we have got not only great solutions but also a handful\nof doubtful patterns. One of them is an approach to put logic into the markup. This approach brings\nsuch components as `\u003cProvider\u003e`, `\u003cSuspense\u003e`, `\u003cConnect(MyComponent)\u003e` etc. that can have no own\nmarkup at all! \n \nSo while it is acceptable for React components since they exist only on the JS level, it could be\nwrong for web components which have their representation in the DOM. The existence of only logic\ncomponents in DOM breaks the idea of semantics.\n\nThat's why Corpuscule suggests a slightly different approach. Since it is just logic, we can apply\nit to semantic web components using decorators and class properties. It means that single web\ncomponent could be a component connected to Redux, custom context provider and router outlet at the\nsame time.\n\n## Technologies\nSome technological solutions of Corpuscule could be surprising and confusing. This section provides\nexplanation of why this or that solution has been chosen.  \n\n### Decorators (stage 2)\nThe [new decorators specification](https://github.com/tc39/proposal-decorators)\ncould become a game-changer in the JavaScript world (along with [private class fields/methods](https://github.com/tc39/proposal-private-fields)\n). Decorators add a powerful system of metaprogramming to the JS language allowing to step into all\nstages of the class lifecycle, to manipulate class fields in the very declarative yet incredibly\nflexible way. You still could achieve some similar results using class mixins and static methods\nwith property definition, but it is way less descriptive and has its drawbacks.\n\nUnfortunately, the initial proposal Corpuscule was built on is deprecated due to serious performance\nissues. There is a new static decorator proposal, but it does not have Babel implementation yet, and\nit is not defined when it will.\n\nThat is the reason Corpuscule moves to an emulation of static decorator proposal. What does\nemulation mean? Well, it is not a specification-correct implementation, but it implements basic\nideas of the proposal. Emulation uses the legacy decorator proposal (stage 1) that is well-supported\nby Babel and Typescript supplemented with a custom solution: a [Babel plugin](https://github.com/corpusculejs/babel-preset/README.md#babel-plugin-inject-decorator-initializer`)\nthat adds missing parts to the code generated by the legacy plugin. \n\n### Symbols\nThis solution of Corpuscule may confuse you. You may rarely meet using the regular string-named\nclass fields in Corpuscule tools. Why? Well, the best answer is to avoid naming conflicts. Web\ncomponents are not React. They won't pack component properties into a separate object `this.props`.\nAll properties come as class fields. So, to avoid a situation when you want to use property\n`render`, but you have a `render` method that is a heart of your component system, Corpuscule\ndeclares all its field names as Symbols. So you are free to use `render` property along with\n`[render]` method, and you are free to create another Symbol named `render` and use it in the same\nclass. Symbols are unique, and that is their power. \n\n## How to use\nTo work with the Corpuscule project, you have to transpile it using [Babel](https://babeljs.io)\nbecause decorators are not a part of the language yet. \n\nAlong with the Babel you have to install [`@corpuscule/babel-preset`](https://github.com/corpusculejs/babel-preset)\nthat should be used in Babel configuration. This preset contains everything to compile decorators in\na way Corpuscule need to work.\n\n## Documentation\nAPI documentation is available [here](https://corpusculejs.github.io/corpuscule).\n\n\n## List of tools\nCorpuscule consists of following tools:\n\n* [@corpuscule/context](https://github.com/corpusculejs/corpuscule/tree/master/packages/context).\nThis package allows creating a context that sends data top-down, from parents to children. Context\nis DOM-dependent, so using it on different DOM branches with different values you will get different\nresults. It is also a base for many other Corpuscule tools like `router` or `redux`.\n* [@corpuscule/element](https://github.com/corpusculejs/corpuscule/tree/master/packages/element).\nThis package provides a set of decorators for creating web components. It is decorator-based\nanalogue for Polymer's [LitElement](https://github.com/Polymer/lit-element) or [React](https://reactjs.org/).\n* [@corpuscule/form](https://github.com/corpusculejs/corpuscule/tree/master/packages/form).\nConnector for the [🏁 final-form](https://github.com/final-form/final-form) package that provides\nCorpuscule solution for forms.\n* [@corpuscule/lit-html-renderer](https://github.com/corpusculejs/corpuscule/tree/master/packages/lit-html-renderer).\n[lit-html](https://github.com/Polymer/lit-html) based renderer for [`@corpuscule/element`](./packages/element).\nAlso includes solution for using custom element class definition as a source for custom element name\n(`MyElement` -\u003e `my-element`) that makes `lit-html` usage similar to React. \n* [@corpuscule/redux](https://github.com/corpusculejs/corpuscule/tree/master/packages/redux).\nA connector for the [Redux](https://redux.js.org/) library. It is `react-redux` for Corpuscule.\n* [@corpuscule/router](https://github.com/corpusculejs/corpuscule/tree/master/packages/router).\nA connector for the [Universal Router](https://github.com/kriasoft/universal-router) package,\nprovides Corpuscule solution for routing.\n* [@corpuscule/storeon](https://github.com/corpusculejs/corpuscule/tree/master/packages/storeon).\nA connector for the [Storeon](https://github.com/ai/storeon) package, a tiny Redux-like state\nmanager. \n* [@corpuscule/styles](https://github.com/corpusculejs/corpuscule/tree/master/packages/styles).\nA solution for loading CSS stylesheets.\n* [@corpuscule/typings](https://github.com/corpusculejs/corpuscule/tree/master/packages/typings).\nTypescript common typings for the Corpuscule.\n* [@corpuscule/utils](https://github.com/corpusculejs/corpuscule/tree/master/packages/utils).\nThis package contains a lot of utilities used in almost all Corpuscule packages. Doesn't have single\nentrypoint; each util should be loaded separately.\n\n## Future\nWhen the [static decorator specification]((https://github.com/tc39/proposal-decorators)) reaches\nstage 3, Corpuscule will be rewritten using it. The current implementation of Corpuscule is done\nwith the basic ideas of the new proposal in mind (that is why it does not use some obvious ideas\nlike a function that creates decorators). It should reduce the number of efforts production code\nrefactoring will take when decorators become a standard.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/corpusculejs.github.io%2Fcorpuscule%2F","html_url":"https://awesome.ecosyste.ms/projects/corpusculejs.github.io%2Fcorpuscule%2F","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/corpusculejs.github.io%2Fcorpuscule%2F/lists"}