Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/blobfolio/channelz
Linux (x86-64) CLI tool to encode static assets with Gzip and Brotli.
https://github.com/blobfolio/channelz
brotli gzip linux rust
Last synced: 2 months ago
JSON representation
Linux (x86-64) CLI tool to encode static assets with Gzip and Brotli.
- Host: GitHub
- URL: https://github.com/blobfolio/channelz
- Owner: Blobfolio
- License: wtfpl
- Created: 2020-10-23T05:06:41.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2024-10-17T20:34:35.000Z (3 months ago)
- Last Synced: 2024-10-20T07:18:17.685Z (3 months ago)
- Topics: brotli, gzip, linux, rust
- Language: Rust
- Homepage:
- Size: 454 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# ChannelZ
[![ci](https://img.shields.io/github/actions/workflow/status/Blobfolio/channelz/ci.yaml?style=flat-square&label=ci)](https://github.com/Blobfolio/channelz/actions)
[![deps.rs](https://deps.rs/repo/github/blobfolio/channelz/status.svg?style=flat-square&label=deps.rs)](https://deps.rs/repo/github/blobfolio/channelz)
[![license](https://img.shields.io/badge/license-wtfpl-ff1493?style=flat-square)](https://en.wikipedia.org/wiki/WTFPL)
[![contributions welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square&label=contributions)](https://github.com/Blobfolio/channelz/issues)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.
## Features
* `gzip` and `brotli` are compiled into `channelz`; 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` or `brotli` 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## Installation
Debian and Ubuntu users can just grab the pre-built `.deb` package from the [latest release](https://github.com/Blobfolio/channelz/releases/latest).
This application is written in [Rust](https://www.rust-lang.org/) and can alternatively be built from source using [Cargo](https://github.com/rust-lang/cargo):
```bash
# 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.)
## Usage
It's easy. Just run `channelz [FLAGS] [OPTIONS] …`.
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` | `` | 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 ``. |
| | `--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:
```bash
# 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 …
```## Benchmarks
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 |## License
See also: [CREDITS.md](CREDITS.md)
Copyright © 2024 [Blobfolio, LLC](https://blobfolio.com) <[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
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.