NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #1991 most downloaded on npm
A blazing fast deep object copier
Last release 1 months ago
02 Sep 2026
Release timing varies
gaps range from 8 days to 1.6 years
Nearly every release is documented
notes for 36 of 36 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
49 releases · first in 2018
[Bugfix] Audit for edge-case gaps
Buffer into memory it owns,
instead of returning a view over the original's memory. Buffer overrides slice with one that does not copy, so
mutating the copy previously mutated the original.null prototype for the internal map of
tag-specific copiers, so that a value carrying a custom Symbol.toStringTag cannot resolve to an inherited
Object.prototype member as its copier. Tags such as toString, valueOf, or hasOwnProperty previously produced a
garbage copy or threw.One column per quarter.
[Security] Unbounded recursion on deep instances
maxDepth option to createCopier, bounding the
number of nested objects traversed (defaults to 1000, pass Infinity to traverse without a limit)MaxDepthExceededError when a value is
nested more deeply than maxDepth, instead of exhausting the call stack with a native RangeError; the error extends
RangeError, so existing handling continues to workThanks to @lenny-ts for identifying this.
State object passed to custom methods now includes a depth property. This is maintained internally and
should not be modified, but it is a required property on the exported State type, so any code constructing a State
directly (such as a test mock) will need to provide it.[Enhancement] Micro-optimizations
[Issue 128] Incorrect bigint arrays
[Fix] Prevent generators from attempting to be copied
vite / vitest config files from old infra (36f35bd)include default => named import change in CHANGELOG breaking changes for v4
glob (5a4d1af)webpack for vite (#106) (84b3984)allowImportFromTsExtensions in tsconfig.json (#105) (0157f97)jest for vitest (#104) (a4ce6e2)[Maintenance] Update ESLint to latest
copy method is now a named export, and the default export has been removed.Symbol, WeakMap, and RegExp.prototype.flags are now expected to be
present.createCopier now receives an object of options. The methods passed previously are namespaced under the methods key
in that options object.createStrictCopier has been removed; please use the strict option passed to createCopierfix legacy types
add scripts to rename files for domains
use Node16 when using CJS ( 585d10d ) use NodeNext for everything
update scripts description in README
Object.create (703d4e6)RegExp.flags (a7e3e1a)Symbol check for tags (ff89587)WeakMap test, and instead allow flexible options (74aaef7)Symbol is not defined (11199d0)blob test (eca307d)flow-typed support and npm ignore in favor of files declaration (cf64ec7)add support for cloning an Empty class instance from fast-querystring
Bump cacheable-request from 10.2.1 to 10.2.7
update CHANGELOG for typings changes
Breaking changes
.default suffix is required when accessing
const copy = require('fast-copy').default;const copy = globalThis['fast-copy'].default;copy.strict is no longer available; it is now available as the explicit copyStrict named importisStrict option has been replaced with importing the separate copyStrict methodrealm has been removed entirely, as instanceof is no longer used internallyFastCopy namespace in typings has been removed in favor of explicit import of available typesEnhancements
exports option, to have bettern handling for different environments (ESM vs CJS vs UMD) and improve
tree-shaking when supportedBug fixes
new String('foo')add formal support for primitive wrappers
assign for runtime merging of options (f0cb431)_keys and _values private and not part of expected Cache contract (f618a68)improve strictness of Map / Set
index.js since it is already scoped in folder (4351809)reuse copyArrayBuffer for copyDataView, to ensure custom logic is consistent
copyArrayBuffer for copyDataView, to ensure custom logic is consistent (37a4d0c)toStringTag when available (53be968)toString (656aab5)remove local variable reference
createCopier as public API (50e85d1)restore default export for easier migration (CJS is only impacted consumer now)
createCopier (09b3f3e)DataView / ArrayBuffer values (51bc53d)pass prototype through for clean clones, for faster object copying
realm in favor of object class (36d83f4)update CHANGELOG with better description of breaking changes
copyStrict documentation (d834f58)update types setup to include UMD and minified output
use named instead of default exports
Security/backport deep recursion fix
fix broken state from bad publish
Revert #69 and #71, as they broke the package for NodeJS consumption (will be reintroduced in v3, as breaking changes are required)
* fix jest config (316e364) * Issue 71 no type module
Bump terser from 5.12.1 to 5.14.2
* update CHANGELOG (3b7f3bf) * fix: Source Maps
More robust constructor override handling
Add default property as self-reference
default property as self-reference (#38) (03470da)Blob cloning to use blob.slice() instead of new Blob() for speedMerge pull request #31 from fratzinger/master
Blob #31 (thanks
@fratzigner)remove fast-deepclone to allow installation
update deprecated rollup fields
Add safety to constructing native objects (fixes #19)
Manually coalesce options instead of use destructuring (performance)
- Fix typings declarations - #17
Add strict mode (for more accurate and thorough copying, at the expense of less performance)
Ensure Date copy uses realm-specific constructor
Date copy uses realm-specific constructorSupport custom prototype applied to plain object via Object.create()
Object.create()Support copy of extensions of native Array with alternative push() method
Array with alternative push() methodUnder-the-hood optimizations per recommendations from #7
Add support for multiple realms
Optimize order of operations for common use cases
Fix cache using WeakSet when there was support for WeakMaps instead of WeakSets (in case one was polyfilled but not the other)
WeakSet when there was support for WeakMaps instead of WeakSets (in case one was polyfilled but
not the other)Add TypeScript and FlowType bindings
- Activate tree-shaking
- Initial release
Your coding agent can read these notes before it upgrades. Set up the MCP server →