Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

superagent

ladjs30mMIT10.1.1TypeScript support: definitely-typed

elegant & feature rich browser / node HTTP with a fluent API

agent, ajax, ajax, api, async, await, axios, cancel, client, frisbee, got, http, http, https, ky, promise, promise, promises, request, request, requests, response, rest, retry, super, superagent, timeout, transform, xhr, xmlhttprequest

readme

superagent

build status code coverage code style styled with prettier made with lass license

Small progressive client-side HTTP request library, and Node.js module with the same API, supporting many high-level HTTP client features. Maintained for Forward Email and Lad.

Table of Contents

Install

npm:

npm install superagent

yarn:

yarn add superagent

Usage

Node

const superagent = require('superagent');

// callback
superagent
  .post('/api/pet')
  .send({ name: 'Manny', species: 'cat' }) // sends a JSON post body
  .set('X-API-Key', 'foobar')
  .set('accept', 'json')
  .end((err, res) => {
    // Calling the end function will send the request
  });

// promise with then/catch
superagent.post('/api/pet').then(console.log).catch(console.error);

// promise with async/await
(async () => {
  try {
    const res = await superagent.post('/api/pet');
    console.log(res);
  } catch (err) {
    console.error(err);
  }
})();

Browser

The browser-ready, minified version of superagent is only 50 KB (minified and gzipped).

Browser-ready versions of this module are available via jsdelivr, unpkg, and also in the node_modules/superagent/dist folder in downloads of the superagent package.

Note that we also provide unminified versions with .js instead of .min.js file extensions.

VanillaJS

This is the solution for you if you're just using <script> tags everywhere!

<script src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?features=WeakRef,BigInt"></script>
<script src="https://cdn.jsdelivr.net/npm/superagent"></script>
<!-- if you wish to use unpkg.com instead: -->
<!-- <script src="https://unpkg.com/superagent"></script> -->
<script type="text/javascript">
  (function() {
    // superagent is exposed as `window.superagent`
    // if you wish to use "request" instead please
    // uncomment the following line of code:
    // `window.request = superagent;`
    superagent
      .post('/api/pet')
      .send({ name: 'Manny', species: 'cat' }) // sends a JSON post body
      .set('X-API-Key', 'foobar')
      .set('accept', 'json')
      .end(function (err, res) {
        // Calling the end function will send the request
      });
  })();
</script>

Bundler

If you are using browserify, webpack, rollup, or another bundler, then you can follow the same usage as Node above.

Supported Platforms

  • Node: v14.18.0+
  • Browsers (see .browserslistrc):

    npx browserslist
    and_chr 102
    and_ff 101
    and_qq 10.4
    and_uc 12.12
    android 101
    chrome 103
    chrome 102
    chrome 101
    chrome 100
    edge 103
    edge 102
    edge 101
    firefox 101
    firefox 100
    firefox 91
    ios_saf 15.5
    ios_saf 15.4
    ios_saf 15.2-15.3
    ios_saf 15.0-15.1
    ios_saf 14.5-14.8
    ios_saf 14.0-14.4
    ios_saf 12.2-12.5
    kaios 2.5
    op_mini all
    op_mob 64
    opera 86
    opera 85
    safari 15.5
    safari 15.4
    samsung 17.0
    samsung 16.0

Required Browser Features

We recommend using https://cdnjs.cloudflare.com/polyfill/ (specifically with the bundle mentioned in VanillaJS above):

<script src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?features=WeakRef,BigInt"></script>
  • WeakRef is not supported in Opera 85, iOS Safari 12.2-12.5
  • BigInt is not supported in iOS Safari 12.2-12.5

Plugins

SuperAgent is easily extended via plugins.

const nocache = require('superagent-no-cache');
const superagent = require('superagent');
const prefix = require('superagent-prefix')('/static');

superagent
  .get('/some-url')
  .query({ action: 'edit', city: 'London' }) // query string
  .use(prefix) // Prefixes *only* this request
  .use(nocache) // Prevents caching of *only* this request
  .end((err, res) => {
    // Do something
  });

Existing plugins:

Please prefix your plugin with superagent-* so that it can easily be found by others.

For SuperAgent extensions such as couchdb and oauth visit the wiki.

Upgrading from previous versions

Please see GitHub releases page for the current changelog.

Our breaking changes are mostly in rarely used functionality and from stricter error handling.

  • 6.0 to 6.1
  • 5.x to 6.x:
    • Retry behavior is still opt-in, however we now have a more fine-grained list of status codes and error codes that we retry against (see updated docs)
    • A specific issue with Content-Type matching not being case-insensitive is fixed
    • Set is now required for IE 9, see Required Browser Features for more insight
  • 4.x to 5.x:
    • We've implemented the build setup of Lass to simplify our stack and linting
    • Unminified browserified build size has been reduced from 48KB to 20KB (via tinyify and the latest version of Babel using @babel/preset-env and .browserslistrc)
    • Linting support has been added using caniuse-lite and eslint-plugin-compat
    • We can now target what versions of Node we wish to support more easily using .babelrc
  • 3.x to 4.x:
    • Ensure you're running Node 6 or later. We've dropped support for Node 4.
    • We've started using ES6 and for compatibility with Internet Explorer you may need to use Babel.
    • We suggest migrating from .end() callbacks to .then() or await.
  • 2.x to 3.x:
    • Ensure you're running Node 4 or later. We've dropped support for Node 0.x.
    • Test code that calls .send() multiple times. Invalid calls to .send() will now throw instead of sending garbage.
  • 1.x to 2.x:
    • If you use .parse() in the browser version, rename it to .serialize().
    • If you rely on undefined in query-string values being sent literally as the text "undefined", switch to checking for missing value instead. ?key=undefined is now ?key (without a value).
    • If you use .then() in Internet Explorer, ensure that you have a polyfill that adds a global Promise object.
  • 0.x to 1.x:
    • Instead of 1-argument callback .end(function(res){}) use .then(res => {}).

Contributors

Name
Kornel Lesiński
Peter Lyons
Hunter Loftis
Nick Baugh

License

MIT © TJ Holowaychuk

#

changelog

This HISTORY log is deprecated

Please see GitHub releases page for the current changelog.

4.1.0 (2018-12-26)

  • .connect() IP/DNS override option (Kornel)
  • .trustLocalhost() option for allowing broken HTTPS on localhost
  • .abort() used with promises rejects the promise.

4.0.0 (2018-11-17)

Breaking changes

  • Node.js v4 has reached it's end of life, so we no longer support it. It's v6+ or later. We recommend Node.js 10.
  • We now use ES6 in the browser code, too.
    • If you're using Browserify or Webpack to package code for Internet Explorer, you will also have to use Babel.
    • The pre-built node_modules/superagent.js is still ES5-compatible.
  • .end(…) returns undefined instead of the request. If you need the request object after calling .end() (and you probably don't), save it in a variable and call request.end(…). Consider not using .end() at all, and migrating to promises by calling .then() instead.
  • In Node, responses with unknown MIME type are buffered by default. To get old behavior, if you use custom unbuffered parsers, add .buffer(false) to requests or set superagent.buffer[yourMimeType] = false.
  • Invalid uses of .pipe() throw.

Minor changes

  • Throw if req.abort().end() is called
  • Throw if using unsupported mix of send and field
  • Reject .end() promise on all error events (Kornel Lesiński)
  • Set https.servername from the Host header (Kornel Lesiński)
  • Leave backticks unencoded in query strings where possible (Ethan Resnick)
  • Update node-mime to 2.x (Alexey Kucherenko)
  • Allow default buffer settings based on response-type (shrey)
  • response.buffered is more accurate.

3.8.3 (2018-04-29)

  • Add flags for 201 & 422 responses (Nikhil Fadnis)
  • Emit progress event while uploading Node Buffer via send method (Sergey Akhalkov)
  • Fixed setting correct cookies for redirects (Damien Clark)
  • Replace .catch with ['catch'] for IE9 Support (Miguel Stevens)

3.8.2 (2017-12-09)

  • Fixed handling of exceptions thrown from callbacks
  • Stricter matching of +json MIME types.

3.8.1 (2017-11-08)

  • Clear authorization header on cross-domain redirect

3.8.0

  • Added support for "globally" defined headers and event handlers via superagent.agent(). It now remembers default settings for all its requests.
  • Added optional callback to .retry() (Alexander Murphy)
  • Unified auth args handling in node/browser (Edmundo Alvarez)
  • Fixed error handling in zlib pipes (Kornel)
  • Documented that 3xx status codes are errors (Mickey Reiss)

3.7.0 (2017-10-17)

  • Limit maximum response size. Prevents zip bombs (Kornel)
  • Catch and pass along errors in .ok() callback (Jeremy Ruppel)
  • Fixed parsing of XHR headers without a newline (nsf)

3.6.2 (2017-10-02)

  • Upgrade MIME type dependency to a newer, secure version
  • Recognize PDF MIME as binary
  • Fix for error in subsequent require() calls (Steven de Salas)

3.6.0 (2017-08-20)

  • Support disabling TCP_NODELAY option (#1240) (xiamengyu)
  • Send payload in query string for GET and HEAD shorthand API (Peter Lyons)
  • Support passphrase with pfx certificate (Paul Westerdale (ABRS Limited))
  • Documentation improvements (Peter Lyons)
  • Fixed duplicated query string params (#1200) (Kornel)

3.5.1 (2017-03-18)

  • Allow crossDomain errors to be retried (#1194) (Michael Olson)
  • Read responseType property from the correct object (Julien Dupouy)
  • Check for ownProperty before adding header (Lucas Vieira)

3.5.0 (2017-02-23)

  • Add errno to distinguish between request timeout and body download timeout (#1184) (Kornel Lesiński)
  • Warn about bogus timeout options (#1185) (Kornel Lesiński)

3.4.4 (2017-02-17)

  • Treat videos like images (Kornel Lesiński)
  • Avoid renaming module (Kornel Lesiński)

3.4.3 (2017-02-14)

  • Fixed being able to define own parsers when their mime type starts with text/ (Damien Clark)
  • withCredentials(false) (Andy Woods)
  • Use formData.on instead of .once (Kornel Lesiński)
  • Ignore attach("file",null) (Kornel Lesiński)

3.4.1 (2017-01-29)

  • Allow retry() and retry(0) (Alexander Pope)
  • Allow optional body/data in DELETE requests (Alpha Shuro)
  • Fixed query string on retried requests (Kornel Lesiński)

3.4.0 (2017-01-25)

  • New .retry(n) method and err.retries (Alexander Pope)
  • Docs for HTTPS request (Jun Wan Goh)

3.3.1 (2016-12-17)

  • Fixed "double callback bug" warning on timeouts of gzipped responses

3.3.0 (2016-12-14)

  • Added .ok(callback) that allows customizing which responses are errors (Kornel Lesiński)
  • Added .responseType() to Node version (Kornel Lesiński)
  • Added .parse() to browser version (jakepearson)
  • Fixed parse error when using responseType('blob') (Kornel Lesiński)

3.2.0 (2016-12-11)

  • Added .timeout({response:ms}), which allows limiting maximum response time independently from total download time (Kornel Lesiński)
  • Added warnings when .end() is called more than once (Kornel Lesiński)
  • Added response.links to browser version (Lukas Eipert)
  • btoa is no longer required in IE9 (Kornel Lesiński)
  • Fixed .sortQuery() on URLs without query strings (Kornel Lesiński)
  • Refactored common response code into ResponseBase (Lukas Eipert)

3.1.0 (2016-11-28)

  • Added .sortQuery() (vicanso)
  • Added support for arrays and bools in .field() (Kornel Lesiński)
  • Made superagent.Request subclassable without need to patch all static methods (Kornel Lesiński)

3.0.0 (2016-11-19)

  • Dropped support for Node 0.x. Please upgrade to at least Node 4.
  • Dropped support for componentjs (Damien Caselli)
  • Removed deprecated .part()/superagent.Part APIs.
  • Removed unreliable .body property on internal response object used by unbuffered parsers. Note: the normal response.body is unaffected.
  • Multiple .send() calls mixing Buffer/Blob and JSON data are not possible and will now throw instead of messing up the data.
  • Improved .send() data object type check (Fernando Mendes)
  • Added common prototype for Node and browser versions (Andreas Helmberger)
  • Added http+unix: schema to support Unix sockets (Yuki KAN)
  • Added full attach options parameter in the Node version (Lapo Luchini)
  • Added pfx TLS option with new pfx() method. (Reid Burke)
  • Internally changed .on to .once to prevent possible memory leaks (Matt Blair)
  • Made all errors reported as an event (Kornel Lesiński)

2.3.0 (2016-09-20)

  • Enabled .field() to handle objects (Affan Shahid)
  • Added authentication with client certificates (terusus)
  • Added .catch() for more Promise-like interface (Maxim Samoilov, Kornel Lesiński)
  • Silenced errors from incomplete gzip streams for compatibility with web browsers (Kornel Lesiński)
  • Fixed event.direction in uploads (Kornel Lesiński)
  • Fixed returned value of overwritten response object's on() method (Juan Dopazo)

2.2.0 (2016-08-13)

  • Added timedout property to node Request instance (Alexander Pope)
  • Unified null querystring values in node and browser environments. (George Chung)

2.1.0 (2016-06-14)

  • Refactored async parsers. Now the end callback waits for async parsers to finish (Kornel Lesiński)
  • Errors thrown in .end() callback don't cause the callback to be called twice (Kornel Lesiński)
  • Added headers to toJSON() (Tao)

2.0.0 (2016-05-29)

Breaking changes

Breaking changes are in rarely used functionality, so we hope upgrade will be smooth for most users.

  • Browser: The .parse() method has been renamed to .serialize() for consistency with NodeJS version.
  • Browser: Query string keys without a value used to be parsed as 'undefined', now their value is '' (empty string) (shura, Kornel Lesiński).
  • NodeJS: The redirect event is called after new query string and headers have been set and is allowed to override the request URL (Kornel Lesiński)
  • .then() returns a real Promise. Note that use of superagent with promises now requires a global Promise object. If you target Internet Explorer or Node 0.10, you'll need require('es6-promise').polyfill() or similar.
  • Upgraded all dependencies (Peter Lyons)
  • Renamed properties documented as @api private to have _prefixed names (Kornel Lesiński)

Probably not breaking changes:

  • Extracted common functions to request-base (Peter Lyons)
  • Fixed race condition in pipe tests (Peter Lyons)
  • Handle FormData error events (scriptype)
  • Fixed wrong jsdoc of Request#attach (George Chung)
  • Updated and improved tests (Peter Lyons)
  • request.head() supports .redirects(5) call (Kornel Lesiński)
  • response event is also emitted when using .pipe()

1.8.2 (2016-03-20)

  • Fixed handling of HTTP status 204 with content-encoding: gzip (Andrew Shelton)
  • Handling of FormData error events (scriptype)
  • Fixed parsing of vnd+json MIME types (Kornel Lesiński)
  • Aliased browser implementation of .parse() as .serialize() for forward compatibility

1.8.1 (2016-03-14)

  • Fixed form-data incompatibility with IE9

1.8.0 (2016-03-09)

  • Extracted common code into request-base class (Peter Lyons)
    • It does not affect the public API, but please let us know if you notice any plugins/subclasses breaking!
  • Added option {type:'auto'} to auth method, which enables browser-native auth types (Jungle, Askar Yusupov)
  • Added responseType() to set XHR responseType (chris)
  • Switched to form-data for browserify-compatible FormData (Peter Lyons)
  • Added statusCode to error response when JSON response is malformed (mattdell)
  • Prevented TCP port conflicts in all tests (Peter Lyons)
  • Updated form-data dependency

1.7.2 (2016-01-26)

  • Fix case-sensitivity of header fields introduced by a4ddd6a. (Edward J. Jinotti)
  • bump extend dependency, as former version did not contain any license information (Lukas Eipert)

1.7.1 (2016-01-21)

  • Fixed a conflict with express when using npm 3.x (Glenn)
  • Fixed redirects after a multipart/form-data POST request (cyclist2)

1.7.0 (2016-01-18)

  • When attaching files, read default filename from the File object (JD Isaacks)
  • Add direction property to progress events (Joseph Dykstra)
  • Update component-emitter & formidable (Kornel Lesiński)
  • Don't re-encode query string needlessly (Ruben Verborgh)
  • ensure querystring is appended when doing stream.pipe(request) (Keith Grennan)
  • change set header function, not call this.request() until call this.end() (vicanso)
  • Add no-op withCredentials to Node API (markdalgleish)
  • fix delete breaking on ie8 (kenjiokabe)
  • Don't let request error override responses (Clay Reimann)
  • Increased number of tests shared between node and client (Kornel Lesiński)

1.6.0/1.6.1 (2015-12-09)

  • avoid misleading CORS error message
  • added 'progress' event on file/form upload in Node (Olivier Lalonde)
  • return raw response if the response parsing fails (Rei Colina)
  • parse content-types ending with +json as JSON (Eiryyy)
  • fix to avoid throwing errors on aborted requests (gjurgens)
  • retain cookies on redirect when hosts match (Tom Conroy)
  • added Bower manifest (Johnny Freeman)
  • upgrade to latest cookiejar (Andy Burke)

1.5.0 (2015-11-30)

  • encode array values as key=1&key=2&key=3 etc... (aalpern, Davis Kim)
  • avoid the error which is omitted from 'socket hang up'
  • faster JSON parsing, handling of zlib errors (jbellenger)
  • fix IE11 sends 'undefined' string if data was undefined (Vadim Goncharov)
  • alias del() method as delete() (Aaron Krause)
  • revert Request#parse since it was actually Response#parse

1.4.0 (2015-09-14)

  • add Request#parse method to client library
  • add missing statusCode in client response
  • don't apply JSON heuristics if a valid parser is found
  • fix detection of root object for webworkers

1.3.0 (2015-08-05)

  • fix incorrect content-length of data set to buffer
  • serialize request data takes into account charsets
  • add basic promise support via a then function

1.2.0 (2015-04-13)

  • add progress events to downlodas
  • make usable in webworkers
  • add support for 308 redirects
  • update node-form-data dependency
  • update to work in react native
  • update node-mime dependency

1.1.0 (2015-03-13)

  • Fix responseType checks without xhr2 and ie9 tests (rase-)
  • errors have .status and .response fields if applicable (defunctzombie)
  • fix end callback called before saving cookies (rase-)

1.0.0 / 2015-03-08

  • All non-200 responses are treated as errors now. (The callback is called with an error when the response has a status < 200 or >= 300 now. In previous versions this would not have raised an error and the client would have to check the res object. See #283.
  • keep timeouts intact across redirects (hopkinsth)
  • handle falsy json values (themaarten)
  • fire response events in browser version (Schoonology)
  • getXHR exported in client version (KidsKilla)
  • remove arity check on .end() callbacks (defunctzombie)
  • avoid setting content-type for host objects (rexxars)
  • don't index array strings in querystring (travisjeffery)
  • fix pipe() with redirects (cyrilis)
  • add xhr2 file download (vstirbu)
  • set default response type to text/plain if not specified (warrenseine)

0.21.0 / 2014-11-11

  • Trim text before parsing json (gjohnson)
  • Update tests to express 4 (gaastonsr)
  • Prevent double callback when error is thrown (pgn-vole)
  • Fix missing clearTimeout (nickdima)
  • Update debug (TooTallNate)

0.20.0 / 2014-10-02

  • Add toJSON() to request and response instances. (yields)
  • Prevent HEAD requests from getting parsed. (gjohnson)
  • Update debug. (TooTallNate)

0.19.1 / 2014-09-24

  • Fix basic auth issue when password is falsey value. (gjohnson)

0.19.0 / 2014-09-24

  • Add unset() to browser. (shesek)
  • Prefer XHR over ActiveX. (omeid)
  • Catch parse errors. (jacwright)
  • Update qs dependency. (wercker)
  • Add use() to node. (Financial-Times)
  • Add response text to errors. (yields)
  • Don't send empty cookie headers. (undoZen)
  • Don't parse empty response bodies. (DveMac)
  • Use hostname when setting cookie host. (prasunsultania)

0.18.2 / 2014-07-12

  • Handle parser errors. (kof)
  • Ensure not to use default parsers when there is a user defined one. (kof)

0.18.1 / 2014-07-05

  • Upgrade cookiejar dependency (juanpin)
  • Support image mime types (nebulade)
  • Make .agent chainable (kof)
  • Upgrade debug (TooTallNate)
  • Fix docs (aheckmann)

0.18.0 / 2014-04-29

  • Use "form-data" module for the multipart/form-data implementation. (TooTallNate)
  • Add basic field() and attach() functions for HTML5 FormData. (TooTallNate)
  • Deprecate part(). (TooTallNate)
  • Set default user-agent header. (bevacqua)
  • Add unset() method for removing headers. (bevacqua)
  • Update cookiejar. (missinglink)
  • Fix response error formatting. (shesek)

0.17.0 / 2014-03-06

  • supply uri malformed error to the callback (yields)
  • add request event (yields)
  • allow simple auth (yields)
  • add request event (yields)
  • switch to component/reduce (visionmedia)
  • fix part content-disposition (mscdex)
  • add browser testing via zuul (defunctzombie)
  • adds request.use() (johntron)

0.16.0 / 2014-01-07

  • remove support for 0.6 (superjoe30)
  • fix CORS withCredentials (wejendorp)
  • add "test" script (superjoe30)
  • add request .accept() method (nickl-)
  • add xml to mime types mappings (nickl-)
  • fix parse body error on HEAD requests (gjohnson)
  • fix documentation typos (matteofigus)
  • fix content-type + charset (bengourley)
  • fix null values on query parameters (cristiandouce)

0.15.7 / 2013-10-19

  • pin should.js to 1.3.0 due to breaking change in 2.0.x
  • fix browserify regression

0.15.5 / 2013-10-09

  • add browser field to support browserify
  • fix .field() value number support

0.15.4 / 2013-07-09

  • node: add a Request#agent() function to set the http Agent to use

0.15.3 / 2013-07-05

  • fix .pipe() unzipping on more recent nodes. Closes #240
  • fix passing an empty object to .query() no longer appends "?"
  • fix formidable error handling
  • update formidable

0.15.2 / 2013-07-02

  • fix: emit 'end' when piping.

0.15.1 / 2013-06-26

  • add try/catch around parseLinks

0.15.0 / 2013-06-25

  • make Response#toError() have a more meaningful message

0.14.9 / 2013-06-15

  • add debug()s to the node client
  • add .abort() method to node client

0.14.8 / 2013-06-13

  • set .agent = false always
  • remove X-Requested-With. Closes #189

0.14.7 / 2013-06-06

  • fix unzip error handling

0.14.6 / 2013-05-23

  • fix HEAD unzip bug

0.14.5 / 2013-05-23

  • add flag to ensure the callback is never invoked twice

0.14.4 / 2013-05-22

  • add superagent.js build output
  • update qs
  • update emitter-component
  • revert "add browser field to support browserify" see GH-221

0.14.3 / 2013-05-18

  • add browser field to support browserify

0.14.2/ 2013-05-07

  • add host object check to fix serialization of File/Blobs etc as json

0.14.1 / 2013-04-09

  • update qs

0.14.0 / 2013-04-02

  • add client-side basic auth
  • fix retaining of .set() header field case

0.13.0 / 2013-03-13

  • add progress events to client
  • add simple example
  • add res.headers as alias of res.header for browser client
  • add res.get(field) to node/client

0.12.4 / 2013-02-11

  • fix get content-type even if can't get other headers in firefox. fixes #181

0.12.3 / 2013-02-11

  • add quick "progress" event support

0.12.2 / 2013-02-04

  • add test to check if response acts as a readable stream
  • add ReadableStream in the Response prototype.
  • add test to assert correct redirection when the host changes in the location header.
  • add default Accept-Encoding. Closes #155
  • fix req.pipe() return value of original stream for node parity. Closes #171
  • remove the host header when cleaning headers to properly follow the redirection.

0.12.1 / 2013-01-10

  • add x-domain error handling

0.12.0 / 2013-01-04

  • add header persistence on redirects

0.11.0 / 2013-01-02

  • add .error Error object. Closes #156
  • add forcing of res.text removal for FF HEAD responses. Closes #162
  • add reduce component usage. Closes #90
  • move better-assert dep to development deps

0.10.0 / 2012-11-14

  • add req.timeout(ms) support for the client

0.9.10 / 2012-11-14

  • fix client-side .query(str) support

0.9.9 / 2012-11-14

  • add .parse(fn) support
  • fix socket hangup with dates in querystring. Closes #146
  • fix socket hangup "error" event when a callback of arity 2 is provided

0.9.8 / 2012-11-03

  • add emission of error from Request#callback()
  • add a better fix for nodes weird socket hang up error
  • add PUT/POST/PATCH data support to client short-hand functions
  • add .license property to component.json
  • change client portion to build using component(1)
  • fix GET body support [guille]

0.9.7 / 2012-10-19

  • fix .buffer() res.text when no parser matches

0.9.6 / 2012-10-17

  • change: use this when window is undefined
  • update to new component spec [juliangruber]
  • fix emission of "data" events for compressed responses without encoding. Closes #125

0.9.5 / 2012-10-01

  • add field name to .attach()
  • add text "parser"
  • refactor isObject()
  • remove wtf isFunction() helper

0.9.4 / 2012-09-20

  • fix Buffer responses [TooTallNate]
  • fix res.type when a "type" param is present [TooTallNate]

0.9.3 / 2012-09-18

  • remove GET .send() == .query() special-case (API change !!!)

0.9.2 / 2012-09-17

  • add .aborted prop
  • add .abort(). Closes #115

0.9.1 / 2012-09-07

  • add .forbidden response property
  • add component.json
  • change emitter-component to 0.0.5
  • fix client-side tests

0.9.0 / 2012-08-28

  • add .timeout(ms). Closes #17

0.8.2 / 2012-08-28

  • fix pathname relative redirects. Closes #112

0.8.1 / 2012-08-21

  • fix redirects when schema is specified

0.8.0 / 2012-08-19

  • add res.buffered flag
  • add buffering of text/*, json and forms only by default. Closes #61
  • add .buffer(false) cancellation
  • add cookie jar support [hunterloftis]
  • add agent functionality [hunterloftis]

0.7.0 / 2012-08-03

  • allow query() to be called after the internal req has been created [tootallnate]

0.6.0 / 2012-07-17

  • add res.send('foo=bar') default of "application/x-www-form-urlencoded"

0.5.1 / 2012-07-16

  • add "methods" dep
  • add .end() arity check to node callbacks
  • fix unzip support due to weird node internals

0.5.0 / 2012-06-16

  • Added "Link" response header field parsing, exposing res.links

0.4.3 / 2012-06-15

  • Added 303, 305 and 307 as redirect status codes [slaskis]
  • Fixed passing an object as the url

0.4.2 / 2012-06-02

  • Added component support
  • Fixed redirect data

0.4.1 / 2012-04-13

  • Added HTTP PATCH support
  • Fixed: GET / HEAD when following redirects. Closes #86
  • Fixed Content-Length detection for multibyte chars

0.4.0 / 2012-03-04

  • Added .head() method [browser]. Closes #78
  • Added make test-cov support
  • Added multipart request support. Closes #11
  • Added all methods that node supports. Closes #71
  • Added "response" event providing a Response object. Closes #28
  • Added .query(obj). Closes #59
  • Added res.type (browser). Closes #54
  • Changed: default res.body and res.files to {}
  • Fixed: port existing query-string fix (browser). Closes #57

0.3.0 / 2012-01-24

  • Added deflate/gzip support [guillermo]
  • Added res.type (Content-Type void of params)
  • Added res.statusCode to mirror node
  • Added res.headers to mirror node
  • Changed: parsers take callbacks
  • Fixed optional schema support. Closes #49

0.2.0 / 2012-01-05

  • Added url auth support
  • Added .auth(username, password)
  • Added basic auth support [node]. Closes #41
  • Added make test-docs
  • Added guillermo's EventEmitter. Closes #16
  • Removed Request#data() for SS, renamed to send()
  • Removed Request#data() from client, renamed to send()
  • Fixed array support. [browser]
  • Fixed array support. Closes #35 [node]
  • Fixed EventEmitter#emit()

0.1.3 / 2011-10-25

  • Added error to callback
  • Bumped node dep for 0.5.x

0.1.2 / 2011-09-24

  • Added markdown documentation
  • Added request(url[, fn]) support to the client
  • Added qs dependency to package.json
  • Added options for Request#pipe()
  • Added support for request(url, callback)
  • Added request(url) as shortcut for request.get(url)
  • Added Request#pipe(stream)
  • Added inherit from Stream
  • Added multipart support
  • Added ssl support (node)
  • Removed Content-Length field from client
  • Fixed buffering, setEncoding() to utf8 [reported by stagas]
  • Fixed "end" event when piping

0.1.1 / 2011-08-20

  • Added res.redirect flag (node)
  • Added redirect support (node)
  • Added Request#redirects(n) (node)
  • Added .set(object) header field support
  • Fixed Content-Length support

0.1.0 / 2011-08-09

  • Added support for multiple calls to .data()
  • Added support for .get(uri, obj)
  • Added GET .data() querystring support
  • Added IE{6,7,8} support [alexyoung]

0.0.1 / 2011-08-05

  • Initial commit