Choose a version:
28% The original file has 1871329 bytes (1,827.5k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 532240 bytes (519.8k, 28%).

After GZIP compression these minified files vary in size:
Boot
  164368 bytes (160.5k)
CDN
cdnjs
  134044 bytes (130.9k)
CDN
gzip -6 (default)
  132219 bytes (129.1k)
local copy
gzip -9
  131688 bytes (128.6k)
local copy
7zip -mx=9 -tgzip
  127118 bytes (124.1k)
local copy
zultra
  127051 bytes (124.1k)
local copy
libdeflate -12
  126951 bytes (124.0k)
local copy
pigz -11 -n
  126902 bytes (123.9k)
local copy
kzip -s0 -rn -b5
  126693 bytes (123.7k)
local copy
Zopfli
  126642 bytes (123.7k)
local copy
Zopfli (defluff)
  126639 bytes (123.7k)
local copy

perma-link to the smallest file on my server:
http://minime.stephan-brumme.com/files/ember/ember-2.12.1.min.js (or via HTTPS)

You will automatically get the smallest Ember 2.12.1 file, ETag caching is available and
if your browser doesn't support GZIP decompression then the uncompressed version will be sent.

Currently best Zopfli settings

Save 7402 bytes by using my Ember 2.12.1 Zopfli version instead of the best available CDN (5.84% smaller than cdnjs, 126642 vs. 134044 bytes):
You can use my super-compressed files for whatever purpose you like as long as you respect the library's original license agreement.
There are no restrictions from my side - but please avoid hot-linking if you run a high-traffic website.

These command-line settings yielded the best compression ratio so far (Linux version of zopfli-krzymod):
zopfli --i1000000 --mb8 --mls16384 --bsr19 --lazy --ohh

(found April 13, 2017)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 16384  --mls16384
block splitting recursion 19  --bsr19
lazy matching in LZ77 yes  --lazy
optimized Huffman headers yes  --ohh
initial random W for iterations 1  --rw1
initial random Z for iterations 2  --rz2

Even Smaller Files Thanks To Defluff

Zopfli's output can be further optimized by the defluff tool.
In this particular case, defluff saves 3 more bytes (126639 bytes).

Verify file integrity

After decompression, my uncompressed files are identical to the original ones:

MD5:
curl --silent --compressed https://builds.emberjs.com/tags/v2.12.1/ember.min.js --location | md5sum
348f82e8aab37692890e2fc93efb09c0  -
curl --silent --compressed https://minime.stephan-brumme.com/files/ember/ember-2.12.1.min.zopfli.js.gz | md5sum
348f82e8aab37692890e2fc93efb09c0  -

SHA1:
curl --silent --compressed https://builds.emberjs.com/tags/v2.12.1/ember.min.js --location | sha1sum
62fd7e92916cabb985aea837355a4d8ffb08b15d  -
curl --silent --compressed https://minime.stephan-brumme.com/files/ember/ember-2.12.1.min.zopfli.js.gz | sha1sum
62fd7e92916cabb985aea837355a4d8ffb08b15d  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 164368 bytes 348f82e8aab37692890e2fc93efb09c0 April 12, 2017 @ 22:48
cdnjs 134044 bytes 348f82e8aab37692890e2fc93efb09c0 April 8, 2017 @ 00:18

Note: only the MD5 hashes are shown to keep things simple.

Other Versions

Available Ember versions at minime.stephan-brumme.com:

3.0.0,
2.18.2, 2.18.1, 2.18.0,
2.17.2, 2.17.1, 2.17.0,
2.16.2, 2.16.1, 2.16.0,
2.15.3, 2.15.2, 2.15.1, 2.15.0,
2.14.1, 2.14.0,
2.13.4, 2.13.3, 2.13.2, 2.13.1, 2.13.0,
2.12.2, 2.12.1, 2.12.0,
2.11.3, 2.11.2, 2.11.1, 2.11.0,
2.10.2, 2.10.1, 2.10.0,
2.9.1, 2.9.0,
2.8.3, 2.8.2, 2.8.1, 2.8.0,
2.7.3, 2.7.2, 2.7.1, 2.7.0,
2.6.2, 2.6.1, 2.6.0,
2.5.1, 2.5.0,
2.4.6, 2.4.5, 2.4.4, 2.4.3, 2.4.2, 2.4.1, 2.4.0,
2.3.1, 2.3.0,
2.2.2, 2.2.1, 2.2.0,
2.1.2, 2.1.1, 2.1.0,
2.0.3, 2.0.2, 2.0.1, 2.0.0,
1.13.13, 1.13.12, 1.13.11, 1.13.10, 1.13.9, 1.13.8, 1.13.7, 1.13.6, 1.13.5, 1.13.4, 1.13.3, 1.13.2, 1.13.1, 1.13.0,
1.12.2, 1.12.1, 1.12.0,
1.11.4, 1.11.3, 1.11.2, 1.11.1, 1.11.0,
1.10.1, 1.10.0,
1.9.1, 1.9.0,
1.8.1, 1.8.0,
1.7.1, 1.7.0,
1.6.1, 1.6.0,
1.5.1, 1.5.0,
1.4.0,
1.3.2, 1.3.1, 1.3.0,
1.2.2, 1.2.1, 1.2.0,
1.0.1, 1.0.0

The project site contains an overview how well these versions were compressed.
Other interesting projects are AngularJS, BackboneJS, Bootstrap, D3, Dojo, jQuery, Knockout, lodash, React, Socket.IO, ThreeJS, UnderscoreJS and Vue.

Changelog

Best Zopfli parameters so far:
Size Improvement Parameters Found
126642 bytes -1 byte zopfli --i1000000 --mls16384 --bsr19 --lazy --ohh April 13, 2017 @ 04:57
126643 bytes -1 byte zopfli --i100000 --mls16384 --bsr19 --lazy --ohh April 11, 2017 @ 19:42
126644 bytes -4 bytes zopfli --i100000 --mls16384 --bsr4 --lazy --ohh April 11, 2017 @ 16:41
126648 bytes -2 bytes zopfli --i10000 --mls16384 --bsr4 --lazy --ohh April 11, 2017 @ 13:54
126650 bytes -3 bytes zopfli --i10000 --mls16384 --bsr17 --lazy --ohh April 11, 2017 @ 13:53
126653 bytes -7 bytes zopfli --i1000 --mls16384 --bsr4 --lazy --ohh April 11, 2017 @ 10:48
126660 bytes -3 bytes zopfli --i1000 --mls16384 --bsr19 --lazy --ohh April 11, 2017 @ 10:47
126663 bytes -27 bytes zopfli --i1000 --mls16384 --bsr23 --lazy --ohh April 11, 2017 @ 10:47
126690 bytes zopfli --i100 --mls16384 --bsr4 --lazy --ohh April 10, 2017 @ 13:50

If there are multiple parameter sets yielding the same compressed size, only the first one found is shown.

Most recent activity on July 20, 2020 @ 12:51.

Heatmaps

This Zopfli heatmap visualizes how compression changes when modifying the --bsr and --mls parameter.
Cell's contents is the best filesize achieved (in bytes, hover with mouse over cells to see number of iterations).

Good parameters are green, bad are red. The best and worst are bold as well.
The brightness of the blue background color indicates how many iterations were processed:
10,000, 100,000 or 1,000,000.
bsr \ mls
2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
bsr \ mls
2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
126793 126793 126805 126795 126797 126798 126796 126796 126765 126746 126772 126797 126793 126695 126797
126700 126689 126755 126795 126797 126697 126796 126796 126757 126670 126655 126705 126793 126644 126797
126688 126686 126725 126719 126719 126719 126720 126722 126706 126656 126681 126659 126721 126699 126719
126691 126690 126698 126727 126719 126695 126727 126727 126685 126656 126659 126660 126793 126663 126717
126674 126694 126718 126719 126719 126719 126722 126727 126689 126657 126663 126700 126694 126661 126718
126687 126694 126691 126718 126719 126727 126727 126727 126686 126656 126651 126688 126693 126651 126717
126687 126687 126718 126718 126724 126727 126722 126747 126689 126672 126672 126658 126689 126653 126718
126686 126689 126719 126720 126729 126716 126717 126721 126693 126683 126658 126655 126687 126655 126717
126718 126684 126716 126718 126720 126720 126722 126727 126704 126685 126669 126662 126691 126698 126718
126730 126729 126719 126718 126719 126719 126727 126721 126762 126698 126679 126656 126691 126657 126718
126717 126691 126690 126719 126688 126694 126722 126721 126704 126693 126673 126658 126719 126656 126717
126730 126686 126703 126727 126717 126703 126730 126727 126696 126697 126654 126656 126692 126657 126720
126722 126688 126718 126723 126721 126703 126719 126721 126687 126663 126680 126659 126719 126657 126718
126727 126701 126704 126730 126701 126706 126728 126721 126705 126672 126692 126657 126691 126645 126717
126727 126687 126698 126727 126717 126716 126721 126721 126694 126673 126670 126663 126692 126705 126717
126690 126687 126693 126720 126717 126721 126720 126747 126703 126702 126685 126658 126654 126642 126718
126718 126719 126718 126728 126717 126729 126729 126727 126708 126674 126672 126658 126691 126705 126722
126727 126691 126699 126730 126719 126705 126727 126721 126686 126720 126671 126659 126688 126658 126717
126692 126723 126693 126718 126703 126689 126721 126722 126685 126685 126670 126658 126688 126657 126717
126719 126723 126687 126719 126722 126719 126722 126720 126694 126662 126672 126657 126691 126660 126717
126687 126690 126718 126719 126719 126692 126722 126721 126701 126678 126670 126659 126692 126658 126717
126688 126687 126722 126718 126721 126692 126722 126718 126705 126676 126671 126658 126690 126656 126718
126686 126685 126723 126720 126683 126684 126721 126721 126692 126674 126659 126660 126657 126654 126718

Due to the Monte Carlo design of my search algorithm, not all parameters have reached the same number of iterations yet:
Iterations Min. Bytes Reduction Coverage
100 126690 bytes 100%
1,000 126653 bytes -37 bytes 100%
10,000 126648 bytes -5 bytes 100%
100,000 126643 bytes -5 bytes 0.87%
1,000,000 126642 bytes -1 byte 0.29%
10,000,000

KZIP has far less options available for tuning/optimization. I only played around with the number of blocks (parameter -n):
Blocks Min. Bytes Compared To Best Zopfli Compared To Best KZIP
126748 bytes +106 bytes (+0.08%) +55 bytes
126762 bytes +120 bytes (+0.09%) +69 bytes
126793 bytes +151 bytes (+0.12%) +100 bytes
126789 bytes +147 bytes (+0.12%) +96 bytes
126740 bytes +98 bytes (+0.08%) +47 bytes
126693 bytes +51 bytes (+0.04%)
126748 bytes +106 bytes (+0.08%) +55 bytes
126773 bytes +131 bytes (+0.10%) +80 bytes
126823 bytes +181 bytes (+0.14%) +130 bytes

Non-DEFLATE Algorithms

Archivers based on completely different compression algorithms often produce superior results.
Unfortunately, browsers only support gzip compression at the moment.
However, support for Brotli is constantly growing - for example, your browser actually supports it !
Algorithm Program Parameters Size Compared To Best Zopfli
ZPAQ (Wikipedia) zpaq zpaq -method 69 85688 bytes -40954 bytes (-32.34%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 92719 bytes -33923 bytes (-26.79%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 96477 bytes -30165 bytes (-23.82%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 106379 bytes -20263 bytes (-16.00%)
Brotli (Wikipedia) brotli brotli -q 11 110043 bytes -16599 bytes (-13.11%)
LZMA2 (Wikipedia) xz xz -9 111960 bytes -14682 bytes (-11.59%)
Zstandard (Wikipedia) zstd zstd -19 115397 bytes -11245 bytes (-8.88%)

Detailled Analysis

I wrote a DEFLATE decoder in Javascript. Click the button below to start a client-side analysis of the smallest gzipped files (may take a second):


Notes: pigz is a fast open source multi-threaded implementation of gzip written by one of the original authors of gzip.
However, when using compression level 11, pigz actually switches to the slower Zopfli algorithm and isn't multi-threaded anymore.
KrzyMOD's extensions to Zopfli offer the highest level of configuration and is therefore used for my brute-force search.
Ken Silverman wrote the closed-source KZIP compression program and Jonathon Fowler ported it to Linux.
Defluff was created by Joachim Henke; DeflOpt is a tool by Ben Jos Walbeehm.

website made by Stephan Brumme in 2015 and still improving in 2024.
all timestamps are displayed in central european time. see my changelog.
no flash, not even images or external css files - and everything squeezed into a single html file.
which was handsomely compressed before releasing it into the wild internet - obviously.

please visit my homepage and my blog, too.
email: minime (at) stephan-brumme.com

All trademarks are property of their respective owners. You know, the boring legal stuff.