rfc3987
Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)
Decision gist · record as of 2026-08-14
Yes, with conditions. The package is stable, has no dependencies, and correctly implements RFC 3986/3987 for URI parsing and validation. However, it is archived and unmaintained since 2018, so it will not receive bug fixes or Python compatibility updates. Install it only if you need RFC-compliant URI handling and are willing to accept that maintenance responsibility yourself. The GPLv3+ copyleft license also requires careful review if you are building proprietary software.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- GPLv3+ copyleft license requires careful review before use in proprietary code.
- Package is archived and no longer maintained.
- Low install friction with no runtime dependencies.
License · maintenance · safety
GNU GPLv3+ (copyleft) — Licensed under GNU GPLv3+, a copyleft license. Any code that imports and uses this package in a proprietary application must comply with GPLv3+ terms, including potential source code disclosure obligations.
last release 2018-07-29 (2938 days) · last repo commit 2024-01-11 · 46 stars · archived
0 known vulnerabilities (OSV.dev, 2026-08-14) · 2,996,291 downloads/mo, #2,794 on PyPI
Alternatives
Verify before relying
from rfc3987 import match, parse, resolve
# Validate a URI component
assert match('%C7', 'pct_encoded')
# Parse a URI into components
d = parse('http://example.com/path#fragment', rule='URI')
print(d['scheme'], d['authority'], d['path'])
# Resolve a relative URI against a base
result = resolve('http://a/b', '../c')- Whether the package works reliably with modern Python versions beyond 3.6, given its archived status and lack of recent updates.
- Whether the optional regex module dependency (mentioned in docs) is actually required for common use cases or only for advanced pattern compilation.
What it is and what it does
rfc3987 is a regex-based URI and IRI parser and validator that implements the RFC 3986 and RFC 3987 specifications. It provides functions to match strings against RFC rules, parse URIs into their component parts (scheme, authority, path, query, fragment), compose URIs from parts, and resolve relative URI references against a base URI. The package has no runtime dependencies and is distributed as a pure Python wheel.
The module is designed for applications that need strict RFC-compliant URI handling, such as web frameworks, HTTP clients, or any tool that must correctly parse and validate internationalized resource identifiers. It includes pre-compiled regex patterns and utilities to extract named subcomponents from URIs. However, the package has been archived since 2018 and receives no active maintenance, so it should be considered stable but not evolving.
Use it for
- Validate URI strings against RFC 3986 rules before processing them in a web application.
- Parse a URI into its component parts (scheme, host, path, query, fragment) for routing or request handling.
- Resolve relative URI references (e.g., '../page') against a base URI to compute absolute URIs.
- Extract and validate percent-encoded components or check for well-formed IPv6 addresses in URIs.
- Build URI composition utilities that guarantee RFC 3986 compliance in URL generation.
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes, with conditions.
The package is stable, has no dependencies, and correctly implements RFC 3986/3987 for URI parsing and validation. However, it is archived and unmaintained since 2018, so it will not receive bug fixes or Python compatibility updates. Install it only if you need RFC-compliant URI handling and are willing to accept that maintenance responsibility yourself. The GPLv3+ copyleft license also requires careful review if you are building proprietary software.
Install
rfc3987 on PyPI
Before you install
Low install friction with no runtime dependencies. However, the package is archived and unmaintained since 2018, with the last commit in January 2024 showing only minor fixes. It is marked as Production/Stable but receives no active development.
GPLv3+ copyleft license requires careful review before use in proprietary code. Package is archived and no longer maintained.
License in practice
Licensed under GNU GPLv3+, a copyleft license. Any code that imports and uses this package in a proprietary application must comply with GPLv3+ terms, including potential source code disclosure obligations.
Quickstart
from rfc3987 import match, parse, resolve
# Validate a URI component
assert match('%C7', 'pct_encoded')
# Parse a URI into components
d = parse('http://example.com/path#fragment', rule='URI')
print(d['scheme'], d['authority'], d['path'])
# Resolve a relative URI against a base
result = resolve('http://a/b', '../c')
Verify before relying
- Whether the package works reliably with modern Python versions beyond 3.6, given its archived status and lack of recent updates.
- Whether the optional regex module dependency (mentioned in docs) is actually required for common use cases or only for advanced pattern compilation.
Package facts
| License | GNU GPLv3+ copyleft |
| Python support | Not specified |
| Install friction | Low. Pure-Python wheel |
| Runtime dependencies | None |
| Maintenance | Abandoned 2,938 days since the last release |
| Last repo commit | repository archived |
| First released | |
| Downloads | 2,996,291 / month, #2,794 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | Development Status :: 5 - Production/StableIntended Audience :: DevelopersLicense :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)Operating System :: OS IndependentProgramming Language :: PythonProgramming Language :: Python :: 2Programming Language :: Python :: 2.6Programming Language :: Python :: 2.7Programming Language :: Python :: 3Programming Language :: Python :: 3.2Programming Language :: Python :: 3.3Programming Language :: Python :: 3.4Programming Language :: Python :: 3.5Programming Language :: Python :: 3.6Topic :: Internet |
Evidence: rfc3987-1.3.8-py2.py3-none-any.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “RFC 3986 regex patterns”
- rfc3987Provides RFC 3986 and RFC 3987 compliant regular expressions and…
- uritoolsParses, validates, and composes URIs and URI references according to…
- rfc3986Parses, validates, and normalizes URIs according to RFC 3986,…
Give your agent the search over MCP, or paste the wish link into any chat.
More Internet packages
Botocore provides low-level, data-driven access to Amazon Web Services APIs, serving as the foundation for the AWS CLI and boto3 libraries.
Install it if you need programmatic access to AWS services.
Provides an async client for AWS services using botocore and aiohttp, allowing you to call AWS APIs asynchronously within asyncio-based applications.
Install it if you need to call AWS services from async Python code; it is the standard way to do so.
Pydantic validates Python data structures against type hints, coercing and checking input at runtime to ensure it matches a declared schema.
Provides a platform-independent file locking mechanism to coordinate access to files across processes and threads.
FastAPI is a Python web framework for building REST APIs using type hints, with automatic request validation, serialization, and interactive API documentation.
Provides common Protocol Buffer message definitions used across Google Cloud APIs, enabling Python clients to interact with Google services.
See also hyperlink · rfc3987-syntax · arcp · rfc3986 · rfc3986-validator · uritools · uritemplate · pyuri · uri-template · std-uritemplate