YAML Metadata

For each app in our repository, there is a corresponding YAML file in the metadata/ directory – which you can find in our repodata repository. The apps' package names (aka packageName or appId) defines the name of this file. To start with an example, here is how metadata/com.traseapps.simplestNotes.yml looks like:

Categories:
  - Writing
License: MIT
AuthorName: Aleksandr Iovlev
SourceCode: https://github.com/Trase1/SimplestNotes-app
IssueTracker: https://github.com/Trase1/SimplestNotes-app/issues
Changelog: https://github.com/Trase1/SimplestNotes-app/releases
Donate: https://boosty.to/trase1/donate

AutoName: Simplest Notes

MaintainerNotes:
  AppAdded: 2025-07-24
  Method: github-release
  GHSkipPre: 1
  Fastlane: https://github.com/Trase1/SimplestNotes-app/tree/master/fastlane/metadata/android
  FastlaneFeatures: shortdesc,fulldescMD,icon,screenshots

AllowedAPKSigningKeys: 385ea9045e6ecfc3cccac1ec906f423677fe130ce9e7c19d9277c2b0aacc4026

AutoUpdateMode: Version v%v
UpdateCheckMode: Tags

As you can see: app description and graphics are not in this place. They are maintained in the apps' repositories, using Fastlane format. Available and actively used fields in the YAML file are, in the order they are expected to appear there:

AntiFeatures
an object, indicating any anti-features an app might ship with. A list of configured AntiFeatures can be found here. Details on why a given AntiFeature applies, must be given at least in English (en-US); additional locales are optional. Example:
AntiFeatures:
  NonFreeNet:
    en-US: The app connects to Youtube and Google Translate.
    de: Die App baut Verbindungen zu Youtube und Google Translate auf.
Categories
Mandatory. A list of categories. Must be at least one, but no more than 5.
License
Mandatory. One license, in the format of an SPDX identifier.
AuthorName
Mandatory. The name of the author(s). Usually a single name; can be a nickname, chosen/legal name, name of an organisation, etc. Can be multiple names (comma separated).
AuthorEmail
Optional, but strongly recommended. A public email address the author(s) can be reached at – e.g. if something happens to their git forge accounts.
AuthorWebSite
Optional. Homepage of the author(s). A single URL only.
WebSite
Optional. A website with additional information on the app. Can be the app's wiki in the corresponding forge, a dedicated website, or even just a web page on the author's website.
SourceCode
Mandatory. URL to the app's git repository, holding the source code of the app.
IssueTracker
Optional, but strongly recommended. Where people can file bugs, feature requests, make suggestions, etc.
Translation
Optional. A link to where people can help translate the app. Usually a service like Weblate or Crowdin.
Changelog
Optional. A link to where changes for releases are listed. Usually the /releases page of the corresponding forge.
Donate
Optional. An URL to a donation page. Ideally, the app's author maintains this information in a FUNDING.yml in the app's git repository, so it gets automatically synchronized whenever a new release is pulled in.
Bitcoin, Litecoin
Optional. Bitcoin/Litecoin addresses for donating to the project.
Liberapay, OpenCollective
Optional. UserName at the corresponding service. These should preferably go to above mentioned FUNDING.yml.
AutoName, Name
The „Display Name“ of the app. At least one of these two should be present. The difference is that Name would override what the app itself (or the title.txt in its Fastlane tree) specify, while AutoName instead used as a fallback in case the name cannot be extracted from the .apk or app's Fastlane metadata title.txt, and helps to recognize the app when looking at the YAML only).
ArchivePolicy
overrides the repository's config value, but just for this app. Usually only set, if 3 releases of the app would go beyond the per-app size limit of the repository (see: App Inclusion Policy). It is then set to 2 if 2 releases would fit, else to 1.
RequiresRoot
Yes if the app requires root, not present otherwise
MaintainerNotes

a mandatory object, holding multiple fields:

  • AppAdded: the date the app was added to our repo, format YYYY-MM-DD
  • AppRemoved: the date an app was removed (format YYYY-MM-DD), followed by the reason of removal. This is only set right before the actual removal, and used by our statistic tools.
  • Method: Method by which the APK is obtained. Depending on where the app is hosted, values include:
    • codeberg-release: releases at Codeberg (or self-hosted instances of Forgejo/Gitea)
    • gitlab-tags: releases at GitLab (gitlab.com or self-hosted)
    • github-release: GitHub's releases/ page
    • other values may exist with apps initially listed at IzzyOnDroid long ago, but are only used for historical reasons. They are not outlined here, as they are not available to new listings. If you need to look them up, you can find them in our schema definition.
  • ApkMatch: RegEx the file name should match (in case we have multiple APK files for different purposes or architectures). Examples: /arm64-v8a/, /noanalytics\.apk$/
  • ApkIgnore: the opposite (what definitely NOT to take). Useful e.g. when repos host multiple apps. Examples: /(older|VNC)/, /(debug|unsigned).apk$/, /(mips|x86).apk$/, /paid/
  • GHSkipPre: set to 0 (i.e. GHSkipPre: 0) if pre-releases shall be picked up as well. This is usually reserved for test/development variants of apps, which are the exception here.
  • Fastlane: URL to the fastlane folder containing the changelogs (e.g. https://github.com/dev/app/fastlane/metadata/android). A locale (e.g. de-DE) can be added if the changelogs are only available there (and it is not en-US).
  • FastlaneFeatures: comma separated list (without any spaces) of what we want to plug from Fastlane. Available options include:
    • fulldesc,shortdesc,title,video,changelogs,icon,featureGraphic,screenshots: take the files as they are (though graphics will be optimized on import)
    • fulldescNL: handle full_description.txt as plain-text (i.e. only convert line breaks to <br>)
    • fulldescMD: consider full_description.txt as Markdown, and render it accordingly
  • FastlaneService: defaults to Method above. This is only needed when Fastlane is to be retrieved from a different place than the APK, to tell the „import library“ how to map the URL to a local path (in the git clone of the app's repo). Possible values: github, gitlab, codeberg.
  • Note: any global notes on the app
  • Status: a timestamped list of events to keep track of. Each list entry starts with a date in YYYY-MM-DD format, followed by the message.
VercodeOperation
for cases where the per-release changelogs are based on the versionCode of a different build (architecture). Value must be enclosed in single-quotes, e.g. '%c -2000' (subtract 2000 to versionCode of the APK to get the changelog file name (e.g. 2021 => 21 for an arm64 build of a Flutter app).
NoSourceSince
defines the last version source code was available for
AutoUpdateMode

string to match the version against, with placeholders for versionCode (%c) and versionName (%v). Not a regex. Example: AutoUpdateMode: Version v%v for a tag v1.2.3 pointing to versionName 1.2.3.

Info

our framework currently only supports either %c or %v, not both at the same time. As the string is used as RegEx, e.g. v%v-%c could e.g. be written as v%v\-\d+ (versionCode is always integer) to go by versionName, or v.+\-%c to go by versionCode.

UpdateCheckMode

How to check for updates.

  • Tags: check (daily) if there are new tags in the repo, which have matching APK files.
  • Static: similar, but only check once per month
  • None: disable (no update check at all), e.g. because the app's repo was archived, or gone entirely

These are the fields currently used, and available for new listings. More fields are kept in older YAMLs, for historical reasons. For a full list, please refer to our schema definition.