# How to Install or Uninstall Features Independently in Vorssaint

> Learn how to install or uninstall features independently in Vorssaint. Easily manage your Vorssaint installation via the Features hub or use uninstall.sh for complete removal.

- Repository: [vorssaint/vorssaint-utils](https://github.com/vorssaint/vorssaint-utils)
- Tags: how-to-guide
- Published: 2026-09-06

---

**Toggle features on or off in the Features hub, or run [`./Tools/uninstall.sh`](https://github.com/vorssaint/vorssaint-utils/blob/main/./Tools/uninstall.sh) to completely remove Vorssaint and all its data.**

Vorssaint is a modular macOS utility that lets you pick exactly which capabilities you need. Unlike monolithic apps, **each feature in Vorssaint is self-contained**—you can enable or disable individual modules without affecting the rest of the application. This guide explains how to manage features through the UI, programmatically, and how to perform a complete uninstall.

## Installing and Uninstalling Features via the Settings UI

The **Features hub** is the primary interface for managing Vorssaint's capabilities.

### Accessing the Features Hub

1. Click the **Vorssaint** icon in your menu bar.
2. Select **Settings → Features**.

You'll see a list of all available features—such as *Volume Mixer*, *Window Switcher*, and *Homebrew Manager*—each with a toggle switch and an **energy badge** indicating its resource usage.

### Enabling a Feature (Installing)

- Flip the toggle **ON** for any feature you want.
- If the feature requires macOS permissions (Accessibility, Screen Recording, etc.), [`PermissionManager.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/PermissionManager.swift) prompts you automatically.
- The feature downloads any necessary components, starts its background worker, and appears in the UI immediately.

According to the [README](https://github.com/vorssaint/vorssaint-utils/blob/main/README.md), *"Everything can be changed later in Settings"* and *"Each feature also wears an honest energy badge"* so you understand the trade-offs before enabling【/cache/repos/github.com/vorssaint/vorssaint-utils/main/README.md#L58-L64】.

### Disabling a Feature (Uninstalling)

- Flip the toggle **OFF**.
- The feature's **UI disappears**, its **background work stops**, and its **runtime hooks are removed**.
- **Settings are preserved** so you can re-enable later without reconfiguration.

This design ensures disabled features consume **zero CPU or memory**—the worker is stopped and unregistered from `FeatureRegistry`.

## How the Modular Architecture Works

Vorssaint's feature system is built on three core components in the source code:

| Component | File Path | Purpose |
|-----------|-----------|---------|
| **Feature Registry** | [`Sources/Vorssaint/Core/FeatureRegistry.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/Sources/Vorssaint/Core/FeatureRegistry.swift) | Maintains the list of features, their identifiers, and enabled states. Notifies workers to start or stop when toggles change. |
| **Features View** | [`Sources/Vorssaint/UI/Settings/FeaturesView.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/Sources/Vorssaint/UI/Settings/FeaturesView.swift) | Renders the toggle UI and binds switches to `FeatureRegistry.enable(featureID:)` and `FeatureRegistry.disable(featureID:)`. |
| **Permission Manager** | [`Sources/Vorssaint/Core/PermissionManager.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/Sources/Vorssaint/Core/PermissionManager.swift) | Requests only the permissions required by the specific feature being enabled. |

When you toggle a feature, `FeatureRegistry` calls the appropriate worker—such as `VolumeMixerWorker` or `WindowSwitcherWorker`—which are **started lazily** and **stopped immediately** upon disable. This guarantees clean isolation: a disabled feature cannot leak memory, spawn processes, or interfere with other features.

## Enabling or Disabling Features Programmatically

For automation, scripting, or custom integrations, Vorssaint exposes a public Swift API through `FeatureRegistry`:

```swift
import Vorssaint

// Enable the "Window Switcher" feature
FeatureRegistry.shared.enable(featureID: .windowSwitcher)

// Disable the "Battery Saver" feature
FeatureRegistry.shared.disable(featureID: .batterySaver)

```

**Feature identifiers** are defined as enum cases in [`FeatureRegistry.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/FeatureRegistry.swift) and map directly to the UI toggles. This API is useful for:

- Corporate deployment scripts that pre-configure Vorssaint for employees.
- Power users who want to trigger features via keyboard shortcuts or other automation tools.
- Testing and development workflows.

## Completely Uninstalling Vorssaint

To **fully remove Vorssaint**—including all features, settings, permissions, and cached data—use the provided uninstall script.

### Running the Uninstall Script

```bash

# From the repository root or the installed bundle's Tools folder

./Tools/uninstall.sh

```

The script at [[`Tools/uninstall.sh`](https://github.com/vorssaint/vorssaint-utils/blob/main/Tools/uninstall.sh)](https://github.com/vorssaint/vorssaint-utils/blob/main/Tools/uninstall.sh) performs four cleanup steps【/cache/repos/github.com/vorssaint/vorssaint-utils/main/Tools/uninstall.sh】:

```bash
#!/usr/bin/env bash

# 1. Quit the running application

osascript -e 'quit app "Vorssaint"'

# 2. Remove the login item launch agent

launchctl unload -w "$HOME/Library/LaunchAgents/com.vorssaint.utils.launcher.plist"

# 3. Revoke all granted macOS permissions

tccutil reset Accessibility com.vorssaint.utils
tccutil reset ScreenRecording com.vorssaint.utils

# 4. Delete application bundle and all related files

rm -rf "/Applications/Vorssaint.app"
rm -rf "$HOME/Library/Application Support/com.vorssaint.utils"
rm -rf "$HOME/Library/Preferences/com.vorssaint.utils.plist"
rm -rf "$HOME/Library/Caches/com.vorssaint.utils"

```

As documented in the README: *"To remove Vorssaint completely … [`./Tools/uninstall.sh`](https://github.com/vorssaint/vorssaint-utils/blob/main/./Tools/uninstall.sh)"*【/cache/repos/github.com/vorssaint/vorssaint-utils/main/README.md#L78-L82】.

### What the Uninstall Script Removes vs. Preserves

| Removed | Preserved (nothing) |
|---------|---------------------|
| Application bundle | N/A—complete removal |
| All user preferences and settings | |
| Granted macOS permissions (Accessibility, Screen Recording, etc.) | |
| Login item and launch agent | |
| Cache and temporary files | |

**Note:** If you only want to disable a feature temporarily, use the **Features hub toggle** instead. The uninstall script is intended for complete removal when you no longer want Vorssaint on your system.

## Summary

- **Install a feature:** Open **Settings → Features** and toggle it **ON**. Permissions are requested automatically, and the feature starts immediately.
- **Uninstall a feature:** Toggle it **OFF** in the same hub. Settings are saved for future re-enable, but all runtime activity stops.
- **Programmatic control:** Use `FeatureRegistry.shared.enable(featureID:)` and `FeatureRegistry.shared.disable(featureID:)` in Swift.
- **Complete removal:** Run [`./Tools/uninstall.sh`](https://github.com/vorssaint/vorssaint-utils/blob/main/./Tools/uninstall.sh) to delete Vorssaint, its permissions, and all associated files.

## Frequently Asked Questions

### Does disabling a feature delete its settings?

**No.** When you toggle a feature off in the Features hub, Vorssaint preserves its configuration. Re-enabling the feature later restores your previous settings without reconfiguration. This differs from the full uninstall script, which deletes all data.

### Can I install features without granting all permissions upfront?

**Yes.** Vorssaint uses [`PermissionManager.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/PermissionManager.swift) to request **only the permissions required by the specific feature** you enable. For example, enabling *Window Switcher* may require Accessibility access, while *Homebrew Manager* needs no special permissions. You never grant permissions for features you don't use.

### What happens if I disable a feature that other features depend on?

**Independent features have no hard dependencies.** Each Vorssaint module is designed to operate in isolation. Disabling one feature cannot break another because there are no cross-feature dependencies in the `FeatureRegistry` architecture.

### Is the uninstall script safe to run if Vorssaint isn't currently running?

**Yes.** The script first attempts to quit the app gracefully with `osascript`, then proceeds with cleanup. If the app isn't running, that step simply completes without error, and the remaining removal steps execute normally.