# tofuref
[](https://pypi.org/project/tofuref/)



TUI for OpenTofu provider registry.

## Installation
```bash
pipx install tofuref
```
## Usage
Run the application:
```bash
tofuref
```
### 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+l` | display **log** window |
| `ctrl+g` | open **GitHub** repository for provider |
| `ctrl+s` | Show **stats** of provider's github repo |
#### 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 |
| `f` | toggle **fullscreen** mode |
### 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` |
| fullscreen_init_threshold | Threshold of terminal width under which tofuref should start in fullscreen mode | int | 125 | `TOFUREF_FULLSCREEN_INIT_THRESHOLD` |
#### 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](https://pygments.org/styles/) for code blocks | string | material | `TOFUREF_THEME_CODEBLOCKS` |
| borders_style | The borders to use for windows, list and showcase of available [here](https://textual.textualize.io/styles/border/#all-border-types) | 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:
```toml
fullscreen_init_threshold = 160
[theme]
ui = "monokai"
codeblocks = "monokai"
borders_style = "vkey"
```
## Upgrade
```bash
pipx upgrade tofuref
```
## Development notes
`uv run --env-file=tests.env pytest --snapshot-update`
Raw data
{
"_id": null,
"home_page": null,
"name": "tofuref",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "infra, opentofu, platform, sre, terraform, tofu, tool, tui",
"author": "David Jetelina",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/44/c5/e49464455819346f7dfabf94156aa3c76da9737a31ce10261761d82e2b4c/tofuref-1.4.0.tar.gz",
"platform": null,
"description": "# tofuref\n\n[](https://pypi.org/project/tofuref/)\n\n\n\n\nTUI for OpenTofu provider registry.\n\n\n\n## Installation\n\n```bash\npipx install tofuref\n```\n\n## Usage\n\nRun the application:\n\n```bash\ntofuref\n```\n\n### Controls\n\n#### Actions\n\n| keybindings | action |\n|---------------|----------------------------------------------------------------------------------|\n| `s`, `/` | **search** in the context of providers and resources |\n| `u`, `y` | context aware copying (using a provider/resource) |\n| `v` | change active provider **version** |\n| `b` | persistently bookmark an item to prioritize them in sorting when next re-ordered |\n| `q`, `ctrl+q` | **quit** tofuref |\n| `t` | toggle **table of contents** from content window |\n| `B` | from content window, open active page in browser |\n| `ctrl+l` | display **log** window |\n| `ctrl+g` | open **GitHub** repository for provider |\n| `ctrl+s` | Show **stats** of provider's github repo |\n\n#### Focus windows\n\n| keybindings | action |\n|-------------|----------------------------|\n| `tab` | focus next window |\n| `shift+tab` | focus previous window |\n| `p` | focus **providers** window |\n| `r` | focus **resources** window |\n| `c` | focus **content** window |\n| `f` | toggle **fullscreen** mode |\n\n### Navigate in a window\n\nNavigate with arrows/page up/page down/home/end or your mouse.\n\nVIM keybindings should be also supported in a limited capacity.\n\n### Configuration\n\nDefault configuration can be overridden by a config file,\nwhich can be overridden with env variables.\n\nConfig file locations:\n\n* Unix: `~/.config/tofuref/config.toml`\n* macOS: `~/Library/Application Support\"/tofuref/config.toml`\n* Windows: `%USERPROFILE%\\AppData\\Local\\tofuref\\tofuref\\config.toml`\n\n#### General\n\nPut these as simple key=value in your config.toml.\n\n| name | description | type | default | env |\n|---------------------------|---------------------------------------------------------------------------------|-------|---------|-------------------------------------|\n| http_request_timeout | Timeout for all http requests (in seconds) | float | 3.0 | `TOFUREF_HTTP_REQUEST_TIMEOUT` |\n| index_cache_duration_days | How long the provider index should be cached for (in days) | int | 31 | `TOFUREF_INDEX_CACHE_DURATION_DAYS` |\n| fullscreen_init_threshold | Threshold of terminal width under which tofuref should start in fullscreen mode | int | 125 | `TOFUREF_FULLSCREEN_INIT_THRESHOLD` |\n\n#### Theme\n\nThese options belong to a toml section, `[theme]`.\n\n| name | description | type | default | env |\n|---------------|--------------------------------------------------------------------------------------------------------------------------------------|--------|---------------------------------------|-------------------------------|\n| 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` |\n| codeblocks | **CURRENTLY WORKS ONLY IN COPY MENU** The [pygments style](https://pygments.org/styles/) for code blocks | string | material | `TOFUREF_THEME_CODEBLOCKS` |\n| borders_style | The borders to use for windows, list and showcase of available [here](https://textual.textualize.io/styles/border/#all-border-types) | string | ascii | `TOFUREF_THEME_BORDERS_STYLE` |\n| emoji | Whether to display emojis or letters as icons | bool | true | `TOFUREF_THEME_EMOJI` |\n\n#### Example file\n\nAuthor's configuration:\n\n```toml\nfullscreen_init_threshold = 160\n\n[theme]\nui = \"monokai\"\ncodeblocks = \"monokai\"\nborders_style = \"vkey\"\n```\n\n## Upgrade\n\n```bash\npipx upgrade tofuref\n```\n\n## Development notes\n\n`uv run --env-file=tests.env pytest --snapshot-update`\n",
"bugtrack_url": null,
"license": null,
"summary": "TUI for OpenTofu provider registry.",
"version": "1.4.0",
"project_urls": {
"Homepage": "https://github.com/DJetelina/tofuref",
"Issues": "https://github.com/DJetelina/tofuref/issues",
"Repository": "https://github.com/DJetelina/tofuref.git"
},
"split_keywords": [
"infra",
" opentofu",
" platform",
" sre",
" terraform",
" tofu",
" tool",
" tui"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e9cde8f071a1fddc4f789dbb95f7ee3586c9ea2be9eec8e1d5948737810836e7",
"md5": "7a5b788f48cf701116c7d1c1817e9412",
"sha256": "2c41e1f93f906e87780670be5ae912ec0d271e5ba19f50e54e97726b6942405b"
},
"downloads": -1,
"filename": "tofuref-1.4.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "7a5b788f48cf701116c7d1c1817e9412",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 29433,
"upload_time": "2025-07-30T19:50:40",
"upload_time_iso_8601": "2025-07-30T19:50:40.802108Z",
"url": "https://files.pythonhosted.org/packages/e9/cd/e8f071a1fddc4f789dbb95f7ee3586c9ea2be9eec8e1d5948737810836e7/tofuref-1.4.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "44c5e49464455819346f7dfabf94156aa3c76da9737a31ce10261761d82e2b4c",
"md5": "050510a3374f3442b944023660c0ee4f",
"sha256": "e4e9f1c319d371fd28deade7cb5753bdf9116d47d2c8b2d512660eeb6268b983"
},
"downloads": -1,
"filename": "tofuref-1.4.0.tar.gz",
"has_sig": false,
"md5_digest": "050510a3374f3442b944023660c0ee4f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 476301,
"upload_time": "2025-07-30T19:50:42",
"upload_time_iso_8601": "2025-07-30T19:50:42.557598Z",
"url": "https://files.pythonhosted.org/packages/44/c5/e49464455819346f7dfabf94156aa3c76da9737a31ce10261761d82e2b4c/tofuref-1.4.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-30 19:50:42",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "DJetelina",
"github_project": "tofuref",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "tofuref"
}