🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@nowline/export-png

Package Overview
Dependencies
Maintainers
1
Versions
58
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@nowline/export-png

Exports a Nowline roadmap as a PNG image.

latest
npmnpm
Version
0.8.5
Version published
Maintainers
1
Created
Source

@nowline/export-png

Rasterizes a Nowline-rendered SVG to PNG using @resvg/resvg-js (a Rust→WASM SVG rasterizer). Bundled into the nowline CLI.

License: Apache 2.0 Part of: lolay/nowline monorepo Spec: specs/handoffs/m2c.md § 3

Install

pnpm add @nowline/export-png @nowline/export-core @nowline/renderer

Usage

import { layoutRoadmap } from '@nowline/layout';
import { renderSvg } from '@nowline/renderer';
import { resolveFonts } from '@nowline/export-core';
import { exportPng } from '@nowline/export-png';

const svg = await renderSvg(layoutRoadmap(file, resolved, { theme }));
const fonts = (await resolveFonts({ headless: true })).pair();
const png = await exportPng({ ast, resolved, model, sourcePath, today }, svg, {
    scale: 2,
    fonts,
});

// `png` is a Uint8Array of PNG bytes.

Options

OptionDefaultNotes
scale2Pixel-density multiplier. Scales the root <svg width/height> before rasterization. Common values: 1, 1.5, 2, 3.
backgroundmodelOverride the background color (CSS color or transparent).
fontsresolveFonts()Pre-resolved sans/mono pair. If omitted, the exporter calls @nowline/export-core's resolver itself.
resvgOptions(none)Escape hatch for resvg-js options. Use sparingly.

The scale factor is applied by rewriting the root SVG element's width/height attributes — resvg-js 2.6.x ignores fitTo when fontBuffers is set, so this is the workaround the package uses to keep custom-font rendering deterministic.

Determinism

  • WASM module: lazy-loaded on first call; cached process-globally. The _resetResvgModule() test seam clears the cache.
  • loadSystemFonts: false — only fonts passed via fontBuffers are visible to resvg, so identical input produces identical bytes regardless of host machine.
  • Font bytes come from @nowline/export-core's 5-step resolver. With --headless (or the equivalent option here), the bundled DejaVu pair is used and the output is byte-stable across macOS / Linux / Windows.
  • The PNG header bytes are \x89PNG\r\n\x1a\n followed by an IHDR chunk whose dimensions equal scale × <svg width> × scale × <svg height>.

Snapshot tests

Snapshots live in test/__snapshots__/. Regenerate with vitest -u. Hash tests in test/export-png.test.ts confirm byte-stability across re-renders.

License

Apache-2.0.

FAQs

Package last updated on 20 Jun 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts