Version 1.1.1
~~~~~~~~~~~~~
Released: 2025-10-02
Features:
 * Add option to disable man page creation
Bugfixes:
 * Add explicit UTF-8 tests to check for libfyaml's unicode handling
 * yaml: Drop implicit string quoting, make it explicit
Miscellaneous:
 * qt: Drop support for Qt5
Contributors:
 Matthias Klumpp
Version 1.1.0
~~~~~~~~~~~~~
Released: 2025-09-16
Notes:
 * This release switches to libfyaml for YAML parsing. This allows us to
   support YAML 1.2 and limit parsing to it, enables better JSON parsing,
   and lower peak memory use when processing YAML. It also allows for future
   memory optimizations.
   Parsing a more restricted set of YAML may also help security.
 * This release also seals some internal libappstream-compose API
   that was public for a while for use by appstream-generator.
   It has no users anymore and should not have been public. This is one
   step closer to declaring the compose C API stable as well.
Features:
 * Port YAML parsing to libfyaml
 * Port YAML emission to libfyaml
 * compose: Port to libfyaml
 * yaml: Reduce string copies when comparing main keys, compare lengths first
 * yaml: Reduce copies when filling locale tables and string list
 * compose: Add support for JPEG-XL
 * compose: Make the AscImage API more generic
 * compose: Seal away all GdkPixbuf and AscCanvas references from public API
Bugfixes:
 * validator: Fix possible double dereference of the same issue instance
 * tests: Pass tests with older versions of libfyaml
 * Fix a few double-free issues in error conditions
 * compose: Fix possible race condition when fetching pangrams
 * compose: Draw better background shapes and center text properly for font icons
 * parser: Guard against "tag" elements with NULL values
 * yaml: Allow duplicate keys when parsing data (speeds up parsing dramatically)
 * cache: Fix potential use-after-free issue when counting components
Miscellaneous:
 * Update COPYING with latest from FSF
 * Update GPL-2.0.txt with latest from FSF
 * compose: Prefer int over uint everywhere in AscImage API
Contributors:
 Marc-André Lureau, Matthias Klumpp
Version 1.0.6
~~~~~~~~~~~~~
Released: 2025-08-14
Features:
 * compose: Accept .ttc font files
 * compose: Give font icons a background shape
 * compose: Render more elaborate font sample cards
Bugfixes:
 * compose: Insert screenshot tags for auto-generated font screenshots
 * compose: Trim substring when truncating font sample text
 * meson: don't override appstreamcli when cross-building
 * compose: Prefer rendering font icon with "Regular" style
 * compose: Sanitize font text samples before using them as icon
 * Follow directory symlinks when looking for Flatpak data
 * compose: Drop bad private-header include in public header
 * compose: Drop unneeded const declaration for GKeyFile
 * Fix typo that prevented video metadata from being composed properly
Contributors:
 Joey Riches, Marc-André Lureau, Matthias Klumpp
Version 1.0.5
~~~~~~~~~~~~~
Released: 2025-04-24
Features:
 * qt: Expose markup conversion utils
 * desktop-styles: Add android and iOS
 * validator: Check for xml:lang="en" being used on description template elements
 * validator: Flag cases of raw text in "description" elements
 * metadata: Add more known extensions into as_metadata_file_guess_style()
Specification:
 * docs: Clarify that the style segment of a screenshot environment is optional
 * docs: Explain consequences of defining an icon for desktop-app metainfo
 * docs: Clarify that description content must be in p/li elements
Bugfixes:
 * validator: mark as_validator_issue_tag_list static
 * docs: Add workaround for gi-docgen misnaming devhelp files
 * compose: Do not permit SVG images as screenshots
 * compose: Don't "forget" to scan remaining paths when re-encountering a dir
 * pool: Try explicit singular term match if we only have low-quality tokens
 * utils: Provide compatibility with Fedora icon tarballs when installing them
 * utils: Remove leftover g_chmod()
 * zstd-decompressor: Pass output/written data when decompression finished
 * utils: Expect a dash in icons file name
 * utils: Recognize .yml* and .yaml* file extension variants, and .zst extension
 * utils: Rename the appstream file when re-saving it on install
Contributors:
 Alyssa Ross, Ismael Asensio, Kolja, Matthias Klumpp, Milan Crha
Version 1.0.4
~~~~~~~~~~~~~
Released: 2024-12-08
Features:
 * bundle: Add AS_BUNDLE_KIND_SYSUPDATE
 * desktop-style-ids: Add dark support for Plasma
 * desktop-style-ids: add pantheon:dark
 * qt: Expose branding color
 * sysinfo: Add memory size detection support for Illumos and Solaris
 * sysinfo: Add memory size detection support for GNU/Hurd
 * validator: Don't fail validation if a snapshot release is missing a time
Specification:
 * docs: Note that support for some legacy path was dropped in 1.0
 * docs: Update fd.o spec URLs
 * docs: Better explain desktop applications
 * Update ESRA website URL
Bugfixes:
 * validator: Make sure we read an initialised variable
 * qt: Specify utc as the dates' timezone
 * tests: Ignore some tests on Windows
 * sysinfo: make uname() usage POSIX compliant
 * Only emit legacy compat tag developer_name for catalog data
 * compose: Allow file discovery even in symlinked directories
 * Avoid a race condition when loading GResource data
 * validator: Mention length limit in summary length warning message
 * utils: Explicitly set permissions on installed metadata files
 * as-vercmp: Fix gtkdoc to not start with '>'
Miscellaneous:
 * desktop-style-ids: Remove Endless
 * ci: Fix FreeBSD build (update `py-gi-docgen`)
 * ci: Update to Ubuntu 24.04 for Debian Testing builds
 * utils: Assume 64px as size when installing an icon tarball of unknown size
Contributors:
 Adrien Plazas, Airat Makhmutov, Aleix Pol, Carl Schwan,
 Cassidy James Blaede, Danielle Foré, Elliott Sales de Andrade,
 James Addison, Marcel Telka, Matthias Klumpp, Roke Julian Lockhart,
 Pino Toscano, sid
Version 1.0.3
~~~~~~~~~~~~~~
Released: 2024-04-24
Features:
 * validator: Check that description lists don't get translated
 * validator: Improve translation checks for descriptions
 * cli: compose: Allow to propagate selected custom entries to catalog output
 * validator: Check for common typo of "scheme_preference" branding property
 * xml: Generate a developer_name compat tag for older 3rd-party parsers
 * validator: Flag duplicate branding colors as invalid
 * Add Plasma Mobile as recognized desktop-style
Specification:
 * docs: Clarify a developer element is not allowed to exist multiple times
 * docs: Explicitly clarify a developer/name element must not be repeated
 * docs: Clarify metainfo translation rules a bit
Bugfixes:
 * qt: Fix relocation of Config.cmake files
 * cli: check-syscompat: Recognize available required controls as available
 * validator: Guard issue emission functions with G_GNUC_PRINTF
 * validator: Always use secure string formatting for issue emit function
 * utils: Explicitly set format style when installing catalog metadata
 * Suppress static-analyzer drawing wrong conclusions on GCC 14
Miscellaneous:
 * docs: List AppStreamCompose as related to AppStream
 * docs: Add manpages back
 * validator: Mark developer-id-missing as info-priority again
Contributors:
 JakobDev, John Zimmermann, Matthias Klumpp, Max Buchholz, tytan652
Version 1.0.2
~~~~~~~~~~~~~~
Released: 2024-02-24
Features:
 * qt: Allow building for multiple Qt major versions at once
 * Improve low-quality category check and extend its blacklist
 * validator: Add some limited developer-ID validation
 * validator: Emit an overridable warning if homepage URL was omitted
 * compose: Allow rendering vector graphics to HiDPI bitmaps unconditionally
 * compose: Allow setting a custom icon-policy on the command-line
Specification:
 * docs: Mention that  tag can be translated
 * docs: Generate validation issue tag documentation from code
 * docs: Add information on how to exclude elements from translation
 * spec: Recommend using rDNS strings or Fediverse handles as developer-ID
 * spec: Make launchable requirement for desktop-apps more strict
Bugfixes:
 * qt: Component::customValue should be const
 * validator: Remove mention of shorthands from relation-display-length-value-invalid
 * sysinfo: Swap arguments of g_pattern_match_simple
 * qt: Add missing screenshot sorting function
 * qt: pool: Add missing Q_EMIT keyword
 * validator: Improve error message if no valid categories were found
 * validator: Make some length limitations more strict
 * validator: Only emit developer-name-tag-deprecated once
 * validator: Ensure filename is properly included in location info again
 * validator: Improve error reporting on images with missing/bad locales
 * compose: Don't accidentally set icon scale to 0 in some cases
 * compose: Add heuristics to show out-of-scope errors if filters were set
 * Don't prematurely abort URL validity check during semi-large redirects
 * docs: Update supported hashsums to reflect reality
 * docs: Describe version comparison letters special case
 * docs: Clarify release descriptions *must not* contain embedded URL
 * docs: Explicitly mention /var/cache/swcatalog is a valid catalog data location
 * tests: Fix tests with old & new FontConfig
 * its: Allow untranslatable developer/name and agreement sections
Miscellaneous:
 * compose: Clarify that "no valid category" can mean bad ones were ignored
 * news-convert: Don't strip out the last text in brackets
Contributors:
 Aleix Pol, Alexander Wilms, Fabio, Kolja, Matthias Klumpp, Patrick, ratijas
Version 1.0.1
~~~~~~~~~~~~~~
Released: 2023-12-16
Bugfixes:
 * Fix lib name for Qt5 link target
 * meson: Pass -D_DARWIN_C_SOURCE on darwin
 * Fix macOS build
 * stemmer: Resolve potential issue where stemmer may never be initialized
 * cli: Don't fail what-provides if components were found
 * Fix query element order for what-provides queries
 * validator: Demote developer-name-tag-deprecated to info severity for now
 * content-rating: Fix missing or wrong value descriptions for rating IDs
 * curl: Add transfer speed timeouts for HTTP downloads
 * curl: Retry operations on potentially transient errors
Miscellaneous:
 * validator: Improve hint for content-attribute-value-invalid
 * Allow building without zstd temporarily
Contributors:
 Antonio Rojas, Bobby Rong, Matthias Klumpp, Rui Chen
Version 1.0.0
~~~~~~~~~~~~~~
Released: 2023-11-11
Notes:
 * This version breaks API and bumps the SONAME of libappstream!
   Applications using AppStream will have to be ported to the new API.
   The 1.0 release is coinstallable with the stable 0.16.x series.
Features:
 * Autoformat C and C++ sources
 * Remove all deprecated symbols
 * Drop support for many deprecated AppStream XML features
 * Use GPtrArray to expose keywords list
 * Add length argument to raw metadata parsing functions
 * Add component array container class
 * Remove named values for display_length relations
 * Make AsPool only accept/return component boxes
 * Port all API away from per-entity locale overrides
 * Reduce appstream.conf to its essentials, make it work on stateless systems
 * Hide search engine details from public API
 * Wrap release entries in AsReleaseList container class
 * Make AsMetadata handle AsReleaseList objects
 * Refactor is_satisfied result into new RelationCheckResult class
 * Add a method to check all relations of a component and get the result
 * Add algorithm to score compatibility with a system, add chassis templates
 * ascli: Add new check-syscompat command to check chassis compatibility
 * Implement environment property for component screenshots
 * Autogenerate translatable DE and gui-environment-style C arrays
 * Expose more advanced markup conversion function, update function names
 * Allow BLAKE3 and SHA512 checksums for release artifacts
 * Stop supporting mailto: URLs in  tags
 * validator: Improve API and simplify it
 * validator: Parse XML in pedantic mode when validating
 * validator: Check screenshot environment property
 * validator: Only apply summary-has-dot-suffix check to untranslated strings
 * compose: Allow creating metadata with complete URLs and no base URL
 * spdx: Add API to retrieve a translated license name from an SPDX ID
 * qt: Switch to building with Qt6
 * qt: Make it possible to iterate ComponentBox
 * qt: Implement AppStream::ComponentBox::erase
 * qt: Allow concatenating two ComponentBoxes
 * qt: Allow loading Pool asynchronously
 * qt: Use ComponentBox/Releases in Qt bindings as well
 * qt: Add support for the new API to check relation satisfaction
 * qt: Maintenance and namespace fixes, use cPtr() to get C pointers everywhere
 * bundle: Add linglong as a new type of bundle
 * Add GUI environment IDs for macOS and Microsoft Windows
 * validator: Check if Release Description is inside description tag
 * validator: Add validation for content_rating
 * Add support for building on Win32
 * win32: change some file/path-related code for portability
 * Implement the developer element for unique developer IDs
 * Implement scaling factor for screenshots
 * component-box: Allow removal of components by-index
 * Implement support for external references and citations
 * Implement usertags for release data as well
 * Move ValueFlags to the context, instead of tieing them to components
 * pool: search: Add additional weight for exact substring matches on names
 * sysinfo: Add memory size detection support for macOS
 * Add support for Zstd for on-disk data compression
 * utils: Make tar unpacker independent of zstd binary presence
 * Drop Python2 provided tag support
 * data: Add ‘Endless’ to the list of desktops
 * Add NetBSD support
Specification:
 * Drop (most) deprecated information
 * docs: Clarify environment-based screenshot ordering
 * Add new  'snapshot' release kind
 * docs: Build all API documentation with gi-docgen
 * spec: Document the new "developer" element
 * spec: Document the "reference" tag for registry references
 * docs: Add example of YAML for references elements
 * Allow hyphens in the last segment of a component-ID
 * docs: Drop outdated information from l10n quickstart guide
Bugfixes:
 * meson: check for docbook xsl stylesheets
 * Fix tweaking of appstream.pc when building as subproject
 * Fix crash in asc_l10n_search_translations_qt()
 * qt: Make Qt6 dependency a system dependency.
 * meson: do not rely on an exe wrapper
 * meson: do not -I/usr/include when !stemmer
 * meson: Prevent building attempts with MSVC
 * meson: Use an SPDX license indentifier in project(license:)
 * Add meson overrides
 * compose: Set lower-cased CID for synthesized components again
 * compose: Set lower-cased CID in desktop-entry parse function
 * compose: Honor prefix in font search
 * compose: Select the correct default icon glyphs for fonts
 * Don't crash when non-YAML documents are read as YAML
 * Do not override default-priority when parsing multiple metadata files
 * Ensure stemmer always has the right locale and token-search works
 * Require a more recent libxmlb to avoid crashes
 * Rename component get_releases to indicate that releases may not be loaded from the web
 * Prevent string-id validation functions from matching source comments
 * Don't define _POSIX_C_SOURCE when building for NetBSD
Miscellaneous:
 * Explain metainfo-ancient error in more detail
 * Make sed invocation more portable
 * Add FreeBSD CI
 * Allow variable shadowing in C++ code
 * Drop the catchall as-enums unit
 * vapi: Drop unneeded metadata
 * Make AsMetadata return a component box for multiple components
 * apt: Make item descriptions more human-friendly
 * Streamline README
Contributors:
 Aleix Pol, Alessandro Astone, Alexander Wilms, Dan Yeaw, Daniel Drake,
 Gary Wang, Gleb Popov, Ingo Klöcker, JakobDev, Jeremy Whiting, Kai Uwe Broulik,
 Marc-André Lureau, Matthias Klumpp, Philip Withnall, Tao Zuhong,
 Thomas Klausner, Tristan Partin, and thanks to all translators mentioned
 in the respective l10n files!
Version 0.16.4
~~~~~~~~~~~~~~
Released: 2023-11-10
Features:
 * Allow hyphens in the last segment of a component-ID
 * Implement the developer element for unique developer IDs
 * Add meson overrides
Bugfixes:
 * meson: Prevent building attempts with MSVC
 * meson: Avoid potentially bad sed backup filename when fixing .pc file
Miscellaneous:
 * Make sed invocation more portable
Contributors:
 Gleb Popov, Matthias Klumpp, Tristan Partin
Version 0.16.3
~~~~~~~~~~~~~~
Released: 2023-08-22
Features:
 * compose: Allow creating metadata with complete URLs and no base URL
Bugfixes:
 * Fix tweaking of appstream.pc when building as subproject
 * Do not override default-priority when parsing multiple metadata files
 * Ensure stemmer always has the right locale and token-search works
 * Require a more recent libxmlb to avoid crashes
Miscellaneous:
 * Work around invalid null-dereference warning in GCC 13
Contributors:
 Daniel Drake, Matthias Klumpp
Version 0.16.2
~~~~~~~~~~~~~~
Released: 2023-04-26
Notes:
 * Due to a past mistake, AppStream until now assumed xml:lang was
   using POSIX locale, while in fact XML locale need to be in BCP47 format.
   Most of the translation tools do this correctly, but notably msgfmt
   when used in batch mode doesn't (which affects anything using Meson's
   i18n module). AppStream is now behaving according to spec, with some
   fallback code in place, but please check your XML is translated
   correctly to ensure all translations are visible.
Features:
 * Add API for asking whether the pool is empty
 * Add DDE to known desktop-environment list
 * validator: Check if Release Description is inside description tag
 * Make AppStream use BCP47 for locale in XML data
Bugfixes:
 * Add missing standard::is-hidden attribute to file search enumerator
 * spdx: Accept brackets in spdx license expression check
 * introspection: Bring back AS_FORMAT_STYLE_COLLECTION into its enum
 * compose: Fix crash in asc_l10n_search_translations_qt()
 * compose: Set lower-cased CID for synthesized components again
 * Don't crash when non-YAML documents are read as YAML
Miscellaneous:
 * sanitizers: Allow null-dereference check again
Contributors:
 Aleix Pol, Caolán McNamara, Corentin Noël, Gary Wang,
 Gleb Popov, JakobDev, Matthias Klumpp, Will Thompson
Version 0.16.1
~~~~~~~~~~~~~~
Released: 2023-02-10
Notes:
 * This is a bugfix-only release to primarily address an issue introduced
   in v0.15.6 that caused any clients using GIR bindings to crash after a while.
Specification:
 * docs: Clarify the locations where catalog icons should be placed
 * spec: Expand documentation for  elements
 * spec: Mention that  is not part of the description
 * spec: Give some guidance about tone in release descriptions
Bugfixes:
 * Fix binding helper macro to behave correctly if a function is passed directly
 * Override-merge icons and provided items correctly
 * tests: Ensure locale is C.UTF-8 in pool tests
Miscellaneous:
 * release: Add sanity checks at beginning of each function
Contributors:
 Corentin Noël, Matthias Klumpp, Pablo Correa Gómez, Philip Withnall
Version 0.16.0
~~~~~~~~~~~~~~
Released: 2023-01-26
Features:
 * pool: Offer API to look up components by bundles
 * Bump format version to 0.16
 * Add new AsSystemInfo to read information about the current OS and device
 * Add helper to get device names from a modalias
 * Implement support for external release metadata
 * Add validation support for external release metadata
 * compose: Validate external release metadata used for the catalog as well
 * its: Add rule for standalone release metadata
 * Add function to test if an AsRelation is satisfied on the current system
 * cli: Add command to list category contents
 * cli: Display colored checkmarks if possible
 * cli: Add new is-satisfied check to test relations from the command-line
 * cli: Add Markdown export support for metainfo-to-news
 * qt: Add support for SystemInfo & relation satisfication checks
Specification:
 * spec: Specify a metadata format for external release descriptions
Bugfixes:
 * Fix build with Clang 15
 * Give a better error message if trying to list too many categories
 * Adjust documentation of AsPool.get_components_by_categories to reflect reality
 * validator: Validate merge component catalog data properly again
Miscellaneous:
 * Consistently name catalog metadata as such everywhere
Contributors:
 Aleix Pol, Matthias Klumpp, Rafael Fontenelle
Version 0.15.6
~~~~~~~~~~~~~~
Released: 2022-12-22
Features:
 * qt: Add API for ContentRating descriptions and ratingIds
 * Add some coccinelle semantic patches for common style issues
 * compose: Allow building without SVG support (for bootstrap only)
 * validator: Check for nodes that are text nodes even though they shouldn't be
 * validator: Extend validation for custom tag
 * validator: Improve Screenshot validation
Specification:
 * docs: Fix typos in  documentation
Bugfixes:
 * validator: internat: Don't allow bandwidth_mbitps when value is offline-only
 * validator: Fix timestamp validation
 * validator: Allow release descriptions to start with punctuation
 * compose: Only add no-metainfo tag if component isn't already ignored
 * compose: Show better error in AscImage if compose was build without rsvg
 * Add a hack to clarify proper PtrArray element ownership for language bindings
 * qt: Port away from deprecated QDateTime API
 * qt: Deprecate Component::requires
 * qt: Fix warning
 * qt: Fix stringListToCharArray and Pool::componentsByCategories
 * qt: Port away from deprecated foreach
 * as-review: Add a typedef for property enums
 * as-review: Install properties at once rather than individually
 * as-review: Specify G_PARAM_STATIC_STRINGS for properties
 * as-review: Emit GObject::notify on property value changes
 * as-review: Add missing property for as_review_{get,set}_priority()
 * ascli: fix NULL pointer dereference
Miscellaneous:
 * docs: Split releases specification into its own section
 * style: Make code easier to read by using helper macros in all places
 * Make some compiler warnings fatal unconditionally
Contributors:
 Aleix Pol, JakobDev, Matthias Klumpp, Nicolas Fella, Philip Withnall,
 r-ricci, Will Thompson
Version 0.15.5
~~~~~~~~~~~~~~
Released: 2022-08-22
Features:
 * validator: Allow severity downgrade of releases-not-in-order for GNOME
 * validator: Perform stricter integer validation
 * validator: Check for url redefinitions
 * Implement the "replaces" tag
 * Add convenience function that check if component is free by license and origin
 * qt: Add wrappers for AsComponent isFree/supports/replaces
 * Always add untranslated component names to the search index
 * validator: Validate the "internet" relation item
 * validator: Add validation for memory relation
 * Implement internet relation item
Specification:
 * spec: Specify a proper "replaces" tag
 * spec: Add an  kind to requires/recommends/supports
Bugfixes:
 * validator: Don't permit overriding the unknown root tag issue
 * compose: Don't crash if metainfo file contains an invalid stock icon
 * spdx: Fix possible crash when NULL is passed to is_free_license
 * compose: Don't synthesize components for desktop files of settings apps
 * Return the correct values in as_display_length_kind_from_px()
 * validator: Distinguish translatable from not-translatable tags in duplicate checks
Miscellaneous:
 * Silence static analyzer false-positives based on GCC version
 * data: use lxml to get the XDG categories
Contributors:
 JakobDev, Philip Withnall, Pino Toscano, Matthias Klumpp
Version 0.15.4
~~~~~~~~~~~~~~
Released: 2022-05-22
Features:
 * validator: Check timestamp validity
 * validator: Allow (limited) overriding of issue tag severities
 * validator: Add strict mode
 * ascli: validate: Allow simple overriding of issue tags
 * validator: Check for exact relation item redefinitions
Bugfixes:
 * Add vcs-browser URL to metainfo.xml
 * compose: Improve media-baseurl sanity checks for icon/screenshot policies
 * compose: Don't create bad data when localized screenshots exist
 * compose: Sanitize prefix value and verify all units for results
 * compose: Fail and not just warn if we couldn't open a unit
 * compose: Make no-result detection a bit more robust
 * compose: Properly handle localized screenshots
 * compose: Ignore current locale when analyzing screencasts
Contributors:
 JakobDev, Matthias Klumpp
Version 0.15.3
~~~~~~~~~~~~~~
Released: 2022-04-10
Features:
 * qt: Include enums for VcsBrowser and Contribute
 * Add vcs-browser and contribute URL type
 * validate: Improve validation of desktop files alongside metainfo data
 * its: Mark deprecated rules as deprecated
 * Implement l10n support for metainfo keyword tags
 * validator: Perform basic validation of keywords in metainfo data
 * compose: Prefer metainfo keywords over desktop-entry keywords
 * meson: Bump minimum version to 0.62
Specification:
 * docs: Document keywords for metainfo files as well
 * docs: Spell it metainfo, not meta-info if referencing metainfo.xml files
 * spec: Document how keywords in metainfo files should be translated
Bugfixes:
 * qt: If the timestamp is 0, return a default QDateTime()
 * docs: Include compose manual page
 * validate: Point at the right line for description-enum-item-invalid
 * validator: Find data if /usr prefix is missing as well
 * validator: Make insufficient launch data for desktop-apps a hard error
 * Don't fail downloads or URL checks if redirects were involved
 * apt: Only refresh the OS data cache (not the whole system cache) on APT update
 * compose: Emit error if filters are set but no output was generated
 * Centralize GOnce guard to fix an assertion failure in AsComponent
Contributors:
 Aleix Pol, JakobDev, Matthias Klumpp, Simon McVittie
Version 0.15.2
~~~~~~~~~~~~~~
Released: 2022-02-22
Features:
 * compose: Allow setting a custom CAInfo file
 * qt: Always use C library for enum-to-string conversions
 * compose: Allow any amount of release entries for OS components
 * compose: Implement more flexible icon policy
 * validator: Ensure component-ID has no punctuation prefix
 * validator: Check existence of version and date release properties
 * Implement component-wide end-of-life date attribute
 * compose: Build API documentation
 * Relicense remaining GPL-2.0 code to LGPL-2.1+
 * No longer mark compose build option as experimental
 * Support the new swcatalog catalog metadata location and add app-info fallback
 * When finding components by ID, use provided IDs if no exact matches were found
 * ascli: Fix install/remove commands, add Flatpak support
 * Implement XML & YAML read/write of the "branding" tag group
 * Handle embedded lists in YAML release info paragraphs
Specification:
 * spec: Specify a "date_eol" property for the component itself
 * spec: Specify the new "branding" tag
 * docs: Update links to API reference pages
 * spec: Require that branding colours start with a hash symbol
 * docs: Clarify license and ship license copies
 * docs: Document media_baseurl property of components
Bugfixes:
 * qt: Fix crash when moving a Component
 * qt: Fix translate URL string<->enum conversion
 * qt: Deprecate mistyped UrlTranslate enum value
 * Filter out components without ID as early as possible (resolves crash)
 * Don't terminate the client if we can't get a writable cache location
 * Fix a possible parsing crash when converting markup
 * ascli: Display better messages if appstream-compose is unavailable
 * Install new collection XML to the right location
 * compose: Skip further processing if component was already dropped
 * compose: Fix SVG scaling with librsvg 2.52
 * compose: Handle missing export paths gracefully
 * Replace symlink hacks with new Meson install_symlink function
 * ci: Drop outdated libsoup dep
Contributors:
 Aleix Pol, fortysixandtwo, JakobDev, Jan Alexander Steffens, pabloyoyoista,
 Phaedrus Leeds, Philip Withnall, Matthias Klumpp
Version 0.15.1
~~~~~~~~~~~~~~
Released: 2021-12-22
Features:
 * Bump GLib version requirement to >= 2.62
 * compose: Port over font support from appstream-generator
 * compose: Allow overriding unit used for locale processing
 * compose: Refine legacy support for desktop-id launchables
 * compose: Allow setting the custom desktop-entry translation function
 * compose: Allow to run with threading (mostly) disabled
 * compose: Reorganize feature flags, allow to disable l10n
 * compose: Allow setting a screenshot file size limit
 * compose: Allow to disable screencast processing explicitly
 * compose: Allow to test whether result has a specific hint tag
 * news-convert: Support a "Translators" section
 * validator: Check that first rDNS component-ID parts are always lowercased
 * validator: Validate capitalization for some selected text blocks
Bugfixes:
 * vapi: Rename PoolFlag to PoolFlags to add the missing deprecated flags
 * Fix cache always getting updated even if unnacessary on Debian systems
 * Still verify download return codes if download was aborted intentionally
 * compose: Warn if metainfo files are missing and data was processed anyway
Contributors:
 Corentin Noël, Matthias Klumpp
Version 0.15.0
~~~~~~~~~~~~~~
Released: 2021-12-02
Notes:
 * This release contains a complete rewrite of AppStream's caching code, making use of
   libxmlb instead of LMDB now. This will allow for more complex queries and simplifies
   the caching code a bit.
   As part of this change, AsPool is now quite a bit more powerful in what it can do.
 * Caches are now always shared between applications, client-specific caches do no longer
   exist. If requested, an AsPool can now also transparently reload metadata in the
   background in case it changes on disk.
 * A few new tags have also been added, most notably "supports" for indicating
   hardware or input support.
Features:
 * Refactor the caching code and partition cache into sections
 * cli: Display nicer status information when refreshing caches
 * cli: Allow limiting refresh action to data from certain groups
 * Allow clients to configure the addon autoresolve magic
 * Allow clients to control the local metainfo preference
 * qt: Add wrappers for new AsPool API
 * Add directory monitoring helper for AsPool
 * Add an auto-reload mechanism to refresh cache sections when data changes
 * Implement support for a "supports" relation kind
 * qt: Wrap the AsPool ::changed signal
 * qt: Add version test macro for Qt library as well
 * cli: Make validator output a bit nicer
 * cli: Base "status" command on metadata source layout from AsPool
 * Implement the new "Tags" tag
 * Make component-ID search case-insensitive
Specification:
 * spec: Add a "supports" relation type
 * Add support for specifying a graphics tablet as input control method
 * Add support for the "hardware" relation item
 * spec: Add "tags" tag for tagging components
 * apidoc: Document file not found error code
 * docs: Fix various typos and grammar issues
Bugfixes:
 * compose: Adjust to rsvg API changes
 * qt: Pass NULL to C function when overriding cache location with empty string
 * tests: Make unit tests clean up temporary caches if possible
 * qt: Align API deprecations with C library API
 * Cache Flatpak data properly, and add some quirk fixes for it
 * file-monitor: Explicitly cancel GFileMonitor before unreffing it
 * Fix broken markup by using itstool to generate final translated metainfo
 * validator: Fix some issues pointing at the wrong node
 * validator: Validate the "tags" tag group
Contributors:
 Phaedrus Leeds, Matthias Klumpp
Version 0.14.6
~~~~~~~~~~~~~~
Released: 2021-10-08
Features:
 * validator: Allow slightly longer screenshot captions
 * news-to-metainfo: Recognize the "Miscellaneous" section
 * ascli: Add check-license command to test license for compatibility
 * Emit URLs to choosealicense.com for certain popular licenses
 * Add manually curated list of DFSG-free licenses
 * news-to-metainfo: Allow only marking the last entries as translatable
 * compose: Add support for image and video screenshot handling
 * news-to-metainfo: Parse hyphens as header separators as well
 * ci: Add Fedora to the CI environment
 * as-translation: Add a new source-locale property
 * compose: Support source locales for translations
Specification:
 * docs: Clarify screenshot image/video dimensions, quickstart recommendations
 * docs: Clarify image scaling, drop fixed-size image width recommendation
 * spec: Mention the already-supported scale attribute of 
 * spec: Add support for source locales
Bugfixes:
 * cli: Properly forward parameters to compose binary when invoked via ascli
 * compose: Don't follow symlinks when processing raw directories
 * xml: Make NULL value handling for RefString value readers consistent
 * news-to-metainfo: Stop parsing data if we have reached our entry limit
 * news-to-metainfo: Don't attempt to override existing error on parsing failure
 * compose: Extract screenshot image dimension data even if we're not caching them
 * curl: Use less memory when downloading large files
Contributors:
 Neal Gompa, Philip Withnall, Matthias Klumpp
Version 0.14.5
~~~~~~~~~~~~~~
Released: 2021-08-28
Features:
 * compose: Add locale statistics reader
 * Add installed test to validate all metainfo data on the system
 * compose: Add initial compose utility
 * compose: Read SVGZ images in AscImage
 * compose: Better heuristics for finding KDE icons
 * compose: Allow filtering which components are processed
 * compose: Allow exporting hint report as YAML
 * cli: convert: Autodetect metainfo/collection XML files
 * Add documentation for appstreamcli compose
 * validator: Nag about missing content_rating and releases
 * compose: Add metainfo file for cli utility
Specification:
 * docs: Clarify how Qt translations are searched for
 * spec: Use "i386" as arch name for the shared ABI of all 32-bit x86 CPUs
 * spec: Remove debshots screenshots API references
 * docs: Document the version comparison algorithm
Bugfixes:
 * qt: Make Pool's parent class public
 * Use locale_strip_encoding for determining the current locale as well
 * Consider locale like "ca@valencia" compatible with "ca"
 * validator: Properly emit some invalid tag name messages
 * Resolve g_memdup deprecation warning for GLib >= 2.68
 * cli: Don't occasionally remove spaces when wrapping words
 * Propagate bundle information even if PreferLocalMetainfoData is True
 * Add workaround for GIR inconsistency in AsFormatVersion enum
 * Add assertion against as_get_resource() returning NULL
 * context: Don't initialize filename ref string value
Contributors:
 Aleix Pol, Matthias Klumpp
Version 0.14.4
~~~~~~~~~~~~~~
Released: 2021-06-22
Features:
 * qt: Expose setter and getter for pool cache location
 * utils: Use GLib's gstring_replace if available
 * its: Allow to mark release descriptions as non-translatable
 * compose: Point people at the specification if metadata license is invalid
Specification:
 * docs: Clarify which metadata licenses are permitted
 * docs: Fix a typo on the icon cache page
 * spec: Add a paragraph about which license to put in 
 * Add documentation for YAML release type and urgency
 * Add documentation for YAML provides
Bugfixes:
 * component: Don't strip ";" from keywords before translating them
 * utils: Don't strip modifiers when stripping encoding
 * compose: Check optipng is there before we use it
 * Improve text line wrapping, especially if many newlines are present
 * Make word-wrap function unicode-aware
 * Make license_is_metadata_license parse more complex expressions
 * Improve cache refresh code, don't flag cache as updated if update failed
 * Use system cache even if we had to drop some invalid metadata
 * Assign more string class members safely
 * Fix flashed firmware generating incorrect XML
 * Fix YAML having wrong names for the firmware data
Contributors:
 Aleix Pol, Iain Lane, Philip Withnall,
 Robert Ancell, Matthias Klumpp
Version 0.14.3
~~~~~~~~~~~~~~
Released: 2021-03-08
Specification:
 * spec: Mention that license-IDs are case-sensitive
 * spec: Fix case of LicenseRef-proprietary in the spec
Bugfixes:
 * compose: Don't loop endlessly if external desktop l10n function is set
 * Never create a predictable dir in /tmp for caching
Contributors:
  Philip Withnall, Matthias Klumpp
Version 0.14.2
~~~~~~~~~~~~~~
Released: 2021-03-02
Features:
 * qt: Implement missing Pool::componentsByCategories
 * Share one user-owned read-only system metadata cache between all applications
 * pool: Clean up user sysdata caches if we start to use the system cache
 * Port over some parsing improvements for desktop-files from asgen
 * compose: Add helper for reading desktop-entry files
 * compose: Handle bad UTF-8 in desktop-entry files even better
 * search: Perform partial token matches instead of prefix matches
 * search: Unconditionally perform partial term matching after exact matching
 * news-to-metainfo: Recognize the "Contributors" section
 * Update our own metainfo file for appstreamcli
Bugfixes:
 * Read descriptions from collection XML correctly again
 * tests: Fix a few memory leaks
 * Make people acknowledge they know the ascompose API is unstable
 * search: Make whole-search string matching a lot more strict
 * validator: Resolve false-positive when testing remote icon URL validity
 * utils: Improve textwrap if text is just one excessively long word
 * compose: Permit U+00AD SOFT HYPHEN in string values
 * Validate our own metainfo file
 * compose: Don't assume lowest priority for desktop-entry-only components
 * search: Only replace full words with greylist terms, not partial ones
 * ascli: Take all positional parameters as search terms when searching
Version 0.14.1
~~~~~~~~~~~~~~
Released: 2021-02-16
Features:
 * Switch back from Soup to cURL for HTTP(S) (Matthias Klumpp)
 * validator: Check a few more things on requires/recommends items (Matthias Klumpp)
 * Only download the first bytes of a file when checking URLs for validity (Matthias Klumpp)
Specification:
 * spec: Officially mark  tag as deprecated (Matthias Klumpp)
Bugfixes:
 * qt: Return better errors in AppStream::Metadata (Matthias Klumpp)
 * Do not automatically clean up errors that will be propagated (Matthias Klumpp)
 * Remove overall extern "C" to make very new (2.67+) GLib versions happy (Matthias Klumpp)
 * ascli: Don’t use GNU C extension type names (Philip Withnall)
 * build: Use c11 rather than gnu11 and define vendor extensions separately (Philip Withnall)
Version 0.14.0
~~~~~~~~~~~~~~
Released: 2021-02-02
Notes:
 * Component data-IDs gain a fifth part for a "branch". If you parse the IDs with AppStream's
   functions, this change is fully backwards compatible. If you do your own parsing of these
   IDs, please check if you have 4-part or 5-part IDs and split accordingly.
   The branch is not used by AppStream (it is just passed through), but needed in GNOME Software
   for Flatpak and Snappy support.
 * AppStream-Generator depends on libappstream-compose now, however the API is still not stable, so
   please do not use it unless you either are appstream-generator or like using experimental code.
Features:
 * news-to-metainfo: Interpret placeholder release dates as denoting a dev version
 * Make as_utils_build_data_id public API
 * Add AsReview for attaching user reviews to software components
 * Add compile-time version test macros
 * Add a branch element to component data-IDs
 * Add branch property to AsComponent
 * utils: Add data-ID hashing and matching functions
 * utils: Make as_gstring_replace public API
 * Add branch info to on-disk cached components
 * content-rating: Add as_content_rating_add_attribute API
 * Rename INPUTMETHOD component kind enum to INPUT_METHOD
 * Add "cabinet" bundle type for firmware deployments
 * Make AsTokenMatch public API
 * Add function to AsScreenshot to get image closest to preferred size
 * Allow AsComponent to directly ingest desktop-entry data
 * Make as_pool_build_search_tokens API public
 * Add "origin" token match
 * Make as_component_add_provided_item API public
 * Add some useful image dimension constants
 * compose: Add blur function from asglib
 * Add more efficient load_from_bytes method to AsComponent
 * Add methods to load metadata directly from GBytes
 * compose: Make image loading code more versatile
 * Add editorconfig
 * Make more use of RefString in AsComponent
 * Revamp version comparison algorithm
 * ascli: Add native profiling support
 * compose: Reduce Hint memory usage, allow to retrieve var list
 * compose: Allow clients to add their own, new hint tags
 * compose: Allow hints to be created from tags, include validator hints in pool
 * compose: XML-escape validator explanations
 * compose: Add a few more methods from asgen's GeneratorResult
 * compose: Add helper method for metainfo validation
 * compose: Add metainfo parsing helper function
 * Implement "filename" property for release artifacts
 * ascli: Add new `os-info` subcommand
 * Add code to validate platform triplets
 * validator: Validate more release-tag specific issues
 * Add utils helper function to install a variety of metadata
 * Improve desktop-entry tests, always add "launchable" tag
 * Update AppStream format version
 * qt: Add bindings for relations API (requires/recommends)
 * Use ref-strings for locale hash tables and token tables
Specification:
 * docs: Update revision and date
 * spec: Add "cabinet" bundle type for firmware deployments
 * spec: Allow "filename" tag in release artifacts
 * docs: Clarify section on release artifact platform triplets
 * spec: Properly mark mailto: links in contact URLs as deprecated
Bugfixes:
 * parse-desktop: Do not try to propagate a null error (Aleix Pol)
 * Retain loaded context in AsMetadata and allow external media base url changes
 * meson: Use project arguments instead of global arguments
 * ascli: Improve text reflow in console output
 * metainfo-to-news: Use "*" instead of "-" for markdown enumerations
 * Drop unneeded compiler warning override
 * Fix small memory leak in AsTranslation
 * Avoid extra strlen() call when loading metadata from file
 * Fix a few more memory leaks
 * validator: Add some more tests
 * ascli: Remove some code duplication, improve help summary text
 * meson: Hardcode less paths
 * tests: Add version comparison tests from appstream-glib, to ensure we compare the same
 * gir: Ensure as_version_string shows up in introspection data
 * ascli: Improve display of indented long-text output
 * compose: Fix build with GLib < 2.66
 * Make sure there are no duplicate operating-system components
 * compose: Ensure font selection for symbolic fonts actually works
 * validator: Ensure we return false in API functions if validation failed
 * Ignore minimal translations in metainfo description texts
Version 0.13.1
~~~~~~~~~~~~~~
Released: 2020-11-30
Bugfixes:
 * Install enum types headers to the right location
 * qt: Construct library using libappstream dependency object
 * validator: Improve check for invalid hyperlinks to reduce false-positives
Version 0.13.0
~~~~~~~~~~~~~~
Released: 2020-11-30
Notes:
 * This release introduces a new library, libappstream-compose, designed to
   provide building blocks for composing AppStream metadata. This includes GUI
   stuff like font and SVG rendering, which libappstream deliberately does not
   provide. The new compose library is not API/ABI stable and should - for now -
   only be used by appstream-generator.
Features:
 * qt: add missing Provided::KindId enum (Aleix Pol)
 * Add experimental libappstream-compose (Matthias Klumpp)
 * Implement support for display_length relation kind (Matthias Klumpp)
 * Implement "tv-remote" input control kind (Matthias Klumpp)
 * Refactor AsRelation to use GVariant internally (Matthias Klumpp)
 * content-rating: Align the OARS/CSM mappings of sex-* (Philip Withnall)
 * content-rating: Add content rating system APIs from gnome-software (Philip Withnall)
 * content-rating: Expand translator comments to link to OARS website (Philip Withnall)
Specification:
 * spec: Specify display_length requires/recommends item (Matthias Klumpp)
 * spec: Add tv-remote user input control type (Matthias Klumpp)
Bugfixes:
 * Use glib-mkenums to create the GType of all the available enums (Corentin Noël)
 * Set FD_CLOEXEC on the LMDB FD manually (Fabian Vogt)
 * Never ship with an embedded convenience copy of Highlight.js (Matthias Klumpp)
 * Don't fail doc install if global highlight.js wasn't found (Matthias Klumpp)
 * Properly escape markup when fixing invalid description data (Matthias Klumpp)
 * validator: Don't pass NULL to vprintf, it's not an allowed value (Matthias Klumpp)
 * meson: Kill deprecation warning for pkgconfig.generate (Matthias Klumpp)
 * validator: Demote cid-contains-uppercase-letter from INFO to PEDANTIC (Matthias Klumpp)
 * Change some AsPool GIR annotations to only transfer container,
   as workaround for issue in GIR (Matthias Klumpp)
 * Properly parse YAML font provides entry (Matthias Klumpp)
 * content-rating: Lower the OARS/CSM mapping of sex-homosexuality/intense (Philip Withnall)
 * Change return annotation of as_agreement_get_sections to "transfer none" (Rico Tzschichholz)
 * contrib: Vala expects element-type of PtrArray to reflect their ownership (Rico Tzschichholz)
Version 0.12.11
~~~~~~~~~~~~~~
Released: 2020-05-12
Features:
 * Auto-update static category data from fd.o
 * Implement support for input control relations
 * validator: Validate input control relations
 * validator: Put AppStream technical terms and tag names in backticks in
   explanation texts
 * Modernize the README
 * validator: Check for uppercase letters in cids
 * Strip beginning/trailing newlines in a number of places
 * Make AsContext getter for AsComponent public API
 * qt: Add support for name_variant_suffix
 * Make component sort-score API public API
 * Implement a YAML representation of release artifact information
Specification:
 * Build specification and docs with DAPS
 * docs: Add (HTML) anchors for requires/recommends items
 * spec: Specify user input control recommendations
 * docs: Don't show reference to nonexistent provides->service tag for services
 * spec: Encourage the use of only lowercase letters for component-IDs
 * docs: Document --explain flag in ascli manual page as well
 * docs: Add permalink anchors to some list entries
 * Formally support BLAKE2b/s as hash functions for release artifacts
 * docs: Link to the MetaInfo Creator webapp in a few places
Bugfixes:
 * Be less noisy about ignoring excessively long search tokens
 * Tighten the "free license" check and prevent false positives
 * cache: Use correct fts value per result (David Hewitt)
 * validator: Control items can't have a version
 * validator: Reduce download timeout
 * yaml: Strip encoding when serializing keyword lists
 * Allows arbitrary indentation when converting NEWS files
 * Ignore NULL values silently in our stringstrip function
 * Only dump valid metainfo description markup, sanitize it otherwise
Version 0.12.10
~~~~~~~~~~~~~~
Released: 2020-01-18
Notes:
 * This release drops its optional dependency on Curl in favor of a non-optional
   dependency on libsoup.
Features:
 * Sort addons less prominently than applications (Aleix Pol)
 * validator: Display wrong data hint if metadata_license is invalid (Matthias Klumpp)
 * Split tokens for descriptions as well (Matthias Klumpp)
 * validator: Replace curl with libsoup for download tests (Matthias Klumpp)
 * Update content rating for OARS 1.1, make CSM age conversion public API (Matthias Klumpp)
 * tests: Don't duplicate XML/YAML preambles in test data (Matthias Klumpp)
 * Add asynchronous method for loading the metadata pool (Matthias Klumpp)
 * Try to reuse initial temporary cache when loading data into pool (Matthias Klumpp)
 * Reduce minimum required GLib version to 2.58 (Matthias Klumpp)
 * Implement support for "runtime" component type (Matthias Klumpp)
 * Use SPDX JSON and filter out license exceptions in static data (Matthias Klumpp)
 * Update SPDX and TLD data (Matthias Klumpp)
 * Implement support for the WITH operator in recent SPDX (Matthias Klumpp)
 * Add function to test if a license string is for free software (Matthias Klumpp)
 * qt: Add wrappers for license exception and freeness tests (Matthias Klumpp)
 * ascli: Add vercmp shorthand for compare-versions subcommand (Matthias Klumpp)
 * ascli: Don't print validation issues in color and bold - color is enough (Matthias Klumpp)
 * its: Mark name_variant_suffix as translatable (Matthias Klumpp)
 * Make AsContext public API (Matthias Klumpp)
 * Add convenience methods to direcly serialize a component to XML (Matthias Klumpp)
Specification:
 * docs: Adjust Freedesktop spec URLs to their new redirect locations (Matthias Klumpp)
 * Document & implement the new name_variant_suffix tag (Matthias Klumpp)
 * spec: Specify the "runtime" component type (Matthias Klumpp)
 * spec: Permit alternative IDs in appstream URIs (Matthias Klumpp)
Bugfixes:
 * Fix double-free error when trying to dump bad XML markup (Matthias Klumpp)
 * validator: Check URLs correctly if they have leading/trailing spaces (Matthias Klumpp)
 * Remove deprecated GLib API (Matthias Klumpp)
 * Don't autofree a temporary error that may be propagated (Matthias Klumpp)
 * Don't attempt to add a zero-length search token to the index (Matthias Klumpp)
 * Filter out search tokens that are stemmed to nothing (Matthias Klumpp)
 * Prefer locale with region code over plain language code if possible (Matthias Klumpp)
 * Use the same locale fallback algorithm everywhere (Matthias Klumpp)
 * validator: Don't fail when encountering WITH operator (Matthias Klumpp)
 * contrib/vapi: Add deprecated ProvidedKind.MIMETYPE to preserve API (Rico Tzschichholz)
Version 0.12.9
~~~~~~~~~~~~~~
Released: 2019-09-24
Features:
 * validator: Add method to retrieve list of all tags
 * ascli: Add command to make a desktop-entry file from a metainfo file
 * ascli: Add command for YAMl NEWS file conversion
 * ascli: Convert text NEWS file as well
 * Recognize Specification/Documentation as new section type when converting NEWS
 * Augment metainfo file with release information automatically
 * Use gperf for description markup as well
 * validator: Make file-extension checks work with complex URIs
 * Implement support for release issues
Specification:
 * docs: Actually give a metadata license recommendation
 * Document the issue tag, which can be part of release information
 * spec: Explicitly allow WebP for images in metainfo files
 * Permit requires/recommends relations on firmware, like Fwupd uses
Bugfixes:
 * docs: Move compulsory_for_desktop where it belongs
 * docs: Mention how to exclude .desktop files from being processed
 * Make -Wdeprecated-copy non-fatal in maintainer mode for now
 * cache: Relax LMDB database max size assumption a bit to help 32bit builds
 * validator: Don't crash in assertion if we have no filename
 * Catch more errors when parsing YAML and _ref less often
 * Interleave translated/untranslated paragraphs when generating metainfo XML
 * Don't format cached XML
 * Don't emit language tag for screenshot if it is unnecessary
 * docs: Add missing documentation to API reference
 * docs: Document a few missing ascli subcommands
Version 0.12.8
~~~~~~~~~~~~~~
Released: 2019-08-16
Notes:
 * This release changes the output of appstreamcli's validate actions.
   Please account for that if you were parsing it! The new `--format=yaml`
   flag for ascli may be interesting to produce machine-readable output.
Features:
 * Add install-docs meson build option (Antonio Larrosa)
 * Use more portable deprecation macro
 * Deprecate AsIssueImportance, use equivalent AsIssueSeverity instead
 * validator: Implement first bits of tag-based validation
 * cli: Print terse issue list by default, make long explanation explicit
 * Assume releases are sorted in metainfo, fail validation on wrong sorting
 * validator: Allow returning validator output as structured YAML
 * validator: Refine YAML output and allow CLI to generate it for validate-tree
 * Improve XML node dumping functions
 * Permit  and