Foxora fur · 1.4 · ships with Ember 4.1

One command for your whole system.

fur is the package manager, service controller, log reader, and system rebuilder for Foxora — wrapped in a single CLI that finally feels like one tool.

Free · Open source · Linux · macOS · WSL · brew · apt · dnf · nix

Avatar 1Avatar 2Avatar 3Avatar 4
+11k
Already running on 12,000+ machines
Foxora fur · ~/projects/foxora
$fur install nginx
[✓]Resolved 1 package from official catalog
[✓]Downloaded nginx 1.27.3 (2.1 MB)
[✓]Installed in 1.4s
readyFoxora fur · ~/projects/foxora
the friction

Your terminal already speaks five languages.

Installing means apt — or dnf, or pacman, or brew. Starting it means systemctl. Reading logs means journalctl. Cleaning up means autoremove, or nix-collect-garbage, or just rm -rf and a prayer. Six tools. Six syntaxes. One job: keep your machine running.

apt · debian
$ sudo apt install nginx
Reading package lists... Done
The following NEW packages will be installed:
nginx nginx-common nginx-core
After this operation, 4,210 kB of disk space will be used.
Do you want to continue? [Y/n]
dnf · fedora
$ sudo dnf install nginx
Last metadata expiration check: 1:42:08 ago
Dependencies resolved.
═══════════════════════════════════
Install 4 Packages
Is this ok [y/N]:
pacman · arch
$ sudo pacman -S nginx
resolving dependencies...
looking for conflicting packages...
Packages (1) nginx-1.27.3-1
Total Download Size: 2.10 MiB
:: Proceed with installation? [Y/n]
systemctl
$ sudo systemctl enable --now nginx
$ systemctl status nginx
● nginx.service - A high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service
Active: since Mon 14:32:01 UTCactive (running) since Mon 14:32:01 UTC
Docs: man:nginx(8)
journalctl
$ sudo journalctl -u nginx -n 4 -f
Apr 19 14:32:01 host systemd[1]: Starting nginx.service
Apr 19 14:32:01 host nginx[8421]: nginx: configuration ok
Apr 19 14:32:01 host systemd[1]: Started nginx.service
Apr 19 14:32:08 host nginx[8421]: 200 GET / 12ms
nix · cleanup
$ sudo nix-collect-garbage -d
removing old generations of profile /nix/var/nix/...
deleted 1,247 store paths
freed 8.42 GiB
$ nix-store --optimise
different verb to install
different flag style
now you need systemd
where do logs live again?
sudo… again
or is it nix?
5+
syntaxes for `install` alone
8
places your logs might live
0
mental models they share

Foxora fur turns all of this into one command.

the resolution

Now they're one verb.

Same machine. Same job. One CLI. fur replaces apt, dnf, pacman, systemctl, journalctl, and the nix garbage collector with a vocabulary you can remember without a cheat sheet.

Foxora Shell · ~/projects/foxora
fur 1.4 · main
packages
$fur install nginx
✓ Resolved 1 package from official catalog
✓ Installed nginx 1.27.3 in 1.4s
$fur upgrade
✓ 23 packages updated · 0 conflicts · 0 reboots required
services
$fur service start nginx
✓ nginx is now active (running) · enabled at boot
logs
$fur logs nginx -n 3
14:32:01 GET / 200 12ms
14:32:03 GET /api/users 200 87ms
14:32:05 GET / 200 9ms
system
$fur system doctor
✓ Disk: 142 GB free of 500 GB
✓ Memory: 7.2 GB free of 16 GB
✓ Services: 23 running, 0 failed
→ 3 updates available · fur upgrade
1
2
3
4
$
1Packages
One verb for every install.
replaces apt + dnf + pacman + brew
Same syntax for the official catalog, .deb, AppImage, Flatpak, and Foxora Kits.
2Services
Daemons without the dialect.
replaces systemctl
Start, stop, enable, status — same shape as install. No more remembering the unit path.
3Logs
Logs that read like English.
replaces journalctl + tail
Pull recent lines, follow live, filter by service — without the journal flag soup.
4System
Your machine's health, one family.
replaces nix-collect-garbage + autoremove
Doctor, rebuild, rollback, and GC — predictable, reversible, scriptable.

Four jobs. One CLI.

fur installfur servicefur logsfur system
the four families

Four families. Same shape.

Every fur verb takes the same kind of arguments, prints the same kind of output, and speaks the same JSON. Learn one — you've learned them all.

Foxora Shell · ~/projects/foxora
$fur search nginx
nginx 1.27.3 official high-perf web server
nginx-light 1.27.3 official minimal build (no modules)
nginx-full 1.27.3 official +mail +stream +rtmp
$fur install nginx
✓ Resolved 1 package from official catalog
✓ Downloaded nginx 1.27.3 (2.1 MB) in 0.6s
✓ Installed in 1.4s · service registered
$fur upgrade --dry-run
23 packages would be updated · 0 conflicts
run `fur upgrade` to apply
$

Find it. Install it. Forget which catalog it came from.

The same verb installs from the official Foxora catalog, .deb files, AppImages, Flatpaks, or a Foxora Kit — fur picks the right source so you don't have to.

replacesapt + dnf + pacman + brew + dpkg + flatpak
  • Multi-source resolution
    Official catalog, .deb, AppImage, Flatpak, and Kits — same syntax, predictable order.
  • Atomic installs
    Each install is a transaction — rolled back cleanly if anything fails halfway.
  • Dependency-aware upgrades
    fur upgrade resolves the whole graph and tells you exactly what changes before it touches anything.
automation

And every verb above speaks JSON.

Append --json to any fur command and the same operation prints a schema-versioned, automation-ready payload. Pipe it into Ansible, GitHub Actions, or your in-house tooling.

$fur install nginx --json
{
  "action": "install",
  "package": "nginx",
  "version": "1.27.3",
  "source": "official",
  "duration_ms": 1432,
  "installed": ["nginx", "nginx-common"],
  "schema": "fur.install/v1"}

And logs can do one more thing.

fur logs --web ↓
fur logs --web

Your terminal history is a dashboard.

One command boots a local explorer over every fur invocation, every service log, and every system event — with time filters, search, and live tailing. No daemon. No setup. No second tool.

$fur logs --web·→ opening logs explorer at http://localhost:8421
fur · logs
localhost:8421
fur · logs explorer
live1h24h7d30dcustom
events
2,847
+12% vs yesterday
fur commands
52
0 failed
avg latency
187ms
p95 · 412ms
services up
3 / 4
docker · stopped
events / hour · last 24h
okerrors
00:0006:0012:0018:00now
live stream
14:48:14errnginxGET /api/cache 503 4ms
14:48:12errnginxGET /api/cache 503 6ms
14:47:58inffurfur upgrade · 23 packages updated · 0 conflicts
14:47:42infredissaving 2.4 MB to disk
14:47:01okfurfur install nginx · 1.4s
14:46:33infpostgresqlcheckpoint complete · 0.8s
14:46:08oknginxGET / 200 9ms
Zero install.
fur logs --web is the dashboard. No daemon, no Docker, no Grafana, no extra binary. Press Ctrl+C and it's gone.
Same data as the CLI.
Every line in the explorer is a line your terminal already saw. One source of truth, two ways to read it.
Time-span everything.
Filter by minute, hour, day, or a custom range. Search across services, commands, and message text.

And when something breaks, fur knows how to undo it.

atomic · previewable · reversible

Every change is a step you can step back from.

fur runs every install, upgrade, and system change as a transaction. Half-applied state never happens. Mistakes are one command away from undone.

what happens when an upgrade goes wrong
stable10:18
generation
#142
$fur service start redis
services23 / 23
23 / 23 services healthy
fur upgrade postgresql
broken14:48
generation
#143
$fur upgrade postgresql
services22 / 23
22 / 23 · postgres failing
× rolled back
fur system rollback
restored14:48 +4s
generation
← #142
$fur system rollback
services23 / 23
23 / 23 services healthy
generation ledger
#14514:48
fur system rollback
→ now on gen #142
active
#14414:48
fur upgrade postgresql
auto-detected: 1 service failing
rolled back
#14314:32
fur install nginx
ok
#14210:18
fur service start redis
ok
#14109:55
fur upgrade
23 packages updated
ok
Atomic by default.
Every install, upgrade, and system change is a transaction. fur either commits the whole thing or nothing at all — no half-installed packages, no partial config writes.
--dry-run on anything destructive.
Add the flag to preview the exact diff before fur changes a byte. See which packages, services, and files would move — then drop the flag when you're sure.
One-command rollback.
fur system rollback returns to the last known-good generation in seconds. The previous state is always one command away — even after a reboot.

Powerful enough to use. Safe enough to trust.

now let's get it on your machine
ready when you are

Get fur on your machine.

One command. Works on macOS, Linux, and WSL2. We pick the right installer for you, but every other route is one click away.

auto-detectedLinux·x86_64 · arm64
~ 12 MB · single static binary · no dependencies
$curl -fsSL https://foxora.sh/fur | sh
verify$ fur --versionfur 1.4.2 · ships with Ember 4.1
not your platform?
other ways to install
$fur --versionfur1.4.2· ships with Ember 4.1