Shelly Changelog
v3.1.1
What’s Changed
- Update pt br translations by @VinnyQF in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1791
- added makesrcinfo by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1795
- No search result by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1797
- Various builder fixes @ZoeyErinBauer
- Proxy env variable support
Full Changelog: https://github.com/Seafoam-Labs/Shelly-ALPM/compare/v3.1.0...v3.1.1
v3.1.0
Shelly-ALPM v3.1.0 — Building Arch Packages, the Shelly Way
Shelly v3.1 is here, and its headline feature is something we have wanted since before the Zig rewrite began: Shelly can now build Arch Linux packages itself.
Until now, Shelly handled AUR discovery, dependency resolution, package review, and installation while handing the actual PKGBUILD execution to makepkg. In v3.1, that final handoff is gone from the default AUR workflow. Shelly now owns the complete build pipeline, from reviewing a PKGBUILD to publishing a signed, pacman-compatible package archive.
This is not a wrapper around makepkg. The new builder is part of Shelly’s native package-management library and can be used directly through the new shelly build command.
🏗️ Meet shelly build
Point shelly build at a PKGBUILD and Shelly will turn it into an installable Arch package:
# Build ./PKGBUILDshelly build
# Build a PKGBUILD somewhere elseshelly build /path/to/PKGBUILD
# Install missing dependencies and then buildshelly build --sync-deps /path/to/PKGBUILDShelly follows the familiar PKGBUILD lifecycle while managing the entire process internally:
- Parse the PKGBUILD without immediately executing its top-level shell code.
- Display the PKGBUILD, related files, and security findings for review.
- Lock the approved contents with an integrity digest.
- Safely evaluate dynamic metadata and re-review any newly discovered files.
- Download and verify sources.
- Run
verify(),prepare(),pkgver(),build(), andcheck()when present. - Run
package()or the appropriate split-package function. - Generate package metadata, assemble the archive, and optionally sign it.
- Publish the finished artifacts and clean temporary work directories.
The result is still a normal Arch package. Shelly writes makepkg-compatible .PKGINFO, .BUILDINFO, .MTREE, .INSTALL, and .CHANGELOG entries and produces archives that pacman and other Arch tools understand.
📦 Full PKGBUILD support
The builder is designed around Arch’s existing PKGBUILD format rather than introducing a Shelly-specific recipe format.
It supports:
- Standard
verify(),prepare(),pkgver(),build(),check(), andpackage()functions. - Single packages and split packages, including package-specific metadata overrides.
- Dynamic package names and package arrays resolved by top-level Bash logic.
- Architecture-specific sources, checksums, dependencies, and metadata.
- The usual
$startdir,$srcdir,$pkgdir,$CARCH, and$CHOSTbuild variables. - PKGBUILD helper functions and makepkg-style
msg,msg2,plain,warning, anderroroutput helpers. - Local files, HTTP and HTTPS downloads,
file://sources, and Git repositories. - Renamed sources using the
name::urlsyntax. - Git branches, tags, commits, and signed Git objects.
noextract=()handling and automatic extraction of supported archives.- MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, and BLAKE2 checksums.
- Detached
.sig,.sign, and.ascsignatures, including compressed signatures. validpgpkeys=()fingerprint enforcement.- Dynamic
pkgver()results and package metadata changed insidepackage()functions. - Package architecture validation and correct
anypackage output. - Split-package selection using the advanced, repeatable
--package <name>option. - Configurable build flags, LTO flags, make flags, ccache, and distcc.
- Detached signing of completed package archives.
Shelly also provides virtual root-ownership handling during package(). Common commands such as chown root, chgrp root, and install -o root -g root work without changing ownership on the host. The archive writer records the correct root ownership in the package itself. Device-node creation and unsupported privileged metadata operations are rejected.
🛡️ Beyond makepkg and improving trust
makepkg is the official Arch package-building tool. Shelly’s builder keeps the parts package maintainers expect while adding protections and package-manager integration that makepkg does not provide on its own.
Review before execution
Shelly does not begin by blindly sourcing the PKGBUILD. It parses the file first and presents it for review before allowing package-controlled code to run.
The review includes:
- The complete PKGBUILD.
- Local source files.
- Install scripts and changelogs.
- Binary-file warnings.
- Suspicious post-install commands.
- Homograph and lookalike-character warnings.
- Unsafe local-source references.
- Top-level command substitutions that will execute during the build.
If dynamic PKGBUILD evaluation discovers additional sources, install scripts, or split-package members, Shelly stops and asks for a supplemental review.
Review integrity protection
Approving a file is not enough if that file can be changed before it executes. Shelly hashes the PKGBUILD and every related reviewed file, then checks those contents again immediately before execution.
The same digest is carried across privilege elevation when --sync-deps is used. If the PKGBUILD, install script, changelog, or local source changes after approval, the build is rejected.
Packaging also uses the exact reviewed bytes for install scripts and changelogs instead of reopening those files later.
Optional Landlock confinement
Shelly can place every untrusted PKGBUILD lifecycle step inside a Linux Landlock filesystem sandbox.
When enabled, the build functions can access the build directory and normal system toolchain paths, but they cannot freely browse or modify the user’s home directory. Extra read-only or writable paths can be granted for tool caches such as Cargo, Gradle, npm, or ccache.
The sandbox applies to:
- Dynamic PKGBUILD evaluation
verify()prepare()pkgver()build()check()package()and split-package functions
Source downloads, package assembly, logging, and GPG signing stay outside the sandbox, so the user’s GPG keyring never needs to be exposed to package-controlled code.
Landlock is opt-in. When enabled on a system without Landlock support, Shelly fails before executing the first build step instead of silently running the build without protection.
AUR-aware dependency installation
--sync-deps resolves dependencies through Shelly’s package manager rather than simply passing them to pacman.
That means it can:
- Detect dependencies already satisfied by installed packages or
provides=(). - Install missing repository dependencies.
- Locate and build dependencies that are only available from the AUR.
- Resolve dependencies for every requested split-package member.
- Include
checkdependsonly when tests are enabled. - Keep runtime dependencies installed.
- Remove newly installed build-only and check-only dependencies afterward.
- Perform that cleanup after both successful and failed builds.
By comparison, makepkg’s documented --syncdeps delegates missing dependencies to pacman, while --rmdeps removes them only following a successful build. It does not independently build missing AUR dependencies. See the official makepkg documentation.
The elevated Shelly process only coordinates dependency transactions. The PKGBUILD itself is always executed again as the original non-root user, with NO_NEW_PRIVS applied to the builder and inherited by its children.
Guided PGP key handling
When a PKGBUILD pins source-signing keys through validpgpkeys=(), Shelly checks the invoking user’s keyring before downloading and building.
If a required key is missing, Shelly shows the complete fingerprint and asks whether it should be imported using shelly keyring recv --user. After import, the key is checked again before the build continues.
Detached signatures and signed Git objects must match the pinned primary fingerprint. Bad, revoked, missing, or unexpected keys fail the build.
Safer source handling
Shelly’s source pipeline adds several defensive boundaries:
- Every non-VCS source must have integrity checks.
- Cached downloads are written to temporary files and atomically committed.
- A cached HTTP source that fails its checksum is discarded, downloaded again, and rechecked.
- Git sources use reusable mirrors that are refreshed before local materialization.
- All sources are acquired and verified before any archive is extracted.
- Archive extraction rejects absolute paths, directory traversal, unsafe symlink destinations, and oversized entries.
- Source trees are assembled in staging directories and only moved into place after preparation succeeds.
Atomic package publication
Completed archives are written under randomized temporary names. Shelly publishes them with an atomic rename only after archive creation and optional signing succeed.
If any member of a split-package build fails, already published artifacts from that build are removed. Signatures are rolled back with their corresponding packages, avoiding partial split-package results and orphaned .sig files.
Structured progress and mandatory logs
Every build is a structured Shelly operation. Output can be streamed into the normal CLI or the GTK transaction interface, with phase changes, package names, errors, progress percentages, cancellation, review questions, and completed artifact paths preserved as distinct events.
Every build also receives a log before source processing begins. Logs:
- Record phase boundaries.
- Label stdout and stderr separately.
- End with
success,failed, orcancelled. - Are retained for every outcome.
- Fail the build if Shelly cannot create or continue writing the log.
Logging in makepkg is optional through --log; Shelly makes the audit trail part of the build contract. See makepkg(8).
🎛️ shelly build options
--reviewed,-r— skips the interactive review prompt when the caller has already reviewed the package. Integrity hashing and change detection remain active.--sync-deps,-s— installs missing repository and AUR dependencies, runs the build as the invoking user, and removes build-only dependencies afterward.--check,-c— runscheck()and includescheckdepends.--no-check— skipscheck()and does not installcheckdepends.--sign— creates a detached OpenPGP signature beside every package archive.--nosign— disables signing even when it is enabled in configuration.--key <fingerprint>— selects the GPG key used to sign the finished package.--noverify— skips the PKGBUILD’s customverify()function. It does not disable built-in checksum or source-signature verification.--package <name>— builds only the selected split-package member. It may be repeated to select several members.--isolated,-i— reserved for the future isolated-root builder and currently nonfunctional.
The usual Shelly global options, including noninteractive and UI operation modes, continue to apply.
⚙️ Introducing shellybuild.conf
The new builder has its own configuration file, shellybuild.conf. It replaces makepkg.conf for Shelly’s in-process builder only.
Shelly merges:
/etc/shellybuild.conf$XDG_CONFIG_HOME/shelly/shellybuild.conf~/.config/shelly/shellybuild.confwhenXDG_CONFIG_HOMEis unavailable
The system file installed by Shelly is a commented template, so upgrading does not silently replace the builder’s compiled defaults. It is also registered as a pacman backup file so local administrator changes are preserved.
Configuration covers:
- Target architecture and host triplet.
- C, C++, preprocessor, linker, LTO, and make flags.
- Default
check()behavior. - ccache and distcc.
- Packager identity and package archive format.
- Package options and strip flags.
- Signing defaults and signing key.
- Separate build, package, source-cache, and log destinations.
- Landlock enablement and additional read or write paths.
Unlike makepkg.conf, which is sourced as shell code, shellybuild.conf is data-only TOML. Unknown keys, unsupported options, malformed values, unsafe extensions, and relative destination paths fail before the PKGBUILD runs. See the official description of sourced makepkg configuration in makepkg.conf(5).
PKGBUILD options=() entries still override configured package options using the familiar option and !option form.
🐚 A better AUR workflow everywhere
The standalone command and Shelly’s regular AUR installs use the same builder. Improvements made to shelly build therefore also apply when installing or upgrading AUR packages from the CLI or GTK application.
This release also improves compatibility with real-world PKGBUILDs:
- Added dynamic scalar and indexed-array evaluation.
- Fixed dynamically generated split-package members.
- Improved architecture-specific metadata and package selection.
- Added support for top-level Bash expansion and source command substitution.
- Fixed local source names containing spaces.
- Improved Linux kernel and NVIDIA DKMS package builds.
- Added source-signing key support needed by packages such as Spotify.
- Improved handling for source-less packages, bare Git sources, package metadata overrides, and makepkg message functions.
- Made PKGBUILD review contents selectable and copyable in the GTK interface.
- Improved failure reporting so the failing package and lifecycle stage are easier to identify.
✨ More v3.1 improvements
Beyond the builder, v3.1 includes another substantial round of reliability and usability work:
- Added
run0as a supported privilege-elevation backend. - Improved shell completion for bare actions and combined shortcodes.
- Fixed terminal table wrapping and rendering artifacts.
- Made optional-dependency prompts identify the package they belong to.
- Improved transaction completion and failure output.
- Allowed combined updates to continue when an optional backend is disabled or unavailable.
- Improved ALPM errors, package cache recovery, hooks, and human-readable transaction logging.
- Added gzip and deflate HTTP response support and fixed TLS initialization and stalled response-body timeouts.
- Improved AppImage update detection, static URL validation, symlink handling, metadata cleanup, icons, and update editing.
- Removed the remaining C# AppImage database migration bridge.
- Updated German, French, Hungarian, Polish, Russian, and other translations.
🔄 Upgrade notes
shelly buildcreates packages but does not install its standalone output. Shelly’s normal AUR install workflow handles both building and installation.- Landlock confinement is disabled by default and must be enabled in
shellybuild.conf. - The sandbox restricts filesystem access, not networking.
/tmpremains shared and/procremains visible. - Clean or isolated root builds are still being developed. The current
--isolatedoption must not be relied on. - The current source pipeline supports local files,
file://, HTTP, HTTPS, and Git. Other makepkg VCS protocols and arbitraryDLAGENTSare not yet supported. - Source-package creation,
SRCPKGDEST, repackaging, integrity generation, and arbitrary shell configuration are not currently provided byshelly build. - Shelly’s content-changing tidy phase currently implements binary and library stripping. Some additional makepkg package options are recognized for compatibility but are not yet fully modeled.
- External
makepkgand clean-chroot workflows do not readshellybuild.conf.
❤️ Thank you, contributors!
Shelly v3.1 represents months of work across the package builder, PKGBUILD parser, AUR manager, CLI, GTK interface, AppImage support, networking, translations, and transaction system.
A huge thank you to everyone who helped build and test this release:
- @ZoeyErinBauer
- @caroberrie
- @azdanov
- @VinnyQF
- @Henry2o1o
- @hotline1337
- @adem4ik
- @ethanhawkes-gif
- @Impostor0729
- @juliazero
- @Scott-Nx
- @roxfr
Full Changelog: v3.0.6…v3.1.0
Release pull request: #1793
v3.0.6
What’s Changed
- Master merge back by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1691
- Fix comma splice in aur_page.ui by @mpatankar6 in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1692
- Remove quotes from TryExec desktop entries by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1694
- Fix menu item ID handling by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1699
- Valgrind by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1703
- fix a few tiny leaks by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1708
- ver bump to 3.0.6 by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1713
- 3.0.6 release by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1714
New Contributors
- @mpatankar6 made their first contribution in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1692
Full Changelog: https://github.com/Seafoam-Labs/Shelly-ALPM/compare/v3.0.5...v3.0.6
v3.0.5
What’s Changed
- back merge into dev by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1686
- Polkit warning by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1689
Full Changelog: https://github.com/Seafoam-Labs/Shelly-ALPM/compare/v3.0.4...v3.0.5
v3.0.4
What’s New in Shelly 3.0.4
Features & Improvements
- New Shelly search experience (#1681)
- Start of TUI (#1645)
- Add AUR link to the AUR detail view (#1626)
- Improve AppImage integration (#1661)
- Update Polkit warning (#1657)
- Update tray indexing (#1638)
- Update UI D-Bus call (#1627)
- Inject pkgname from array for split packages (#1634)
- Report missing PKGBUILD source files consistently (#1673)
- Remove the legacy Vala tray implementation (#1670)
- Add man page generation and installation for the Shelly CLI (#1677)
Flatpak
- Add end-of-life detection and rebase support (#1650)
- Resolve branch from remote metadata (#1648)
- Show verified status for Flatpak apps (#1651)
- New remove dialog (#1680)
Bug Fixes
- Fix status label (#1631)
- Fix problem installing sabnzbd from the AUR (#1668)
- Fix welcome screen layout (#1672)
- Fix tray icon and reaping of spawned processes (#1676)
Shell Completions
- Fix Zsh autocompletion for install and remove (#1647)
- Improve Bash and Fish argument completions (#1678)
- Add command shortcodes for Bash and Fish completions (#1679)
Testing
- Add test for the install script (#1635)
Translations
- Updated Spanish (#1629), Japanese (#1643), Russian (#1658), Polish (#1665), German (#1667), and Basque translations (#1623)
- Refreshed translation files (#1660)
Contributors
@caroberrie @azdanov @ZoeyErinBauer @adem4ik @utuhiro78 @juliazero @bingenm @Henry2o1o
New Contributors
- @Marks20125 made their first contribution (#1629)
- @mariuskreutzer made their first contribution (#1647)
Full Changelog: https://github.com/Seafoam-Labs/Shelly-ALPM/compare/v3.0.3...v3.0.4
v3.0.3
What’s Changed
- repo package search desc. by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1567
- Pt br update by @VinnyQF in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1543
- added experimental aarch64 support to pkgbuilds that are not prebuild by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1577
- update tray. by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1579
- 1565 bug aur update error does not mention which package is failing by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1581
- add url to repo and aur packages. by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1583
- Updating tray service translations for shelly v3. by @VinnyQF in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1570
- Update UI term output by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1584
- add install date in installed only mode by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1585
- fix provider selection by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1587
- Fix dropdown filtering and restore selection after model rebuild by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1590
- UI hotkeys by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1593
- flatpak: fix detail page forcing the window abnormally wide by @SunnyKerman in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1562
- Add missing selected_label text by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1596
- Update de_DE.po by @Henry2o1o in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1580
- Fix provider question parsing and answering logic by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1597
- Update release.yml by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1598
- Flag for devel disable by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1599
- Add installed status for package search by @SimoneFelici in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1586
- Update Russian translation by @adem4ik in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1563
- Updated Greek translation and added in language_entries list by @antwnhsx in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1600
- add ui selection for aur and flatpak individual updates by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1601
- locales: Add Basque (eu) translation for Notifications and UI modules by @bingenm in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1437
- Remove unused translation messages by @utuhiro78 in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1588
- Translations update by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1603
- Update Polish translation by @juliazero in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1479
- Fix typo (on;y -> only) by @utuhiro78 in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1607
- updating startup code in main.zig by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1609
- fix appstream parse bug by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1610
- added cache clean option to upgrade. fixed at 3 versions by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1617
- Add remove repo by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1613
- update transaction page by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1615
- Update Japanese translation by @utuhiro78 in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1608
- fix symlink issue by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1618
- changed cache directory by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1619
- fixed user flatpak things for special people who like to only use user by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1620
- v3.0.3 by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1621
- fixed release.yml by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1622
New Contributors
- @SunnyKerman made their first contribution in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1562
- @bingenm made their first contribution in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1437
Full Changelog: https://github.com/Seafoam-Labs/Shelly-ALPM/compare/v3.0.2...v3.0.3
v3.0.2
What’s Changed
- refactor orphans by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1546
- update ci cd and push a broken change to test on pr. by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1552
- Zig tray by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1551
- 1548 bug packages with a period symbol are parsed incorrectly by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1553
- update defualt page drop down handling by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1555
- 1542 bug varlibpacmandblck locks shelly without an error message by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1557
- forced confirmation on suspicious pkgbuilds by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1558
- fix locale drop down. by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1556
- v3.0.2 by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1559
Full Changelog: https://github.com/Seafoam-Labs/Shelly-ALPM/compare/v3.0.1+1...v3.0.2
v3.0.1+1
What’s Changed
- Pass remote name to Flatpak install commands and rename functions by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1494
- Remove autogenerated files by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1495
- Update Russian translation by @adem4ik in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1496
- Cli detail output by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1499
- Centralize CLI color handling with semantic palette by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1500
- Add Zed GTK UI build task and debug config by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1502
- Update Spanish translation by @tigce2 in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1487
- fix forjego app image issue. by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1509
- fix for first seen parsing. by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1510
- New warning dialog by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1511
- fix app image install by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1512
- fixed cache clean output. by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1515
- fixed app image symlink follow issues. by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1526
- Improve PKGBUILD review for binary sources and privilege elevation by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1522
- allowed for better version matching with the url builder by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1527
- update aur page alignment by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1529
- adding update default by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1530
- 1486 bug shelly list updates standard gpfs immediately on cachyos by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1531
- added description and install status by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1533
- in flatpak remote info fix use after free by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1534
- 3.0.1+1 by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1535
New Contributors
- @adem4ik made their first contribution in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1496
Full Changelog: https://github.com/Seafoam-Labs/Shelly-ALPM/compare/v3.0.1...v3.0.1+1
v3.0.1
What’s Changed
- UI tweaks by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1467
- Delete wiki directory by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1468
- Fix operation error reporting and add Flatpak install dialog by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1473
- fixing url icon by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1476
- add keybinds by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1477
- fixes connected top nav by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1478
- Add –install-path option for AppImage installation by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1481
- Add AUR package detail view with –detail flag by @azdanov in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1485
- fixed the way package selection is calculated to favor exact matches by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1488
- Fix gnome by @caroberrie in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1491
- Pkguild preview update by @VinnyQF in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1482
- Bug Fixes for v3.0.1 by @ZoeyErinBauer in https://github.com/Seafoam-Labs/Shelly-ALPM/pull/1492
Full Changelog: https://github.com/Seafoam-Labs/Shelly-ALPM/compare/v3.0.0+9...v3.0.1
Shelly V3.0.0
Shelly-ALPM v3.0.0 — A New Era for Shelly
Shelly v3 is here, and this is easily our biggest release yet! Rather than adding another layer to the existing application, we went back to the foundation and rebuilt almost every major part of Shelly. The package-management core, command-line interface, keyring tool, and GTK4 desktop app have all moved from the v2 C#/.NET codebase to Zig.
The rewrite gives Shelly a much cleaner base to build on, removes the managed .NET runtime from the main application, and makes the connection between Shelly and native Arch Linux libraries far simpler. The familiar shelly and shelly-ui commands are still
there, but nearly everything powering them is new.
⚡ Why Zig matters
This is where the v3 rewrite really shines. Zig is a great fit for a package manager because Shelly already works closely with native Linux libraries such as libalpm, GTK4, libarchive, and GPG. Shelly v3 can call those libraries directly through native bindings instead of moving data through a managed runtime and a large interop layer.
In practical terms, the move to Zig gives Shelly:
- Fast, ahead-of-time compiled native executables with no managed .NET runtime or garbage collector to start and manage.
- More predictable memory and resource lifetimes through explicit allocators and ownership.
- Better compile-time checking at the C library boundary, including generated
libalpmbindings. - Less runtime machinery between the UI, CLI, and package-management code. That gives Shelly a strong foundation for quicker startup and lower resource use, with proper benchmark work still to come.
- One native build and test workflow for the CLI, UI, keyring helper, package manager, and optional Flatpak backend.
- Release-safe builds for the desktop application and size-optimized builds for command-line tools.
The rewrite also let us remove hundreds of old C# source files and retire the previous .NET projects instead of dragging two implementations forward. Making the projects much simpler while providing similar feature sets. It is a huge cleanup and an even bigger step toward making Shelly easier to improve release after release.
🖥️ A completely rebuilt GTK4 experience
The desktop app has been rebuilt in Zig on GTK4, and it feels like a new generation of Shelly. Pages, dialogs, background operations, and communication with the CLI now sit on a cleaner structure, giving the interface plenty of room to grow.
- Updated the new first-run welcome screen that helps users choose AUR, Flatpak, and AppImage support. Shelly can even install the optional requirements when a feature is enabled.
- Reworked package browsing with list and grid layouts, sortable columns, better selection behavior, source labels, installed-state filtering, and more complete package details.
- Improved AUR details, optional dependency selection, PKGBUILD previews, review prompts, and visible
makepkgoutput. - Rebuilt update planning and transaction progress so the UI can show the full operation output without locking up during longer tasks.
- Refined Flatpak management experience with new navigation and new page for installing from bundles and refs.
- AppImage installation made safer installs are less likely to leave ghost entries behind.
- Moved maintenance actions into a dedicated Utilities page, including database synchronization, stale lock repair, permission repair, package cache cleanup, and orphan cleanup.
- Added autosaving settings, configurable sidebar or top-bar navigation, default-page selection, and useful keyboard shortcuts.
- Improved tray startup and shutdown behavior, single-instance window raising, icons, spacing, theme colors, and a long list of smaller GTK details that make Shelly feel more polished.
🐚 A fully native CLI
The shelly CLI has also been rebuilt from the ground up in Zig. It keeps the readable long-form commands and pacman-like shortcodes, while one native command catalog now powers help, documentation, and shell completions.
- Running
shelly <search terms>can now search standard repositories and the AUR, then send the selected result straight into the normal install flow. - Combined update checks and upgrades coordinate standard packages, AUR packages, AppImages, and Flatpaks. An unavailable optional backend no longer has to prevent the independent sources from continuing.
- Added a package backup export and import using a readable TOML format.
- Added and expanded commands for package marking, downgrade selection, Arch news, keyring management, configuration, package cache cleanup,
pacnew/pacsavehandling, stale database lock repair, and permissionrepair. - Added Bash completion generation alongside Fish and Zsh, making the new CLI nicer to use right away in more shells.
- Improved confirmations and transaction previews, including explicit review before system upgrades and before AUR builds.
- Kept structured JSON output for supported commands and added a framed output mode used by the GTK UI.
🛡️ Smarter package management and stronger reliability
- Brought ALPM repository configuration, database synchronization, package queries, dependency resolution, installs, removals, upgrades, and downgrades into the new native package-management library.
- Added parallel repository database synchronization, mirror retry handling, package database signature verification, and clearer signature failures.
- Preserved the Happy Eyeballs-style network behavior from late v2 and tightened it with response-body validation, redirect handling, mirror fallback, and more reliable timeout behavior.
- Improved handling for ignored packages and groups, repository usage flags, custom and single-server repositories, installed package reasons, optional dependencies, split packages, and packages already available in system repositories.
- Ported PKGBUILD parsing and the post-install and homograph checks used during AUR review.
- AUR upgrades can now review all changed PKGBUILDs before the transaction begins, rather than interrupting the upgrade one package at a time.
- Fixed cases where optional dependencies could be removed even though another installed package still needed them.
- Fixed AUR build hangs, incorrect AUR versions, missing built packages, AppImage ghost entries, stale update plans, and several UI state and selection issues.
📦 Flatpak is now truly optional
One of the most exciting structural improvements in v3 is the new optional Flatpak backend. Flatpak support is now shipped as the separate shelly-flatpak-backend package. The base Shelly CLI package does not link to libflatpak, GLib/GIO, or OSTree for Flatpak operations, and it does not load the backend while running non-Flatpak commands.
The backend communicates through a versioned native ABI with a strict message schema and explicit ownership rules. Shelly checks the ABI before use, rejects an incompatible backend cleanly, and keeps ALPM, AUR, AppImage, help, version, and completion commands available when Flatpak support is not installed.
This split keeps the base install lean for people who do not use Flatpak, while letting anyone add full Flatpak support later without rebuilding or reinstalling Shelly. It is a cleaner design for both kinds of users.
🔄 Upgrade notes
- Existing configuration files are overlaid on the new native defaults, so normal settings should carry forward. Unknown old fields are ignored.
- Flatpak users should install both
flatpakandshelly-flatpak-backend. Shelly will explain what is missing if a Flatpak command is used without them. - The standalone keyring executable is now
shelly-keyinstead ofshelly-keys. The supportedshelly keyring ...commands should be preferred in scripts. - The CLI was substantially rebuilt. Existing automation should be checked against
shelly --help, especially if it depended on exact human-readable output. Use--jsonwhere a command supports it. - Clean-chroot AUR builds are still available from the CLI, but the chroot toggle has temporarily been removed from the graphical AUR page while that workflow is being hardened.
🌍 Translations
The rebuilt UI is arriving with refreshed translation catalogs for Bulgarian, Catalan, Chinese (Simplified), French, German, Greek, Hungarian, Italian, Japanese, Persian, Polish, Portuguese (Brazil and Portugal), Russian, Spanish, and Turkish. Notification translations received updates too, helping more people enjoy v3 in their preferred language from day one.
❤️ Thank you, contributors!
Shelly v3 would not have happened without the extreme dedication, hard work, and occasional wrestling of this enormous rewrite into shape.
Core Contributors:
- @ZoeyErinBauer
- @caroberrie
- @azdanov
Full Changelog: https://github.com/Seafoam-Labs/Shelly-ALPM/compare/v2.4.1.4...v3.0.0
