Dominic, a seasoned web developer with experience in Inferno JS, React, and Svelte, created Ripple, a TypeScript-first UI framework. 👨💻
Ripple aims to combine the best features of modern JS frameworks, focusing on developer experience and performance. 🚀
Ripple uses a custom file extension to tightly integrate with TypeScript, enabling better tooling and IDE support. 🧰
Components in Ripple are declared with the component keyword and allow JSX-like syntax within TypeScript. 🧩
Ripple's reactivity system builds on signals but simplifies their usage with a track function and ampersand notation for easier reading and writing. 🚦
Reactive collections (Arrays, Sets, Maps) are supported with reactive variants like RippleArray, which tracks updates and exposes reactive properties. 📦
Dynamic components are supported via Tracked objects, allowing components to be swapped at runtime based on state changes. 🔄
Ripple leverages fine-grained reactivity for industry-leading performance and memory usage, avoiding the overhead of virtual DOM diffing. ⚡
Side effects are managed using an effect function, designed to be predictable and composable, addressing common issues in React. 🧪
Ripple enforces a clear separation between logic and rendering by restricting JSX-like syntax to component bodies. 🧱
Control flow is simplified with if blocks and for-of loops, the latter including a built-in index label. 🕹️
Ripple templates are a superset of JSX, which might be polarizing but aims to summarize the best practices from the last decade of frontend development. 🎨
The framework emphasizes components, fine-grained reactivity, predictable side effects, and TypeScript as essential elements of modern web development. ✅
Ripple is a valuable exploration of how to package these elements for an improved developer experience, even if it's not immediately adopted for large-scale projects. 💡