urllib_gui
urllib_gui is a small desktop client built with Tkinter and Python's standard-library urllib stack. It sits somewhere between a text browser, an API scratchpad, and a lightweight request inspector: you can open http, https, and file URLs, adjust request settings, inspect responses, and save the parts you want to keep.
The current app is intentionally modest. It renders HTML into readable text, not a full browser engine. There is no JavaScript execution, no DOM inspector, and no headless automation layer. The value here is a simple GUI around urllib, with very little magic and very few dependencies.
Current feature set
- Open
http,https, andfileURLs in tabs. - Navigate with back, forward, reload, and open-in-new-tab flows.
- Render HTML into readable text and follow extracted links inside the app.
- Switch between Rendered, Source, Headers, and Request views.
- Use the request drawer to change method, headers, body, timeout, redirects, proxy, TLS verification, cookies, and auth.
- Preview the exact request before sending it.
- Copy the current request as generated
urllibcode or as acurlcommand. - Save request templates to a scratchpad or export/import them as JSON.
- Save response bodies or rendered text to disk.
- Keep persistent browsing history, bookmarks, saved requests, and preferences.
- Inspect and clear cookies from the active cookie jar.
- Switch between light and dark themes and adjust rendering preferences.
Installation
Install from PyPI
With pipx:
pipx install urllib_gui
With pip:
pip install urllib_gui
Install the optional update-checking integration too:
pip install "urllib_gui[all]"
With pipx:
pipx install "urllib_gui[all]"
Install from source
git clone https://github.com/matthewdeanmartin/urllib_gui.git
cd urllib_gui
uv sync --all-extras
Requirements
- Python 3.13 or newer
- A working Tkinter desktop environment
- Network access for
httpandhttpsrequests
If you are on a minimal Linux install, you may need to install the OS package that provides Tk before launching the app.
Running the app
Show CLI help:
urllib_gui --help
Launch the GUI:
urllib_gui
Open a URL immediately:
urllib_gui https://example.com
Start in dark mode:
urllib_gui --theme dark https://example.com
You can also launch it as a module:
python -m urllib_gui https://example.com
How to use it
Basic browsing
- Start the app and type a URL into the location bar.
- Press Enter or click Go.
- Use Back, Forward, and Reload as you would in a simple browser.
- Open local files with File -> Open File.
Supported schemes are currently limited to http, https, and file.
Request editing
Open View -> Toggle Request Options to show the request drawer. That drawer is where the application becomes more than a basic browser tab.
From the drawer you can:
- choose standard HTTP methods or enter a custom one
- add or remove headers, including preset groups
- send raw text, form-urlencoded data, or JSON bodies
- change timeouts
- choose environment proxy settings, no proxy, or a manual proxy URL
- disable TLS verification when needed
- enable or disable cookies
- use Basic auth, Bearer auth, or a custom
Authorizationheader - preview the exact request before sending it
The CLI only launches the GUI and optionally seeds the starting URL and theme. Request customization happens inside the desktop app.
Optional update checks
urllib_gui can integrate with do_i_need_to_upgrade, but that support is intentionally optional so the base install stays lean.
If installed with urllib_gui[all]:
- the GUI quietly checks for updates on startup and shutdown
- terminal notices can appear during normal app usage
urllib_gui upgradeurllib_gui check-updates
If the extra is not installed, urllib_gui still runs normally and simply skips the update-check feature.
Response inspection
Use the view selector or the View menu to switch between:
- Rendered: HTML converted to readable text with clickable links
- Source: decoded response body
- Headers: status line and response headers
- Request: a readable request preview
For HTML responses, the built-in renderers are:
stdlib_html_linksstdlib_html_textplainhtml_source
If compatible third-party packages are installed, additional renderers are discovered automatically.
Saving and exporting
The app includes a few persistence and export tools:
- Bookmarks can be added, edited, searched, tagged, imported, and exported as JSON.
- History is stored in SQLite and can be searched or cleared.
- Request scratchpad stores named request templates in SQLite.
- Request files can be exported to JSON and loaded back later.
- Copy as urllib Code generates a Python snippet.
- Copy as curl generates a best-effort
curlequivalent. - Save Response Body As... writes raw bytes to disk.
- Save Rendered Text As... writes the rendered text view to disk.
Preferences and stored data
Preferences are stored under ~/.urllib_gui/, alongside the app's local data files:
config.inihistory.sqlite3bookmarks.sqlite3saved_requests.sqlite3
From the Preferences dialog you can change theme, font settings, link-opening behavior, default timeout, default user agent, cookie behavior, TLS verification, proxy defaults, auth defaults, render engine, and default encoding.
Keyboard shortcuts
Ctrl+Lfocus the location barCtrl+Tnew tabCtrl+Wclose tabCtrl+RreloadAlt+LeftbackAlt+RightforwardCtrl+Dbookmark current pageCtrl+Ssave the current response bodyCtrl+Ffind in pageCtrl++,Ctrl+-,Ctrl+0zoom controls
Documentation
Project docs live in docs/ and are built with MkDocs for Read the Docs. The docs cover installation, day-to-day usage, request workflows, and contributing.
Contributing
See CONTRIBUTING.md for the local workflow, quality gates, and how CI is wired.
License
MIT - see LICENSE.
Changelog
See CHANGELOG.md.
Project Links
Metadata
Release files for urllib-gui 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| urllib_gui-0.2.0.tar.gz | 47.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| urllib_gui-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 105.6 kB
Release files / urllib_gui-0.2.0.tar.gz
| Download URL | urllib_gui-0.2.0.tar.gz |
|---|---|
| Size | 47.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
741a20d73b304ae9d3612a900d68b6a17880bed157d5a4e71d2d0679273d6f55
|
|
BLAKE2b-256 checksum How to use checksums |
a3e17b1c5568fdd3c41b2b1013850776831d277dad5225aa0ac7a6480429abbb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 3, 2026.
Transparency logRelease files / urllib_gui-0.2.0-py3-none-any.whl
| Download URL | urllib_gui-0.2.0-py3-none-any.whl |
|---|---|
| Size | 58.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
020dbc34f44f84814762e14d0ca7286d55bb81c9be02e34a61aaec2d7b3bd017
|
|
BLAKE2b-256 checksum How to use checksums |
af620fd492e0b4b339cd0f0c01c805102b934f289da723109e33f172f149611d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 3, 2026.
Transparency log