ChannelZ is a CLI tool for x86-64 Linux machines that simplifies the common task of encoding static web assets with Gzip and Brotli for production environments.
gzip
andbrotli
are compiled intochannelz
; their binaries do not need to be separately installed;- The maximum compression settings are applied; the end results will often be smaller than running native
gzip
orbrotli
thanks to various optimizations; - It can be set against one or many files, one or many directories;
- Paths can be specified as trailing command arguments, and/or loaded via text file (with one path per line) with the
-l
option; - Directory processing is recursive;
- Processing is done in parallel with multiple threads for major speedups;
- Appropriate file types are automatically targeted; no thinking involved!
The "appropriate" file types are:
- appcache
- atom
- bmp
- css
- csv
- doc(x)
- eot
- geojson
- htc
- htm(l)
- ico
- ics
- js
- json
- jsonld
- (web)manifest
- md
- mjs
- otf
- rdf
- rss
- svg
- ttf
- txt
- vcard
- vcs
- vtt
- wasm
- xhtm(l)
- xls(x)
- xml
- xsl
- y(a)ml
Debian and Ubuntu users can just grab the pre-built .deb
package from the latest release.
This application is written in Rust and can alternatively be built from source using Cargo:
# Clone the source.
git clone https://github.com/Blobfolio/channelz.git
# Go to it.
cd channelz
# Build as usual. Specify additional flags as desired.
cargo build \
--bin channelz \
--release
(This should work under other 64-bit Unix environments too, like MacOS.)
It's easy. Just run channelz [FLAGS] [OPTIONS] <PATH(S)>…
.
The following flags and options are available:
Short | Long | Value | Description |
---|---|---|---|
--clean |
Remove all existing *.br *.gz files before starting. | ||
--clean-only |
Same as --clean , but exit immediately afterward. |
||
--force |
Try to encode all files regardless of file extension, except those already ending in .br/.gz. | ||
-h |
--help |
Print help information and exit. | |
-l |
--list |
<FILE> |
Read (absolute) file and/or directory paths to compress from this text file — or STDIN if "-" — one entry per line, instead of or in addition to <PATH(S)> . |
--no-br |
Skip Brotli encoding. | ||
--no-gz |
Skip Gzip encoding. | ||
-p |
--progress |
Show progress bar while minifying. | |
-V |
--version |
Print program version and exit. |
For example:
# Generate app.js.gz and app.js.br:
channelz /path/to/app.js
# Tackle a whole folder at once with a nice progress bar:
channelz -p /path/to/assets
# Do the same thing, but clear out any old *.gz or *.br files first:
channelz --clean -p /path/to/assets
# Or load it up with a lot of places separately:
channelz /path/to/css /path/to/js …
These benchmarks were performed on a Intel® Core™ i7-10610U with four discrete cores, averaging 100 runs.
Test: ChannelZ Documentation
Files: 35/47
Size: 226,456 bytes (encodable)
Program | Time (ms) | GZ (b) | BR (b) |
---|---|---|---|
ChannelZ | 1,050 | 66,394 | 55,099 |
Find + Gzip + Brotli | 3,212 | 68,946 | 55,246 |
Test: WordPress Core
Files: 815/1,980
Size: 43,988,358 bytes (encodable)
Program | Time (s) | GZ (b) | BR (b) |
---|---|---|---|
ChannelZ | 10.5045 | 7,539,948 | 6,522,810 |
Find + Gzip + Brotli | 43.9917 | 7,856,120 | 6,557,240 |
See also: CREDITS.md
Copyright © 2024 Blobfolio, LLC <[email protected]>
This work is free. You can redistribute it and/or modify it under the terms of the Do What The Fuck You Want To Public License, Version 2.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <[email protected]>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.