Skip to main content

What are parsers?

Parsers are the foundation of type safety in nuqs. They define how to convert between URL query string values (always strings) and your application’s typed state values (numbers, booleans, dates, objects, etc.). Every parser implements two core functions:
From packages/nuqs/src/parsers.ts:7-32

Why parsers matter

Without parsers, all URL state would be strings:
With parsers, you get full type safety:

Built-in parsers

nuqs provides parsers for common data types:

Primitive types

Date and time

All date parsers use a custom equality function to compare dates by value:

Enums and literals

Arrays

Items containing the separator are URI-encoded automatically:
From packages/nuqs/src/parsers.ts:466-510

JSON objects

Parsers don’t validate data. Always use a schema validation library like Zod for JSON objects.
The JSON parser includes a custom equality function that compares by value:

Creating custom parsers

Use createParser to build parsers with full type safety and builder pattern support:

Parser rules

Always return null for invalid inputs. Never throw errors in the parse function.

Composing parsers

You can compose existing parsers to build more complex ones:
From the README example.

Parser builder pattern

All parsers created with createParser support a builder pattern for configuration:

Setting defaults

From packages/nuqs/src/parsers.ts:79-103

Setting options

Chaining builders

Type inference

Use inferParserType to extract the TypeScript type from a parser:
From packages/nuqs/src/parsers.ts:583-588

Lossless serialization

Serializers must be lossless to avoid data loss on page reload.
From README warning.