# How to Update user-scanner to the Latest Version: Auto-Update and Manual Methods

> Easily update user-scanner to the latest version. Learn how to use the auto-update feature or perform a manual update with simple pip commands.

- Repository: [Kaif/user-scanner](https://github.com/kaifcodec/user-scanner)
- Tags: how-to-guide
- Published: 2026-08-30

---

**`user-scanner` ships with a built-in auto-update mechanism that checks PyPI for newer releases, prompts for confirmation, and reinstalls via pip, or you can manually update using standard pip commands.**

Keeping `user-scanner` current ensures you have the latest security checks and network scanning capabilities. Whether you prefer automated updates or manual control, the **kaifcodec/user-scanner** repository provides flexible options to maintain the latest version. This guide covers both the automatic update workflow implemented in the source code and manual pip-based alternatives.

## How the Built-In Auto-Update Works

The auto-update system follows a five-stage pipeline that runs when the CLI starts. According to the source code, the entry point in [`user_scanner/__main__.py`](https://github.com/kaifcodec/user-scanner/blob/main/user_scanner/__main__.py) invokes `check_for_updates()` from [`user_scanner/utils/updater_logic.py`](https://github.com/kaifcodec/user-scanner/blob/main/user_scanner/utils/updater_logic.py), triggering the following sequence:

### Configuration Check via `check_for_updates()`

The update process begins by loading global settings. The `check_for_updates()` function calls `load_config()` from [`user_scanner/core/helpers.py`](https://github.com/kaifcodec/user-scanner/blob/main/user_scanner/core/helpers.py) to verify the `auto_update_status` flag. If this boolean value is `False`, the update check exits immediately, respecting user preferences to skip automatic checks.

### Version Retrieval from PyPI

When auto-updates are enabled, the system compares local and remote versions using functions defined in [`user_scanner/core/version.py`](https://github.com/kaifcodec/user-scanner/blob/main/user_scanner/core/version.py):

- **`load_local_version()`** reads the currently installed version from the package metadata
- **`get_pypi_version()`** fetches the latest release from `https://pypi.org/pypi/user-scanner/json`

If the PyPI version differs from the local installation, the user receives an interactive prompt with three options: update now (`y`), skip this version (`n`), or disable future prompts (`d`).

### The Self-Update Execution

Selecting the update option triggers `update_self()` from [`user_scanner/utils/update.py`](https://github.com/kaifcodec/user-scanner/blob/main/user_scanner/utils/update.py). This function executes two pip subprocesses sequentially:

```python
subprocess.check_call([sys.executable, "-m", "pip", "uninstall", "user-scanner", "-y"])
subprocess.check_call([sys.executable, "-m", "pip", "install", "user-scanner"])

```

After successful completion, the program exits with a message prompting you to restart the tool to run the new version.

## How to Update user-scanner Manually

If you prefer command-line control or need to update without running the tool first, use standard pip commands. The manual approach executes the same operations as the automatic updater.

To perform a clean reinstall (matching the auto-update behavior):

```bash
python -m pip uninstall -y user-scanner
python -m pip install --upgrade user-scanner

```

To upgrade without uninstalling (simpler one-liner):

```bash
python -m pip install --upgrade user-scanner

```

## Configuring Auto-Update Settings

You can programmatically enable or disable automatic update checks by modifying the configuration stored via [`user_scanner/core/helpers.py`](https://github.com/kaifcodec/user-scanner/blob/main/user_scanner/core/helpers.py). The `save_config_value()` function persists the `auto_update_status` boolean to disk.

To disable auto-updates (equivalent to selecting "don't ask again"):

```python
from user_scanner.core.helpers import save_config_value

save_config_value("auto_update_status", False)

```

To re-enable automatic update checks:

```python
from user_scanner.core.helpers import save_config_value

save_config_value("auto_update_status", True)

```

These changes affect subsequent runs of `check_for_updates()` without requiring code modifications.

## Programmatic Update Control

For custom workflows or admin scripts, you can trigger the update logic directly from Python without relying on the automatic startup check.

To force an immediate update regardless of configuration settings:

```python
from user_scanner.utils.update import update_self

update_self()

```

To manually invoke the version check (including the user prompt):

```python
from user_scanner.utils.updater_logic import check_for_updates

check_for_updates()

```

## Summary

- **Automatic updates** rely on `check_for_updates()` in [`updater_logic.py`](https://github.com/kaifcodec/user-scanner/blob/main/updater_logic.py), which validates the `auto_update_status` config flag, queries PyPI via `get_pypi_version()`, and executes `update_self()` to reinstall the package
- **Manual updates** use standard pip commands: `python -m pip install --upgrade user-scanner` performs a straightforward upgrade, while uninstalling first ensures a clean installation
- **Configuration management** occurs through `save_config_value()` in [`core/helpers.py`](https://github.com/kaifcodec/user-scanner/blob/main/core/helpers.py), allowing you to toggle `auto_update_status` between `True` and `False`
- **Key source files** include [`user_scanner/utils/updater_logic.py`](https://github.com/kaifcodec/user-scanner/blob/main/user_scanner/utils/updater_logic.py) (orchestration), [`user_scanner/utils/update.py`](https://github.com/kaifcodec/user-scanner/blob/main/user_scanner/utils/update.py) (pip execution), [`user_scanner/core/version.py`](https://github.com/kaifcodec/user-scanner/blob/main/user_scanner/core/version.py) (version comparison), and [`user_scanner/core/helpers.py`](https://github.com/kaifcodec/user-scanner/blob/main/user_scanner/core/helpers.py) (config persistence)

## Frequently Asked Questions

### How do I disable automatic update checks in user-scanner?

Set the `auto_update_status` configuration flag to `False` using `save_config_value("auto_update_status", False)` from [`user_scanner/core/helpers.py`](https://github.com/kaifcodec/user-scanner/blob/main/user_scanner/core/helpers.py), or select the "don't ask again" (`d`) option when prompted during an automatic check. This persists the setting and prevents future `check_for_updates()` calls from querying PyPI.

### Can I trigger an update without restarting user-scanner?

No. When `update_self()` executes successfully, it calls `sys.exit()` after reinstalling the package. You must restart the Python process or CLI session to load the newly installed version, as the running code cannot reload its own package files while executing.

### What is the fastest way to update user-scanner manually?

Run `python -m pip install --upgrade user-scanner` in your terminal. This single command downloads and installs the latest PyPI release without requiring interaction. For a completely clean installation that matches the auto-update behavior, uninstall first with `python -m pip uninstall -y user-scanner`.

### Where does user-scanner store its update configuration?

The configuration persists through functions in [`user_scanner/core/helpers.py`](https://github.com/kaifcodec/user-scanner/blob/main/user_scanner/core/helpers.py). The `load_config()` and `save_config_value()` functions manage the `auto_update_status` boolean and other settings in the package's configuration storage, which `check_for_updates()` references at startup to determine whether to query PyPI.