Choose a version:
13% The original file has 949595 bytes (927.3k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 125229 bytes (122.3k, 13%).

After GZIP compression these minified files vary in size:
Boot
  52778 bytes (51.5k)
CDN
Baidu
  46450 bytes (45.4k)
CDN
cdnjs
  46300 bytes (45.2k)
CDN
unpkg
  45994 bytes (44.9k)
CDN
gzip -6 (default)
  45974 bytes (44.9k)
local copy
Google
  45924 bytes (44.8k)
CDN
gzip -9
  45888 bytes (44.8k)
local copy
Yandex
  45886 bytes (44.8k)
CDN
jsdelivr
  45886 bytes (44.8k)
CDN
7zip -mx=9 -tgzip
  44550 bytes (43.5k)
local copy
kzip -s0 -rn -b0
  44495 bytes (43.5k)
local copy
libdeflate -12
  44491 bytes (43.4k)
local copy
zultra
  44486 bytes (43.4k)
local copy
pigz -11 -n
  44446 bytes (43.4k)
local copy
Zopfli
  44406 bytes (43.4k)
local copy
Zopfli (defluff)
  44405 bytes (43.4k)
local copy

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

You will automatically get the smallest AngularJS 1.3.9 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 1480 bytes by using my AngularJS 1.3.9 Zopfli version instead of the best available CDN (3.33% smaller than jsdelivr, 44406 vs. 45886 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 --mls16384 --bsr6 --lazy --ohh

(found November 30, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 16384  --mls16384
block splitting recursion 6  --bsr6
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 (44405 bytes).

Verify file integrity

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

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

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 52778 bytes 44633ce20bcd420672971716aea260b5 March 18, 2015 @ 11:08
cdnjs 46300 bytes 44633ce20bcd420672971716aea260b5 January 18, 2015 @ 08:45
unpkg 45994 bytes 44633ce20bcd420672971716aea260b5 July 11, 2016 @ 15:53
Google 45924 bytes 44633ce20bcd420672971716aea260b5 January 15, 2015 @ 02:27
Yandex 45886 bytes 44633ce20bcd420672971716aea260b5 June 11, 2015 @ 14:17
jsdelivr 45886 bytes 44633ce20bcd420672971716aea260b5 January 18, 2015 @ 00:12

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 46450 bytes 7c1edbf42c316b040ae322af980adc25 only whitespaces differ April 3, 2015 @ 04:57

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
44406 bytes -1 byte zopfli --i100000 --mls16384 --bsr6 --lazy --ohh November 30, 2015 @ 13:21
44407 bytes -3 bytes zopfli --i10000 --mls16384 --bsr6 --lazy --ohh October 13, 2015 @ 23:00
44410 bytes -1 byte zopfli --i10000 --mls8192 --bsr11 --lazy --ohh September 8, 2015 @ 05:45
44411 bytes -3 bytes zopfli --i1000 --mls8192 --bsr11 --lazy --ohh September 7, 2015 @ 17:42
44414 bytes -4 bytes zopfli --i1000 --mls2048 --bsr4 --lazy --ohh September 7, 2015 @ 17:39
44418 bytes -1 byte zopfli --i1000 --mls2048 --bsr6 --lazy --ohh September 7, 2015 @ 17:38
44419 bytes zopfli --i100 --mls8192 --bsr14 --lazy --ohh September 7, 2015 @ 16:54

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
44438 44438 44445 44445 44444 44441 44436 44428 44429 44433 44433 44433 44429 44428 44432
44437 44437 44438 44438 44436 44441 44433 44435 44439 44438 44412 44411 44437 44413 44429
44424 44441 44418 44416 44418 44419 44417 44421 44418 44419 44417 44416 44415 44406 44421
44430 44415 44416 44412 44420 44417 44412 44420 44421 44420 44414 44415 44408 44415 44414
44439 44441 44433 44416 44418 44416 44412 44420 44418 44417 44415 44414 44430 44411 44415
44424 44440 44438 44413 44417 44417 44413 44416 44416 44421 44416 44414 44427 44417 44442
44432 44437 44437 44435 44417 44415 44413 44419 44418 44420 44415 44416 44426 44413 44413
44424 44438 44420 44413 44416 44415 44412 44433 44421 44420 44417 44415 44410 44412 44434
44436 44428 44437 44412 44435 44436 44418 44416 44417 44421 44417 44415 44429 44411 44412
44429 44429 44423 44420 44418 44415 44412 44416 44415 44417 44415 44415 44411 44411 44412
44439 44418 44438 44415 44418 44416 44414 44419 44419 44420 44415 44415 44411 44412 44412
44430 44417 44429 44416 44416 44417 44410 44417 44420 44416 44415 44416 44408 44411 44414
44424 44419 44424 44417 44418 44415 44407 44420 44411 44419 44416 44415 44413 44412 44417
44424 44416 44428 44435 44437 44431 44413 44415 44421 44419 44417 44415 44414 44413 44433
44438 44424 44437 44437 44431 44432 44428 44431 44416 44418 44420 44415 44426 44415 44442
44424 44428 44437 44432 44436 44432 44413 44420 44417 44418 44417 44415 44428 44416 44442
44433 44430 44438 44417 44417 44436 44409 44420 44419 44420 44421 44415 44419 44416 44415
44426 44430 44418 44417 44418 44416 44411 44415 44415 44418 44415 44413 44415 44415 44415
44423 44416 44417 44415 44416 44415 44412 44420 44421 44418 44415 44415 44413 44416 44413
44424 44417 44424 44413 44418 44415 44415 44419 44421 44418 44416 44417 44409 44416 44412
44432 44427 44436 44436 44432 44436 44413 44412 44411 44420 44414 44418 44428 44411 44419
44424 44417 44426 44414 44419 44413 44417 44417 44421 44420 44413 44416 44413 44416 44414
44439 44437 44438 44412 44417 44415 44410 44420 44415 44419 44417 44414 44413 44410 44412

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 44418 bytes 100%
1,000 44410 bytes -8 bytes 100%
10,000 44407 bytes -3 bytes 100%
100,000 44406 bytes -1 byte 0.58%
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
44495 bytes +89 bytes (+0.20%)
44497 bytes +91 bytes (+0.20%) +2 bytes
44530 bytes +124 bytes (+0.28%) +35 bytes
44561 bytes +155 bytes (+0.35%) +66 bytes
44572 bytes +166 bytes (+0.37%) +77 bytes
44602 bytes +196 bytes (+0.44%) +107 bytes
44586 bytes +180 bytes (+0.41%) +91 bytes
44598 bytes +192 bytes (+0.43%) +103 bytes
44621 bytes +215 bytes (+0.48%) +126 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 35454 bytes -8952 bytes (-20.16%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 37023 bytes -7383 bytes (-16.63%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 38876 bytes -5530 bytes (-12.45%)
Brotli (Wikipedia) brotli brotli -q 11 40866 bytes -3540 bytes (-7.97%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 41564 bytes -2842 bytes (-6.40%)
LZMA2 (Wikipedia) xz xz -9 42232 bytes -2174 bytes (-4.90%)
Zstandard (Wikipedia) zstd zstd -19 43362 bytes -1044 bytes (-2.35%)

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.