hasmin alternatives and similar packages
Based on the "Text" category.
Alternatively, view hasmin alternatives based on common mentions on social networks and blogs.
-
skylighting
A Haskell syntax highlighting library with tokenizers derived from KDE syntax highlighting descriptions -
double-conversion
A fast Haskell library for converting between double precision floating point numbers and text strings. It is implemented as a binding to the V8-derived C++ double-conversion library.
CodeRabbit: AI Code Reviews for Developers

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of hasmin or a related project?
README
Hasmin - A Haskell CSS Minifier
Aside from the usual techniques (e.g. whitespace removal, color minification, etc.), the idea was to explore new possibilities, by implementing things other minifiers weren't doing, or they were, but not taking full advantage of.
Also, the minifier implements some techniques that do nothing for minified sizes, but attempt to improve post-compression sizes (at least when using DEFLATE, i.e. gzip).
For a list of techniques, see the wiki. To use it as a library, see below.
Building & Installing
Stack
The easiest and prefered way is using stack. To directly install, use the following one-liner:
git clone [email protected]:contivero/hasmin.git && cd hasmin && stack install
Stack installs inside ~/.local/bin
by default. If you'd rather just try hasmin
out, replace install
by build
, and then use stack exec hasmin
from inside
the hasmin directory (keep in mind it has a slight additional delay at the
beginning when run this way).
Cabal
Alternatively, you can use cabal:
$ cd path/to/hasmin/repo
$ cabal update # Make sure to have the latest package list
$ cabal sandbox init # Initialise a sandbox
$ cabal install --only-dependencies # Install dependencies into the sandbox
$ cabal build # Build hasmin inside the sandbox
Minifier Usage
Hasmin expects a path to the CSS file, and outputs the minified result to
stdout. Say you have a sheet.css
and want to minify it, and save it as
sheet.min.css
. Then, run:
$ hasmin sheet.css > sheet.min.css
Every technique is enabled by default, except for:
- Escaped character conversions (e.g. converting
\2714
into✔
, enabled with--convert-escaped-characters
). - Dimension minifications (e.g. converting
12px
to9pt
, enabled with--dimension-min
, or just-d
). - Lexicographical sorting of declarations (enabled with
--sort-declarations
).
The first two are disabled mainly because they are—on average, not always—detrimental for DEFLATE compression. As for declaration sorting, whether it benefits or hurts compression rates is very stylesheet-dependent, and the current implementation is quite naive, hence unsafe.
When something needs to be disabled, use the appropriate flag. Not every technique can be toggled, but if there is any one in particular that you need to and can't, open an issue about it.
Note: there is a problem in Windows when using the
--convert-escaped-characters
flag to enable the conversion of escaped
characters. A workaround is changing the code page, which can be done by running
chcp 65001
in the terminal (whether cmd, or cygwin).
Library
The preferable way to use Hasmin as a library is to import Hasmin
; a usage
example can be seen in the module's documentation.
That is currently the only module that is sure to abide by
PVP. Most other exposed modules are so because tests
need it, and thus definitions there may be changed anytime. In case something
internal is needed though, feel free to open an issue about it.
Zopfli Integration
Hasmin uses bindings to Google's Zopfli library, allowing the possibility to compress the result.
Since the output is a gzip file, it can be used for the web. It tipically produces files 3~8% smaller than zlib, at the cost of being around 80 times slower, so it is only a good idea if you don't need compression on the fly.
*Note that all licence references and agreements mentioned in the hasmin README section above
are relevant to that project's source code only.