Warning
This package is currently under development. Expect breaking changes.
react-tela
is a React renderer that draws components to a <canvas>
node.
- Low-level
- The base components expose only the main Canvas primitives (images, shapes and text)
- Leverage the power of React to create high-level abstractions over the base components
- Unopinionated about runtime environment
- Works in web browsers, Node.js, but was specifically created for nx.js
- Never makes assumptions about anything "outside" of the provided canvas node
// App.jsx
import React from "react";
import { Group, Rect, Text, useDimensions } from "react-tela";
function Contents() {
const dims = useDimensions();
return <>
<Rect width={dims.width} height={dims.height} fill="purple" alpha={0.5} />
<Text fontSize={32} fontFamily="Geist" fill="white">
Hello world!
</Text>
</>;
}
export function App() {
return (
<Group x={5} y={15} width={180} height={30} rotate={0.1}>
<Contents />
</Group>
);
}
import React from "react";
import { render } from "react-tela/render";
import { App } from "./App";
render(<App />, document.getElementById("canvas"));
import React from "react";
import { render } from "react-tela/render";
import { App } from "./App";
render(<App />, screen);
import React from "react";
import { render } from "react-tela/render";
import config, { Canvas } from "@napi-rs/canvas";
import { App } from "./App";
const canvas = new Canvas(300, 150);
await render(<App />, canvas, config);
const buffer = canvas.toBuffer("image/png");
// … do something with PNG `buffer`
The word "tela" is the Portuguese word for "canvas" or "screen".
tela > [ˈtɛla] (feminine noun)
- (de pintar) canvas
- (cinema, telecommunications) screen
Since the name react-canvas
was already taken, using react-tela
was a fun alternative.
A few other React renderes for <canvas>
alreay exist, so why another?
react-tela
is designed to make as little assumptions about the runtime environment as possible. Others renderers assume they are running in a web browser, or possibly Node.js. This module only interacts with the canvas node it is provided, and never makes any assumptions about anything "outside" of the node.
react-art
- Nice because it would appear to be an official solution. The code is located in the react monorepo itself.
- However documentation and examples are basically non-existent, and this does not seem to be actively maintained.
react-canvas
- Perfect name. Nice API. Probably one of the original React
<canvas>
implementations. - Has not been updated in years, and is not currently maintained.
- Perfect name. Nice API. Probably one of the original React
react-konva
- Awesome and very mature. Would love to have just been able to use this.
- It relies on
react-dom
, which is pretty large, and makes the assumption that a DOM is actually available.