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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@takaivasoft/text-to-svg-path

v1.0.2

Published

Convert text to SVG paths using any font URL

Readme

text-to-svg-path

A lightweight TypeScript utility to convert text to SVG paths using any font URL. It directly fetches fonts from URLs without saving them locally.

Features

  • Minimal: Focused on one task - converting text to SVG paths
  • No Local Storage: Fetches fonts directly from URLs
  • TypeScript: Fully typed for improved developer experience
  • Customizable: Control font size, color, stroke, and more
  • Path Data: Access both the complete SVG and the raw path data
  • Multi-Text Support: Generate multiple text paths in a single call
  • Performance Optimized: Request only the output formats you need
  • Customizable Background: Control background dimensions and text positioning

Installation

npm install @takaivasoft/text-to-svg-path

Usage

Basic Usage

import { textToSvgPath } from 'text-to-svg-path';

// URL to a TTF or OTF font file
const fontUrl = 'https://raw.githubusercontent.com/google/fonts/main/ofl/chakrapetch/ChakraPetch-Regular.ttf';

// Generate the SVG
const svgResult = await textToSvgPath({
  text: 'Hello World',
  fontUrl: fontUrl,
  fontSize: 72,
  fill: '#3366CC'
});

// Use the SVG string
console.log(svgResult.svg);

// Or access the raw path data
console.log(svgResult.pathData);

// Or get the complete path element with attributes
console.log(svgResult.pathElement);

Generating Text with Custom Background

const result = await textToSvgPath({
  text: 'takaiva',
  fontUrl: 'https://raw.githubusercontent.com/google/fonts/main/ofl/chakrapetch/ChakraPetch-Regular.ttf',
  fontSize: 60,
  fill: '#FFFFFF', // White text
  background: '#333333', // Specify background color
  backgroundWidth: 600, // Custom background width
  backgroundHeight: 300, // Custom background height
  backgroundX: 150, // Position text horizontally
  backgroundY: 170 // Position text vertically
});

// Get the SVG with background
console.log(result.svgWithBackground);

Performance Optimization

Only generate the output formats you need:

// Only generate path data and path element (no SVG)
const pathsOnly = await textToSvgPath({
  text: 'Paths Only',
  fontUrl: fontUrl,
  fontSize: 60,
  fill: '#333333',
  outputFormats: ['pathData', 'pathElement']
});

// Only generate SVG with background
const backgroundOnly = await textToSvgPath({
  text: 'Background Only',
  fontUrl: fontUrl,
  fontSize: 60,
  fill: '#FFFFFF',
  background: '#000000',
  outputFormats: ['svgWithBackground']
});

Multi-Text Functionality

Generate multiple text paths in a single call:

const multiTextResult = await textToSvgPath({
  mainTitle: {
    text: 'Main Title',
    fontUrl: 'https://raw.githubusercontent.com/googlefonts/roboto/main/src/hinted/Roboto-Regular.ttf',
    fontSize: 80,
    fill: '#2C3E50'
  },
  subtitle: {
    text: 'Subtitle text',
    fontUrl: 'https://raw.githubusercontent.com/googlefonts/roboto/main/src/hinted/Roboto-Regular.ttf',
    fontSize: 40,
    fill: '#7F8C8D'
  },
  logo: {
    text: 'LOGO',
    fontUrl: 'https://raw.githubusercontent.com/google/fonts/main/ofl/chakrapetch/ChakraPetch-Regular.ttf',
    fontSize: 60,
    fill: '#E74C3C',
    background: '#333333'
  }
});

// Access each result
console.log(multiTextResult.mainTitle.svg);
console.log(multiTextResult.subtitle.svg);
console.log(multiTextResult.logo.svgWithBackground);

Using Path Elements to Create Custom SVG

// Custom SVG combining multiple path elements
const customSvg = `<svg 
xmlns="http://www.w3.org/2000/svg" 
width="800" 
height="400" 
viewBox="0 0 800 400">
  <rect x="0" y="0" width="800" height="400" fill="#f5f5f5" />
  <g transform="translate(50, 100)">
    ${multiTextResult.mainTitle.pathElement}
  </g>
  <g transform="translate(100, 200)">
    ${multiTextResult.subtitle.pathElement}
  </g>
  <g transform="translate(400, 150)">
    ${multiTextResult.logo.pathElement}
  </g>
</svg>`;

// Insert into HTML
document.getElementById('custom-svg-container').innerHTML = customSvg;

Using in HTML

const svgResult = await textToSvgPath({
  text: 'Logo Text',
  fontUrl: '...',
  fill: '#FFFFFF'
});

// Insert directly into HTML
document.getElementById('logo-container').innerHTML = svgResult.svg;

// Or in React (with appropriate type assertions)
return <div dangerouslySetInnerHTML={{__html: svgResult.svg}} />;

API Reference

textToSvgPath(options)

Main function that converts text to SVG paths. Supports both single text and multi-text options.

Single Text Options

interface TextToSvgPathOptions {
  // Required
  text: string;       // The text to convert to SVG path
  fontUrl: string;    // URL to the font file (.ttf or .otf)
  
  // Optional with defaults
  fontSize?: number;  // Font size in pixels (default: 72)
  fill?: string;      // Fill color (default: '#000000')
  stroke?: string;    // Stroke color (default: 'none')
  strokeWidth?: string; // Stroke width (default: '0')
  kerning?: boolean;  // Whether to use kerning (default: true)
  x?: number;         // X position (default: 0)
  y?: number;         // Y position (default: fontSize)
  width?: number;     // SVG width (auto calculated if not provided)
  height?: number;    // SVG height (auto calculated if not provided)
  
  // Background options
  background?: string; // Background color in hex format (e.g. '#333333')
  backgroundWidth?: number; // Width of background rectangle (default: 400)
  backgroundHeight?: number; // Height of background rectangle (default: 200)
  backgroundX?: number; // X position of text within background (default: 50)
  backgroundY?: number; // Y position of text within background (default: 120)
  
  // Performance optimization
  outputFormats?: OutputFormat[]; // Formats to generate: 'svg' | 'pathData' | 'pathElement' | 'svgWithBackground'
}

Multi-Text Options

type MultiTextToSvgPathOptions<T extends Record<string, any>> = {
  [K in keyof T]: TextToSvgPathOptions;
};

Return Value (Single Text)

interface TextToSvgPathResult {
  svg: string;        // The complete SVG as a string
  pathData: string;   // The raw SVG path data (d attribute)
  pathElement: string; // Path element with attributes
  svgWithBackground?: string; // SVG with background (if background color is provided)
}

Return Value (Multi-Text)

type MultiTextToSvgPathResult<T extends Record<string, any>> = {
  [K in keyof T]: TextToSvgPathResult;
};

Finding Font URLs

This library works with direct URLs to TTF or OTF font files. Some places to find these:

  1. Google Fonts GitHub Repository:

    • Format: https://raw.githubusercontent.com/google/fonts/main/ofl/[fontname]/[FontName-Style].ttf
    • Example: https://raw.githubusercontent.com/google/fonts/main/ofl/roboto/Roboto-Regular.ttf
  2. Other GitHub Repositories:

    • Many fonts maintain their own repositories with font files
  3. Self-Hosted Fonts:

    • Any direct URL to a TTF or OTF file will work

License

MIT