ljharb/qs

A querystring parser and serializer with nesting support

View on GitHub ↗Jump to charts ↓Open shareable report

Summary Information

Updated 4 minutes ago
Added to GitGenius on September 7th, 2026
Created on July 25th, 2014
Open Issues & Pull Requests: 73 (+0)
GitHub issues: Enabled
Number of forks: 923
Total Stargazers: 8,943 (+0)
Total Subscribers: 71 (+0)

Repository Insights (GitGenius)

Median issue/PR response: 4.0 hours
Mean response time: 112.2 days
90th percentile: 6.0 days
Tracked items: 46

How this project is maintained

Around half of the issues opened in the past year never receive a reply. Only 4% of issues opened in the past year have been closed. Three people close 98% of everything that gets resolved.

Charts & Analytics

Fetching additional details & charts...

Issue Activity (beta)

Open issues: 10
New in 7 days: 1
Closed in 7 days: 1
Avg open age: 732 days
Stale 30+ days: 8
Stale 90+ days: 8

Recent activity

Opened in 7 days: 1
Closed in 7 days: 0
Comments in 7 days: 0
Events in 7 days: 0

Top labels

  • question (15)
  • parse (10)
  • bug (7)
  • stringify (7)
  • feature request (6)
  • help wanted (6)
  • discussion (1)
  • documentation (1)

Most active issues this week

Detailed Description

qs is a querystring parser and serializer with nesting support.

The tool solves the problem of parsing and stringifying URL query strings while handling complex nested structures. It allows developers to work with nested objects in query strings by using square bracket notation, such as converting 'foo[bar]=baz' into nested object structures. The parser includes built-in security features to protect against abuse, including configurable depth limits for nested objects (defaulting to 5 levels deep) and parameter count limits (defaulting to 1000 parameters). These limits can be enforced strictly to throw errors when exceeded, or relaxed to simply ignore excess data.

The tool is suitable for any JavaScript project that needs to parse or generate query strings, whether in Node.js or browser environments. It handles URI-encoded strings and supports various parsing options for different use cases. Developers should be aware that by default the parser ignores parameters that would overwrite prototype properties as a security measure, though this behavior can be modified with the plainObjects or allowPrototypes options if needed. The depth limit is recommended to remain reasonably small when parsing untrusted user input, and the tool provides the throwOnLimitExceeded option to catch cases where configured limits are exceeded.

The project maintains active engagement with security considerations, as evidenced by features addressing prototype pollution risks and configurable limits for nested structures and parameter counts. Development includes consistent refinement of parsing behavior, such as improvements to how unbalanced bracket groups are handled. The tool receives ongoing maintenance focused on both functionality and the security posture needed for parsing untrusted input in production environments.