AppStream CLI
An utility to work with AppStream metadata
org.freedesktop.appstream.cliAppStream is a metadata specification which permits software components to provide information about themselves to automated systems and end-users before the software is actually installed. The AppStream project provides facilities to easily access and transform this metadata, as well as a few additional services for building feature-rich software centers and similar applications that make use of software metadata.
The appstreamcli command-line tool allows to read, write, and transform AppStream XML or YAML metadata as well as to validate it for compliance with the specification. It also provides easy access to the system metadata pool, for example to query for software that provides a specific Mediatype handler or for installing software by its component identifier.
Observed history
| App | Change | Version | When ↓ |
|---|
No observed changes yet.
The initial import establishes a baseline. Future version changes will appear here.
Browse the app catalogue →Upstream releases
Release notes supplied by the developer. These dates are not Flathub package publication times.
1.2.028 Aug 2026
Notes
This release marks the libappstream-compose API as stable.
This release introduces a new, lightly sandboxed (on Linux) media worker for appstream-compose
and switches to VIPS for image processing. Please report any issues you may find! The sandbox
can be disabled by setting ASC_NO_SANDBOX=1 in the environment. The image formats
XPM, TIFF and BMP will no longer be read by Compose, and will be rejected unconditionally.
This release introduces <heading>My headline!</heading> markup for AppStream descriptions. Older versions will remove this markup, so only use it if your target clients have a recent version of AppStream.
Features
- compose: Create AscMedia for isolated out-of-process media handling using asc-mediaworker
- compose: Process images, fonts & videos via the media worker
- Generalize path segment validation, use it in the compose media worker
- compose: Switch from using GdkPixbuf to VIPS for image processing
- compose: Harmonize supported formats, don't read XPM/TIFF/BMP
- compose: Make JPEG-XL the default image output format
- compose: Implement basic support for FreeBSD
- compose: Rely on VIPS for SVG support, drop our dedicated librsvg path
- compose: Make image-targets and image batch-processing public API
- compose: Expose the source-icon convention and a hint-tag lookup as public API
- compose: Drop unstable-API marker
- compose: Don't create image thumbnails that aren't a substantially smaller
- compose: Only transfer pre-opened fds and no more directory fd to the worker
- compose: Implement a basic sandbox for the mediaworker using Landlock
- compose: Use RESTRICT_SELF_TSYNC and block UDP access on newer Landlock
- compose: Mix the output image format type into the GCID
- compose: Make AscUnit a proper abstract class
- compose: Improve API documentation
- Always sanitize whitespaces in keywords and drop empty ones
- Assume a language element without percentage means full translation
- news-to-metainfo: Support a details URL in the YAML variant
- news-convert: Support inline Markdown in news text
- news-convert: Support headers in XML<->YAML/NEWS/Markdown conversions
- ascli: news-convert: Support standalone release XML as source/target
- Whitespace-sanitize all description markup we read
- Output descriptions as literals in YAML and wrap markup ourselves
Specification
- docs: Document the appstreamcli news file conversion helper
- Implement support for headings in description markup
Bugfixes
- meson: Set _POSIX_C_SOURCE on Linux only
- compose: Fix a race where units were deleting each other's icon directories
- compose: Fix documentation and introspection annotation issues
- compose: Drop dead public API, make some API private
- compose: Sharpen with libvips instead of a hand-rolled unsharp mask
- compose: Only read AVIF from HEIF containers, never HEIC
- compose: Fix double-free crash when processing fonts
- compose: Guard against bad locale in path names
- compose: Ensure component-IDs are safe to use in filesystem paths
- compose: Escape values for HTML reports, and create proper plain-text if needed
- compose: Make missing-launchable-desktop-file an error
- Fix a few translator hints that weren't picked up properly
- Don't accept empty strings as URLs
- its: Fix description inline markup translation for release data
- validator: Fix improper use of variadic arguments
- validator: Properly validate component-IDs with random UTF-8 characters
- validator: Abort ID validation after the first invalid character
- pool: Resolve crash if data locations are changed on a loaded pool
- Fix wrong string comparison when detecting arm64 machines
- ascli: Resolve crash when selection is cancelled in install/remove
- Fix another crash when converting invalid description markup to Markdown
- apt: Treat icon tarballs as hostile, instead of trusted
- apt: Fix empty-directory check nuking the icon cache on every refresh
- utils: Ensure we never ever follow symlinks when recursively deleting caches
- xml: Only emit description enumerations for locales that are in them
- cache: Never infinite-recurse when resolving addons for a component
- yaml: Don't leave old header data around when parsing multiple YAML catalogs
Miscellaneous
- ci: fedora: Disable cisco-openh264 repo, it's currently broken on rawhide
- compose: Stop leaking private symbols out of the shared library
- compose: Make hint tag/severity/explanation setters private API
- compose: Seal the global settings explicitly on start
- news-convert: Refactor conversion code for better readability
- ascli: Refactor subcommand dispatch
- meson: Disable analyzer-infinite-loop more broadly for static analysis
Contributors
Matthias Klumpp
1.1.612 Aug 2026
Features
- validator: Ensure description markup has no invalid attributes set
- validator: Validate bundle/pkgname values for allowed characters
Bugfixes
- xml: Sanitize description markup when reading and writing it
- yaml/json: Ensure description markup is sanitized when loading/saving it
- meson: Work around wrong library linkage when linking Qt tests
- Allow sealing of component-IDs to safely use them in hash tables and indices
- Ensure we never emit or read an invalid data origin
- Prevent crash when comparing bad version strings that have an epoch after rev
- Fix potential out-of-bounds read in OARS mapping table
- apt: yaml: Harden against potential corrupted YAML / YAML-headers
- compose: Guess a filename even from invalid URLs instead of crashing
- compose: Confine directory unit data reads to the unit's root directory
- compose: Refactor directory unit to use openat2, if possible
- news-convert: Don't crash in case we receive bad freeform YAML news input
- ascli: Guard against bad bundle values when calling "install"
Contributors
Matthias Klumpp
1.1.524 Jul 2026
Features
- sysinfo: Implement display size detection on macOS
Bugfixes
- qt: Add back wrong const Component::addBundle for ABI compatibility
- qt: Use strndup for C string-list conversion
- pool: Fix bidirectional wildcard search for modalias provides
Contributors
Matthias Klumpp
1.1.422 Jul 2026
Features
- sysinfo: Assume a more modern display for the handset chassis template
- sysinfo: Assume a more modern display for the tablet chassis template
- sysinfo: Initial code to autodetect the display size on Wayland
- sysinfo: Handle fractional display scaling via xdg-output
- Implement support for GCVE as vulnerability database provider
- qt: Sync enum mirrors with the C library
- qt: Add Artifact, Checksum, Reference, Review and Agreement wrappers
- qt: Wrap missing C API on existing classes
- reviews: Add simple interface to fetch ODRS reviews for a component
- reviews: Implement support for submitting reviews
Specification
- docs: Suggest using the longest display side for maximum size constraints
Bugfixes
- Make GResources we need outlive main thread destruction
- pool: Properly implement cancellation of load operations
- sysinfo: Fix display-length setter overriding the shortest edge
- relation-check: Don't zero the score if a required check errored
- curl: Harden downloader by restricting protocols to only HTTP(S)
- curl: Allow making POST requests and changing the user agent
- curl: Fix retry-loop data corruption and don't blindly retry POST requests
- yaml: Fix potential crashes when encountering missing relation entry values
- yaml: Adjust tests and emitter to work around libfyaml string-quoting change
- yaml: Ensure version relations are consistently quoted
- qt: Fix buffer overrun in stringListToCharArray
Miscellaneous
- ci: freebsd: Switch from Cirrus to GitHub Actions
- ci: Update Ubuntu LTS to 26.04
Contributors
Gleb Popov, Matthias Klumpp