Choose a version:
23% The original file has 252215 bytes (246.3k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 58604 bytes (57.2k, 23%).

After GZIP compression these minified files vary in size:
Boot
  26681 bytes (26.1k)
CDN
Baidu
  24109 bytes (23.5k)
CDN
cdnjs
  24045 bytes (23.5k)
CDN
gzip -6 (default)
  23970 bytes (23.4k)
local copy
gzip -9
  23937 bytes (23.4k)
local copy
libdeflate -12
  23349 bytes (22.8k)
local copy
7zip -mx=9 -tgzip
  23070 bytes (22.5k)
local copy
zultra
  23016 bytes (22.5k)
local copy
kzip -s0 -rn -b3
  22975 bytes (22.4k)
local copy
pigz -11 -n
  22965 bytes (22.4k)
local copy
Zopfli
  22947 bytes (22.4k)
local copy
Zopfli (defluff)
  22946 bytes (22.4k)
local copy

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

You will automatically get the smallest AngularJS 0.9.4 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 1098 bytes by using my AngularJS 0.9.4 Zopfli version instead of the best available CDN (4.78% smaller than cdnjs, 22947 vs. 24045 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 --i100000 --mb8 --mls4096 --bsr25 --lazy --ohh

(found February 4, 2016)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 4096  --mls4096
block splitting recursion 25  --bsr25
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 1 more byte (22946 bytes).

Verify file integrity

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

MD5:
curl --silent --compressed https://code.angularjs.org/0.9.4/angular-0.9.4.min.js --location | md5sum
fb648bc83c860bb330b0d28c9b85e679  -
curl --silent --compressed https://minime.stephan-brumme.com/files/angularjs/angular-0.9.4.min.zopfli.js.gz | md5sum
fb648bc83c860bb330b0d28c9b85e679  -

SHA1:
curl --silent --compressed https://code.angularjs.org/0.9.4/angular-0.9.4.min.js --location | sha1sum
10c7399077eeed7160042e2680cc932752659ce3  -
curl --silent --compressed https://minime.stephan-brumme.com/files/angularjs/angular-0.9.4.min.zopfli.js.gz | sha1sum
10c7399077eeed7160042e2680cc932752659ce3  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 26681 bytes fb648bc83c860bb330b0d28c9b85e679 March 18, 2015 @ 10:05
cdnjs 24045 bytes fb648bc83c860bb330b0d28c9b85e679 March 28, 2014 @ 14:15

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 24109 bytes 70b26f51d0baef2f053c02b1603c0e37 only whitespaces differ June 5, 2014 @ 10:05

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

Other Versions

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

1.8.2, 1.8.1, 1.8.0,
1.7.9, 1.7.8, 1.7.7, 1.7.6, 1.7.5, 1.7.4, 1.7.3, 1.7.2, 1.7.1, 1.7.0,
1.6.10, 1.6.9, 1.6.8, 1.6.7, 1.6.6, 1.6.5, 1.6.4, 1.6.3, 1.6.2, 1.6.1, 1.6.0,
1.5.11, 1.5.10, 1.5.9, 1.5.8, 1.5.7, 1.5.6, 1.5.5, 1.5.4, 1.5.3, 1.5.2, 1.5.1, 1.5.0,
1.4.14, 1.4.13, 1.4.12, 1.4.11, 1.4.10, 1.4.9, 1.4.8, 1.4.7, 1.4.6, 1.4.5, 1.4.4, 1.4.3, 1.4.2, 1.4.1, 1.4.0,
1.3.20, 1.3.19, 1.3.18, 1.3.17, 1.3.16, 1.3.15, 1.3.14, 1.3.13, 1.3.12, 1.3.11, 1.3.10, 1.3.9, 1.3.8, 1.3.7, 1.3.6, 1.3.5, 1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3.0,
1.2.32, 1.2.31, 1.2.30, 1.2.29, 1.2.28, 1.2.27, 1.2.26, 1.2.25, 1.2.24, 1.2.23, 1.2.22, 1.2.21, 1.2.20, 1.2.19, 1.2.18, 1.2.17, 1.2.16, 1.2.15, 1.2.14, 1.2.13, 1.2.12, 1.2.11, 1.2.10, 1.2.9, 1.2.8, 1.2.7, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0,
1.1.5, 1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1.0,
1.0.8, 1.0.7, 1.0.6, 1.0.5, 1.0.4, 1.0.3, 1.0.2, 1.0.1, 1.0.0,
0.10.6, 0.10.5, 0.10.4, 0.10.3, 0.10.2, 0.10.1, 0.10.0,
0.9.19, 0.9.18, 0.9.17, 0.9.16, 0.9.15, 0.9.14, 0.9.13, 0.9.12, 0.9.11, 0.9.10, 0.9.9, 0.9.8, 0.9.7, 0.9.6, 0.9.5, 0.9.4, 0.9.3, 0.9.2, 0.9.1, 0.9.0

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

Changelog

Best Zopfli parameters so far:
Size Improvement Parameters Found
22947 bytes -1 byte zopfli --i100000 --mls4096 --bsr25 --lazy --ohh February 4, 2016 @ 21:36
22948 bytes -1 byte zopfli --i10000 --mls4096 --bsr9 --lazy --ohh February 4, 2016 @ 12:24
22949 bytes -1 byte zopfli --i10000 --mls64 --bsr22 --lazy --ohh October 14, 2015 @ 12:17
22950 bytes -1 byte zopfli --i1000 --mls4096 --bsr11 --lazy --ohh September 7, 2015 @ 21:49
22951 bytes -1 byte zopfli --i1000 --mls8192 --bsr4 --lazy --ohh September 7, 2015 @ 21:48
22952 bytes -1 byte zopfli --i1000 --mls2048 --bsr14 --lazy --ohh September 7, 2015 @ 21:44
22953 bytes -4 bytes zopfli --i1000 --mls512 --bsr10 --lazy --ohh September 7, 2015 @ 21:42
22957 bytes -2 bytes zopfli --i1000 --mls512 --bsr6 --lazy --ohh September 7, 2015 @ 21:42
22959 bytes zopfli --i100 --mls8192 --bsr8 --lazy --ohh September 7, 2015 @ 16:11

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 or 100,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
22969 22968 22966 22960 22962 22968 22968 22970 22979 22985 22982 22979 22977 22980 22976
22950 22953 22949 22977 22977 22975 22972 22968 22961 22963 22958 22964 22949 22973 22980
22953 22958 22956 22965 22966 22965 22971 22953 22955 22952 22960 22958 22953 22967 22962
22959 22958 22951 22955 22950 22955 22951 22952 22964 22961 22952 22950 22965 22964 22973
22953 22953 22954 22957 22956 22961 22963 22960 22963 22958 22959 22951 22948 22965 22965
22955 22952 22960 22953 22953 22956 22953 22960 22960 22951 22947 22948 22951 22963 22967
22956 22951 22951 22951 22952 22956 22950 22952 22951 22954 22956 22952 22950 22958 22965
22957 22950 22951 22951 22950 22951 22950 22958 22953 22947 22950 22948 22950 22957 22956
22952 22951 22955 22952 22955 22956 22951 22952 22960 22954 22958 22950 22951 22957 22965
22954 22953 22949 22953 22952 22952 22951 22956 22954 22958 22953 22951 22951 22965 22969
22954 22951 22951 22952 22954 22949 22951 22954 22954 22954 22950 22955 22965 22956 22966
22964 22958 22958 22955 22952 22951 22950 22952 22951 22956 22950 22952 22963 22958 22964
22954 22953 22951 22951 22952 22958 22960 22951 22967 22953 22951 22954 22951 22958 22964
22959 22954 22949 22953 22952 22956 22950 22957 22953 22955 22953 22952 22951 22963 22967
22955 22951 22951 22953 22951 22951 22955 22952 22954 22951 22950 22953 22952 22959 22968
22955 22954 22955 22953 22952 22955 22951 22953 22953 22956 22950 22950 22952 22959 22967
22955 22954 22951 22952 22954 22953 22952 22953 22954 22955 22951 22950 22959 22963 22968
22954 22952 22952 22954 22952 22952 22952 22953 22954 22953 22952 22951 22955 22960 22967
22953 22956 22951 22953 22953 22949 22955 22953 22954 22955 22953 22959 22958 22958 22968
22953 22953 22950 22951 22955 22951 22951 22953 22953 22954 22950 22948 22952 22963 22967
22956 22955 22951 22950 22954 22956 22951 22952 22954 22954 22952 22947 22958 22958 22968
22962 22962 22948 22953 22952 22949 22951 22953 22953 22951 22953 22950 22951 22958 22964
22953 22955 22951 22953 22950 22955 22951 22950 22953 22952 22951 22952 22951 22958 22965

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 22959 bytes 100%
1,000 22950 bytes -9 bytes 100%
10,000 22948 bytes -2 bytes 100%
100,000 22947 bytes -1 byte 4.35%
1,000,000
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
23035 bytes +88 bytes (+0.38%) +60 bytes
23441 bytes +494 bytes (+2.15%) +466 bytes
23038 bytes +91 bytes (+0.40%) +63 bytes
22975 bytes +28 bytes (+0.12%)
22989 bytes +42 bytes (+0.18%) +14 bytes
23003 bytes +56 bytes (+0.24%) +28 bytes
23038 bytes +91 bytes (+0.40%) +63 bytes
23068 bytes +121 bytes (+0.53%) +93 bytes
23081 bytes +134 bytes (+0.58%) +106 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 - but your browser doesn't support it.
Algorithm Program Parameters Size Compared To Best Zopfli
ZPAQ (Wikipedia) zpaq zpaq -method 69 20165 bytes -2782 bytes (-12.12%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 20680 bytes -2267 bytes (-9.88%)
Brotli (Wikipedia) brotli brotli -q 11 21314 bytes -1633 bytes (-7.12%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 21696 bytes -1251 bytes (-5.45%)
LZMA2 (Wikipedia) xz xz -9 22544 bytes -403 bytes (-1.76%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 23177 bytes +230 bytes (+1.00%)
Zstandard (Wikipedia) zstd zstd -19 23201 bytes +254 bytes (+1.11%)

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.