Python CSS/Javascript minifier
Python JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
.gitignore Clean up some code Jan 8, 2013
LICENCE.txt Added licence and documentation Dec 31, 2011

Squeezeit - Python CSS and Javascript minifier Copyright (C) 2011 Sam Rudge

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see


Squeezeit is a small Python utility to scratch my own personal itch. It attempts to provide a lot of the features of the Rails asset pipeline with regards to combining and minifying bundles of Javascript and CSS files, pre-compressing .gz versions of files and simplifying management of site media.

Make shit happen

Download, install and run squeezeit /path/to/config.yaml (see below)


Squeezeit is configured through the use of YAML files. There are two types of YAML file needed for squeezeit to run;

Main config.yaml

Specifies the main configuration options for the bundler, such as source directories and output directories.

#Main bundle config
#All paths are relative to this file

#Logging level (Standard Python logging levels: DEBUG, INFO, WARNING or CRITICAL)
logging: INFO

#Specify the directory for bundle YAML files (The files that specify your bundles and their contents)
bundles: ./config/

#Where to output the bundles and bundle info file
output: ./bundles/

#Source files
css: ./css/
javascript: ./js/

#Bundle names include MD5 hash of contents (E.G. [bundlename]-[md5 hash].js - See bundle info file)
hashfilenames: true

Bundle configuration files

These are YAML files in the 'bundles' directory specified above. A bundle config file contains all the media that should be included with a particular bundle. Output bundles will be named the same as the YAML file (so media.yaml will output media.js, media.css etc.)

#Paths are relative to the 'source file' directories specified in the main config file
        - clear.css
        - fonts.css
        - bootstrap.css
        - main.css
        - jquery/core.js #Oh, you can use sub-folders too
        - main.js

All bundles will output 6 (or 3) files;

  • bundlename.js/css - Combined but not minified files, this is the same as cat file1.js file2.js >> bundle.js
  • bundlename.min.js/css - Combined and minified versions of the files. JS minification is done using JSMin and CSS minification is done using slimmer
  • bundlename.min.js/css.gz - Combined, minified and GZipped version of the file.

You don't have to include both javascript and CSS in a bundle, just leave the array blank in the bundle config file

Bundle info file

The bundler outputs a 'bundle info file' to output-directory/info.yaml. The bundle info file contains information about the sizes of the bundles, and their MD5 has (useful for using MD5 in filenames).

        md5: 3c716f5993efd3257fe17b219c6b6ecd #MD5 is generated from the combined data, before it's minified
        output: {
            gz: media-3c716f5993efd3257fe17b219c6b6ecd.min.css.gz,
            min: media-3c716f5993efd3257fe17b219c6b6ecd.min.css,
            raw: media-3c716f5993efd3257fe17b219c6b6ecd.css
        size: {
            gz: 328,
            min: 704,
            raw: 821
        md5: 9581d699b54badf07d4e1f60f77dca7d
        output: {
            gz: media-9581d699b54badf07d4e1f60f77dca7d.min.js.gz,
            min: media-9581d699b54badf07d4e1f60f77dca7d.min.js,
            raw: media-9581d699b54badf07d4e1f60f77dca7d.js
        size: {
            gz: 33142,
            min: 93837,
            raw: 93939

If ether Javascript or CSS source files are not specified in the bundle, the value of 'md5' will be set to false (md5: false) so you can detect that from your code.

It wasn't all me

Squeezeit includes two excellent libraries to do it's work (on top of the standard Python ones);

  • - By Douglas Crockford and Dave St.Germain
  • Slimmer - By Peter Bengtsson

Other cool things to check out;

  • PNGCrush - Great at optimising images and stuff