API Reference
Complete API reference for Sone components and methods
API Reference
Complete reference for all Sone components, methods, and utilities.
Core Components
Column
Creates a vertical flex container.
function Column(...children: SoneNode[]): ColumnNodeMethods:
- All Layout Props methods
- Standard flex properties with
flexDirection: "column"by default
Example:
Column(
Text("First"),
Text("Second")
).gap(10).padding(20)Row
Creates a horizontal flex container.
function Row(...children: SoneNode[]): RowNodeMethods:
- All Layout Props methods
- Standard flex properties with
flexDirection: "row"by default
Example:
Row(
Text("Left"),
Text("Right")
).justifyContent("space-between")Text
Displays rich text content.
function Text(...children: Array<SpanNode | string | undefined | null>): TextNodeText-specific Methods:
align(value: "left" | "center" | "right" | "justify"): TextNodelineHeight(value: number): TextNodenowrap(): TextNodewrap(value?: boolean): TextNodeindent(value: number): TextNodehangingIndent(value: number): TextNodeautofit(value?: boolean): TextNode
Text Styling Methods:
- All Span Props methods
- All Layout Props methods
Example:
Text("Hello ", Span("World").color("blue"))
.size(16)
.align("center")
.lineHeight(1.4)Span
Inline text styling within Text components.
function Span(children: string): SpanNodeMethods:
- All Span Props methods
Example:
Span("Important text")
.color("red")
.weight("bold")
.underline()TextDefault
Applies default text styling to child components.
function TextDefault(...children: SoneNode[]): TextDefaultNodeMethods:
- All Span Props methods (except layout properties)
- Text layout methods:
nowrap(),wrap(),lineHeight(),align(),indent()
Example:
TextDefault(
Text("Inherits styling"),
Text("Also inherits")
)
.font("Arial", "sans-serif")
.size(14)
.color("black")Photo
Displays images with scaling and transformation options.
function Photo(src: string | Uint8Array): PhotoNodePhoto-specific Methods:
scaleType(value: "cover" | "contain" | "fill", alignment?: number | "start" | "center" | "end"): PhotoNodepreserveAspectRatio(value?: boolean): PhotoNodeflipHorizontal(value?: boolean): PhotoNodeflipVertical(value?: boolean): PhotoNodefill(value: ColorValue): PhotoNode
Methods:
- All Layout Props methods
Example:
Photo("image.jpg")
.size(200, 150)
.scaleType("cover", "center")
.rounded(8)Path
Renders SVG path graphics.
function Path(d: string): PathNodePath-specific Methods:
stroke(value: ColorValue): PathNodestrokeWidth(value: number): PathNodestrokeLineCap(value: "butt" | "round" | "square"): PathNodestrokeLineJoin(value: "miter" | "round" | "bevel"): PathNodestrokeMiterLimit(value: number): PathNodestrokeDashArray(...values: number[]): PathNodestrokeDashOffset(value: number): PathNodefill(value: ColorValue): PathNodefillOpacity(value: number): PathNodefillRule(value: "evenodd" | "nonzero"): PathNodescalePath(value: number): PathNode
Methods:
- All Layout Props methods
Example:
Path("M 10 10 L 50 50 Z")
.fill("red")
.stroke("black")
.strokeWidth(2)Table Components
Table
Creates a table layout container.
function Table(...children: TableRowNode[]): TableNodeTable-specific Methods:
spacing(...values: number[]): TableNode
Methods:
- All Layout Props methods
TableRow
Represents a table row.
function TableRow(...children: Array<TextDefaultNode | TableCellNode | null | undefined>): TableRowNodeMethods:
- All Layout Props methods
TableCell
Individual table cell.
function TableCell(...children: SoneNode[]): TableCellNodeTableCell-specific Methods:
colspan(value: number): TableCellNoderowspan(value: number): TableCellNode
Methods:
- All Layout Props methods
Example:
Table(
TableRow(
TableCell(Text("Header 1")),
TableCell(Text("Header 2"))
).bg("gray"),
TableRow(
TableCell(Text("Data 1")),
TableCell(Text("Data 2"))
)
).spacing(5)Layout Props
Common layout properties available on most components:
Flexbox Properties
alignContent(value: AlignContent): TalignItems(value: AlignItems): TalignSelf(value: AlignItems): TjustifyContent(value: JustifyContent): Tdirection(value: FlexDirection): Twrap(value: "wrap" | "nowrap" | "wrap-reverse"): Tflex(value: number): Tgrow(value: number): Tshrink(value: number): Tbasis(value: number | "auto" | string): T
Spacing
gap(value: number): TrowGap(value: number): TcolumnGap(value: number): Tpadding(all: number): Tpadding(topBottom: number, leftRight: number): Tpadding(top: number, leftRight: number, bottom: number): Tpadding(top: number, right: number, bottom: number, left: number): TpaddingTop(value: number): TpaddingRight(value: number): TpaddingBottom(value: number): TpaddingLeft(value: number): Tmargin(...): Similar overloads as paddingmarginTop(value: number): TmarginRight(value: number): TmarginBottom(value: number): TmarginLeft(value: number): T
Sizing
width(value: number | "auto" | string): Theight(value: number | "auto" | string): Tsize(width: number, height?: number): TminWidth(value: number | string): TmaxWidth(value: number | string): TminHeight(value: number | string): TmaxHeight(value: number | string): TaspectRatio(value: number): T
Positioning
position(value: "static" | "relative" | "absolute"): Ttop(value: number | string): Tright(value: number | string): Tbottom(value: number | string): Tleft(value: number | string): Tinset(value: number | string): T
Visual Styling
bg(...values: ColorValue | PhotoNode | GradientNode[]): Tbackground(...values: ColorValue | PhotoNode | GradientNode[]): Topacity(value: number): TborderWidth(...): CSS-like shorthand overloadsborderColor(value: ColorValue): Trounded(...values: number[]): TborderRadius(...values: number[]): TcornerSmoothing(value: number): Tcorner(value: "cut" | "round"): Tshadow(...values: string[]): T
Transforms
rotate(value: number): Tscale(value: number): Tscale(x: number, y: number): TtranslateX(value: number): TtranslateY(value: number): T
Filters
blur(value: number): Tbrightness(value: number): Tcontrast(value: number): Tgrayscale(value: number): Tsaturate(value: number): Tsepia(value: number): Tinvert(value: number): Thuerotate(value: number): T
Utility
apply(value: LayoutProps): Ttag(value: string): T
Span Props
Text styling properties for Span and Text components:
Font Properties
size(value: number): Tfont(...values: string[]): Tweight(value: "normal" | "bold" | "lighter" | "bolder" | string | number): Tstyle(value: "normal" | "italic" | "oblique"): Tcolor(value: ColorValue | GradientNode[]): T
Text Spacing
letterSpacing(value: number): TwordSpacing(value: number): T
Text Effects
dropShadow(...values: string[]): TstrokeColor(value: ColorValue): TstrokeWidth(value: number): ToffsetY(value: number): T
Text Decorations
underline(value?: number): TunderlineColor(value?: ColorValue): TlineThrough(value?: number): TlineThroughColor(value?: ColorValue): Toverline(value?: number): ToverlineColor(value?: ColorValue): Thighlight(value?: ColorValue): T
Rendering Functions
sone()
Main rendering function for Node.js.
function sone(node: SoneNode, config?: SoneRenderConfig): {
jpg: (quality?: number, options?: ExportOptions) => Promise<Buffer>
png: (options?: ExportOptions) => Promise<Buffer>
svg: (options?: ExportOptions) => Promise<Buffer>
pdf: (options?: ExportOptions) => Promise<Buffer>
webp: (options?: ExportOptions) => Promise<Buffer>
raw: (options?: ExportOptions) => Promise<Buffer>
canvas: () => Promise<Canvas>
canvasWithMetadata: () => Promise<{ canvas: Canvas; metadata: any }>
}Export Methods:
jpg(quality?, options?)- Export as JPEGpng(options?)- Export as PNGsvg(options?)- Export as SVGpdf(options?)- Export as PDFwebp(options?)- Export as WebPraw(options?)- Export as raw buffercanvas()- Get Canvas instancecanvasWithMetadata()- Get Canvas with layout metadata
render()
Generic render function for custom renderers.
function render<T>(
node: SoneNode,
renderer: SoneRenderer,
config?: SoneRenderConfig
): Promise<T>Font Management
Font
Font loading and management utility.
const Font = {
load(name: string, source: string | string[]): Promise<void>
unload(name: string): Promise<void>
has(name: string): boolean
}Methods:
Font.load(name, source)- Load and register fontFont.unload(name)- Unload font (Node.js only)Font.has(name)- Check if font is loaded
Utilities
qrcode()
Generate QR codes.
function qrcode(
data: string,
options?: {
size?: number
margin?: number
errorCorrectionLevel?: "L" | "M" | "Q" | "H"
}
): PhotoNodeExample:
qrcode("https://example.com")
.size(200)
.bg("white")
.rounded(8)Type Definitions
Color Types
type ColorValue =
| keyof typeof colors // Named colors: "red", "blue", etc.
| "transparent"
| string // CSS colors: "#ff0000", "rgb(255,0,0)", etc.
type GradientNode = {
// Parsed gradient object from gradient-parser
}Layout Types
type FlexDirection = "column" | "column-reverse" | "row" | "row-reverse"
type AlignItems = "flex-start" | "flex-end" | "center" | "stretch" | "baseline"
type JustifyContent = "flex-start" | "flex-end" | "center" | "space-between" | "space-around" | "space-evenly"
type AlignContent = "flex-start" | "flex-end" | "center" | "stretch" | "space-between" | "space-around" | "space-evenly"Font Types
type FontValue = "sans-serif" | "serif" | "monospace" | stringNode Types
type SoneNode =
| ColumnNode
| RowNode
| TextNode
| TextDefaultNode
| PhotoNode
| PathNode
| TableNode
| TableRowNode
| TableCellNode
| null
| undefinedConfiguration
SoneRenderConfig
interface SoneRenderConfig {
width?: number // Canvas width
height?: number // Canvas height
devicePixelRatio?: number // Pixel density
debug?: {
layout?: boolean // Debug layout
text?: boolean // Debug text rendering
}
}Platform-Specific APIs
Node.js Only
Features only available in Node.js environment:
- Full font loading from file paths
- All export formats (PDF, WebP, etc.)
- Font unloading
- Buffer input for images
Browser Limitations
When using in browsers:
- Custom renderer required
- Limited font loading capabilities
- Image loading restrictions due to CORS
- No PDF/WebP export without additional libraries
Error Handling
Common error scenarios:
try {
const result = await sone(document).jpg();
} catch (error) {
if (error.message.includes('Font not found')) {
// Handle font loading issues
}
if (error.message.includes('Image load failed')) {
// Handle image loading issues
}
}Performance Tips
- Use
tag()for debugging complex layouts - Preload fonts at application startup
- Cache rendered results when possible
- Optimize image sizes before use
- Use simple paths for better Path performance