Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Free Programming Books Zh_cn | 101,737 | 2 months ago | 28 | gpl-3.0 | ||||||
:books: 免费的计算机编程类中文书籍,欢迎投稿 | ||||||||||
Storybook | 78,930 | 7,289 | 21,476 | 9 hours ago | 1,108 | September 14, 2022 | 2,205 | mit | TypeScript | |
Storybook is a frontend workshop for building UI components and pages in isolation. Made for UI development, testing, and documentation. | ||||||||||
Ionic Framework | 49,067 | 19,484 | 880 | 6 hours ago | 420 | May 06, 2020 | 479 | mit | TypeScript | |
A powerful cross-platform UI toolkit for building native-quality iOS, Android, and Progressive Web Apps with HTML, CSS, and JavaScript. | ||||||||||
Prettier | 45,666 | 2 days ago | 1,168 | mit | JavaScript | |||||
Prettier is an opinionated code formatter. | ||||||||||
30 Days Of Javascript | 36,175 | 6 hours ago | 1 | January 25, 2022 | 250 | JavaScript | ||||
30 days of JavaScript programming challenge is a step-by-step guide to learn JavaScript programming language in 30 days. This challenge may take more than 100 days, please just follow your own pace. These videos may help too: https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw | ||||||||||
Sheetjs | 32,867 | 4,379 | 2,297 | a month ago | 170 | March 24, 2022 | 129 | apache-2.0 | JavaScript | |
📗 SheetJS Spreadsheet Data Toolkit -- New home https://git.sheetjs.com/SheetJS/sheetjs | ||||||||||
Nativescript | 22,549 | 2,619 | 1,102 | 6 days ago | 1,908 | September 28, 2021 | 946 | mit | TypeScript | |
⚡ Empowering JavaScript with native platform APIs. ✨ Best of all worlds (TypeScript, Swift, Objective C, Kotlin, Java). Use what you love ❤️ Angular, Capacitor, Ionic, React, Solid, Svelte, Vue + SwiftUI, Jetpack Compose, Flutter and you name it compatible. | ||||||||||
Handsontable | 17,880 | 362 | 169 | 11 hours ago | 87 | September 22, 2022 | 446 | other | JavaScript | |
JavaScript data grid with a spreadsheet look & feel. Works with React, Angular, and Vue. Supported by the Handsontable team ⚡ | ||||||||||
Bit | 16,695 | 64 | 6 hours ago | 819 | September 24, 2022 | 142 | other | TypeScript | ||
A tool for composable software development. | ||||||||||
Wails | 16,233 | 3 | 19 | 10 hours ago | 632 | September 13, 2022 | 170 | mit | Go | |
Create beautiful applications using Go |
Write components once, compile to every framework:
Try our interactive fiddle
PS: We are actively looking for folks interested in becoming contributors to Mitosis. Given its large surface area, there is a ton of room for any engineer to make a large and sustained impact on the project. We invest a ton of time in helping newcomers get onboarded, and teach them how to make changes to the codebase (see the following examples: #847, #372, #734). If interested, look at our list of good first issues or reach out on our Discord
npm install @builder.io/mitosis-cli @builder.io/mitosis
mitosis.config.js
/** @type {import('@builder.io/mitosis').MitosisConfig} */
module.exports = {
files: 'src/**',
targets: ['vue3', 'solid', 'svelte', 'react'],
};
Check our configuration docs for how to setup the Mitosis config file.
// tsconfig.json
{
"compilerOptions": {
"jsx": "preserve",
"jsxImportSource": "@builder.io/mitosis"
}
}
Install our ESLint plugin to have highly useful rules that guide you as you build your Mitosis components.
NOTE: We highly recommend you setup all of the ESLint rules, because they will point out some of Mitosis' limitations and avoid confusion.
// src/components/MyComponent.lite.tsx
import { useStore } from '@builder.io/mitosis';
type Props = {
message: string;
};
export default function MyBasicComponent(props: Props) {
const state = useStore({
name: 'Foo',
});
return (
<div>
{props.message || 'Hello'} {state.name}! I can run in React, Vue, Solid or Svelte!
</div>
);
}
npm exec mitosis build
You should now have an output
directory with your compiled components in all 4 frameworks!
Here are some helpful resources on trying out Mitosis:
this talk by Sami Jaber at React Day Berlin is a great intro to Mitosis. It gives a good overview of the impetus behind Mitosis, and a high-level understanding of its different pieces.
Curious about how Mitosis code works under the hood, and how to use it? Learn more in our in-depth docs.
Mitosis is an incredibly powerful and flexible tool. So far, we have identified 3 broad categories of engineering teams that stand to benefit greatly from it:
If you are the maintainer of a design system library that started off in one web framework, then you have felt the tremendous amount of maintenance pain and duplication when creating new versions for subsequent frameworks. Look no further than the popular React library Chakra UI, and how the maintainers have decided to create Zag.js after feeling the pain of maintaining state-logic code across both their React and Vue libraries. While Zag.js focuses on writing framework-agnostic interactions, Mitosis focuses on writing framework-specific components. (PS: We are working on building examples that combine these two together. TBD!)
If you are part of a team/organization that has multiple frontends built in different frameworks, then you know that coordinating your design system across all of them for a cohesive experience and feel is an absolute nightmare. Mitosis is an excellent tool to eliminate this class of problems, as it allows you to define your designs in your components once and deploy them to all of your separate frontends.
If your team is building SDKs for a product that integrates directly into a web framework and involves providing components to the end user, then Mitosis is a perfect fit for your team. Our team at Builder.io has this exact use-case: our new generation of SDKs is built with Mitosis! Our engineers have received glowing praise from our sales team for speed of delivery, and all it took was a switch flip
Yup, we've all seen it. But if this is a concern for you, you may be looking at Mitosis wrong. Rather than just yet-another-component-syntax, Mitosis is a compiler for the frontend, analogous to LLVM. A toolchain that embraces that there are, and forever will be, many ways of writing components. Mitosis defines a common intermediate representation that allows us to author components once then compile to many frameworks, just like LLVM lets us write code that can compile to any instruction set architecture. If you look at Mitosis this way, you may more clearly see the value.
Also similarly to LLVM, multiple syntaxes can compile to Mitosis. Our out-of-the-box syntax uses JSX, but we have explored others, such as a Vue/Svelte-like syntax. Builder.io emits Mitosis IR, allowing you to turn designs to code for any supported framework. JSX and Builder.io are the currently supported frontends of the compiler, and the frameworks listed below are the backends.
Target | 01 one component | 02 two components |
---|---|---|
alpine | ✅ | ✅ |
angular | ✅ | ✅ |
qwik | ✅ | ✅ |
react | ✅ | ✅ |
solid | ✅ | ✅ |
svelte | ✅ | ✅ |
vue2 | ✅ | ✅ |
vue3 | ✅ | ✅ |
NOTE: this matrix is programmatically generated and should not be manually edited.
Interested in contribute? Head over to the developer docs and see how you can get setup & started!
Once you're ready, checkout our issues page and grab your first issue!