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

After GZIP compression these minified files vary in size:
Boot
  52794 bytes (51.6k)
CDN
Baidu
  46420 bytes (45.3k)
CDN
cdnjs
  46284 bytes (45.2k)
CDN
unpkg
  45997 bytes (44.9k)
CDN
gzip -6 (default)
  45973 bytes (44.9k)
local copy
Google
  45917 bytes (44.8k)
CDN
gzip -9
  45883 bytes (44.8k)
local copy
Yandex
  45880 bytes (44.8k)
CDN
7zip -mx=9 -tgzip
  44511 bytes (43.5k)
local copy
kzip -s0 -rn -b0
  44469 bytes (43.4k)
local copy
zultra
  44465 bytes (43.4k)
local copy
libdeflate -12
  44456 bytes (43.4k)
local copy
pigz -11 -n
  44416 bytes (43.4k)
local copy
Zopfli
  44377 bytes (43.3k)
local copy
Zopfli (defluff)
  44375 bytes (43.3k)
local copy

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

You will automatically get the smallest AngularJS 1.3.8 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 1503 bytes by using my AngularJS 1.3.8 Zopfli version instead of the best available CDN (3.39% smaller than Yandex, 44377 vs. 45880 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 --mls8192 --bsr10 --lazy --ohh

(found November 30, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 8192  --mls8192
block splitting recursion 10  --bsr10
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 2 more bytes (44375 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.8/angular.min.js --location | md5sum
c5135af99d2b3ad249473e6ded1dfb61  -
curl --silent --compressed https://minime.stephan-brumme.com/files/angularjs/angular-1.3.8.min.zopfli.js.gz | md5sum
c5135af99d2b3ad249473e6ded1dfb61  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 52794 bytes c5135af99d2b3ad249473e6ded1dfb61 March 18, 2015 @ 11:07
cdnjs 46284 bytes c5135af99d2b3ad249473e6ded1dfb61 December 28, 2014 @ 03:30
unpkg 45997 bytes c5135af99d2b3ad249473e6ded1dfb61 July 11, 2016 @ 15:53
Google 45917 bytes c5135af99d2b3ad249473e6ded1dfb61 December 19, 2014 @ 23:24
Yandex 45880 bytes c5135af99d2b3ad249473e6ded1dfb61 June 11, 2015 @ 14:17

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 46420 bytes d8f338d43806adcfa79f500b87e476bc 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
44377 bytes -2 bytes zopfli --i100000 --mls8192 --bsr10 --lazy --ohh November 30, 2015 @ 12:14
44379 bytes -2 bytes zopfli --i10000 --mls8192 --bsr10 --lazy --ohh September 8, 2015 @ 06:19
44381 bytes -2 bytes zopfli --i10000 --mls1024 --bsr13 --lazy --ohh September 8, 2015 @ 05:59
44383 bytes -3 bytes zopfli --i1000 --mls8192 --bsr4 --lazy --ohh September 7, 2015 @ 17:44
44386 bytes -1 byte zopfli --i1000 --mls2048 --bsr9 --lazy --ohh September 7, 2015 @ 17:44
44387 bytes -1 byte zopfli --i1000 --mls1024 --bsr13 --lazy --ohh September 7, 2015 @ 17:43
44388 bytes -1 byte zopfli --i1000 --mls512 --bsr16 --lazy --ohh September 7, 2015 @ 17:42
44389 bytes -3 bytes zopfli --i1000 --mls1024 --bsr9 --lazy --ohh September 7, 2015 @ 17:42
44392 bytes -10 bytes zopfli --i1000 --mls512 --bsr8 --lazy --ohh September 7, 2015 @ 17:42
44402 bytes zopfli --i100 --mls8192 --bsr13 --lazy --ohh September 7, 2015 @ 16:06

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:52.

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
44406 44406 44404 44410 44410 44408 44413 44412 44399 44402 44403 44403 44397 44397 44389
44405 44404 44405 44405 44407 44405 44399 44402 44406 44406 44384 44388 44380 44380 44410
44392 44386 44391 44389 44390 44389 44387 44388 44390 44386 44401 44386 44384 44384 44393
44386 44408 44388 44387 44387 44387 44386 44381 44387 44382 44385 44387 44396 44386 44383
44410 44388 44392 44386 44389 44386 44389 44382 44389 44393 44387 44388 44403 44380 44399
44386 44404 44394 44387 44388 44387 44381 44383 44388 44383 44383 44387 44380 44385 44399
44395 44419 44399 44386 44387 44387 44389 44382 44390 44387 44385 44388 44377 44382 44395
44408 44421 44390 44388 44388 44388 44386 44397 44387 44385 44392 44384 44380 44381 44413
44392 44422 44406 44390 44387 44383 44386 44386 44388 44387 44387 44387 44381 44383 44415
44388 44407 44394 44387 44387 44387 44386 44381 44389 44381 44386 44384 44379 44380 44421
44392 44386 44391 44387 44387 44387 44386 44381 44387 44381 44386 44383 44380 44381 44414
44392 44422 44391 44386 44385 44388 44388 44385 44387 44382 44382 44387 44380 44386 44380
44386 44386 44390 44386 44387 44387 44387 44384 44384 44387 44386 44386 44382 44384 44386
44410 44386 44393 44405 44405 44406 44403 44397 44387 44382 44386 44387 44380 44380 44395
44392 44385 44403 44405 44399 44396 44403 44397 44389 44382 44388 44383 44377 44380 44397
44398 44385 44408 44405 44405 44396 44387 44396 44387 44385 44386 44387 44377 44382 44420
44385 44408 44395 44403 44387 44397 44387 44381 44389 44384 44390 44392 44379 44380 44391
44388 44392 44392 44388 44388 44388 44387 44383 44389 44384 44381 44387 44377 44381 44383
44392 44389 44392 44388 44387 44386 44384 44386 44388 44382 44384 44387 44381 44382 44381
44392 44388 44393 44388 44390 44387 44389 44387 44388 44385 44387 44392 44382 44380 44384
44406 44411 44405 44403 44406 44406 44396 44391 44383 44385 44387 44389 44379 44382 44417
44392 44387 44391 44389 44386 44386 44389 44385 44387 44385 44386 44387 44379 44381 44383
44393 44386 44406 44386 44387 44386 44389 44381 44387 44385 44386 44383 44377 44380 44394

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 44402 bytes 100%
1,000 44383 bytes -19 bytes 100%
10,000 44378 bytes -5 bytes 100%
100,000 44377 bytes -1 byte 1.74%
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
44469 bytes +92 bytes (+0.21%)
44469 bytes +92 bytes (+0.21%)
44494 bytes +117 bytes (+0.26%) +25 bytes
44522 bytes +145 bytes (+0.33%) +53 bytes
44535 bytes +158 bytes (+0.36%) +66 bytes
44560 bytes +183 bytes (+0.41%) +91 bytes
44546 bytes +169 bytes (+0.38%) +77 bytes
44556 bytes +179 bytes (+0.40%) +87 bytes
44583 bytes +206 bytes (+0.46%) +114 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 35467 bytes -8910 bytes (-20.08%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 37047 bytes -7330 bytes (-16.52%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 38888 bytes -5489 bytes (-12.37%)
Brotli (Wikipedia) brotli brotli -q 11 40783 bytes -3594 bytes (-8.10%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 41593 bytes -2784 bytes (-6.27%)
LZMA2 (Wikipedia) xz xz -9 42252 bytes -2125 bytes (-4.79%)
Zstandard (Wikipedia) zstd zstd -19 43347 bytes -1030 bytes (-2.32%)

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.