# fontmin

> Minify font seamlessly, font subsetter, webfont (eot, woff, svg) converter.

Latest version **1.1.1** (published 2025-08-13) · MIT license · 0 weekly downloads

## Install

```sh
npm install fontmin
pnpm add fontmin
yarn add fontmin
bun add fontmin
```

Provides the command `fontmin`.

## Health

**Score 40/100 (D)** — status: maintenance-mode.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.1 |
| Published | 2025-08-13 |
| First published | 2015-01-28 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=12 |
| Dependencies | 19 |
| Unpacked size | 47.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 6215 |
| Author | junmer |
| Maintainers | ecomfe-core, ecomfe-admin, otakustay, leeight, justineo, gdjinbo, luyuan, errorrik, ksky521, lang, 100pah, jinzhan, ovilia, gkiwi001, zttonly, okaychen, xdbobname, fuqiang15, junmer, kekee000 |
| Keywords | font, webfont, icon, iconfont, font-face, compress, minify, font-cli, otf, ttf, woff, woff2, eot, svg, ttf2eot, ttf2woff, ttf2woff2, ttf2svg, svg2ttf, css, base64 |

## Links

- npm: https://www.npmjs.com/package/fontmin
- Repository: https://github.com/ecomfe/fontmin
- Homepage: https://github.com/ecomfe/fontmin#readme
- Issues: https://github.com/ecomfe/fontmin/issues
- npm.io page: https://npm.io/package/fontmin

## Dependencies (19)

- [b3b](https://npm.io/package/b3b.md) ^0.0.1
- [meow](https://npm.io/package/meow.md) ^9.0.0
- [pako](https://npm.io/package/pako.md) ^2.0.3
- [is-otf](https://npm.io/package/is-otf.md) ^0.1.2
- [is-svg](https://npm.io/package/is-svg.md) ^4.2.1
- [is-ttf](https://npm.io/package/is-ttf.md) ^0.2.2
- [lodash](https://npm.io/package/lodash.md) ^4.17.10
- [through2](https://npm.io/package/through2.md) ^4.0.2
- [vinyl-fs](https://npm.io/package/vinyl-fs.md) ^3.0.3
- [get-stdin](https://npm.io/package/get-stdin.md) ^8.0.0
- [ttf2woff2](https://npm.io/package/ttf2woff2.md) ^4.0.1
- [@types/node](https://npm.io/package/@types/node.md) ^12.20.55
- [code-points](https://npm.io/package/code-points.md) ^2.0.0-1
- [replace-ext](https://npm.io/package/replace-ext.md) ^2.0.0
- [concat-stream](https://npm.io/package/concat-stream.md) ^2.0.0
- [@types/through2](https://npm.io/package/@types/through2.md) ^2.0.38
- [buffer-to-vinyl](https://npm.io/package/buffer-to-vinyl.md) ^1.0.0
- [fonteditor-core](https://npm.io/package/fonteditor-core.md) ~2.4.0
- [stream-combiner](https://npm.io/package/stream-combiner.md) ^0.2.1

## Alternatives

- [@fortawesome/react-fontawesome](https://npm.io/package/@fortawesome/react-fontawesome.md) — 2.2M weekly downloads
- [roboto-fontface](https://npm.io/package/roboto-fontface.md) — 196.0K weekly downloads
- [@react-native-vector-icons/common](https://npm.io/package/@react-native-vector-icons/common.md) — 150.4K weekly downloads
- [@procore/core-icons](https://npm.io/package/@procore/core-icons.md) — 4.6K weekly downloads
- [@react-md/material-icons](https://npm.io/package/@react-md/material-icons.md) — 1.6K weekly downloads

## Recent versions

- 1.1.1 (latest) — 2025-08-13
- 2.0.3 — 2025-08-01
- 2.0.2 — 2025-07-11
- 2.0.1 — 2025-07-11
- 2.0.0 — 2024-11-22
- 1.1.0 — 2024-06-14
- 1.0.1 — 2023-08-14
- 1.0.0 — 2023-08-11
- 0.9.9 — 2021-09-10
- 0.9.8 — 2019-07-19
- 0.9.8-beta — 2019-07-18
- 0.9.7-beta — 2018-05-10
- 0.9.6 — 2016-05-05
- 0.9.5 — 2016-05-05
- 0.9.4 — 2016-04-10
- … 24 more at https://npm.io/package/fontmin/versions

## README

<p align="center">
    <a href="http://ecomfe.github.io/fontmin/">
        <img height="128" width="128" src="https://raw.githubusercontent.com/ecomfe/fontmin/master/fontmin.png">
    </a>
</p>

# fontmin
**Minify font seamlessly**

[![NPM version][npm-image]][npm-url]
[![Build Status][travis-image]][travis-url]
[![Downloads][downloads-image]][npm-url]
[![Dependencies][dep-image]][dep-url]
[![Font support][font-image]][font-url]

## Homepage

- [简体中文](http://ecomfe.github.io/fontmin/)
- [繁體中文](http://ecomfe.github.io/fontmin/tw)
- [日本語](http://ecomfe.github.io/fontmin/jp)
- [한국어](http://ecomfe.github.io/fontmin/kr)
- [English](http://ecomfe.github.io/fontmin/en)

## Install

```sh
$ npm install --save fontmin
```

## Usage

```js
import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .src('fonts/*.ttf')
    .dest('build/fonts');

fontmin.run(function (err, files) {
    if (err) {
        throw err;
    }

    console.log(files[0]);
    // => { contents: <Buffer 00 01 00 ...> }
});
```

You can use [gulp-rename](https://github.com/hparra/gulp-rename) to rename your files:

```js
import Fontmin from 'fontmin';
const rename = require('gulp-rename');

const fontmin = new Fontmin()
    .src('fonts/big.ttf')
    .use(rename('small.ttf'));
```

## API

### new Fontmin()

Creates a new `Fontmin` instance.

### .src(file)

Type: `Array|Buffer|String`

Set the files to be optimized. Takes a buffer, glob string or an array of glob strings
as argument.

### .dest(folder)

Type: `String`

Set the destination folder to where your files will be written. If you don't set
any destination no files will be written.

### .use(plugin)

Type: `Function`

Add a `plugin` to the middleware stack.

### .run(cb)

Type: `Function`

Optimize your files with the given settings.

#### cb(err, files, stream)

The callback will return an array of vinyl files in `files` and a Readable/Writable
stream in `stream`

## Plugins

The following plugins are bundled with fontmin:

* [glyph](#glyph) — Compress ttf by glyph.
* [ttf2eot](#ttf2eot) — Convert ttf to eot.
* [ttf2woff](#ttf2woff) — Convert ttf to woff.
* [ttf2woff2](#ttf2woff2) — Convert ttf to woff2.
* [ttf2svg](#ttf2svg) — Convert ttf to svg.
* [css](#css) — Generate css from ttf, often used to make iconfont.
* [svg2ttf](#svg2ttf) — Convert font format svg to ttf.
* [svgs2ttf](#svgs2ttf) — Concat svg files to a ttf, just like css sprite.
* [otf2ttf](#otf2ttf) — Convert otf to ttf.

### .glyph()

Compress ttf by glyph.

```js
import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .use(Fontmin.glyph({
        text: '天地玄黄 宇宙洪荒',
        hinting: false         // keep ttf hint info (fpgm, prep, cvt). default = true
    }));
```

### .ttf2eot()

Convert ttf to eot.

```js
import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .use(Fontmin.ttf2eot());
```

### .ttf2woff()

Convert ttf to woff.

```js
import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .use(Fontmin.ttf2woff({
        deflate: true           // deflate woff. default = false
    }));
```

### .ttf2woff2()

Convert ttf to woff2.

```js
import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .use(Fontmin.ttf2woff2());
```

### .ttf2svg()

Convert ttf to svg.

you can use [imagemin-svgo](https://github.com/imagemin/imagemin-svgo) to compress svg:

```js
import Fontmin from 'fontmin';
const svgo = require('imagemin-svgo');

const fontmin = new Fontmin()
    .use(Fontmin.ttf2svg())
    .use(svgo());

```

### .css()

Generate css from ttf, often used to make iconfont.

```js
import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .use(Fontmin.css({
        fontPath: './',         // location of font file
        base64: true,           // inject base64 data:application/x-font-ttf; (gzip font with css).
                                // default = false
        glyph: true,            // generate class for each glyph. default = false
        iconPrefix: 'my-icon',  // class prefix, only work when glyph is `true`. default to "icon"
        fontFamily: 'myfont',   // custom fontFamily, default to filename or get from analysed ttf file
        asFileName: false,      // rewrite fontFamily as filename force. default = false
        local: true             // boolean to add local font. default = false
    }));
```

Alternatively, a transform function can be passed as `fontFamily` option.
```js
import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .use(Fontmin.css({
        // ...
        fontFamily: function(fontInfo, ttf) {
          return "Transformed Font Family Name"
        },
        // ...
    }));
```

### .svg2ttf()

Convert font format svg to ttf.

```js
import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .src('font.svg')
    .use(Fontmin.svg2ttf());
```

### .svgs2ttf()

Concat svg files to a ttf, just like css sprite.

awesome work with [css](#css) plugin:

```js
import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .src('svgs/*.svg')
    .use(Fontmin.svgs2ttf('font.ttf', {fontName: 'iconfont'}))
    .use(Fontmin.css({
        glyph: true
    }));
```

### .otf2ttf()

Convert otf to ttf.

```js
import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .src('fonts/*.otf')
    .use(Fontmin.otf2ttf());
```

## CLI

```bash
$ npm install -g fontmin
```

```sh
$ fontmin --help

  Usage
    $ fontmin <file> [<output>]
    $ fontmin <directory> [<output>]
    $ fontmin <file> > <output>
    $ cat <file> | fontmin > <output>

  Example
    $ fontmin fonts/* build
    $ fontmin fonts build
    $ fontmin foo.ttf > foo-optimized.ttf
    $ cat foo.ttf | fontmin > foo-optimized.ttf

  Options
    -t, --text                          require glyphs by text
    -b, --basic-text                    require glyphs with base chars
    -d, --deflate-woff                  deflate woff
    --font-family                       font-family for @font-face CSS
    --css-glyph                         generate class for each glyf. default = false
    -T, --show-time                     show time fontmin cost
```

you can use `curl` to generate font for websites running on PHP, ASP, Rails and more:

```sh
$ text=`curl www.baidu.com` && fontmin -t "$text" font.ttf
```
or you can use [html-to-text](https://www.npmjs.com/package/html-to-text) to make it smaller:

```sh
$ npm install -g html-to-text
$ text=`curl www.baidu.com | html-to-text` && fontmin -t "$text" font.ttf
```

what is more, you can use [phantom-fetch-cli](https://www.npmjs.com/package/phantom-fetch-cli) to generate font for `SPA` running JS template:

```sh
$ npm install -g phantom-fetch-cli
$ text=`phantom-fetch http://www.chinaw3c.org` && fontmin -t "$text" font.ttf
```

## Related

- [fontmin-app](https://github.com/ecomfe/fontmin-app)
- [gulp-fontmin](https://github.com/ecomfe/gulp-fontmin)
- [fonteditor](https://github.com/ecomfe/fonteditor)

## Thanks

- [imagemin](https://github.com/imagemin/imagemin)
- [free chinese font](http://zenozeng.github.io/Free-Chinese-Fonts/)
- [浙江民间书刻体][font-url]

## License

MIT © [fontmin](https://raw.githubusercontent.com/ecomfe/fontmin/master/LICENSE)


[downloads-image]: http://img.shields.io/npm/dm/fontmin.svg
[npm-url]: https://npmjs.org/package/fontmin
[npm-image]: http://img.shields.io/npm/v/fontmin.svg

[travis-url]: https://travis-ci.org/ecomfe/fontmin
[travis-image]: http://img.shields.io/travis/ecomfe/fontmin.svg

[dep-url]: https://david-dm.org/ecomfe/fontmin
[dep-image]: http://img.shields.io/david/ecomfe/fontmin.svg

[font-image]: https://img.shields.io/badge/font-eonway-blue.svg
[font-url]: http://weibo.com/eonway

---
_Source: https://npm.io/package/fontmin · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
