Metadata-Version: 2.4
Name: up-tray
Version: 0.3.0
Summary: Qt6 system-tray replacement for Upbound's up CLI
Project-URL: Homepage, https://github.com/upbound/up-tray
Project-URL: Repository, https://github.com/upbound/up-tray
Project-URL: Issues, https://github.com/upbound/up-tray/issues
Author: Johnny Boero
License-Expression: Apache-2.0
License-File: LICENSE
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: X11 Applications :: Qt
Classifier: Intended Audience :: System Administrators
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: System :: Systems Administration
Requires-Python: >=3.9
Requires-Dist: keyring>=24.0
Requires-Dist: kubernetes>=29.0
Requires-Dist: pyqt6>=6.5
Requires-Dist: pyyaml>=6.0
Requires-Dist: requests>=2.31
Provides-Extra: render
Requires-Dist: docker>=7.0; extra == 'render'
Requires-Dist: grpcio>=1.60; extra == 'render'
Requires-Dist: protobuf>=4.25; extra == 'render'
Description-Content-Type: text/markdown

# up-tray

A Qt6 system-tray app that replaces Upbound's `up` CLI without the 250 MB Go binary.

Talks directly to `api.upbound.io` for cloud ops and to your Spaces clusters via
the Kubernetes API. Composition render is supported either natively (Docker +
gRPC, requires `[render]` extras and proto stubs) or by falling through to the
upstream `crossplane` CLI when present.

> **Open source, use at your own risk.** up-tray is a community, open-source
> project licensed under Apache-2.0. It is provided "as is", without warranty
> of any kind; you assume all risk from its use. It is not an official Upbound
> product and is not covered by any Upbound support agreement.

> **Vibe coded with Claude.** This app was largely vibe-coded in close pairing
> with Anthropic's Claude (via Claude Code), which dramatically accelerated the
> Upbound/Crossplane learning curve and turned ideas into working PyQt6 features
> fast. Review the code before you rely on it.

## Running it

[up-tray.webm](https://github.com/user-attachments/assets/8b994faf-a9c0-4bcd-8a68-04e073e1e571)

```sh
./run.sh              # system Python + dnf-installed deps. If anything's
                      # missing it prints the dnf line and exits.
./run.sh --install    # dnf install missing deps, then run
./run.sh --venv       # force a local venv (for code iteration or non-Fedora)
./run.sh --help       # the rest of the flags
```

[Qt must be installed.](https://doc.qt.io/qt-6/get-and-install-qt.html) 

For installed-on-disk daily use use `pip` or build the RPM:
```sh
pip install up-tray
```
or RPM:
```sh
./build-srpm.sh
rpmbuild --rebuild build/srpm/up-tray-*.src.rpm
sudo dnf install ~/rpmbuild/RPMS/noarch/up-tray-*.rpm
up-tray &
```

The RPM is noarch and depends on `python3-pyqt6`, `python3-requests`,
`python3-pyyaml`, `python3-kubernetes`, with `python3-keyring` recommended.
No venv anywhere on the install path.

## Status

Alpha. Cloud, Spaces, kubeconfig, and xpkg paths are wired natively against
the Upbound REST API and the Kubernetes Python client. Composition render
currently shells to `crossplane` until proto stubs are compiled into the
package.
