# gruns/furl architecture

> Architecture diagram of the GitHub repository gruns/furl, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/gruns/furl
- Repository: https://github.com/gruns/furl

## Overview

furl is a small Python URL-parsing and modification library. A caller creates a furl object, edits URL components such as the path, query arguments, fragment, or origin, then reads the serialized URL. The README documents these user-facing capabilities; the sampled implementation excerpt shows their classes in furl/furl.py. Internal call details are only partially sampled, so the graph avoids guessing at links between those classes.

Main entry points: [`furl/furl.py`](https://github.com/gruns/furl/blob/master/furl/furl.py) (furl object), [`furl/common.py`](https://github.com/gruns/furl/blob/master/furl/common.py) (Common helpers), [`furl/omdict1D.py`](https://github.com/gruns/furl/blob/master/furl/omdict1D.py) (Ordered multivalue map), [`furl/compat.py`](https://github.com/gruns/furl/blob/master/furl/compat.py) (Compatibility helpers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["URL API"]
  node_furl_api["furl object<br/>[furl.py]"]
  node_authority["Authority fields<br/>[furl.py]"]
  node_path["URL path<br/>[furl.py]"]
  node_query["Query arguments<br/>[furl.py]"]
  node_fragment["Fragment<br/>[furl.py]"]
  node_serialization["URL serialization<br/>[furl.py]"]
end

subgraph group_internals["Shared Internals"]
  node_multivalue["Ordered multivalue map<br/>[omdict1D.py]"]
  node_common["Common helpers<br/>[common.py]"]
  node_compat["Compatibility helpers<br/>[compat.py]"]
  node_version["Package metadata<br/>[__version__.py]"]
end

node_caller(("Python caller"))

node_caller -->|"creates and edits"| node_furl_api
node_furl_api -->|"edits fields"| node_authority
node_furl_api -->|"edits path"| node_path
node_furl_api -->|"edits arguments"| node_query
node_furl_api -->|"edits fragment"| node_fragment
node_caller -->|"reads URL"| node_serialization
node_furl_api -->|"uses"| node_multivalue
node_furl_api -->|"uses"| node_common
node_multivalue -->|"uses"| node_common
node_common -->|"uses"| node_compat

click node_furl_api "https://github.com/gruns/furl/blob/master/furl/furl.py"
click node_authority "https://github.com/gruns/furl/blob/master/furl/furl.py"
click node_path "https://github.com/gruns/furl/blob/master/furl/furl.py"
click node_query "https://github.com/gruns/furl/blob/master/furl/furl.py"
click node_fragment "https://github.com/gruns/furl/blob/master/furl/furl.py"
click node_serialization "https://github.com/gruns/furl/blob/master/furl/furl.py"
click node_multivalue "https://github.com/gruns/furl/blob/master/furl/omdict1D.py"
click node_common "https://github.com/gruns/furl/blob/master/furl/common.py"
click node_compat "https://github.com/gruns/furl/blob/master/furl/compat.py"
click node_version "https://github.com/gruns/furl/blob/master/furl/__version__.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_furl_api,node_authority,node_path,node_query,node_fragment,node_serialization toneBlue
class node_multivalue,node_common,node_compat,node_version toneAmber
class node_caller toneIndigo
```

## Components

### URL API

- [furl object](https://github.com/gruns/furl/blob/master/furl/furl.py): `furl/furl.py`
- [Authority fields](https://github.com/gruns/furl/blob/master/furl/furl.py): `furl/furl.py`
- [URL path](https://github.com/gruns/furl/blob/master/furl/furl.py): `furl/furl.py`
- [Query arguments](https://github.com/gruns/furl/blob/master/furl/furl.py): `furl/furl.py`
- [Fragment](https://github.com/gruns/furl/blob/master/furl/furl.py): `furl/furl.py`
- [URL serialization](https://github.com/gruns/furl/blob/master/furl/furl.py): `furl/furl.py`

### Shared Internals

- [Ordered multivalue map](https://github.com/gruns/furl/blob/master/furl/omdict1D.py): `furl/omdict1D.py`
- [Common helpers](https://github.com/gruns/furl/blob/master/furl/common.py): `furl/common.py`
- [Compatibility helpers](https://github.com/gruns/furl/blob/master/furl/compat.py): `furl/compat.py`
- [Package metadata](https://github.com/gruns/furl/blob/master/furl/__version__.py): `furl/__version__.py`

### Other components

- **Python caller**

## Connections

- Python caller → furl object: creates and edits (evidence: `README.md`)
- furl object → Authority fields: edits fields (evidence: `README.md`)
- furl object → URL path: edits path (evidence: `README.md`)
- furl object → Query arguments: edits arguments (evidence: `README.md`)
- furl object → Fragment: edits fragment (evidence: `README.md`)
- Python caller → URL serialization: reads URL (evidence: `README.md`)
- furl object → Ordered multivalue map: uses (evidence: `furl/furl.py`)
- furl object → Common helpers: uses (evidence: `furl/furl.py`)
- Ordered multivalue map → Common helpers: uses (evidence: `furl/omdict1D.py`)
- Common helpers → Compatibility helpers: uses (evidence: `furl/common.py`)
