{"repo":"andrewcourtice/ripl","free":true,"listed":false,"github":"https://github.com/andrewcourtice/ripl","clone":"git clone https://github.com/andrewcourtice/ripl.git","description":"Ripl provides a unified, cross-platform API for 2D and 3D graphics rendering with a focus on high performance and interactive data visualization. Write once, render to Canvas, SVG, WebGPU, or the terminal - in the browser, on the server, or in a headless environment.","language":"TypeScript","stars":325,"topics":["canvas","javascript","typescript","data-visualization","webgpu","svg","terminal"],"license":"MIT","category":"cli-tools","readme_excerpt":"Ripl Ripl (pronounced \"ripple\") is a zero-dependency TypeScript charting, drawing and animation library built on a unified API for 2D graphics rendering . Write a scene once and render it to Canvas , SVG , a terminal (as braille and ANSI colour), or a Node process, with 3D on Canvas and WebGPU alongside. The Canvas API is low-level: it has no concept of objects, hierarchy, or events. SVG is easier to reason about but carries its own performance limits and API differences. The two diverge enough that projects usually commit to one at the outset. Ripl removes that decision by exposing one API over both, modelled on the DOM and CSSOM, so switching contexts is a one-line change. Spline Polyline 3D Sphere Multi-Line Graph Bubble Scatter Candlestick Chart 3D Jet Engine Features - Unified rendering API across Canvas, SVG, Terminal (braille/ANSI), and WebGPU 3D contexts, so the same scene renders anywhere - Grouping and property inheritance : visual properties cascade through the element tree, much like CSS - Scene and renderer management with a hoisted scenegraph, O(n) rendering, and an automatic requestAnimationFrame loop - DOM-like event system supporting event bubbling, delegation, stop propagation, and disposable subscriptions - Interactive navigator for pan, zoom, and brush gestures on any context, the flat-scene analogue of the 3D camera - CSS-like element querying : getElementById , getElementsByType , getElementsByClass , plus query / queryAll with selector syntax - Bounding","default_branch":null,"files":null,"tree":[],"storefront":"/r/andrewcourtice","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/andrewcourtice/ripl/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}