Metadata-Version: 2.4
Name: qviple
Version: 1.0.518.559
Summary: Qviple Desktop for macOS and Windows — the signed, notarized/signed Qviple app, installable and auto-updated via pip
Author: Mithkal Minds Private Limited
Project-URL: Homepage, https://qviple.com
Project-URL: Download, https://qviple.com/download
Project-URL: Source, https://github.com/Pankajphad/qviple_desktop
Keywords: qviple,desktop,macos,windows,education
Classifier: License :: Other/Proprietary License
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Environment :: MacOS X
Classifier: Environment :: Win32 (MS Windows)
Classifier: Programming Language :: Python :: 3
Classifier: Intended Audience :: End Users/Desktop
Requires-Python: >=3.9
Description-Content-Type: text/markdown

# Qviple Desktop via pip

Install, launch, and auto-update the signed Qviple desktop app straight from PyPI — on **macOS** and **Windows**.

```sh
pip install qviple
qviple
```

The `qviple` command is a small bootstrapper: on each run it checks PyPI for a newer version, upgrades itself with `pip` when one exists, then extracts/installs and launches the bundled app.

- **macOS** — extracts the notarized `Qviple.app` to `~/Library/Application Support/Qviple/pypi/<version>/` (one-time, ~150 MB) and `open`s it.
- **Windows** — runs the signed installer once into `%LOCALAPPDATA%\Programs\Qviple\` and launches `Qviple.exe`.

## Requirements

- macOS 12.2+ (universal binary — Apple Silicon and Intel), or Windows 10/11 (x64)
- Python 3.9+

## Commands

| Command | What it does |
|---|---|
| `qviple` | Auto-update if needed, then launch Qviple |
| `qviple --no-update` | Launch without checking PyPI for updates |
| `qviple --check-update` | Print whether a newer version is available, then exit |
| `qviple --version` | Print the installed version |
| `qviple --uninstall` | Remove the extracted/installed app copies |

Set `QVIPLE_NO_AUTO_UPDATE=1` to disable the automatic update check globally. Set `QVIPLE_PYPI_BASE_URL=https://test.pypi.org` to target TestPyPI.

## Uninstall completely

```sh
qviple --uninstall
pip uninstall qviple
```

## How updates work

`pip install qviple` is the **only** distribution + update channel for the direct desktop app — GitHub Releases is not used anywhere.

1. CI publishes a new, strictly-increasing version to PyPI on every push to `main`.
2. The `qviple` launcher (and the app's in-app "Update" button) query `https://pypi.org/pypi/qviple/json`, compare the installed version to the latest **stable** version numerically, and run `python -m pip install --upgrade qviple` (using the exact interpreter that launched the app) when a newer one exists.
3. The app restarts through the launcher, which extracts/installs and opens the new build.

## Rollback (maintainers)

- **Bad wheel, good app:** `pip yank` the release on PyPI (yanked versions are skipped by the default resolver but stay installable when pinned), then publish a fixed wheel as `A.B.C.N.postM`.
- **Bad app build:** yank on PyPI and roll forward — bump the pubspec version and re-run the release workflow, which publishes a new PyPI version.
- PyPI never allows re-uploading a deleted version number — always roll forward with `.postN` or a new version.

## Release (maintainers)

Every push to `main` runs the **PyPI Release** workflow (`.github/workflows/pypi_release.yml`): it validates + tests, builds and signs/notarizes the desktop app, wraps it in a platform wheel via `tool/pypi/scripts/build_wheel.sh <platform> <installer> <version>`, and publishes to PyPI via **Trusted Publishing** (OIDC) — no token secrets. Windows wheels publish once the `ENABLE_WINDOWS_DIRECT` repo variable is set to `true`.
