Repositories
A repository is a storage location with a collection of Alpine Linux packages. In addition to the three official repositories, technically, any directory with a collection of *.apk files with a special index file named APKINDEX.tar.gz can be considered a repository, albeit a personal repository. Alpine Package Keeper (apk) loads repository definitions from /etc/apk/repositories, has sub-commands to query repositories, and maintains the desired system state as per world.
Official repositories
There are three official package repositories available in Alpine Linux: main, community and testing. These repositories directly correspond to three directories of aports.
Main
Packages in the main repository are the software that has direct support and updates from the Alpine core team. Alpine Linux tries to limit the amount of packages in main to only include essential base system packages i.e. those that are required to set up a minimal functional system, along with those packages' dependencies.
Community
Packages in the community repository are those made by users in team with the official developers and are close to the Alpine Linux packaging process. They are supported by those user(s) contributions, and support ends six months after their release. They may also be removed in a future release due to lack of support by upstream authors or, rarely, if the user contribution(s) stop(s).
If packages from the community repository are used, one would need to upgrade that repo to the latest stable release branch to continue to have support.
Testing
The testing repository is only available on the edge branch, i.e. the development branch, and this is where new packages go. These are made by any contributor to Alpine Linux. Packages from testing that are accepted go to the community repository or (more rarely) to the main repository. Packages in testing have no support (staging only) and are built only for the edge branch.
Release Branches
Each stable release branch of Alpine Linux has its own main and community repositories. The releases page has information on all the release branches along with support status. Support entails security patches for the given feature versions.
The current stable release branch of Alpine Linux is 3.23.
Edge
Edge is the name given to the current development tree of Alpine Linux. The edge branch includes all three official repositories and contains the latest build of all available Alpine Linux packages. Those packages are updated on a regular basis. Since edge is a development branch, many changes are not heavily tested (or tested at all), and packages can and sometimes do break without warning. edge can be considered as the rolling release version of Alpine Linux.
Upgrading to the edge branch and installing packages from testing repository, and then submitting bug reports is one of the best ways to contribute to Alpine Linux. This is a very valuable activity that helps Alpine Linux development, as it ensures that the quality of stable releases is high.
The currently installed edge version – i.e the build date that is attached to the edge release – may be checked with the command:
$ cat /etc/alpine-release

Message on /usr merge
Edge currently issues a message encouraging users to install the merge-usr package that would update the base filesystem hierarchy. Consult the news release on /usr merge for background information, including its rationale.
This is currently not a requirement but will be implemented in the future as part of standard system upgrade to a new release, as mentioned in gitlab issue #17624. You can disable this nag message by masking the usr-merge-nag package:
$ doas apk add '!usr-merge-nag'

$ doas merge-usr --dryrun, do not proceed with the /usr merge, as this would break your system. Instead, it would be appreciated if you could kindly submit a bug report and provide all requested information when doing so.
Managing repositories
The package repositories that apk uses to retrieve package files for installation are specified in the /etc/apk/repositories file. Each line in /etc/apk/repositories specifies the location of a package repository, one repository per line, and optionally with a tag. Lines that start with a hash character (#) are there for comments or to disable a "repo" line (temporarily or not) and are ignored by apk.
The location may be an http:// or https:// URL, or the path to a directory on the local filesystem. If you booted from a USB stick (/media/sda1) or CD-ROM (/media/cdrom), then your repository file probably looks something like this:
Contents of /etc/apk/repositories
Enabling the community repository
The setup-apkrepos script can be used to enable the community repository, as follows:
# setup-apkrepos -c
With the above change, the /etc/apk/repositories file will look something like:
Contents of /etc/apk/repositories
Tagged repository
A tagged repository is prefixed with the @tag specifier, followed by a space and the repository location in the /etc/apk/repositories file, as follows.
Contents of /etc/apk/repositories
The optional @tag specifier, when used as shown above (@personal), indicates that the tagged repository should not be used by default: apk will by default only use the untagged repositories, but adding a package from an @-tagged repository will make apk prefer the tagged repository for the named package, even if a later version of the same package is available in another repository. It allows pulling in dependencies for the tagged package from the tagged repository, though it prefers to use untagged repositories to satisfy dependencies when possible.
For example, apk add busybox@personal enables the selection of busybox from a tagged repository named @personal. That command enables the installation of busybox and its dependencies from the @personal tagged repository. Since tagged repositories are not prioritized, if a version of busybox's dependency from an untagged repository is a better fit, it will be used.
Upgrading to edge
Follow the instructions for Upgrading to Edge.
When using edge branch, the testing repository can be added as a tagged repository. Remember that packages in testing repository have no support.

Using testing repository
Unlike edge branch, installing packages from testing repository in a stable release branch is not recommended and is not guaranteed to work. However, if you need a package that is only available in the testing repository, add the testing repository as a tagged repository by editing the /etc/apk/repositories file as follows:
Contents of /etc/apk/repositories
Before installing a package from the testing repository, check for dependencies. Installing a package from testing repository that depends on libraries in main or community often won't work due to a potential version mismatch. Alpine Linux does not officially support mixing branches this way, as mixing packages from stable and edge releases can break your system.
For example, with the command # apk add wireguard-go@testing, the @testing tag allows apk to pull the necessary package(s) from the testing repository without potentially messing up your installation (too badly).