https://github.com/halsatif/freshctl
windows bootstrap utility
https://github.com/halsatif/freshctl
bootstrap chocolatey cli golang package-manager terminal tui windows
Last synced: 28 days ago
JSON representation
windows bootstrap utility
- Host: GitHub
- URL: https://github.com/halsatif/freshctl
- Owner: halsatif
- License: mit
- Created: 2026-05-26T12:24:53.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2026-05-27T10:02:47.000Z (about 1 month ago)
- Last Synced: 2026-05-27T12:05:15.845Z (about 1 month ago)
- Topics: bootstrap, chocolatey, cli, golang, package-manager, terminal, tui, windows
- Language: Go
- Homepage: https://freshctl.tech
- Size: 3.01 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
freshctl
windows bootstrap utility
install apps from a clean terminal interface.
## Install
PowerShell:
```powershell
irm https://freshctl.tech/install.ps1 | iex
```
Options:
```powershell
# install without launching freshctl afterwards
.\install.ps1 -NoLaunch
# install without prompts
.\install.ps1 -Silent
```
---
## Screenshot

---
## Features
- full catalog search
- category browser
- chocolatey bootstrap
- package selection
- terminal-native tui
- fast setup for fresh Windows installs
- clean minimal interface
---
## Build
```powershell
go mod tidy
go build -o freshctl.exe .
```
Regenerate the website package catalog after editing `internal/catalog/catalog.go`:
```powershell
go run ./cmd/export-catalog
```
Validate the catalog before releases or catalog updates:
```powershell
go run ./cmd/check-catalog
```
---
## Run
```powershell
.\freshctl.exe
```
---
## Uninstall
Use the installer uninstall mode from an elevated PowerShell:
```powershell
iwr https://freshctl.tech/install.ps1 -OutFile "$env:TEMP\freshctl-install.ps1"
powershell -ExecutionPolicy Bypass -File "$env:TEMP\freshctl-install.ps1" -Uninstall
```
This removes:
- `C:\Program Files\freshctl\`
- the freshctl PATH entry
- the Start Menu shortcut
- temporary installer files
It does **not** remove Chocolatey or apps installed through Chocolatey. freshctl uses Chocolatey as the package manager, but it does not own the Chocolatey installation.
To remove Chocolatey too, follow Chocolatey's uninstall guidance: remove `C:\ProgramData\chocolatey` and Chocolatey's environment variables/PATH entries. Be careful: this removes Chocolatey's package state and cache, not the normal Windows apps already installed by package installers.
freshctl currently does not keep a separate config directory. Runtime installer files are temporary and live under:
```text
%TEMP%\freshctl-installer
```
---
## Requirements
- Windows 10/11
- PowerShell
- Administrator privileges may be required
- Internet connection
---
## Package Source
freshctl currently uses Chocolatey as its install backend.
Package managers are implementation details, not the product identity. The goal is simple: download freshctl, open it, choose apps, and install them quietly with clear status and reliable results.
---
## Project Direction
freshctl prioritizes reliability over catalog size. Packages in the default catalog should be verified, suitable for unattended install, and useful on modern Windows 10/11 systems.
Broken, deprecated, interactive, hardware-dependent, or VM-hostile packages should not be shown by default. A smaller verified catalog is better than a large catalog full of unreliable installs.
Future work is focused on a better Windows setup experience: direct installers where they are more reliable, installed-app detection, clearer UX, proxy and network handling, presets, profiles, and safe Windows setup tweaks.
---
## Profiles
Profiles are experimental.
You can create a profile on the website:
1. Open `https://freshctl.tech/#profile`.
2. Select packages.
3. Download `freshctl-profile.json`.
4. Open freshctl and press `o` from the catalog screen.
From the review screen, press `e` to export the current selection to:
```text
freshctl-profile.json
```
From the catalog screen, press `o` to import `freshctl-profile.json` and add its packages to the current selection.
Current profile format is JSON:
```json
{
"version": 1,
"name": "developer setup",
"packages": ["vscode", "git"]
}
```
Profile package IDs must exist in the freshctl catalog.
Command-line profile apply is coming later.
---
## Included Packages
freshctl currently includes packages for:
- browsers
- development tools
- runtimes
- terminals
- media tools
- gaming utilities
- networking
- virtualization
- productivity
- privacy & security
Examples:
- Google Chrome
- Firefox
- VSCode
- Git
- Docker Desktop
- Python
- Node.js
- OBS Studio
- Discord
- Steam
- Tailscale
- PowerToys
- ShareX
- qBittorrent
- VirtualBox
---
## License
MIT License
See [LICENSE](./LICENSE).