{"id":13447229,"url":"https://github.com/form-data/form-data","last_synced_at":"2026-04-01T17:22:43.259Z","repository":{"id":1501843,"uuid":"1755793","full_name":"form-data/form-data","owner":"form-data","description":"A module to create readable `\"multipart/form-data\"` streams.  Can be used to submit forms and file uploads to other web applications. ","archived":false,"fork":false,"pushed_at":"2025-11-17T04:15:57.000Z","size":463,"stargazers_count":2355,"open_issues_count":137,"forks_count":390,"subscribers_count":24,"default_branch":"master","last_synced_at":"2026-03-27T16:47:01.603Z","etag":null,"topics":["formdata","nodejs","server","stream","xhr2-fd"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/form-data","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/form-data.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"License","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2011-05-16T14:55:45.000Z","updated_at":"2026-03-25T04:14:30.000Z","dependencies_parsed_at":"2024-06-18T10:56:21.557Z","dependency_job_id":"b6a4b9d4-02f8-4fe8-9f8a-b321a9f4ed06","html_url":"https://github.com/form-data/form-data","commit_stats":{"total_commits":207,"total_committers":43,"mean_commits":4.813953488372093,"dds":0.5217391304347826,"last_synced_commit":"d04f7381b0111c707baa47190de2d48a02988b5b"},"previous_names":["felixge/node-form-data"],"tags_count":42,"template":false,"template_full_name":null,"purl":"pkg:github/form-data/form-data","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/form-data%2Fform-data","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/form-data%2Fform-data/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/form-data%2Fform-data/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/form-data%2Fform-data/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/form-data","download_url":"https://codeload.github.com/form-data/form-data/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/form-data%2Fform-data/sbom","scorecard":{"id":396362,"data":{"date":"2025-08-11","repo":{"name":"github.com/form-data/form-data","commit":"16e00765342106876f98a1c9703314006c9e937a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.9,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":10,"reason":"11 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 2/29 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/node-aught.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/form-data/form-data/node-aught.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/node-pretest.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/form-data/form-data/node-pretest.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/node-tens.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/form-data/form-data/node-tens.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rebase.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/form-data/form-data/rebase.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rebase.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/form-data/form-data/rebase.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/require-allow-edits.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/form-data/form-data/require-allow-edits.yml/master?enable=pin","Info:   0 out of   1 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/rebase.yml:11","Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/rebase.yml:12","Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/require-allow-edits.yml:11","Info: topLevel 'contents' permission set to 'read': .github/workflows/node-aught.yml:6","Info: topLevel 'contents' permission set to 'read': .github/workflows/node-pretest.yml:6","Info: topLevel 'contents' permission set to 'read': .github/workflows/node-tens.yml:6","Info: topLevel 'contents' permission set to 'read': .github/workflows/rebase.yml:6","Info: topLevel 'contents' permission set to 'read': .github/workflows/require-allow-edits.yml:6"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: License:0","Info: FSF or OSI recognized license: MIT License: License:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 3 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T19:06:46.697Z","repository_id":1501843,"created_at":"2025-08-18T19:06:46.697Z","updated_at":"2025-08-18T19:06:46.697Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31058950,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-27T19:32:53.857Z","status":"ssl_error","status_checked_at":"2026-03-27T19:32:45.136Z","response_time":164,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["formdata","nodejs","server","stream","xhr2-fd"],"created_at":"2024-07-31T05:01:11.524Z","updated_at":"2026-04-01T17:22:43.236Z","avatar_url":"https://github.com/form-data.png","language":"JavaScript","readme":"# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data)\n\nA library to create readable ```\"multipart/form-data\"``` streams. Can be used to submit forms and file uploads to other web applications.\n\nThe API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd].\n\n[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface\n\n[![Linux Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=linux:6.x-12.x)](https://travis-ci.org/form-data/form-data)\n[![MacOS Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=macos:6.x-12.x)](https://travis-ci.org/form-data/form-data)\n[![Windows Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=windows:6.x-12.x)](https://travis-ci.org/form-data/form-data)\n\n[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/master.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master)\n[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data)\n\n## Install\n\n```\nnpm install --save form-data\n```\n\n## Usage\n\nIn this example we are constructing a form with 3 fields that contain a string,\na buffer and a file stream.\n\n``` javascript\nvar FormData = require('form-data');\nvar fs = require('fs');\n\nvar form = new FormData();\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_file', fs.createReadStream('/foo/bar.jpg'));\n```\n\nAlso you can use http-response stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar http = require('http');\n\nvar form = new FormData();\n\nhttp.request('http://nodejs.org/images/logo.png', function (response) {\n  form.append('my_field', 'my value');\n  form.append('my_buffer', new Buffer(10));\n  form.append('my_logo', response);\n});\n```\n\nOr @mikeal's [request](https://github.com/request/request) stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar request = require('request');\n\nvar form = new FormData();\n\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_logo', request('http://nodejs.org/images/logo.png'));\n```\n\nIn order to submit this form to a web application, call ```submit(url, [callback])``` method:\n\n``` javascript\nform.submit('http://example.org/', function (err, res) {\n  // res – response object (http.IncomingMessage)  //\n  res.resume();\n});\n\n```\n\nFor more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods.\n\n### Custom options\n\nYou can provide custom options, such as `maxDataSize`:\n\n``` javascript\nvar FormData = require('form-data');\n\nvar form = new FormData({ maxDataSize: 20971520 });\nform.append('my_field', 'my value');\nform.append('my_buffer', /* something big */);\n```\n\nList of available options could be found in [combined-stream](https://github.com/felixge/node-combined-stream/blob/master/lib/combined_stream.js#L7-L15)\n\n### Alternative submission methods\n\nYou can use node's http client interface:\n\n``` javascript\nvar http = require('http');\n\nvar request = http.request({\n  method: 'post',\n  host: 'example.org',\n  path: '/upload',\n  headers: form.getHeaders()\n});\n\nform.pipe(request);\n\nrequest.on('response', function (res) {\n  console.log(res.statusCode);\n});\n```\n\nOr if you would prefer the `'Content-Length'` header to be set for you:\n\n``` javascript\nform.submit('example.org/upload', function (err, res) {\n  console.log(res.statusCode);\n});\n```\n\nTo use custom headers and pre-known length in parts:\n\n``` javascript\nvar CRLF = '\\r\\n';\nvar form = new FormData();\n\nvar options = {\n  header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF,\n  knownLength: 1\n};\n\nform.append('my_buffer', buffer, options);\n\nform.submit('http://example.com/', function (err, res) {\n  if (err) throw err;\n  console.log('Done');\n});\n```\n\nForm-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide \"file\"-related information manually:\n\n``` javascript\nsomeModule.stream(function (err, stdout, stderr) {\n  if (err) throw err;\n\n  var form = new FormData();\n\n  form.append('file', stdout, {\n    filename: 'unicycle.jpg', // ... or:\n    filepath: 'photos/toys/unicycle.jpg',\n    contentType: 'image/jpeg',\n    knownLength: 19806\n  });\n\n  form.submit('http://example.com/', function (err, res) {\n    if (err) throw err;\n    console.log('Done');\n  });\n});\n```\n\nThe `filepath` property overrides `filename` and may contain a relative path. This is typically used when uploading [multiple files from a directory](https://wicg.github.io/entries-api/#dom-htmlinputelement-webkitdirectory).\n\nFor edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter:\n\n``` javascript\nform.submit({\n  host: 'example.com',\n  path: '/probably.php?extra=params',\n  auth: 'username:password'\n}, function (err, res) {\n  console.log(res.statusCode);\n});\n```\n\nIn case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`:\n\n``` javascript\nform.submit({\n  host: 'example.com',\n  path: '/surelynot.php',\n  headers: { 'x-test-header': 'test-header-value' }\n}, function (err, res) {\n  console.log(res.statusCode);\n});\n```\n\n### Methods\n\n- [_Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )](https://github.com/form-data/form-data#void-append-string-field-mixed-value--mixed-options-).\n- [_Headers_ getHeaders( [**Headers** _userHeaders_] )](https://github.com/form-data/form-data#array-getheaders-array-userheaders-)\n- [_String_ getBoundary()](https://github.com/form-data/form-data#string-getboundary)\n- [_Void_ setBoundary()](https://github.com/form-data/form-data#void-setboundary)\n- [_Buffer_ getBuffer()](https://github.com/form-data/form-data#buffer-getbuffer)\n- [_Integer_ getLengthSync()](https://github.com/form-data/form-data#integer-getlengthsync)\n- [_Integer_ getLength( **function** _callback_ )](https://github.com/form-data/form-data#integer-getlength-function-callback-)\n- [_Boolean_ hasKnownLength()](https://github.com/form-data/form-data#boolean-hasknownlength)\n- [_Request_ submit( _params_, **function** _callback_ )](https://github.com/form-data/form-data#request-submit-params-function-callback-)\n- [_String_ toString()](https://github.com/form-data/form-data#string-tostring)\n\n#### _Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )\nAppend data to the form. You can submit about any format (string, integer, boolean, buffer, etc.). However, Arrays are not supported and need to be turned into strings by the user.\n```javascript\nvar form = new FormData();\nform.append('my_string', 'my value');\nform.append('my_integer', 1);\nform.append('my_boolean', true);\nform.append('my_buffer', new Buffer(10));\nform.append('my_array_as_json', JSON.stringify(['bird', 'cute']));\n```\n\nYou may provide a string for options, or an object.\n```javascript\n// Set filename by providing a string for options\nform.append('my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg');\n\n// provide an object.\nform.append('my_file', fs.createReadStream('/foo/bar.jpg'), { filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806 });\n```\n\n#### _Headers_ getHeaders( [**Headers** _userHeaders_] )\nThis method adds the correct `content-type` header to the provided array of `userHeaders`.\n\n#### _String_ getBoundary()\nReturn the boundary of the formData. By default, the boundary consists of 26 `-` followed by 24 numbers\nfor example:\n```javascript\n--------------------------515890814546601021194782\n```\n\n#### _Void_ setBoundary(String _boundary_)\nSet the boundary string, overriding the default behavior described above.\n\n_Note: The boundary must be unique and may not appear in the data._\n\n#### _Buffer_ getBuffer()\nReturn the full formdata request package, as a Buffer. You can insert this Buffer in e.g. Axios to send multipart data.\n```javascript\nvar form = new FormData();\nform.append('my_buffer', Buffer.from([0x4a,0x42,0x20,0x52,0x6f,0x63,0x6b,0x73]));\nform.append('my_file', fs.readFileSync('/foo/bar.jpg'));\n\naxios.post('https://example.com/path/to/api', form.getBuffer(), form.getHeaders());\n```\n**Note:** Because the output is of type Buffer, you can only append types that are accepted by Buffer: *string, Buffer, ArrayBuffer, Array, or Array-like Object*. A ReadStream for example will result in an error.\n\n#### _Integer_ getLengthSync()\nSame as `getLength` but synchronous.\n\n_Note: getLengthSync __doesn't__ calculate streams length._\n\n#### _Integer_ getLength(**function** _callback_ )\nReturns the `Content-Length` async. The callback is used to handle errors and continue once the length has been calculated\n```javascript\nthis.getLength(function (err, length) {\n  if (err) {\n    this._error(err);\n    return;\n  }\n\n  // add content length\n  request.setHeader('Content-Length', length);\n\n  ...\n}.bind(this));\n```\n\n#### _Boolean_ hasKnownLength()\nChecks if the length of added values is known.\n\n#### _Request_ submit(_params_, **function** _callback_ )\nSubmit the form to a web application.\n```javascript\nvar form = new FormData();\nform.append('my_string', 'Hello World');\n\nform.submit('http://example.com/', function (err, res) {\n  // res – response object (http.IncomingMessage)  //\n  res.resume();\n} );\n```\n\n#### _String_ toString()\nReturns the form data as a string. Don't use this if you are sending files or buffers, use `getBuffer()` instead.\n\n### Integration with other libraries\n\n#### Request\n\nForm submission using  [request](https://github.com/request/request):\n\n```javascript\nvar formData = {\n  my_field: 'my_value',\n  my_file: fs.createReadStream(__dirname + '/unicycle.jpg'),\n};\n\nrequest.post({url:'http://service.com/upload', formData: formData}, function (err, httpResponse, body) {\n  if (err) {\n    return console.error('upload failed:', err);\n  }\n  console.log('Upload successful!  Server responded with:', body);\n});\n```\n\nFor more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads).\n\n#### node-fetch\n\nYou can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch):\n\n```javascript\nvar form = new FormData();\n\nform.append('a', 1);\n\nfetch('http://example.com', { method: 'POST', body: form })\n    .then(function (res) {\n        return res.json();\n    }).then(function (json) {\n        console.log(json);\n    });\n```\n\n#### axios\n\nIn Node.js you can post a file using [axios](https://github.com/axios/axios):\n```javascript\nconst form = new FormData();\nconst stream = fs.createReadStream(PATH_TO_FILE);\n\nform.append('image', stream);\n\n// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders`\nconst formHeaders = form.getHeaders();\n\naxios.post('http://example.com', form, {\n  headers: {\n    ...formHeaders,\n  },\n})\n  .then(response =\u003e response)\n  .catch(error =\u003e error)\n```\n\n## Notes\n\n- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround.\n- ```getLength(cb)``` will send an error as first parameter of callback if stream length cannot be calculated (e.g. send in custom streams w/o using ```knownLength```).\n- ```submit``` will not add `content-length` if form length is unknown or not calculable.\n- Starting version `2.x` FormData has dropped support for `node@0.10.x`.\n- Starting version `3.x` FormData has dropped support for `node@4.x`.\n\n## License\n\nForm-Data is released under the [MIT](License) license.\n","funding_links":[],"categories":["JavaScript","代码片段","js库(Browser/Nodejs)","Utilities","Uncategorized"],"sub_categories":["Node.js","React Components","Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fform-data%2Fform-data","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fform-data%2Fform-data","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fform-data%2Fform-data/lists"}