A Uniform Resource Locator is the address format defined by RFC 3986 (and updated by the WHATWG URL Living Standard) that identifies a resource on a network. It has a strictly defined grammar: scheme, optional userinfo, host, optional port, path, optional query, and optional fragment. This parser breaks any URL into those components and surfaces the query parameters as a key-value list.
Under the hood, this tool relies entirely on the browser's built-in URL constructor and URLSearchParams API — the WHATWG implementation that backs every modern browser, Node.js, Deno, and Bun. That implementation handles dozens of edge cases that hand-rolled parsers get wrong: IDNA punycode encoding for internationalized hostnames (例え.jp becomes xn--r8jz45g.jp), IPv6 brackets, default-port stripping, dot-segment normalization in paths, and proper handling of relative URLs against a base.
The parser tolerates inputs that omit the protocol — if you paste example.com/page?q=1 the tool prefixes https:// before constructing the URL. This matches user expectations but means you cannot use the tool to reason about scheme-less or protocol-relative URLs (//cdn.example.com/...) without explicitly supplying the base. Provide a full scheme when accuracy matters.
Query parameters are extracted via URLSearchParams.entries(), which automatically decodes form-urlencoded values (turning + back into space and resolving percent-encoded bytes). That decoding is the most common reason hand-built parsers disagree with the URL API: a value like name=John%20Doe&pet=cat%26dog requires careful handling of the ampersand in 'cat&dog' versus the ampersand that separates name and pet. URLSearchParams gets this right.
Be aware of the userinfo component (the user:pass@ part). Modern browsers warn or block embedded credentials in fetch and navigation contexts because of phishing risks (the URL https://google.com@evil.com goes to evil.com). The parser still surfaces userinfo when present so you can see what is in a URL you copied from somewhere, but you should never include credentials in URLs in your own systems — use Authorization headers instead.
The fragment (the part after #) is parsed and shown but reminded that it is client-only: browsers never send the fragment to the server in the HTTP request. Single-page applications use it for routing in hash-based routers; OAuth implicit flows historically returned access tokens in the fragment to keep them out of server logs. The query (the part after ?) is sent and gets logged, which is why you should avoid putting secrets there.
All parsing happens locally. The URL is constructed in memory, the components are read from instance properties, and nothing is fetched, looked up, or transmitted. The tool never resolves DNS, never opens the URL, and never sends what you paste to any analytics endpoint.