npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

satori-factory

v0.1.0

Published

Tiny yet full-fledged JSX factory for Satori

Downloads

7

Readme

Satori Factory

Tiny yet full-fledged JSX factory for Satori.

/** @jsxImportSource satori-factory */
import satori from "satori";

const svg = await satori(<div>Hello, Satori Factory!</div>, {
  height: 630,
  width: 1200,
  fonts: [
    /* your fonts data here */
  ],
});

Features

  • Featherlight — Satori Factory has zero dependencies and can be minified to less than 0.3kB.
  • Function component — You can define reusable components much like React.
  • Fine-tuned TypeScript support — Give unsupported CSS properties and you will get warned.

Installation

This package is available on NPM registry. You can install satori-factory using a package manager of your preference.

Usage

Satori Factory supports the newer JSX transformation, so you need to configure tsconfig.json accordingly.

{
  "compilerOptions": {
    "jsx": "react-jsx",
    "jsxImportSource": "satori-factory"
  },
}

ESBuild picks up these compiler options automatically, so the above setup should suffice in major Vite-powered frameworks.

You can also specify JSX import source on a per-file basis. See TSConfig reference for details.

FAQ

Why not React?

If you already use React in your project, this package is probably not for you.

What's the motivation behind this package then?

The primary usecase is non-React framework such as Astro, SvelteKit, or HonoX. When you want to use Satori with these frameworks, you have to use object literals instead of JSX expressions, which is quite cumbersome. Of course you can install React as an additional dependency but using React only for Satori might be a sledgehammer for a nut if you don't use it in the main part of your application. In addition to that, reducing server-side bundle size is becoming more important than ever due to the tight restriction in the emerging CDN edge computing platforms.

This is where Satory Factory comes in. It offers the ergonomics of JSX to Satori users while incurring as small build footprint as possible.

Satori is big enough that the size of React can be negligible, isn't it?

Yes. Unfortunately and stupidly, I only noticed that fact after finishing the initial implementation of the package.

License

This package is release under the MIT License. See LICENSE.md for details.