{"id":15064400,"url":"https://github.com/naver/cfcs","last_synced_at":"2025-04-05T23:09:49.680Z","repository":{"id":80548725,"uuid":"530168803","full_name":"naver/cfcs","owner":"naver","description":"Write once, create framework components that supports React, Vue, Svelte, and more.","archived":false,"fork":false,"pushed_at":"2023-04-17T21:27:41.000Z","size":3471,"stargazers_count":104,"open_issues_count":0,"forks_count":3,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-03-29T22:06:25.657Z","etag":null,"topics":["cfcs","egjs","react","svelte","vue"],"latest_commit_sha":null,"homepage":"https://naver.github.io/cfcs","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/naver.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"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":"2022-08-29T10:25:23.000Z","updated_at":"2025-03-10T08:58:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"bac55586-e378-451d-87ac-138c7c3d501f","html_url":"https://github.com/naver/cfcs","commit_stats":{"total_commits":10,"total_committers":2,"mean_commits":5.0,"dds":"0.19999999999999996","last_synced_commit":"926c0a0d44a399ec045fe7c0e9d3fcebefa4ec31"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naver%2Fcfcs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naver%2Fcfcs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naver%2Fcfcs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naver%2Fcfcs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/naver","download_url":"https://codeload.github.com/naver/cfcs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247411235,"owners_count":20934653,"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","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":["cfcs","egjs","react","svelte","vue"],"created_at":"2024-09-25T00:17:17.767Z","updated_at":"2025-04-05T23:09:49.660Z","avatar_url":"https://github.com/naver.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"\n\u003cp align=\"center\"\u003e\u003c/p\u003e\n\n\u003ch2 align=\"center\" style=\"max-width: 100%;\"\u003e\n  \u003cimg src=\"./images/logo.png\" /\u003e\u003cbr/\u003e\n  \u003ca href=\"#\"\u003eCross Framework Components\u003c/a\u003e\n\u003c/h2\u003e\n\n\u003cp align=\"center\"\u003eWrite once, create framework components that supports React, Vue, Svelte, and more.\u003c/p\u003e\n\n\n\u003cp align=\"middle\"\u003e\n\u003ca href=\"https://www.npmjs.com/package/@cfcs/core\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@cfcs/core.svg?style=flat-square\u0026color=00d8ff\u0026label=version\u0026logo=NPM\"\u003e\u003c/a\u003e\u0026nbsp;\n\u003cimg src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\" /\u003e\u0026nbsp;\n\u003ca href=\"https://github.com/naver/cfcs/blob/main/LICENSE\" target=\"_blank\"\u003e\u003cimg alt=\"GitHub\" src=\"https://img.shields.io/github/license/naver/cfcs.svg?style=flat-square\u0026label=%F0%9F%93%9C%20license\u0026color=08CE5D\" /\u003e\u003c/a\u003e\u0026nbsp;\n\u003c/p\u003e\n\n\u003cp align=\"center\" style=\"line-height: 2;\"\u003e\n  \u003ca href=\"https://github.com/naver/cfcs/tree/main/packages/react\"\u003e\u003cimg alt=\"React\" src=\"https://img.shields.io/static/v1.svg?label=\u0026message=React\u0026style=flat-square\u0026logo=React\u0026logoColor=white\u0026color=61dafb\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/naver/cfcs/tree/main/packages/vue2\"\u003e\u003cimg alt=\"Vue 2\" src=\"https://img.shields.io/static/v1.svg?label=\u0026message=Vue 2\u0026style=flat-square\u0026logo=Vue.js\u0026logoColor=white\u0026color=42b883\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/naver/cfcs/tree/main/packages/vue3\"\u003e\u003cimg alt=\"Vue3\" src=\"https://img.shields.io/static/v1.svg?label=\u0026message=Vue3\u0026style=flat-square\u0026logo=Vue.js\u0026logoColor=white\u0026color=42b883\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/naver/cfcs/tree/main/packages/svelte\"\u003e\u003cimg alt=\"Svelte\" src=\"https://img.shields.io/static/v1.svg?label=\u0026message=Svelte\u0026style=flat-square\u0026logo=svelte\u0026logoColor=white\u0026color=FF3E00\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\n\u003ch3 align=\"center\"\u003e\n  \u003ca href=\"https://naver.github.io/cfcs/\"\u003eDemo\u003c/a\u003e / \u003ca href=\"https://naver.github.io/cfcs/docs/api/Core/Reactive/Function/reactive\"\u003eAPI\u003c/a\u003e / \u003ca href=\"https://naver.github.io/cfcs/docs\"\u003eTutorials\u003c/a\u003e\n\u003c/h3\u003e\n\n\n## Description\n\nMany users use JavaScript frameworks and create or use components available in the framework.\n\nHowever, if the component you want doesn't exist, you may have to find it externally or create it yourself.\n\nHave you ever wanted to use Vanilla components in React or React components in Vue?\n\nIn order to support these JavaScript frameworks, the developers of JS libraries had to learn how to use each framework, and write and maintain code for each framework separately.\n\n**CFCs**(Cross Framework Components) were developed to solve these problems.\nWith **CFCs**, **one code** can support multiple frameworks according to the framework's usage.\n\n## Who should use this library?\n\nIn today's web front-end development, JavaScript frameworks have become very important.\n\nThe problem is that even though there are many great components, there are cases where JavaScript frameworks are not supported. Even newer JavaScript frameworks stand out even more.\n\nTypically, you can call these libraries using the `mounted` lifecycle supported by frameworks, but often you won't be able to use some of their features or even use them at all.\n\n\n\nFor those who have had such experiences, we recommend using CFC.\nIn particular, we recommend **CFCs** if you:\n\n\n1. **You want to develop a component to support various JavaScript frameworks.**\n2. **You want to support existing components to various JavasScript frameworks.**\n\n\n\n## Concepts\nPreviously, if you wanted to support different JavaScript frameworks, you had to write code for each one separately.\n\nThis meant that if you doubled the number of frameworks you wanted to support, the maintenance cost is also doubled.\n\nWith **CFCs**, you can use Compatible to support multiple frameworks with **just one code**.\n\n![](https://raw.githubusercontent.com/naver/cfcs/main/images/cfcs-compatible.png)\n\n### CFCs Reactive\n\n**CFCs Reactive** can support multiple frameworks as a Reactive Component, a utility component that is state-based and does not create a UI.\n\n![](https://raw.githubusercontent.com/naver/cfcs/main/images/cfcs-reactive.png)\n\n\n**Reactive State** is a state that changes according to a specific condition.\n\nYou can detect state changes and also create a UI that changes based on conditions.\n\n\n* [**See Reactive Documents**](https://github.com/naver/cfcs/blob/main/reactive.md)\n\n\n\n#### CFCs Reactive-style components\n* [ImReady](https://github.com/naver/egjs-imready): I'm Ready to check if the images or videos are loaded.\n* [Axes](https://github.com/naver/egjs-axes): You can easily create a UI that responds to user actions.\n* [Conveyer](https://github.com/naver/egjs-conveyer): Drag gestures to your Native Scroll.\n\n\n## 📦 Packages\n|Package|Version|Description|\n|:-----:|:-----:|:-----:|\n|[**@cfcs/core**](https://github.com/naver/cfcs/blob/main/packages/core/README.md)|\u003ca href=\"https://www.npmjs.com/package/@cfcs/core\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@cfcs/core?style=flat-square\u0026color=F5C720\u0026label=%F0%9F%94%96\" alt=\"version\" /\u003e\u003c/a\u003e|CFCs for Core|\n|[**@cfcs/react**](https://github.com/naver/cfcs/blob/main/packages/react/README.md)|\u003ca href=\"https://www.npmjs.com/package/@cfcs/react\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@cfcs/react?style=flat-square\u0026color=00d8ff\u0026label=%F0%9F%94%96\" alt=\"version\" /\u003e\u003c/a\u003e|CFCs for [React](https://reactjs.org/)|\n|[**@cfcs/vue2**](https://github.com/naver/cfcs/blob/main/packages/vue2/README.md)|\u003ca href=\"https://www.npmjs.com/package/@cfcs/vue2\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@cfcs/vue2?style=flat-square\u0026color=42b883\u0026label=%F0%9F%94%96\" alt=\"version\" /\u003e\u003c/a\u003e|CFCs for [Vue.js@2](https://vuejs.org/v2/guide/index.html)|\n|[**@cfcs/vue3**](https://github.com/naver/cfcs/blob/main/packages/vue3/README.md)|\u003ca href=\"https://www.npmjs.com/package/@cfcs/vue3\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@cfcs/vue3?style=flat-square\u0026color=42b883\u0026label=%F0%9F%94%96\" alt=\"version\" /\u003e\u003c/a\u003e|CFCs for [Vue.js@3](https://v3.vuejs.org/)|\n|[**@cfcs/svelte**](https://github.com/naver/cfcs/blob/main/packages/svelte/README.md)|\u003ca href=\"https://www.npmjs.com/package/@cfcs/svelte\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@cfcs/svelte?style=flat-square\u0026color=FF3E00\u0026label=%F0%9F%94%96\" alt=\"version\" /\u003e\u003c/a\u003e|CFCs for [Svelte](https://svelte.dev/)|\n\n\n## 📝 Feedback\nPlease file an [Issue](https://github.com/naver/cfcs/issues).\n\n## 📜 License\n`cfcs` is released under the [MIT license](https://github.com/naver/cfcs/blob/main/LICENSE).\n\n```\nCFCs\nCopyright (c) 2023-present NAVER Corp.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnaver%2Fcfcs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnaver%2Fcfcs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnaver%2Fcfcs/lists"}