A WOFF2 decompressor converts WOFF2 to TTF or OTF, powered by Rust based woff2-rs and napi-rs.
npm install @woff2/woff2-rswoff2-rsA WOFF2 decompressor converts WOFF2 to TTF or OTF, powered by Rust based woff2-rs and napi-rs.
- Converts WOFF2 to TTF or OTF.
- Quick to install, no need for node-gyp and postinstall.
- Cross-platform support, including Apple M Chips.
- Support for running as native addons in Deno.
```
npm i @woff2/woff2-rs
yarn add @woff2/woff2-rs
`js
import { promises as fs } from 'fs'
import path, { join } from 'path'
import { fileURLToPath } from 'url'
import woff2Rs from '@woff2/woff2-rs'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.resolve(path.dirname(__filename))
async function toTTF() {
const font = await fs.readFile(join(__dirname, '../__test__/fa-regular-400-v5.15.4.woff2'))
const outputBuffer = woff2Rs.decode(font) // output TTF buffer
await fs.writeFile(join(__dirname, 'fa-regular-400.ttf'), outputBuffer)
}
toTTF()
`
`bash
npm run bench
Running "WOFF2 to TTF (Use Font Awesome)" suite...
Progress: 50%
Progress: 100%
woff2-next(node-gyp binding):
2 990 ops/s, ±0.30% | fastest
@napi-rs/ttf2woff2(Rust binding):
2 396 ops/s, ±0.66% | 19.87% slower
@woff2/woff2-rs(Pure Rust):
1 934 ops/s, ±0.30% | 35.32% slower
wawoff(Wasm):
1 501 ops/s, ±0.75% | slowest, 49.8% slower
`
| | Node.js 12 | Node.js 14 | Node.js 16 | Node.js 18 | npm |
| ---------------- | ---------- | ---------- | ---------- | ---------- | --- |
| Windows x64 | ✓ | ✓ | ✓ | ✓ | |
| Windows x32 | ✓ | ✓ | ✓ | ✓ | |
| Windows arm64 | ✓ | ✓ | ✓ | ✓ | |
| macOS x64 | ✓ | ✓ | ✓ | ✓ | |
| macOS arm64(M1) | ✓ | ✓ | ✓ | ✓ | |
| Linux x64 gnu | ✓ | ✓ | ✓ | ✓ | |
| Linux x64 musl | ✓ | ✓ | ✓ | ✓ | |
| Linux arm gnu | ✓ | ✓ | ✓ | ✓ | |
| Linux arm64 gnu | ✓ | ✓ | ✓ | ✓ | |
| Linux arm64 musl | ✓ | ✓ | ✓ | ✓ | |
| Android arm64 | ✓ | ✓ | ✓ | ✓ | |
| Android armv7 | ✓ | ✓ | ✓ | ✓ | |
After yarn build/npm run build command, you can see package-template.[darwin|win32|linux].node file in project root. This is the native addon built from lib.rs.
With ava, run yarn test/npm run test to testing native addon. You can also switch to another testing framework if you want.
- Install the latest RustNode.js@10+
- Install which fully supported Node-APIyarn@1.x
- Install
- yarn
- yarn build
- yarn test
Ensure you have set your NPM_TOKEN in the GitHub project setting.
In Settings -> Secrets, add NPM_TOKEN into it.
When you want to release the package:
npm version [
`1.0.0 => 1.0.1
npm version patch
git push
``