{"id":19706451,"url":"https://github.com/superioone/nut_webgui","last_synced_at":"2026-01-18T12:55:27.929Z","repository":{"id":215376666,"uuid":"738770787","full_name":"SuperioOne/nut_webgui","owner":"SuperioOne","description":"Web interface for Network UPS Tools","archived":false,"fork":false,"pushed_at":"2026-01-13T20:32:45.000Z","size":2722,"stargazers_count":286,"open_issues_count":6,"forks_count":16,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-13T22:26:06.318Z","etag":null,"topics":["management","network-ups-tools","nut","self-hosted","ups"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SuperioOne.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-01-04T02:19:23.000Z","updated_at":"2026-01-13T07:53:23.000Z","dependencies_parsed_at":"2024-01-04T04:27:23.598Z","dependency_job_id":"73d71125-c696-41b3-b381-43b848e52839","html_url":"https://github.com/SuperioOne/nut_webgui","commit_stats":null,"previous_names":["superioone/nut_webgui"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/SuperioOne/nut_webgui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperioOne%2Fnut_webgui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperioOne%2Fnut_webgui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperioOne%2Fnut_webgui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperioOne%2Fnut_webgui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SuperioOne","download_url":"https://codeload.github.com/SuperioOne/nut_webgui/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperioOne%2Fnut_webgui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28536647,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T10:13:46.436Z","status":"ssl_error","status_checked_at":"2026-01-18T10:13:11.045Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["management","network-ups-tools","nut","self-hosted","ups"],"created_at":"2024-11-11T21:35:35.049Z","updated_at":"2026-01-18T12:55:27.917Z","avatar_url":"https://github.com/SuperioOne.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NUT Web GUI\n\nLight weight web interface for [Network UPS Tools](https://networkupstools.org/).\n\n![DetailImage](docs/images/views.webp)\n\n## Quickstart\n\nDocker/Podman:\n\n```shell\ndocker run -p 9000:9000 \\\n  -e UPSD_ADDR=10.0.0.1 \\\n  -e UPSD_USER=test \\\n  -e UPSD_PASS=strongpass \\\n  ghcr.io/superioone/nut_webgui:latest\n```\n\n## Features\n\n- Monitors UPS variables with auto-refresh.\n- Supports INSTCMD, SET VAR, and FSD calls from GUI.\n- 🥔 Potato PC friendly. Small footprint on both resource usage and disk size.\n- Basic JSON API.\n- Supports RISC-V and older ARM devices.\n\n\u003e In order to run `INSTCMD` and `FSD`, make sure the configured user has proper privileges given at `upsd.users`. See\n\u003e man([upsd.users](https://networkupstools.org/docs/man/upsd.users.html)).\n\n## Examples/How-To's\n\n- [Volumes and args](docs/examples/01_volumes_and_args.md)\n- [Docker/Podman compose](docs/examples/02_compose.md)\n- [Kubernetes - Basic](docs/examples/03_kubernetes_basic.md)\n- [Kubernetes - EndpointSlice](docs/examples/04_kubernetes_endpointslice.md)\n- [Custom base path for reverse proxy](docs/examples/05_reverse_proxy_base_path.md)\n- [Accessing localhost](docs/examples/06_accessing_localhost.md)\n- [Using NUT with TLS](docs/examples/07_nut_and_tls.md)\n- [Enabling Auth and API Keys](docs/examples/08_enabling_auth.md)\n- [Connecting multiple NUT servers](docs/examples/09_multiple_nut_connection.md)\n- [Binary installation](docs/examples/10_binary_installation.md)\n\n## CPU architecture support\n\n| Arch     | Test Hardware          | Notes                                                                                         |\n|----------|------------------------|-----------------------------------------------------------------------------------------------|\n| amd64    | AM4 CPU                | Works across all amd64 platforms.                                                             |\n| amd64-v3 | AM4 CPU                | Snake oil level optimizations with AVX. It mostly improves response compression, and TLS.     |\n| amd64-v4 | Intel® SDE             | Snake oil level optimizations with AVX-512. It mostly improves response compression, and TLS. |\n| arm64    | Raspberry Pi 4 Model B |                                                                                               |\n| armv7    | Qemu emulation         | Uses software floating-point.                                                                 |\n| armv6    | Qemu emulation         | Uses software floating-point.                                                                 |\n| riscv64  | Qemu emulation         |                                                                                               |\n\n\u003e amd64 v3 and v4 variants require certain CPU feature flags to run. If you are a crackhead min-max enjoyer (like me), you can use \n\u003e `nut_webgui:latest-amd64-v3` and `nut_webgui:latest-amd64-v4` images.\n\u003e\n\u003e See [x86-64 Microarchitecture levels](https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels) for more details.\n\n## Configuration\n\nnut_webgui can be configured via args, environment variables, or config file. All configuration options are merged into single unified config based on their priority.\n\n### CLI arguments\n\nCLI arguments hold the highest priority in configuration settings.\n\n* `--allow-env`: Allows application to load configuration from environment variables.\n* `--base-path`: Overrides HTTP server base path. Default is `/`.\n* `--config-file`: config.toml path.\n* `--default-theme`: Web UI default theme.\n* `--listen`: Listen address for the HTTP server. Default is `0.0.0.0`.\n* `--log-level`: Log level for the HTTP server. Default is `info`.\n* `--port`: Port used by the HTTP server. Default is `9000`.\n* `--server-key`: Private server key value. Default is randomly auto-generated value.\n* `--with-auth`: Enables authentication with `user.toml` file.\n\n### Container image environment variables\n\nEnvironment variables have the second-highest priority in configuration settings. They can also accept file paths as values. When an environment variable \nspecifies a file path, the system automatically reads content of that file as a value.\n\n#### General\n\n| Name                            | Alias (Container Only) | Default                       | Value                                       | Description                                                 |\n|---------------------------------|------------------------|-------------------------------|---------------------------------------------|-------------------------------------------------------------|\n| `NUTWG__CONFIG_FILE`            | `CONFIG_FILE`          | `/etc/nut_webgui/config.toml` | File path                                   | Custom `config.toml` file path.                             |\n| `NUTWG__DEFAULT_THEME`          | `DEFAULT_THEME`        | None                          | See [config.toml](./dist/config.toml)       | Web UI default theme.                                       |\n| `NUTWG__LOG_LEVEL`              | `LOG_LEVEL`            | `info`                        | `error`, `warn`, `info`, `debug`, `trace`   | Log level.                                                  |\n| `NUTWG__SERVER_KEY`             | `SERVER_KEY`           | `/etc/nut_webgui/server.key`  | File path, UTF-8 string                     | Server sign key used for signing session tokens.            |\n| `NUTWG__AUTH__USERS_FILE`       | `AUTH_USERS_FILE`      | None                          | File path                                   | Enables authentication with the provided `users.toml` file. |\n| `NUTWG__HTTP_SERVER__BASE_PATH` | `BASE_PATH`            | `/`                           |                                             | Overrides HTTP server base path.                            |\n| `NUTWG__HTTP_SERVER__LISTEN`    | `LISTEN`               | `0.0.0.0`                     |                                             | HTTP server listen address.                                 |\n| `NUTWG__HTTP_SERVER__PORT`      | `PORT`                 | `9000`                        | 1-65535                                     | HTTP server listen port.                                    |\n| `UPSD_ROOT_CA`                  |                        | None                          |                                             | Path to the Root CA certificate for TLS.                    |\n\n#### Default UPSD\n\nIf you only connect to a single NUT server and want to keep configurations simple as possible, connection details can be configured via `NUTWG__UPSD__*` environment variables.\n\n| Name                          | Alias (Container Only) | Default     | Value                       | Description                                                       |\n|-------------------------------|------------------------|-------------|-----------------------------|-------------------------------------------------------------------|\n| `NUTWG__UPSD__ADDRESS`        | `UPSD_ADDR`            |             | IPv6, IPv4, hostname        | UPS daemon address.                                               |\n| `NUTWG__UPSD__MAX_CONNECTION` |                        | `4`         |                             | Allowed maximum connection for UPSD client.                       |\n| `NUTWG__UPSD__NAME`           |                        | `default`   |                             | Target namespace for the `NUTWG__UPSD__*` environment variables.  |\n| `NUTWG__UPSD__PASSWORD`       | `UPSD_PASS`            | None        |                             | UPS daemon password.                                              |\n| `NUTWG__UPSD__POLL_FREQ`      | `POLL_FREQ`            | `30`        |                             | Non-critical ups variables update frequency in seconds.           |\n| `NUTWG__UPSD__POLL_INTERVAL`  | `POLL_INTERVAL`        | `2`         |                             | Critical ups variables (`ups.status`) update interval in seconds. |\n| `NUTWG__UPSD__PORT`           | `UPSD_PORT`            | `3493`      | 1-65535                     | UPS daemon port.                                                  |\n| `NUTWG__UPSD__TLS_MODE`       | `UPSD_TLS`             | `disable`   | `strict`, `disable`, `skip` | Configures TLS communication between UPSD and client.             |\n| `NUTWG__UPSD__USERNAME`       | `UPSD_USER`            | None        |                             | UPS daemon username.                                              |\n\n\n### TOML config\n\nConfig.toml has the least priority, but it's recommended to use the config file as a baseline configuration and use environment variables or command-line arguments \nto override settings when needed.\n\n```toml\nversion = \"1\"\nlog_level = \"info\"\ndefault_theme = \"tokyo-night\"\n\n[http_server]\nbase_path = \"/\"\nlisten = \"0.0.0.0\"\nport = 9000\n\n[upsd.default]\nusername = \"admin\"\npassword = \"where an old man of Aran goes around and around\"\naddress = \"localhost\"\nport = 3493\nmax_connection = 4\npoll_freq = 30\npoll_interval = 2\ntls_mode = \"disable\"\n\n[upsd.reactor]\naddress = \"10.0.12.10\"\nusername = \"observer\"\npassword = \"AbsoluteSecurity\"\n\n[auth]\nusers_file = \"/etc/nut_webgui/users.toml\"\n```\n\nFor more detailed config template see [./dist/config.toml](./dist/config.toml).\n\n## JSON data API\n\nA simple JSON-based API is available for integration and automation purposes.\n\nOpenAPI 3.0.0 specification files: [json](docs/api_specs/openapi3_spec.json) | [yaml](docs/api_specs/openapi3_spec.yaml)\n\n## Probes\n\nnut_webgui has basic probe endpoints to check server health and readiness:\n- `/probes/health`\n- `/probes/readiness`\n\nIf you've multiple NUT server connections, you can also probe the individual connection\n\n- `/probes/health/\u003cnamespace\u003e`\n- `/probes/readiness/\u003cnamespace\u003e`\n\n## Building from source and debugging\n\n[Building and Debugging](./docs/building_debugging.md)\n\n[Custom Build Pipeline](./docs/custom_build_pipeline.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperioone%2Fnut_webgui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsuperioone%2Fnut_webgui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperioone%2Fnut_webgui/lists"}