Choose a version:
14% The original file has 1032467 bytes (1,008.3k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 144729 bytes (141.3k, 14%).

After GZIP compression these minified files vary in size:
Boot
  59069 bytes (57.7k)
CDN
cdnjs
  51869 bytes (50.7k)
CDN
gzip -6 (default)
  51524 bytes (50.3k)
local copy
unpkg
  51504 bytes (50.3k)
CDN
Google
  51472 bytes (50.3k)
CDN
gzip -9
  51420 bytes (50.2k)
local copy
jsdelivr
  51408 bytes (50.2k)
CDN
libdeflate -12
  49801 bytes (48.6k)
local copy
7zip -mx=9 -tgzip
  49790 bytes (48.6k)
local copy
kzip -s0 -rn -b1
  49786 bytes (48.6k)
local copy
zultra
  49755 bytes (48.6k)
local copy
pigz -11 -n
  49739 bytes (48.6k)
local copy
Zopfli
  49658 bytes (48.5k)
local copy
Zopfli (defluff)
  49656 bytes (48.5k)
local copy

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

You will automatically get the smallest AngularJS 1.4.0 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 1750 bytes by using my AngularJS 1.4.0 Zopfli version instead of the best available CDN (3.52% smaller than jsdelivr, 49658 vs. 51408 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 --mls128 --bsr23 --lazy --ohh

(found November 30, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 128  --mls128
block splitting recursion 23  --bsr23
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 (49656 bytes).

Verify file integrity

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

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

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 59069 bytes 17d1d77a7d0621815853ac3b7f0534d7 May 30, 2015 @ 23:55
cdnjs 51869 bytes 17d1d77a7d0621815853ac3b7f0534d7 May 29, 2015 @ 19:45
unpkg 51504 bytes 17d1d77a7d0621815853ac3b7f0534d7 July 11, 2016 @ 15:53
Google 51472 bytes 17d1d77a7d0621815853ac3b7f0534d7 May 27, 2015 @ 20:25
jsdelivr 51408 bytes 17d1d77a7d0621815853ac3b7f0534d7 June 5, 2015 @ 17:19

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
49658 bytes -4 bytes zopfli --i100000 --mls128 --bsr23 --lazy --ohh November 30, 2015 @ 16:53
49662 bytes -3 bytes zopfli --i10000 --mls256 --bsr12 --lazy --ohh September 18, 2015 @ 06:23
49665 bytes -8 bytes zopfli --i1000 --mls256 --bsr12 --lazy --ohh September 11, 2015 @ 12:45
49673 bytes -7 bytes zopfli --i1000 --mls128 --bsr11 --lazy --ohh September 11, 2015 @ 12:40
49680 bytes -1 byte zopfli --i1000 --mls128 --bsr12 --lazy --ohh September 11, 2015 @ 12:40
49681 bytes -4 bytes zopfli --i10000 --mls512 --bsr16 --lazy --ohh September 8, 2015 @ 04:03
49685 bytes -2 bytes zopfli --i1000 --mls512 --bsr16 --lazy --ohh September 7, 2015 @ 17:34
49687 bytes -5 bytes zopfli --i1000 --mls512 --bsr12 --lazy --ohh September 7, 2015 @ 17:32
49692 bytes -3 bytes zopfli --i1000 --mls512 --bsr4 --lazy --ohh September 7, 2015 @ 17:32
49695 bytes -9 bytes zopfli --i1000 --mls512 --bsr8 --lazy --ohh September 7, 2015 @ 17:32
49704 bytes zopfli --i100 --mls1024 --bsr8 --lazy --ohh September 7, 2015 @ 16:32

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
49719 49683 49718 49720 49719 49720 49720 49710 49710 49717 49722 49722 49723 49703 49716
49699 49687 49707 49686 49688 49685 49682 49696 49689 49704 49699 49703 49703 49708 49710
49711 49706 49705 49720 49697 49709 49672 49692 49693 49693 49695 49704 49703 49705 49707
49681 49673 49702 49679 49675 49701 49677 49690 49681 49700 49707 49691 49703 49679 49703
49683 49676 49697 49676 49677 49704 49701 49682 49690 49689 49703 49692 49702 49681 49705
49680 49679 49673 49671 49677 49677 49689 49684 49688 49702 49697 49705 49691 49680 49705
49707 49679 49697 49689 49704 49692 49699 49689 49687 49692 49704 49692 49692 49678 49716
49679 49674 49680 49667 49675 49691 49665 49682 49691 49690 49692 49692 49703 49681 49705
49677 49678 49674 49678 49671 49697 49674 49658 49684 49696 49700 49693 49703 49704 49704
49705 49705 49678 49714 49674 49675 49675 49691 49691 49691 49691 49693 49703 49680 49704
49678 49680 49672 49680 49678 49674 49689 49682 49692 49695 49692 49693 49703 49683 49704
49675 49673 49674 49675 49677 49678 49677 49683 49682 49695 49691 49691 49692 49680 49705
49710 49674 49678 49679 49679 49675 49671 49671 49681 49700 49698 49693 49692 49680 49703
49682 49671 49672 49685 49681 49673 49671 49679 49679 49693 49695 49692 49703 49681 49715
49680 49672 49673 49674 49682 49676 49673 49682 49680 49693 49698 49692 49704 49714 49704
49679 49674 49683 49674 49677 49676 49673 49693 49692 49696 49694 49689 49692 49680 49705
49695 49673 49682 49712 49678 49678 49689 49690 49691 49695 49690 49689 49703 49680 49706
49680 49676 49680 49706 49678 49689 49674 49683 49683 49694 49695 49693 49690 49690 49704
49677 49675 49705 49679 49681 49676 49673 49683 49682 49694 49692 49702 49692 49680 49705
49712 49675 49677 49719 49675 49677 49658 49682 49691 49691 49698 49692 49703 49679 49703
49677 49678 49682 49674 49680 49675 49671 49690 49682 49694 49697 49689 49703 49663 49705
49679 49673 49681 49714 49675 49676 49672 49690 49681 49693 49697 49689 49691 49680 49705
49680 49703 49697 49711 49709 49678 49675 49691 49683 49694 49691 49705 49702 49679 49693

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 49683 bytes 100%
1,000 49664 bytes -19 bytes 100%
10,000 49662 bytes -2 bytes 100%
100,000 49658 bytes -4 bytes 1.45%
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
49804 bytes +146 bytes (+0.29%) +18 bytes
49786 bytes +128 bytes (+0.26%)
49802 bytes +144 bytes (+0.29%) +16 bytes
49819 bytes +161 bytes (+0.32%) +33 bytes
49830 bytes +172 bytes (+0.35%) +44 bytes
49850 bytes +192 bytes (+0.39%) +64 bytes
49848 bytes +190 bytes (+0.38%) +62 bytes
49834 bytes +176 bytes (+0.35%) +48 bytes
49829 bytes +171 bytes (+0.34%) +43 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 38901 bytes -10757 bytes (-21.66%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 41000 bytes -8658 bytes (-17.44%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 42070 bytes -7588 bytes (-15.28%)
Brotli (Wikipedia) brotli brotli -q 11 45313 bytes -4345 bytes (-8.75%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 46247 bytes -3411 bytes (-6.87%)
LZMA2 (Wikipedia) xz xz -9 46748 bytes -2910 bytes (-5.86%)
Zstandard (Wikipedia) zstd zstd -19 48120 bytes -1538 bytes (-3.10%)

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.