qs breaking changes
Every breaking API change we have recorded in qs on npm: 8 breaking changes in 4 versions. Below are its newest 4 versions, removals and renames first, each with its source.
Newest change August 29, 2026

On this page
6.16.0
- Behavior changed
parse
With throwOnLimitExceeded set, parse now throws when comma groups under []= exceed arrayLimit, where it previously did not. Code relying on the old lenient parsing may now get an error. github.com - Behavior changed
stringify
An empty array with own properties is now checked for cycles and its own keys are serialized when allowEmptyArrays is set, so output for such arrays can change. github.com
6.15.3
- Behavior changed
parse
Inputs that grow arrays past the limit through combine or merge can now throw when throwOnLimitExceeded is set, where they previously did not. Code that relies on those inputs succeeding may need to handle the error. github.com - Behavior changed
utils.merge
Merging arrays that exceed arrayLimit now throws on every array path, where some paths previously accepted them. Code that merges large arrays may need to handle the error or raise the limit. github.com
6.15.0
- Behavior changed
parse
The duplicates option of parse no longer applies to keys written in bracket notation. Code that relied on duplicates handling for bracket keys will see different results. github.com - Signature changed
defaultDecoder
Was type defaultDecoder = (str: string, decoder?: any, charset?: string) => string; now type defaultDecoder = (str: string, decoder?: unknown, charset?: string) => string. npmjs.com - Signature changed
defaultEncoder
Was type defaultEncoder = (str: any, defaultEncoder?: any, charset?: string) => string; now type defaultEncoder = (str: unknown, defaultEncoder?: unknown, charset?: string) => string. npmjs.com
6.14.2
- Behavior changed
arrayLimit
The arrayLimit option is now applied as a maximum count of items rather than a maximum index, and indexed keys exceeding the limit become overflow objects. Code relying on the previous index-based limit may get different parsed results. github.com
Check your code
These are the changes. To see which of them reach your code, scan a public repository, or have your coding agent call check_code with your manifest or lockfile over MCP. The API reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

Put your code on continuous management.
Scan a public repository now, or give your agent one line.
See how out of date your code is.
Tell your agent what changed since it was trained.
claude mcp add --transport http since https://api.since.dev/mcp