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
/releasespage 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
Namewould override what the app itself (or thetitle.txtin its Fastlane tree) specify, whileAutoNameinstead used as a fallback in case the name cannot be extracted from the .apk or app's Fastlane metadatatitle.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
2if 2 releases would fit, else to1. RequiresRootYesif the app requires root, not present otherwiseMaintainerNotes-
a mandatory object, holding multiple fields:
AppAdded: the date the app was added to our repo, formatYYYY-MM-DDAppRemoved: the date an app was removed (formatYYYY-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'sreleases/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 to0(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 noten-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.txtas plain-text (i.e. only convert line breaks to<br>) - fulldescMD: consider
full_description.txtas Markdown, and render it accordingly
FastlaneService: defaults toMethodabove. 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 appStatus: a timestamped list of events to keep track of. Each list entry starts with a date inYYYY-MM-DDformat, followed by the message.
VercodeOperation- for cases where the per-release changelogs are based on the
versionCodeof a different build (architecture). Value must be enclosed in single-quotes, e.g.'%c -2000'(subtract 2000 toversionCodeof 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%vfor a tagv1.2.3pointing to versionName1.2.3.Info
our framework currently only supports either
%cor%v, not both at the same time. As the string is used as RegEx, e.g.v%v-%ccould e.g. be written asv%v\-\d+(versionCodeis always integer) to go byversionName, orv.+\-%cto go byversionCode. 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 monthNone: 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.