Frameworks
Every binding wraps the same <sealpixel-editor> element: the props are the element's properties, the events are the element's events, and the edit log that comes out is the same JSON in every framework. The page for your framework has the install, the build setup, what a server-rendered app needs to know, controlled and uncontrolled use, the headless helper, server rendering and the types.
| Framework | Package | Page | Starter |
|---|---|---|---|
| Web Component, any framework or none | @sealpixel/element | Vanilla | StackBlitz |
| React 18 and 19 | @sealpixel/react | React | StackBlitz |
| Vue 3 | @sealpixel/vue | Vue | StackBlitz |
| Svelte 5 | @sealpixel/svelte | Svelte | StackBlitz |
| Astro 5 and later | @sealpixel/astro | Astro | StackBlitz |
What they share
- The element.
<sealpixel-editor>is a custom element from@sealpixel/element. A binding renders it and maps its properties and events into the framework's idiom; nothing else is framework-specific. Anything a binding does not expose is reachable on the element itself. - The log.
sealpixel:changecarries{ log, index }: the edit log and the position in its history. Pass the same object back aseditLogfor controlled use, or givedefaultEditLogonce and let the editor own it. Both accept a bare log too. - The events.
sealpixel:ready,sealpixel:load(the source descriptor),sealpixel:change,sealpixel:process(the export result with its hash),sealpixel:error. - The build. The core is WebAssembly in a Web Worker. A bundler has to understand
new Worker(new URL('…', import.meta.url), { type: 'module' })and emit.wasmfiles as assets. Vite does, and so do webpack 5, Parcel and esbuild with its worker plugin. Astro gets the Vite settings from the integration. - The starters. Every page quotes the runnable project under
examples/starters/. A test boots all five in a browser, presses Download in each and asserts that they produce the same file name — the hash of the same render — and that the Node server renders the same hash without a browser. The code on these pages is that code.
The server half is the same everywhere: @sealpixel/render renders the original with the edit log from getEditLog(). How the original and the log reach it is up to your backend. It has its own section, Render on your server; the framework pages say only where it runs.