
Product
Rust Support Now in Beta
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.
kit-state-params
Advanced tools
kit-state-params is a lightweight query params state management library for SvelteKit that simplifies state management and URL synchronization. It provides a seamless way to keep your application state in sync with URL search parameters, enhancing user experience and enabling easy sharing of application states.
Key features:
string
, number
, date
, boolean
and enum
as primitives, arrays of primitives, arrays of objects and nested objects.npm install kit-state-params
pnpm install kit-state-params
bun install kit-state-params
Create a state with the searchParams function. You need to pass a schema of the parameters you want to use. The type of the state will be infered from the schema. The state is a like a normal state in svelte 5. It is reactive and you can mutate or update its properties.
Every mutation will be reflected in the url search params.
You can use the debounce
option to customize the time between each update.
Each update will trigger a navigation by default but you can use the shallow
option to prevent it.
You can use the pushHistory
option to control if you want to push a new history entry or replace the current one. By default it will not push a new history entry.
The library will try its best to keep the url clean by removing empty strings, null values and so on.
<script lang="ts">
import { stateParams } from 'kit-state-params';
const searchParams = stateParams({
schema: {
search: 'string',
tags: ['number']
}
});
</script>
<button
onclick={() => {
searchParams.tags.push(searchParams.tags.length + 1);
}}
>
Add tag
</button>
<input bind:value={searchParams.search} />
{JSON.stringify(searchParams)}
The stateParams
function accepts an options object. Here's a table describing the available options:
Name | Type | Description | Default Value | Required | Example |
---|---|---|---|---|---|
schema | Schema | Defines the structure and types of the URL parameters | true | { search: 'string', tags: ["number"] } | |
debounce | number | Time in milliseconds to wait before updating the URL after a state change | 200 | false | 500 |
pushHistory | boolean | Whether to push a new history entry on state change | false | false | true |
twoWayBinding | boolean | Enables synchronization between URL changes and state | true | false | false |
preserveUnknownParams | boolean | Keeps URL parameters not defined in the schema | true | false | false |
invalidateAll | boolean | Invalidates the state and re-fetches all load functions on state change | false | false | false |
invalidate | (string / URL) [] | Other routes / load functions to invalidate on state change | [] | false | ["profile", "user"] |
shallow | boolean | If true, will not trigger a navigation and therefore not rerun the current load function | false | false | true |
The schema is a simple object that defines the structure of the URL parameters. It is an object where the keys are the parameter names and the values are the types.
Primitive types are: string
, number
, date
, boolean
and enum
.
You can define arrays of primitives and arrays of objects.
Objects can be nested and can be of any type.
const schema = {
search: 'string',
new: 'boolean',
startDate: 'date',
count: 'number',
enum: '<blue,green,red>'
};
const schema = {
// Define an object with nested objects
user: {
language: '<en,fr,es>'
name: 'string',
address: {
street: 'string',
city: 'string',
zip: 'string'
}
},
// Define an array of strings (can be any other primitive: boolean, number, date)
tags: ['string'],
// Define an array of objects (objects inside arrays can also be nested)
friends: [
{
name: 'string',
age: 'number'
}
]
};
the stateParams
function returns a proxy reflecting the defined schema that also contains:
$reset
function to clear the search params (it will also clear the unknown params in the url if you set preserveUnknownParams
to false
)$searchParams
property that is the underlying SvelteURLSearchParams
reactive URLSearchParamskit-state-params also exports a parseURL
function. This function can be used to parse the URL parameters into a typed object. It can be usefull inside the load
function of a route.
import { parseURL } from 'kit-state-params';
export const load = ({ url }) => {
const searchParams = parseURL(url, {
search: 'string',
tags: ['number']
});
const result = await api.getCustomers({
search: searchParams.search,
// search is of type string | null
tags: searchParams.tags
// tags is of type number[]
});
return {
result
};
};
This project is licensed under the MIT License. This README provides a comprehensive introduction to your library, installation instructions, and usage examples covering the main functionalities. It also includes sections on advanced usage and error handling. You may want to adjust the project name, installation instructions, and license information to match your specific project details.
FAQs
## 1. Introduction
We found that kit-state-params demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.
Product
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
Security News
Socket CEO Feross Aboukhadijeh joins Risky Business Weekly to unpack recent npm phishing attacks, their limited impact, and the risks if attackers get smarter.