Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[unreleased]

v1.5.0 - 2025-11-24

  • When searching the local machine for available remotes, it now also searches /rom/config/unicorn/remotes.

  • When a file ending in .lua contains require, we now add a line to the top of the file that patches package.path to add /lib to the search path.

  • SHA-256 hash validation now uses CCryptoLib. libunicornpkg no longer depends on anavrins-sha256.

v1.4.0 - 2025-11-20

v1.3.1 - 2025-11-12

  • The ht.sr provider for Sourcehut has been added.

  • The semver and sha256 modules are now optional in cases where they would never be invoked.

    • The related code will raise an error if it tries to find the modules but cannot.

  • The rel.conflicts field has been added. The field should be a list of package names. If any of the packages listed are installed when installing this package, the installation will fail.

  • The _HOST variable can now be accessed from within the package evaluation sandbox.

v1.3.0 - 2025-11-08

  • Packages are now evaluated inside of a sandbox, preventing package tables from having side effects. The functions available in the sandbox are defined in unicorn.util.sandbox_env. This does not provide much security. Do not install untrusted packages!

    • As a side effect, packages available on a remote can no longer be Lua bytecode (but this was never supported to begin with).

  • The org.codeberg provider for Codeberg has been added.

  • Packages with an empty instdat can now be uninstalled.

  • Packages with dirs can now be uninstalled.

  • When attempting an HTTP request with unicorn.util.smartHttp, the function will throw an error if we receive a bad response. As a result, operations that make HTTP requests will now fail if the server sends such a response. (Reported by @Commandcracker)

  • When fetching a file from a package remote, the file is no longer written to /tmp. (Reported by @Commandcracker)

  • Logging is slightly less verbose. Debug logging can be enabled by setting the _G.UNICORN_DEBUG_DO_NOT_USE_IN_PRODUCTION_CODE variable to 1. This interface is not stable.

  • Remotes defined in /etc/unicorn/remotes must now end with the .txt file extension.

  • Recrafted is no longer officially supported. The initial support was very subpar, and went untested for so long that it broke entirely. Recrafted support will come back in a future release. (Tracked by #12)

v1.2.1 - 2025-07-02

  • Fix a bug where attempting to uninstall and then reinstall a package would result in an error. (Reported by @rapidradiance)

v1.2.0 - 2025-05-21

  • Add UnicornInstall and UnicornUninstall events with os.queueEvent.

  • Add the instdat.gitlab_instance field in the GitLab provider.

  • Add the local.nothing provider. This is useful for making packages that don’t need to contain anything; for example, packages which function as “groups” to install certain packages at once, or packages for software that is already installed.

  • Migrated the project to use require with a custom package.path value.

    • Retroactive note: This breaks most installations of the CLI. The breakages that this change caused in the CLI are fixed in CLI version 1.2.1 or later.

v1.1.0 - 2022-12-18

  • Fix scripts provider.

  • Add dirs module.

  • Use external installation of semver.lua if present.

v1.0.0 - 2022-12-11

v0.1.0 - 2022-11-01

  • Initial release.