tofuref
A terminal UI for browsing the OpenTofu provider registry. Search providers and resources, read docs, copy required_providers blocks and code snippets — all without leaving the terminal.
Installation
pipx install tofuref
# or with Homebrew
brew install djetelina/tap/tofuref
# or from AUR
yay -S tofuref
Usage
tofuref
Jump straight to a resource (-r) or data source (-d):
tofuref -r keycloak_user
tofuref -d github_actions_environment_secrets
tofuref -r user -p mrparkers/keycloak
Star History
Controls
Actions
| keybindings | action |
|---|---|
s, / |
search in the context of providers and resources |
u, y |
context aware copying (using a provider/resource) |
v |
change active provider version |
b |
persistently bookmark an item to prioritize them in sorting when next re-ordered |
q, ctrl+q |
quit tofuref |
t |
toggle table of contents from content window |
B |
from content window, open active page in browser |
ctrl+g |
open GitHub repository for provider |
ctrl+s |
Show stats of provider's github repo |
Note: The GitHub functionality tries to use your GitHub token (env or
ghcli) to avoid rate limiting.
Focus windows
| keybindings | action |
|---|---|
tab |
focus next window |
shift+tab |
focus previous window |
p |
focus providers window |
r |
focus resources window |
c |
focus content window |
backspace, left arrow |
focus previous window |
Navigate in a window
Navigate with arrows/page up/page down/home/end or your mouse.
VIM keybindings should be also supported in a limited capacity.
Configuration
Default configuration can be overridden by a config file, which can be overridden with env variables.
Config file locations:
- Unix:
~/.config/tofuref/config.toml - macOS:
~/Library/Application Support"/tofuref/config.toml - Windows:
%USERPROFILE%\AppData\Local\tofuref\tofuref\config.toml
General
Put these as simple key=value in your config.toml.
| name | description | type | default | env |
|---|---|---|---|---|
| http_request_timeout | Timeout for all http requests (in seconds) | float | 3.0 | TOFUREF_HTTP_REQUEST_TIMEOUT |
| index_cache_duration_days | How long the provider index should be cached for (in days) | int | 31 | TOFUREF_INDEX_CACHE_DURATION_DAYS |
| markdown_length_target | Target markdown length (in characters) to keep tofuref responsive | int | 40_000 | TOFUREF_MARKDOWN_LENGTH_TARGET |
Theme
These options belong to a toml section, [theme].
| name | description | type | default | env |
|---|---|---|---|---|
| ui | Colorscheme for the UI, inspect available themes through command palette (^p) Change theme command |
string | textual-dark (or TEXTUAL_THEME env) |
TOFUREF_THEME_UI |
| codeblocks | CURRENTLY WORKS ONLY IN COPY MENU The pygments style for code blocks | string | material | TOFUREF_THEME_CODEBLOCKS |
| borders_style | The borders to use for windows, list and showcase of available here | string | ascii | TOFUREF_THEME_BORDERS_STYLE |
| emoji | Whether to display emojis or letters as icons | bool | true | TOFUREF_THEME_EMOJI |
Example file
Author's configuration:
[theme]
ui = "dracula"
codeblocks = "dracula"
borders_style = "vkey"
Upgrade
pipx upgrade tofuref
Development
Setup
just init
Testing
Run tests:
just test
Update snapshots for tests if the diff was expected:
just test-update
Running
just run
Undocumented config options
Intended mainly for development.
Force downloading from API to see the first time load experience:
TOFUREF_DISABLE_CACHE=1 uv run tofuref
Show popups with load times for provider/resource listings:
TOFUREF_SHOW_LOAD_TIMES=1 uv run tofuref
Or combine those:
TOFUREF_SHOW_LOAD_TIMES=1 TOFUREF_DISABLE_CACHE=1 uv run tofuref
Metadata
Release files for tofuref 1.8.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tofuref-1.8.1.tar.gz | 445.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tofuref-1.8.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 480.9 kB
Release files / tofuref-1.8.1.tar.gz
| Download URL | tofuref-1.8.1.tar.gz |
|---|---|
| Size | 445.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7c6620d86783be041c900b5efb34a37c7ba3212140d9a7b119f22c00310968d8
|
|
BLAKE2b-256 checksum How to use checksums |
e25652b7cb1bf1a733463484d89b3f4365c96da4700bcd7bbaf0a510ddf01075
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Apr 12, 2026.
Transparency logRelease files / tofuref-1.8.1-py3-none-any.whl
| Download URL | tofuref-1.8.1-py3-none-any.whl |
|---|---|
| Size | 35.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4ce221825a1149dd73520460f9b2cfab8f6e36a918e65daa1784e6863101e0ac
|
|
BLAKE2b-256 checksum How to use checksums |
6923e16a3b57cf0f2145ad1cb88a27e826fefb651726621c81f045a09e225726
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Apr 12, 2026.
Transparency log