PackageTrack
Sign in Get early access

qs_dart

A query string encoding and decoding library for Dart. Ported from qs for JavaScript.

1.8.2 129K downloads/mo #1016 most downloaded on pub.dev techouse/qs

What this package is like to depend on

Last release 1 months ago

11 Jul 2026

Release timing varies

gaps range from 8 days to 2 months

Nearly every release is documented

notes for 56 of 56 stable releases

Nothing withdrawn

no release was ever pulled

2 years old

56 releases · first in 2024

13 releases in the last 12 months

see the full history below

Release timeline

56 releases · Apr 2024 to Jul 2026
2025 2026
Release Pre-release

Releases

latest 56
  1. 1.8.2 11 Jul 2026
    Release notes

    1.8.2

    • [CHORE] update Equatable from 2.0.7 to 2.1.0
    • [CHORE] replace EquatableMixin with Equatable across option and internal model classes

    https://pub.dev/packages/qs_dart/versions/1.8.2

    Open source →
    Release notes
    • [CHORE] update Equatable from 2.0.7 to 2.1.0
    • [CHORE] replace EquatableMixin with Equatable across option and internal model classes
    Open source →
  2. 1.8.1 02 Jul 2026
    Release notes

    1.8.1

    • [FIX] match Node qs 6.15.3 cumulative list-limit enforcement across duplicate-key combinations and mixed list merges
    • [FIX] reject oversized flat comma values before allocating their split lists when throwOnLimitExceeded is enabled
    • [CHORE] add Node qs 6.15.3 regression coverage for unbalanced bracket keys, chunk-boundary surrogate pairs, and cyclic compaction

    https://pub.dev/packages/qs_dart/versions/1.8.1

    Open source →
    Release notes
    • [FIX] match Node qs 6.15.3 cumulative list-limit enforcement across duplicate-key combinations and mixed list merges
    • [FIX] reject oversized flat comma values before allocating their split lists when throwOnLimitExceeded is enabled
    • [CHORE] add Node qs 6.15.3 regression coverage for unbalanced bracket keys, chunk-boundary surrogate pairs, and cyclic compaction
    Open source →
  3. 1.8.0 21 Jun 2026
    Release notes

    1.8.0

    • [BREAKING] stop exporting the internal Undefined sentinel from the public API

    https://pub.dev/packages/qs_dart/versions/1.8.0

    Open source →
    Release notes
    • [BREAKING] stop exporting the internal Undefined sentinel from the public API
    Open source →
  4. 1.7.6 04 Jun 2026
    Release notes

    1.7.6

    • [CHORE] improve decode internals readability with clearer helper extraction, comments, formatting, and local type annotations
    • [CHORE] improve QS entry-point internals readability with clearer naming, comments, and local type annotations
    • [CHORE] extract shared ByteBuffer decoding logic in the encoder internals and tighten nearby comments
    • [CHORE] improve utility internals readability with clearer local naming, comments, and index-map construction

    https://pub.dev/packages/qs_dart/versions/1.7.6

    Open source →
    Release notes
    • [CHORE] improve decode internals readability with clearer helper extraction, comments, formatting, and local type annotations
    • [CHORE] improve QS entry-point internals readability with clearer naming, comments, and local type annotations
    • [CHORE] extract shared ByteBuffer decoding logic in the encoder internals and tighten nearby comments
    • [CHORE] improve utility internals readability with clearer local naming, comments, and index-map construction
    Open source →
  5. 1.7.5 22 May 2026
    Release notes

    1.7.5

    • [FEAT] add DecodeOptions.strictMerge for Node qs strictMerge parity, defaulting to object/scalar array wrapping while supporting legacy scalar-key merge mode
    • [FIX] match Node qs 6.14.2 list-limit semantics for indexed notation, comma-list overflow, and mixed overflow maps
    • [FIX] match Node qs 6.15.0 duplicate handling so bracket notation combines regardless of the selected duplicate strategy
    • [FIX] preserve unlimited parsing with parameterLimit: double.infinity and throwOnLimitExceeded: true
    • [FIX] match Node qs 6.15.2 bracket parsing behavior for nested/literal bracket groups, encoded bracket text, and allowDots with depth: 0
    • [FIX] match Node qs 6.15.2 stringify edge cases for charset sentinel delimiters, strict-null RFC1738 formatting, comma-list null slots, and null filter entries

    https://pub.dev/packages/qs_dart/versions/1.7.5

    Open source →
    Release notes
    • [FEAT] add DecodeOptions.strictMerge for Node qs strictMerge parity, defaulting to object/scalar array wrapping while supporting legacy scalar-key merge mode
    • [FIX] match Node qs 6.14.2 list-limit semantics for indexed notation, comma-list overflow, and mixed overflow maps
    • [FIX] match Node qs 6.15.0 duplicate handling so bracket notation combines regardless of the selected duplicate strategy
    • [FIX] preserve unlimited parsing with parameterLimit: double.infinity and throwOnLimitExceeded: true
    • [FIX] match Node qs 6.15.2 bracket parsing behavior for nested/literal bracket groups, encoded bracket text, and allowDots with depth: 0
    • [FIX] match Node qs 6.15.2 stringify edge cases for charset sentinel delimiters, strict-null RFC1738 formatting, comma-list null slots, and null filter entries
    Open source →
  6. 1.7.4 06 Apr 2026
    Release notes

    1.7.4

    • [FIX] restore Dart 3.0.0 test compatibility by materializing ByteBuffer fixtures via _byteBufferFrom instead of relying on List<int>.buffer
    • [CHORE] widen the lints dev dependency range to support versions from 3.0.0 up to 7.0.0

    https://pub.dev/packages/qs_dart/versions/1.7.4

    Open source →
    Release notes
    • [FIX] restore Dart 3.0.0 test compatibility by materializing ByteBuffer fixtures via _byteBufferFrom instead of relying on List<int>.buffer
    • [CHORE] widen the lints dev dependency range to support versions from 3.0.0 up to 7.0.0
    Open source →
  7. 1.7.3 04 Mar 2026
    Release notes

    1.7.3

    • [PERF] speed up decode for flat and mixed query workloads via structured-key pre-scan, flat-query early return, and parse/merge bypass when safe
    • [PERF] optimize decode tokenization/list hot paths with capped splitting for String/RegExp/Pattern delimiters, capped comma splitting, and lower-overhead substring/index usage
    • [FIX] tighten strict list-limit behavior and list-growth detection (including root [] map input, scalar→list transitions, and ignoring []= substrings inside values)
    • [CHORE] add targeted decode regression coverage for new fast paths and delimiter/list-limit edge cases
    • [CHORE] add tool/decode_perf_snapshot.dart for repeatable decode perf snapshots and remove obsolete JS-style slice list/string extensions

    https://pub.dev/packages/qs_dart/versions/1.7.3

    Open source →
    Release notes
    • [PERF] speed up decode for flat and mixed query workloads via structured-key pre-scan, flat-query early return, and parse/merge bypass when safe
    • [PERF] optimize decode tokenization/list hot paths with capped splitting for String/RegExp/Pattern delimiters, capped comma splitting, and lower-overhead substring/index usage
    • [FIX] tighten strict list-limit behavior and list-growth detection (including root [] map input, scalar→list transitions, and ignoring []= substrings inside values)
    • [CHORE] add targeted decode regression coverage for new fast paths and delimiter/list-limit edge cases
    • [CHORE] add tool/decode_perf_snapshot.dart for repeatable decode perf snapshots and remove obsolete JS-style slice list/string extensions
    Open source →
  8. 1.7.2 27 Feb 2026
    Release notes

    1.7.2

    • [PERF] optimize deep encode=false workloads with a guarded single-key linear map fast path, segment-string reuse, and lower-allocation top-level fragment assembly
    • [PERF] refactor iterative encoder traversal to phase-driven frames, removing per-child callback allocation and preserving existing cycle/null/comma semantics
    • [PERF] make KeyPathNode.materialize() linear-time by replacing per-step toString() materialization with one final string build
    • [CHORE] add tool/perf_snapshot.dart for repeatable deep encode snapshots (2000/5000/12000, median-of-7 with warmup)
    • [CHORE] expand encode/key-path regression coverage for deep chains and fast-path fallback scenarios

    https://pub.dev/packages/qs_dart/versions/1.7.2

    Open source →
    Release notes
    • [PERF] optimize deep encode=false workloads with a guarded single-key linear map fast path, segment-string reuse, and lower-allocation top-level fragment assembly
    • [PERF] refactor iterative encoder traversal to phase-driven frames, removing per-child callback allocation and preserving existing cycle/null/comma semantics
    • [PERF] make KeyPathNode.materialize() linear-time by replacing per-step toString() materialization with one final string build
    • [CHORE] add tool/perf_snapshot.dart for repeatable deep encode snapshots (2000/5000/12000, median-of-7 with warmup)
    • [CHORE] expand encode/key-path regression coverage for deep chains and fast-path fallback scenarios
    Open source →
  9. 1.7.1 23 Feb 2026
    Release notes

    1.7.1

    • [FIX] restore robust cyclic detection when filter callbacks wrap values in fresh containers by tracking object identity before filter/date transformations
    • [FIX] improve deep path handling in encoder key materialization/dot-encoding via iterative KeyPathNode caching (avoids recursive overflow risk and reuses ancestor caches)
    • [CHORE] refactor encoder internals to share immutable frame config through new EncodeConfig and reduce per-frame option duplication
    • [CHORE] replace weak_map usage in encode cycle tracking with identity-based Set<Object> side-channel and remove weak_map dependency
    • [CHORE] expand encoder regression coverage with new tests for filter-wrapped cycles, KeyPathNode caching/encoding edge cases, and EncodeConfig.copyWith sentinel behavior
    • [CHORE] refine decode internals with clearer duplicate-handling branching and a small dot-decoding fast-path guard (cleanRoot.contains('%2'))

    https://pub.dev/packages/qs_dart/versions/1.7.1

    Open source →
    Release notes
    • [FIX] restore robust cyclic detection when filter callbacks wrap values in fresh containers by tracking object identity before filter/date transformations
    • [FIX] improve deep path handling in encoder key materialization/dot-encoding via iterative KeyPathNode caching (avoids recursive overflow risk and reuses ancestor caches)
    • [CHORE] refactor encoder internals to share immutable frame config through new EncodeConfig and reduce per-frame option duplication
    • [CHORE] replace weak_map usage in encode cycle tracking with identity-based Set<Object> side-channel and remove weak_map dependency
    • [CHORE] expand encoder regression coverage with new tests for filter-wrapped cycles, KeyPathNode caching/encoding edge cases, and EncodeConfig.copyWith sentinel behavior
    • [CHORE] refine decode internals with clearer duplicate-handling branching and a small dot-decoding fast-path guard (cleanRoot.contains('%2'))
    Open source →
  10. 1.7.0 09 Feb 2026
    Release notes

    1.7.0

    • [FEAT] add DecodeOptions.throwOnLimitExceeded for strict limit enforcement on parameter, list, and depth overflows
    • [FIX] tolerate malformed UTF-8 when encoding ByteBuffer values to match Node Buffer.toString('utf8')
    • [FIX] encode ByteBuffer values via charset even when encode=false (avoid Instance of 'ByteBuffer' output)
    • [FIX] ensure invalid charset in Utils.encode consistently throws ArgumentError
    • [FIX] improve merge semantics for lists/maps (hole replacement, undefined normalization under parseLists=false, and non-mutating list/set merges)
    • [FIX] add runtime validation and DecodeOptions constructor asserts for invalid charsets and inconsistent dot options
    • [CHORE] refactor encode/merge internals to stack-based frames (EncodeFrame, MergeFrame, MergePhase) for deep-nesting safety
    • [CHORE] expand coverage for encode/decode/merge edge cases and add a shared FakeEncoding test helper

    https://pub.dev/packages/qs_dart/versions/1.7.0

    Open source →
    Release notes
    • [FEAT] add DecodeOptions.throwOnLimitExceeded for strict limit enforcement on parameter, list, and depth overflows
    • [FIX] tolerate malformed UTF-8 when encoding ByteBuffer values to match Node Buffer.toString('utf8')
    • [FIX] encode ByteBuffer values via charset even when encode=false (avoid Instance of 'ByteBuffer' output)
    • [FIX] ensure invalid charset in Utils.encode consistently throws ArgumentError
    • [FIX] improve merge semantics for lists/maps (hole replacement, undefined normalization under parseLists=false, and non-mutating list/set merges)
    • [FIX] add runtime validation and DecodeOptions constructor asserts for invalid charsets and inconsistent dot options
    • [CHORE] refactor encode/merge internals to stack-based frames (EncodeFrame, MergeFrame, MergePhase) for deep-nesting safety
    • [CHORE] expand coverage for encode/decode/merge edge cases and add a shared FakeEncoding test helper
    Open source →
  11. 1.6.1 11 Jan 2026
    Release notes
    • [FIX] prevent DecodeOptions.listLimit bypass in bracket notation to mitigate potential DoS via memory exhaustion
    Open source →
  12. 1.6.0 03 Nov 2025
    Release notes
    • [FEAT] add EncodeOptions.commaCompactNulls, allowing omission of null entries in lists when using the ListFormat.comma. This results in cleaner output (e.g., [true, false, null, true] becomes "true,false,true").
    Open source →
  13. 1.5.6 03 Sep 2025
    Release notes
    • [CHORE] add highlights section outlining key features to README
    Open source →
  14. 1.5.5 27 Aug 2025
    Release notes
    • [CHORE] add screenshots section with package logo to pubspec.yaml
    Open source →
  15. 1.5.4 24 Aug 2025
    Release notes
    • [CHORE] add issue tracker and funding links to pubspec.yaml
    Open source →
  16. 1.5.3 23 Aug 2025
    Release notes
    • [FIX] fix handling of degenerate dot cases in key splitting logic
    • [FIX] fix bracketed key detection in dot decoding logic
    • [FIX] fix normalization of synthetic bracket segments for unterminated groups in key decoding
    • [FIX] fix list limit error messaging and improve bracket counting logic in key decoding
    • [FIX] fix list parsing logic by removing unnecessary bracketed check for index assignment
    • [CHORE] add comprehensive tests for encoded dot behavior in key decoding
    • [CHORE] add tests for key splitting behavior with depth remainder and strictDepth options
    • [CHORE] add tests for leading and encoded dot handling in key decoding
    Open source →
  17. 1.5.2 23 Aug 2025
    Release notes
    • [FIX] enforce decodeDotInKeys and allowDots option consistency; clarify dot decoding in documentation
    • [FIX] fix dot notation encoding in key splitter; handle top-level dots and bracket depth correctly
    • [FIX] fix list limit check to account for current list length when splitting comma-separated values
    • [FIX] fix parameter splitting to correctly enforce limit and wrap excess bracket groups as single segment
    • [FIX] fix list limit enforcement and unify key/value decoding in parser
    • [FIX] preserve leading dot in key decoding except for degenerate ".[" case
    • [CHORE] add tests for allowDots and decodeDotInKeys consistency in DecodeOptions
    • [CHORE] add comprehensive tests for encoded dot behavior in keys to ensure C# port (QsNet) parity and option consistency
    • [CHORE]️ refactor DecodeOptions to support legacy decoders and unify decode logic; add decodeKey/decodeValue helpers
    • [CHORE] add tests for encoded dot handling in keys and custom decoder behavior in DecodeOptions
    • [CHORE] remove unused import of DecodeKind from qs.dart
    • [CHORE] update decode.dart comments to clarify key decoding and dot/bracket handling logic
    • [CHORE] clarify DecodeOptions docs for allowDots and decodeDotInKeys interaction; improve charsetSentinel and decoder behavior descriptions
    • [CHORE]️ simplify custom decoder handling in DecodeOptions; remove dynamic invocation and legacy overloads
    • [CHORE] update tests to use new decoder signature with DecodeKind; remove legacy dynamic invocation cases
    • [CHORE] add tests for leading and double dot handling with allowDots=true
    • [CHORE] remove legacy dynamic decoder fallback tests and helper class
    • [CHORE] fix custom percent-decoding logic to handle non-encoded characters and improve byte extraction
    • [CHORE] clarify negative listLimit behavior and list growth checks in decode logic comments
    • [CHORE] clarify listLimit negative value behavior and throwOnLimitExceeded interaction in decode options comments
    • [CHORE] improve decode tests for nested list handling, list limit error matching, and long input parsing; fix percent-decoding to handle '+' as space
    • [CHORE] clarify handling of percent-encoded dots in keys and list growth with negative listLimit in decode logic comments
    Open source →
  18. 1.5.1 20 Aug 2025
    Release notes
    • [FIX] fix decoder type and include throwOnLimitExceeded in equality check
    Open source →
  19. 1.5.0 20 Aug 2025
    Release notes
    • [FEAT] add key-aware decoding capability to the query string decoder via DecodeKind
    Open source →
  20. 1.4.3 17 Aug 2025
    Release notes
    • [FIX] optimize map merging and percent-encoding logic in Utils
    • [FIX] improve percent-decoding performance and refactor merge logic in Utils
    • [FIX] optimize slice logic for lists and strings to improve bounds handling and performance
    • [FIX] optimize iterable handling in encoder for improved performance and consistency
    • [FIX] optimize parameter splitting and iterable joining in decoder for improved performance and clarity
    • [FIX] refine charset detection and array parsing logic in decoder for improved accuracy and consistency
    • [FIX] add utility to create index-keyed map from iterable for improved mapping flexibility
    • [FIX] optimize encoder map normalization and key handling for improved type safety and clarity
    • [FIX] prevent splitting UTF-16 surrogate pairs across segment boundaries in encoder for improved correctness
    • [FIX] refine UTF-16 surrogate handling in encoder for improved correctness and Unicode compliance
    • [FIX] optimize list limit enforcement, key handling, and iterable indexing for improved correctness and clarity
    Open source →
  21. 1.4.2 16 Aug 2025
    Release notes
    • [CHORE] improve documentation
    Open source →
  22. 1.4.1 01 Aug 2025
    Release notes
    • [CHORE] enhance type safety and improve readability in Utils.compact method
    Open source →
  23. 1.4.0 31 Jul 2025
    Release notes
    • [CHORE] improve decode performance
    Open source →
  24. 1.3.9 26 Jul 2025
    Release notes
    • [FIX] make encode.objKeys late final to ensure immutability
    Open source →
  25. 1.3.8 13 Jul 2025
    Release notes
    • [FIX] enforce non-nullable serializeDate in EncodeOptions
    • [CHORE] update serializeDate related tests
    Open source →
  26. 1.3.7+1 27 May 2025
    Release notes
    • [CHORE] re-release 1.3.7 due to a Github Actions issue
    Open source →
  27. 1.3.6 24 May 2025
    Release notes
    • [FIX] fix Lists with indices always getting parsed into a Map
    Open source →
  28. 1.3.5+1 30 Apr 2025
    Release notes
    • [FIX] respect Uri.toStringQs encode options
    Open source →
  29. 1.3.4 26 Apr 2025
    Release notes
    • [FEAT] make QS.encode parameter for EncodeOptions optional
    • [FEAT] make QS.decode parameter for DecodeOptions optional
    Open source →
  30. 1.3.3 04 Mar 2025
    Release notes
    • [CHORE] refactor QS.encode logic for improved readability and efficiency
    Open source →
  31. 1.3.3+1 05 Mar 2025
    Release notes
    • [CHORE] fix URL-formatting in readme
    Open source →
  32. 1.3.2 09 Feb 2025
    Release notes
    • [FIX] fix Utils.unescape for % characters (#28)
    Open source →
  33. 1.3.1 21 Jan 2025
    Release notes
    • [FEAT] use Utils.combine more in QS.decode
    • [CHORE] add more tests
    • [CHORE] fix linter warnings
    Open source →
  34. 1.3.0 23 Nov 2024
    Release notes
    • [FEAT] add DecodeOptions.throwOnLimitExceeded option (#26)
    • [CHORE] remove dead code in Utils
    • [CHORE] add more tests
    • [CHORE] update dependencies
    Open source →
  35. 1.2.4 30 Sep 2024
    Release notes
    • [CHORE] update lints to 5.0.0 (was 4.0.0)
    Open source →
  36. 1.2.3 29 Aug 2024
    Release notes
    • [FIX] QS.decode: avoid a crash with interpretNumericEntities: true, comma: true, and charset: latin1
    • [CHORE] add more tests
    Open source →
  37. 1.2.2 12 Aug 2024
    Release notes
    • [FEAT] add DecodeOptions.strictDepth option to throw when input is beyond depth (#22)
    Open source →
  38. 1.2.1 16 Jul 2024
    Release notes
    • [FIX] fix QS.decode output when both strictNullHandling and allowEmptyLists are set to true (#21)
    Open source →
  39. 1.2.0 18 May 2024
    Release notes
    • [FEAT] QS.decode returns Map<String, dynamic> instead of Map<dynamic, dynamic> (#17)
    • [FEAT] add Uri extension (#18)
    • [FIX] fix decoding encoded square brackets in key names
    Open source →
  40. 1.1.0 06 May 2024
    Release notes
    • [FEAT] DateSerializer now returns String or null
    • [CHORE] add more tests
    Open source →
  41. 1.0.10 29 Apr 2024
    Release notes
    Open source →
  42. 1.0.9 27 Apr 2024
    Release notes
    • [FIX] incorrect parsing of nested params with closing square bracket ] in the property name (#12)
    Open source →
  43. 1.0.8 15 Apr 2024
    Release notes
    • [FEAT] port String.prototype.slice() from JavaScript and use that instead of Dart's String.substring()
    • [CHORE] add comparison test between output of qs_dart and qs
    • [CHORE] update test to 1.25.3 (was 1.25.2)
    • [CHORE] update path to 1.9.0 (was 1.8.0)
    Open source →
  44. 1.0.8+1 27 Apr 2024
    Release notes
    • [CHORE] update readme / documentation
    Open source →
  45. 1.0.7 13 Apr 2024
    Release notes
    • [FIX] disable DecodeOptions.decodeDotInKeys by default to restore previous behavior
    • [FIX] optimize encoding performance under large data volumes, reduce memory usage
    Open source →
  46. 1.0.7+1 14 Apr 2024
    Release notes
    • [FIX] fix optimization regressions introduced in v1.0.7
    Open source →
  47. 1.0.6 10 Apr 2024
    Release notes
    • [FEAT] add support for Sets
    • [CHORE] rename _encode.allowEmptyArrays to _encode.allowEmptyLists
    • [CHORE] optimize Utils.removeUndefinedFromList method
    • [CHORE] delete dead code in Utils.merge method
    • [CHORE] fix typos in documentation
    • [CHORE] add more tests
    Open source →
  48. 1.0.5 07 Apr 2024
    Release notes
    • [CHORE] get rid of unused filter variable in QS.encode method
    Open source →
  49. 1.0.4 05 Apr 2024
    Release notes
    • [FIX] prevent Utils.encode method from encoding Iterable, Map, Symbol, Record, Future and Undefined
    Open source →
  50. 1.0.3 04 Apr 2024
    Release notes
    • [FIX] fix Utils.isNonNullishPrimitive method to enable encoding Enums
    Open source →
  51. 1.0.2 04 Apr 2024
    Release notes
    • [FEAT] add equatability to Undefined
    • [CHORE] add more tests to raise coverage
    Open source →
  52. 1.0.1 02 Apr 2024
    Release notes
    • [CHORE] add documentation
    Open source →
  53. 1.0.1+1 03 Apr 2024
    Release notes
    • [CHORE] lower meta dependency from ^1.11.0 to ^1.9.1
    • [CHORE] update documentation
    • [CHORE] update example
    • [CHORE] update readme
    Open source →
  54. 1.0.1+2 04 Apr 2024
    Release notes
    • [CHORE] update documentation
    Open source →
  55. 1.0.0 01 Apr 2024
    Release notes
    • Initial release.
    Open source →
  56. 1.0.0+1 01 Apr 2024
    Release notes
    • [FIX] fix repository url in pubspec.yaml
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive