# 14.4.0

update `string_decoder` to 1.0.0, which matches the latest node.js behavior more closely.

https://github.com/substack/node-browserify/pull/1714

# 14.3.0

update `https-browserify` to 1.0.0, which matches node.js behavior more closely.

- throw exception if non-https URL is passed to `https.request` or `https.get`
- support passing string URL as first argument to `https.request` and `https.get`

https://github.com/substack/node-browserify/pull/1710

# 14.2.0

adds a --transform-key flag to the command-line tool

https://github.com/substack/node-browserify/pull/1709

# 14.1.0

writes to a temp outfile until success

Previously, browserify would overwrite output files when an error occurs.

https://github.com/substack/node-browserify/pull/1673
https://github.com/substack/node-browserify/issues/899

# 14.0.0

Updates the version of the buffer package, which drops support for IE8-10.

buffer v5 removes the `Object` implementation and relies on a single,
fast Typed Array (`Uint8Array`) implementation, greatly simplifying the
maintanence of the buffer package.

If IE8-10 support is critical to your web app, you can continue to rely on
browserify v13, or see the PR for other workarounds.

https://github.com/substack/node-browserify/pull/1678

# 13.3.0

updates the version for the assert package

https://github.com/substack/node-browserify/pull/1611

# 13.2.0

allow configuring transformKey from module-deps
https://github.com/substack/node-browserify/pull/1670

# 13.1.1

boost performance by memoizing calls to path.relative()

https://github.com/substack/node-browserify/pull/1544

# 13.1.0

exposes `opts.dedupe` and `--no-deupe` to optionally turn off deduping behavior:
[#1581](https://github.com/substack/node-browserify/pull/1581)

# 13.0.1

## Internal

[#1552](https://github.com/substack/node-browserify/pull/1552), [#1555](https://github.com/substack/node-browserify/pull/1555): Use native `Array.isArray` and drop `isarray` dep. ([@kt3k](https://github.com/kt3k))

# 13.0.0

This release bumps the [`buffer`](https://www.npmjs.com/package/buffer) dependency
to v4, which has one possible breaking change:

- The `buffer.toArrayBuffer()` method on `Buffer` instances has been removed.

(This is probably not a problem for 99.9% of users.)

This API was added in node v0.11.8 and
[removed before v0.12 was released](https://github.com/nodejs/node-v0.x-archive/issues/7609#issuecomment-42903457).
It was added to browserify's `buffer` implementation but was never removed when v0.12
 was released. `buffer` v4 removes it so we have full parity with node.js.

Going forward, to get an `ArrayBuffer` from a node.js-style `Buffer`, users should
just use `buffer.buffer`. This works because `Buffer` is a subclass of `Uint8Array`
in both the browser and node.js (since v3).

On the plus side, this release also includes:

- Performance improvements to `buffer` that
[increase the speed](https://github.com/feross/buffer/pull/92) of some buffer
methods by as much as 30%!

# 12.0.2

normalizes module paths on windows to consistently use `/`

https://github.com/substack/node-browserify/pull/1424#issuecomment-170143099

# 12.0.1

adds the previously failing tests and a small change necessary for transforms to
be applied properly for symlinked packages

https://github.com/substack/node-browserify/pull/1392

# 12.0.0

Node support changes: now testing against the latest node (currently 4.2.1).
node 0.8 is no longer supported, and iojs isn't actively tested.

Stream3 everywhere! Everything has been updated to use streams3.

Sourcemaps charset now uses an `=` instead of a `:`. This fixes certain issues
with Chinese characters in sourcemaps. See #753.

module-deps has been updated to fix root transforms on symlinked modules. See
https://github.com/substack/module-deps/pull/99.

stream-http, the module that provides `http` support, dropped IE8 support. If
you depend on this, see https://github.com/jhiesey/stream-http#ie8-note.

Removed `builtins` and `commondir` – both unused dependencies.

# 11.2.0

When `bundleExternal` is set to `false`, `process` and `buffer` are now correctly excluded. Also, using `--igv` via the CLI now works. That also means that `--bare` and `--node` actually insert `__filename` and `__dirname`.

https://github.com/substack/node-browserify/pull/1361

# 11.1.0

adds a `'.'` to extensions if it wasn't added

https://github.com/substack/node-browserify/pull/1380

# 11.0.1

The callback form of bundle() uses the returned output stream instead of the
pipeline so that the `'end'` event will fire on the bundle instance.

https://github.com/substack/watchify/pull/249#issuecomment-126061169

# 11.0.0

## streams3

The [`readable-stream`](https://npmjs.com/package/readable-stream) dependency was updated to `^2.0.0`. This package is inserted into bundles as `require('stream')`. Bundles will now get the latest streams implementation from io.js/node.js core, instead of an old version from node.js 0.11.x. Go forth and stream ALL THE DATA without fear!

## shiny new HTTP package

[John Hiesey](https://github.com/jhiesey) rewrote the [http-browserify](https://npmjs.org/package/http-browserify) package
to create [stream-http](https://npmjs.org/package/stream-http), an implemention of `http` that supports streaming in modern browsers. Before v11.0.0, in most situations when you used `http.get` or `http.request`, the entire request would buffer in memory until the download was complete, and a single `'data'` event was emitted with the entire response as a string.

`stream-http` uses the [Fetch API](https://fetch.spec.whatwg.org/) and various browser-specific XHR extensions to make binary streaming http requests work in as many browsers as possible.

The following browsers support true streaming, where only a small amount of the request has to be held in memory at once:

* Chrome >= 43 (using the `fetch` api)
* Firefox >= 9 (using `moz-chunked-arraybuffer` responseType with XHR)

The following browsers support pseudo-streaming, where the data is available before the request finishes, but the entire response must be held in memory:

* Safari >= 5
* IE >= 10
* Most other Webkit-based browsers, including the default Android browser

Older browsers will work, without streaming support. There is no support for IE6 or IE7.

Compared to `http-browserify`, it is not necessary to set `options.responseType`. The `responseType` property of the XHR object will be set automatically depending on what features are detected in the browser (although see `options.mode` in the [readme](https://github.com/jhiesey/stream-http) to see how you can optimize this choice manually).

The `response` is a streams3 stream, so all data is passed as `Buffer`s, unlike the variable types provided by the `'data'` event in `http-browserify`. This behavior tries to mimic the node core `http` module as closely as possible.

* [#1327](https://github.com/substack/node-browserify/pull/1327)

If you're brave, go ahead and give v11.0.0 a try today!

# 10.2.6

uses the non-sync version of fs.realpath

# 10.2.5

fixes an issue with symlinked files executing multiple times

https://github.com/substack/node-browserify/issues/1063
https://github.com/substack/node-browserify/pull/1318

# 10.2.4

fixes requiring an entry from another entry

remove unused dep "deep-equal" and unused file "lib/_exclude.js"

https://github.com/substack/node-browserify/pull/1268

# 10.2.3

fixes an errant space in the `--no-browser-field` flag alias
that kept it from working

https://github.com/substack/node-browserify/issues/1286

# 10.2.2

fix tests for tap@^1.1.0 (and update tap)

https://github.com/substack/node-browserify/pull/1276

# 10.2.1

housekeeping - removed unused code

https://github.com/substack/node-browserify/pull/1273

# 10.2.0

remove unnecessary "isDedupe" json check. this was a hack-fix for watchify <=2.4.

https://github.com/substack/node-browserify/pull/1244

fixes for the "noParse" path matcher.

https://github.com/substack/node-browserify/pull/1259

add syntax check cache. this speeds up rebuilds (like when using watchify).

https://github.com/substack/node-browserify/pull/1253

update to browser-pack@^5.0.0 - includes several fixes related to source maps.

https://github.com/substack/node-browserify/pull/1257

# 10.1.3

Replace jsonstream with JSONStream

https://github.com/substack/node-browserify/pull/1252

# 10.1.2

Replace JSONStream with jsonstream
Update deps to avoid jsonstream npm case problems

https://github.com/substack/node-browserify/pull/1247
https://github.com/substack/node-browserify/commit/1ca71e23

# 10.1.1

ensures that entry paths are always full paths

https://github.com/substack/node-browserify/pull/1248

# 10.1.0

adds `--no-browser-field` and `opts.browserField = false` behavior to turn off
the package.json browser field. This is useful if you want to make a bundle with
a target of node or some environment with shimmed node primitives.

A new alias `--node` sets `--no-browser-field` and `--bare`.

https://github.com/substack/node-browserify/pull/1240

# 10.0.0

## Possibly Breaking Change
The ‘process’ dependency was updated to ~0.11.0, this module is inserted into bundles as the ‘process’ global/dependency.
Previously, an unhandled error thrown in a ‘process.nextTick’ task would prevent any subsequent tasks from running, forever.
The task queue now recovers from this condition, but may do so on a future browser tick.
As part of this update, ‘process.nextTick’ now accepts variadic arguments, passed to the task, added to io.js in 1.8.1.

* [#1231](https://github.com/substack/node-browserify/pull/1231)
* [defunctzombie/node-process#38](https://github.com/defunctzombie/node-process/pull/38)
* [iojs/io.js#1077](https://github.com/iojs/io.js/pull/1077)

## Other changes

* Escapes JavaScript-unsafe characters from JSON. [#1211](https://github.com/substack/node-browserify/pull/1211)
* Removes ‘-v’ shortcut for ‘--version’ (conflicted with watchify) [#1222](https://github.com/substack/node-browserify/pull/1222)
* Updated ‘defined’, ‘punycode’, ‘module-deps’, and ‘xtend’ dependencies to reduce install size [#1230](https://github.com/substack/node-browserify/pull/1230)

# 9.0.8

makes `.require({ expose: 'name' })` and `require('name')` work at the same time

https://github.com/substack/node-browserify/issues/850
https://github.com/substack/node-browserify/pull/1202

# 9.0.7

fixes an issue with catching error events on the b.bundle() stream

https://github.com/substack/node-browserify/issues/1194
https://github.com/substack/node-browserify/pull/1195

# 9.0.6

republishing 9.0.5 in an attempt to satisfy npm.

# 9.0.5

sets the stream returned by bundle() to be readable-only

https://github.com/substack/node-browserify/pull/1187#issuecomment-89044008

# 9.0.4

handles the colon better for drive paths and improves the test suite for windows
users

https://github.com/substack/node-browserify/pull/1182
https://github.com/substack/node-browserify/pull/1183

# 9.0.3

fixes a problem with deduping for json files.

This caused problems for running bundle() multiple times on the same instance
with caching turned on, which people reported encountering using watchify.

https://github.com/substack/node-browserify/issues/1101
https://github.com/substack/watchify/issues/143

# 9.0.2

fixes a bug where transforms in `opts.transform` were getting run twice

https://github.com/substack/node-browserify/issues/1124
https://github.com/substack/node-browserify/pull/1128

# 9.0.1

fixes exposed files persisting across bundles

https://github.com/substack/node-browserify/pull/1030

# 9.0.0

updates browser-pack which uses umd 3.0.0.
This sligtly changes how `--standalone $name` works.

https://github.com/substack/browser-pack/pull/49
https://github.com/substack/node-browserify/pull/1105

Also some tidying up around handling expose that module-deps can do now:

https://github.com/substack/node-browserify/pull/1077

and some fixes to regressions involving the `'package'` event:

https://github.com/substack/node-resolve/issues/69

Upstream changes in resolve/browser-resolve mean that `require('foo/bar')` works
better with the package.json browser field. You can do something like:

``` json
{
  "browser": { "./bar": "whatever.js" }
}
```

# 8.1.3

uses / instead of \ for source map url separators on windows
https://github.com/substack/node-browserify/pull/1096

# 8.1.2

resolves mappings from the browser field for externals

https://github.com/substack/node-browserify/pull/1100

# 8.1.1

fixes an issue with resolving exposed packages relative to the basedir

https://github.com/substack/node-browserify/pull/1059
https://github.com/substack/node-browserify/issues/1039
https://github.com/daiweilu/browserify-broken-require

# 8.1.0

use assert@1.3, which fixes a bug in assert.deepEqual related to argument ordering,
and ensures assert.deepEqual continues working in Chrome 40 and Firefox 35.

use process@0.10, which adds process.umask() and a faster process.nextTick()
implementation.

https://github.com/substack/node-browserify/pull/1018
https://github.com/substack/node-browserify/pull/1041

# 8.0.3

passes opts.debug through to insert-module-globals so that is can insert inline
source maps for its modifications

# 8.0.2

ensures that transforms always execute in the order they were added

https://github.com/substack/node-browserify/pull/1043

# 8.0.1

fixes some file path leaks in deduped deps

https://github.com/substack/node-browserify/pull/994
https://github.com/substack/node-browserify/issues/951

# 8.0.0

In previous releases, the deduping logic was over-zealous about how it handled
module references for duplicates. The prior behavior would detect when the
dependency tree of a module matched an existing module in addition to having the
exact same source code to share an instance. This was originally designed to
support libraries like threejs that internally use `instanceof` checks that
don't usually work very well across multiple packages. This feature didn't pan
out and didn't work very well in practice.

Later, a better way of deduping emerged after some unrelated tweaks to
browser-pack to support source introspection for webworkers. The reflection form
of deduping using implicit arguments is now the only kind.

The deduping instance feature resulted in this bug:
https://github.com/substack/node-browserify/issues/1027
which created very surprising results when duplicate files were in use.

# 7.1.0

uses the new buffer@3.0.0, which passes node's own buffer test suite

https://github.com/substack/node-browserify/pull/1040

# 7.0.3

allows modules to be bundled with local paths and exposed at the same time

https://github.com/substack/node-browserify/pull/1033

# 7.0.2

fixes the global transform getting added each re-bundle

https://github.com/substack/node-browserify/issues/1026

# 7.0.1

fixes rebundling (used by watchify) when transforming

https://github.com/substack/node-browserify/issues/1012

also fixes https://github.com/substack/node-browserify/issues/1015

# 7.0.0

Global transforms are now resolved to an absolute path before walking files.
This fixes some bugs with local module versions taking precedence over global
transforms and unresolvable global transforms spanning system directories.

This is a small breaking change since now transform objects live in the pipeline
between the record and deps phases. This should only affect programs that expect
records in the pipeline to only contain file objects.

# 6.3.4

fixes a bug setting placeholder filenames on stream inputs to be properly unique

# 6.3.3

fixes an issue with the expose property when opts.fullPaths is enabled

This issue commonly crops up in watchify.

https://github.com/substack/node-browserify/pull/991
https://github.com/substack/node-browserify/issues/850

# 6.3.2

updates regexps that test for absolute and relative paths to work better on
windows

https://github.com/substack/node-browserify/pull/948

# 6.3.1

fixes ignoreTransform for the case where transforms were given in package.json
as an array

https://github.com/substack/node-browserify/pull/966

# 6.3.0

uses noParse for better parity with module-deps

https://github.com/substack/node-browserify/pull/954

# 6.2.0

fixes #!shebang syntax when --bare is in effect by adding an unshebang phase to
the pipeline

https://github.com/substack/node-browserify/issues/943

# 6.1.2

fixes the behavior for multiple external bundles

https://github.com/substack/node-browserify/issues/933

# 6.1.1

fixes a circular dependency issue with readable-stream

https://github.com/substack/node-browserify/pull/964
https://github.com/substack/node-browserify/issues/963

# 6.1.0

allows transforms to be ignored throughout the entire bundle

https://github.com/substack/node-browserify/pull/945

# 6.0.3

fixes a bug where module insert-module-globals would trigger too soon and
conflict with other transforms

https://github.com/substack/node-browserify/issues/867
https://github.com/substack/node-browserify/issues/895
https://github.com/substack/node-browserify/issues/855

# 6.0.2

upgrades process to 0.8.0
https://github.com/substack/node-browserify/pull/906

# 6.0.1

respects opts.expose in require()
https://github.com/substack/node-browserify/pull/907

# 6.0.0

resolves source map maths relative to the base url. This should help with more
reproducible builds.

https://github.com/substack/node-browserify/pull/923

Version 6 is a tiny but breaking change to how source map paths work.

Now all source map paths are relative by default. This makes it easier to have
deterministic debug builds across different systems and directories. If
browserify is installed in a project-local directory, all the source map paths
will be self-contained and relative against that location in node_modules.

# 5.13.1

bails early if opts.basedir is not the correct type
https://github.com/substack/node-browserify/pull/927

# 5.13.0

exposes global browserify options to transforms under opts._flags
https://github.com/substack/node-browserify/pull/910

# 5.12.2

fixes the array form of b.external()
https://github.com/substack/node-browserify/issues/930

# 5.12.1

dedupe deps when fullPaths is on
https://github.com/substack/node-browserify/pull/917
and fixes the crypto tests

# 5.12.0

adds back the array form for add() and require(), with extra places to add
options

# 5.11.2

fixes ignore for relative paths
in https://github.com/substack/node-browserify/issues/896

# 5.11.1

fixes exports across resets, which caused issues for watchify with exports
https://github.com/substack/node-browserify/pull/892

# 5.11.0

adds an implicit dependency on the original module during dedupe
https://github.com/substack/node-browserify/pull/880

# 5.10.1

fixes the command-line client to properly ignore paths that don't match a glob
https://github.com/substack/node-browserify/pull/866

# 5.10.0

adds back support for `.external(b)` on a browserify instance `b`
that was dropped on the v5 refactor

# 5.9.3

buffers the record pipeline phase to start outputting after the first tick
so that user plugins can capture and modify recorder output

# 5.9.2

fixes a bug with using --ignore to exclude node_modules packages on the command-line

https://github.com/substack/node-browserify/pull/845

# 5.9.1

improves the detection for --ignore

# 5.9.0

fixes bug with builtins that load json files (the 'constants' module),
new 'json' pipeline label

https://github.com/substack/module-deps/issues/46

# 5.8.0

allow optional extensions in bin/args

# 5.7.0

re-instates transforms after a reset and fixes exposing the transform events
properly

# 5.6.1

makes stream entry files deterministic

# 5.6.0

adds 'package' events from module-deps when a package.json file is read

# 5.5.0

adds back the `'bundle'` event and copies over options correctly to reset()

# 5.4.2

adds a note about derequire in standalone mode to the readme

# 5.4.1

fixes an error with basedir resolving plugins from names

# 5.4.0

also allows opts.plugin from the constructor like transform

# 5.3.0

passes `.file` on stream inputs through to transforms
https://github.com/substack/node-browserify/issues/744

# 5.2.1

sets require() for streams to not just be entry files

# 5.2.0

upgrades crypto-browserify to v3

# 5.1.1

updates --list to always print file paths

# 5.1.0

adds back `.plugin()` which was mistakenly omitted

# 5.0.8

fixes using debug and standalone at the same time
https://github.com/substack/node-browserify/issues/750

# 5.0.7

fixes command-line versions of -u and -x
https://github.com/substack/node-browserify/issues/821

# 5.0.6

test for --bare

# 5.0.5

fix for detectGlobals, --bare
https://github.com/substack/node-browserify/issues/803

# 5.0.4

fixes --no-bundle-external with globals

https://github.com/substack/node-browserify/issues/828

# 5.0.3

upgrades insert-module-globals to fix
https://github.com/substack/node-browserify/issues/834

# 5.0.2

fixes the changelog link https://github.com/substack/node-browserify/pull/835

# 5.0.1

adds an untracked test

# 5.0.0

At a glance:

* extensible internal labeled-stream-splicer pipeline
* bundle() - no longer accepts `opts`, callback gets a buffer
* b.deps(), b.pack(), opts.pack, opts.deps are gone
* can call bundle() multiple times on the same instance
* a better --noparse matcher
* id labeling integer index based instead of hash based
* derequire removed for performance reasons
* .external(bundle) has been removed (for now)
* semicolon at end of output
* hashing is gone so `expose: true` or explicit expose id is required for doing
multi-export bundles

Version 5 is a big rearranging of browserify internals with more places for
external code to hook into the build pipeline.

These changes are mostly aligned around the theme of making it easier for
external code to interface with browserify internals in a less hacky way.

## pipeline

Now the core of browserify is organized into a
[labeled-stream-splicer](https://npmjs.org/package/labeled-stream-splicer)
pipeline. This means that user code and plugins can hook into browserify by
pushing themselves onto the pipeline at a label:

``` js
var browserify = require('browserify');
var through = require('through2');
var bundle = browserify();

bundle.pipeline.get('deps').push(through.obj(function (row, enc, next) {
    console.log('DEP:', row.id);
    this.push(row);
    next();
}));
```

User code can remove existing transforms or add its own hooks. These are the
labeled sections you can get a handle on with `bundle.pipeline.get()`

* `'record'` - save inputs to play back later on subsequent `bundle()` calls
* `'deps'` - [module-deps](https://npmjs.org/package/module-deps)
* `'unbom'` - remove byte-order markers
* `'syntax'` - check for syntax errors
* `'sort'` - sort the dependencies for deterministic bundles
* `'dedupe'` - remove duplicate source contents
* `'label'` - apply integer labels to files
* `'emit-deps'` - emit `'dep'` event
* `'debug'` - apply source maps
* `'pack'` - [browser-pack](https://npmjs.org/package/browser-pack)
* `'wrap'` - apply final wrapping, `require=` and a newline and semicolon

Because there is now a proper pipeline, `opts.pack`, `opts.deps`, `b.deps()`,
and `b.pack()` are removed.

## bundle()

Big changes have been made to the `bundle()` function. All options have been
moved out of the `bundle(opts)` form and into the browserify constructor. Before
there was an unclear split between which arguments went into which function.

You can now call `bundle()` multiple times on the same instance, even in
parallel. This will greatly simplify the caching system under watchify and will
fix many long-standing bugs.

The callback to `bundle(cb)` is now called with `cb(err, buf)` instead of
`cb(err, string)` as before.

## labeling

The former hashing system is removed, in favor of file paths rooted at the
`opts.basedir`, or the cwd.

This removal means that browserify can be much more consistent about applying
integer ids, which avoids exposing system paths in bundle output.

Hashes are used internally for deduping purposes, but they operate on the
source content only.

## others

The matching logic in the `--noparse` feature is greatly improved.

derequire has been taken out of core, which should speed up `--standalone`.

# 4.2.3

reverts 4.2.2 due to breaking some existing use-cases

# 4.2.2

fixes a bug applying transforms to symlinked files by resolving the realpath
first https://github.com/substack/node-browserify/pull/831

# 4.2.1

SECURITY NOTICE

Make sure your installation of browserify is using syntax-error@1.1.1 or
later. there was a security vulnerability where a malicious file could
execute code when browserified.

The vulnerability involves breaking out of `Function()`, which was used to
check syntax for more informative errors. In node 0.10, `Function()` seems
to be implemented in terms of `eval()`, so malicious code can execute even
if the function returned by `Function()` was never called. node 0.11 does
not appear to be vulnerable.

Thanks to Cal Leeming [cal@iops.io]
for discovering and disclosing this bug!

# 4.2.0

upgrades http-browserify, crypto-browserify, and sets more versions to float
with ^ semvers

# 4.1.11

fixes a bug with transform argument handling https://github.com/substack/node-browserify/pull/795

# 4.1.10

upgrades browser-resolve to get opts.path fixes https://github.com/defunctzombie/node-browser-resolve/pull/43

# 4.1.9

upgrades resolve to fix relative NODE_PATH paths https://github.com/substack/node-resolve/pull/46

# 4.1.8

bumps the module-deps version to get an ordering bugfix https://github.com/substack/module-deps/pull/39 https://github.com/substack/node-browserify/pull/774

# 4.1.7

fixes ignoreMissing when set in the constructor https://github.com/substack/node-browserify/pull/785

# 4.1.6

emits the 'id' event on the correct instance https://github.com/substack/node-browserify/pull/780

# 4.1.5

added this document

# 4.1.4

fixes a bug in `ie<=8` support for querystring https://github.com/substack/node-browserify/issues/764

# 4.1.2

upgrades umd to fix some issues with --standalone https://github.com/substack/node-browserify/pull/714

# 4.1.1

makes deps() behave more like bundle() https://github.com/substack/node-browserify/issues/757 and fixes global transform precedence https://github.com/substack/node-browserify/issues/759

# 4.1.0

upgrades the version of buffer to ^2.3.0

# 4.0

Here are the new breaking changes in browserify v4. Most users should be unaffected.

## readable-stream

`require('stream')` is now using [readable-stream](https://npmjs.org/package/readable-stream) (but the classic-mode shim persists in stream-browserify just like in node core). This should result in much smaller files for all modules using a similar-enough version of readable-stream as browserify itself. Other modules should be relatively unaffected.

## removed .expose()

Removal of the previously-deprecated and obscure `bundle.expose()`.

## took out implicit reading from stdin

Previously if you invoked the browserify command without any entry files as arguments and stdin was a tty, stdin would be implicitly added as an entry file. This feature was causing problems so it has been removed. https://github.com/substack/node-browserify/issues/724#issuecomment-42731877

## more!

In the run-up to the 4.0, [module-deps](https://npmjs.org/package/module-deps) got an extensive rewrite with minimal test changes. Mostly it was just getting really messy because it was a giant ball-of-mud closure instead of a more straightforward prototype-based implementation with more clearly-defined methods.

The module-deps rewrite was triggered by [system paths showing up in build output](https://github.com/substack/node-browserify/issues/675) but was fixed in 3.46.1. The solution actually didn't end up needing changes in module-deps as originally anticipated but module-deps was in dire need of a cleanup.

# 3.46.1

fixes a bug exposing the host path of the process module in the bundle output https://github.com/substack/insert-module-globals/pull/32

# 3.46.0

allows array arguments in b.require(), b.add(), and b.external() https://github.com/substack/node-browserify/pull/742 from @spacepluk

# 3.45.0

renders complete stack traces where before they were getting truncated https://github.com/substack/node-browserify/pull/741  patch from @secoif

# 3.44.2

slims down the dependency payload by 20M https://github.com/substack/node-browserify/pull/736

# 3.44.1

fixes the recursion error many people were getting https://github.com/substack/node-browserify/pull/713  Thanks to @MattMcKegg  for isolating the bug!

# 3.44.0

upgrades module-deps to 1.10.0 to make all the packageFilter dir argument pathways are consistent

# 3.43.0

lets b.transform(opts, t) args to be swapped around since opts is more common as a last argument

# 3.42.0

passes through the dir parameter in opts.packageFilter from module-deps 1.10.0 https://github.com/substack/node-browserify/pull/731

# 3.41.0

has an option to disable external files, making it easier to run bundles in node for code coverage https://github.com/substack/node-browserify/pull/672

# 3.40.4

makes --list work again https://github.com/substack/node-browserify/pull/727

# 3.40.3

merges a patch for piping via stdin and --require at the same time https://github.com/substack/node-browserify/pull/728

# 3.40.2

upgrades module-deps to fix --list for $NODE_PATH https://github.com/substack/node-browserify/issues/726

# 3.40.1

upgrades module-deps to get this packageTransform bugfix https://github.com/substack/module-deps/pull/32

# 3.40.0

modifies the behavior of opts.builtins to be more useful and intuitive https://github.com/substack/node-browserify/pull/717

# 3.39.0

adds a zlib that has parity with node https://github.com/substack/node-browserify/pull/721

# 3.38.0

upgrades derequire which uses esprima-fb https://github.com/substack/node-browserify/pull/710

# 3.37.2

adds 'close' events back to the bundle stream. This should fix some issues with watchify.

# 3.37.1

fixes a bug with through being required in the bin/cmd.js instead of through2

# 3.37.0

also reverts that require('process') thing which was mistakenly briefly put in the builtins list

# 3.37.0

gives streams2 semantics for bundle() https://github.com/substack/node-browserify/pull/646

# 3.36.1

fixes a dumb bug with ^ for versions that don't work in old npm clients

# 3.36.0

adds require('process') and removes the path resolution for process out of insert-module-globals

# 3.35.0

adds an empty tls stub to the builtins list https://github.com/substack/node-browserify/issues/703

# 3.34.0

fixes a bug with transforms not being applied in deps() https://github.com/substack/node-browserify/pull/708

# 3.33.1

fixes a bug with options in --global-transform on the command-line https://github.com/substack/node-browserify/pull/705

# 3.33.0

fixes parsing errors while maintaining es6 support by switching to esprima-fb https://github.com/substack/node-browserify/issues/698

# 3.32.1

should be easier to shinkwrap and install on windows https://github.com/substack/node-browserify/pull/684

# 3.32.0

adds --full-path and opts.fullPath to always expand ids to full paths https://github.com/substack/node-browserify/pull/668#issuecomment-36586786

# 3.31.2

fixes a bug in the subarg argument parsing for multiple transforms https://github.com/substack/node-browserify/issues/678

# 3.31.1

uses process.cwd() as the default rebase target instead of commondir https://github.com/substack/node-browserify/pull/669#issuecomment-36078282

# 3.31.0

merges https://github.com/substack/node-browserify/pull/669  which should help with more deterministic builds across systems

# 3.30.4

fixes parsing the --insert-global-vars argument properly https://github.com/substack/node-browserify/pull/674

# 3.30.3

fixes exclude globbing in the arg parser https://github.com/substack/node-browserify/pull/676

# 3.30.2

included a fix for --no-builtins for non-wrapped modules https://github.com/substack/node-browserify/pull/666

# 3.30.1

upgrades buffer for a utf8 fix https://github.com/substack/node-browserify/pull/656

# 3.30.0

adds globs for -u, -i, and -x https://github.com/substack/node-browserify/issues/654

# 3.29.1

adds relatively-resolved paths to ignored and excluded files

# 3.29.0

upgrades http-browserify to 1.3.1

# 3.28.2

now always includes the full package.json content in the 'package' event

# 3.28.1

fixes a bug with stream entry order https://github.com/substack/node-browserify/pull/643

# 3.28.0

adds plugins for doing super fancy things like factored bundle output https://github.com/substack/node-browserify#plugins

# 3.27.1

fixes a bug resolving transform modules when browserify is under a symlink

# 3.27.0

adds transform configuration in the package.json browserify.transform field https://github.com/substack/module-deps#packagejson-transformkey

# 3.26.0

you can pass arguments to transforms https://github.com/substack/node-browserify/blob/master/bin/advanced.txt#L67-L77

# 3.25.2

fixes a bug where the transform event didn't fire while IO was pending

# 3.25.1

fixes the transform docs

# 3.25.0

adds 'bundle' and 'transform' events https://github.com/substack/node-browserify#bonbundle-function-bundle-

# 3.24.11

upgrades derequire to 0.6.0. That should be the last piece needed for full es6 syntax support.

# 3.24.10

expands the documentation for the package.json browser and browserify.transform fields https://github.com/substack/node-browserify#packagejson

# 3.24.9

fixes generator syntax and other es6-isms in browserify https://github.com/substack/node-browserify/issues/614

# 3.24.7

fixes noParse, which had accidentally been disabled in the insert-module-global changes and also closes https://github.com/substack/node-browserify/issues/504

# 3.24.6

similar to 3.24.5, 3.24.6 fixes some error reporting propagation from the browserify command

# 3.24.3

fixes how require('buffer').Buffer wasn't the same as implicit Buffer https://github.com/substack/node-browserify/issues/612

# 3.24.2

fixes where the output stream didn't emit "close" in standalone mode https://github.com/substack/node-browserify/pull/608

# 3.24.1

fixes an issue where --standalone combined with expose caused a syntax error https://github.com/substack/node-browserify/issues/489

# 3.24.0

removes require() calls from --standalone so you can require() a standalone bundle again

# 3.23.0

merges this tiny fix returning `this` in noParse() https://github.com/substack/node-browserify/pull/592

# 3.22.0

merges https://github.com/substack/node-browserify/pull/587  which changes the source map prefix from //@ to //#

# 3.21.0

standardizes the module missing error formats to have filename, parent, and type === 'not found' fields

# 3.20.1

has a fix for the case where stdin is implicitly treated as the input stream instead of a file

# 3.20.0

3.20.0 is out: parity with how $NODE_PATH works in node https://github.com/substack/node-browserify/issues/593

# 3.19.1

restores support for node 0.8 by upgrading concat-stream

# 3.0

A new [browserify](http://browserify.org) version is upon us, just in time for
the FESTIVE SEASON during which we in the northern hemisphere at mid to high
latitudes huddle for warmth around oxidizing hydrocarbons!

There are 2 big changes in v3 but most code should be relatively unaffected.

## shiny new Buffer

[feross](https://github.com/feross) forked
the [buffer-browserify](https://npmjs.org/package/buffer-browserify) package
to create
[native-buffer-browserify](https://npmjs.org/package/native-buffer-browserify),
a `Buffer` implementation that uses `Uint8Array` to get `buf[i]` notation and
parity with the node core `Buffer` api without the performance hit of the
previous implementation and a much smaller file size. The downside is that
`Buffer` now only works in browsers with `Uint8Array` and `DataView` support.
All the other modules should maintain existing browser support.

*Update*: a [shim was added](https://npmjs.org/package/typedarray)
to in 3.1 for Uint8Array and DataView support. Now you can use `Buffer` in every
browser.

## direct builtin dependencies

In v3, browserify no longer depends on
[browser-builtins](https://npmjs.org/package/browser-builtins), in favor of
depending on packages directly. Instead of having some separate packages and
some files in a `builtin/` directory like browser-builtins, browserify now uses
*only* external packages for the shims it uses. By only using external packages
we can keep browserify core focused purely on the static analysis and bundling
machinery while letting the individual packages worry about things like browser
compatibility and parity with the node core API as it evolves.

Individual, tiny packages should also be much easier for newcomers to contribute
packages toward because they won't need to get up to speed with all the other
pieces going on and the packages can have their own tests and documentation.
Additionally, each package may find uses in other projects beside browserify
more easily and if people want variations on the versions of shims that ship
with browserify core this is easier to do when everything is separate.

Back when we were using browser-builtins there was a large latency between
pushing out fixes to the individual packages and getting them into browserify
core because we had to wait on browser-builtins to upgrade the semvers in its
package.json. With direct dependencies we get much lower latency for package
upgrades and much more granular control over upgrading packages.

Here is the list of packages we now directly depend on in v3:

* [assert](https://npmjs.org/package/assert)
* [buffer](https://npmjs.org/package/native-buffer-browserify)
* [console](https://npmjs.org/package/console-browserify)
* [constants](https://npmjs.org/package/constants-browserify)
* [crypto](https://npmjs.org/package/crypto-browserify)
* [events](https://npmjs.org/package/events-browserify)
* [http](https://npmjs.org/package/http-browserify)
* [https](https://npmjs.org/package/https-browserify)
* [os](https://npmjs.org/package/os-browserify)
* [path](https://npmjs.org/package/path-browserify)
* [punycode](https://npmjs.org/package/punycode)
* [querystring](https://npmjs.org/package/querystring)
* [stream](https://npmjs.org/package/stream-browserify)
* [string_decoder](https://npmjs.org/package/string_decoder)
* [timers](https://npmjs.org/package/timers-browserify)
* [tty](https://npmjs.org/package/tty-browserify)
* [url](https://npmjs.org/package/url)
* [util](https://npmjs.org/package/util)
* [vm](https://npmjs.org/package/vm-browserify)
* [zlib](https://npmjs.org/package/zlib-browserify)

That's it! If you're bold enough to give v3 a spin, just do:

```
npm install -g browserify
```
