Contents

loopwerk/bonsai

An HTML minifier in pure Swift.

Usage

Include Bonsai in your Package.swift:

let package = Package(
  dependencies: [
    .package(url: "https://github.com/loopwerk/Bonsai", from: "1.0.0"),
  ],
  targets: [
    .target(
      name: "MyProject",
      dependencies: ["Bonsai"]),
  ]
)

Using it is a simple import and function call:

import Bonsai

let result = Bonsai.minifyHTML("<html>")

There are no options or settings to configure.

Performance

Benchmarked on a ~143 KB HTML page (1000 iterations, release build), using a M1 Max Macbook Pro:

| Tool | Avg time per operation | Throughput | |---|---|---| | html-minifier (Node.js) | 12.1 ms | 83 ops/sec | | html-minifier-terser (Node.js) | 14.3 ms | 70 ops/sec | | html-minifier-next (Node.js) | 0.6 ms | 1,817 ops/sec | | Bonsai (Swift) | 0.9 ms | 1,149 ops/sec |

The speed difference between Bonsai and html-minifier-next only becomes noticeable at scale; for individual pages, both finish under a millisecond.

To run the benchmark yourself:

# Swift (release mode)
swift run -c release BonsaiBenchmark

Package Metadata

Repository: loopwerk/bonsai

Default branch: main

README: README.md