Open-source project
fmz200/global-testflight-link avatar
fmz200/global-testflight-link

global-testflight-link: a census of public TestFlight betas and which ones still accept testers

收集苹果公开的iOS/iPadOS/MacOS Testflight链接。Collect Apple's public iOS/iPadOS/MacOS Testflight links.

843 stars35 forksUnknownGPL-3.0

At a glance

What is it?
This repository is a database rather than a program. It gathers the public TestFlight join links that Apple exposes for iOS, iPadOS and macOS betas, records for each app whether the beta is currently accepting testers, full, closed or removed, and publishes the result as a searchable table split across thirty-eight pages. The counts at the top of the file tell you how much of the catalogue is still usable.
Who is it for?
Use global-testflight-link when you need to find a public beta to install today, because the status column tells you which links will actually let you in rather than which ones merely exist. Do not treat the status as authoritative, since the README warns that it may lag and the timestamps are all from a single check.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 46 days ago.
What is it written in?
GitHub does not report a main language for this repository.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What the repository actually contains

The description is short: it collects Apple's public iOS, iPadOS and macOS TestFlight links. The README repeats it in two languages, Chinese first, then English, which tells you something about where the audience is.

What is in the tree is small and telling. There is a LICENSE file, the README.md that you are reading, a db/ directory, a pictures/ directory and a readme/ directory. There is no source code, no build script and no release. The primary language is recorded as unknown, which is consistent with a repository whose content is a dataset and whose tooling is not part of what is published.

The structure is a database with a presentation layer. The README.md holds the first page of the table and a table of contents, and readme/ holds thirty-seven more pages named table2.md through table38.md. The db/ directory is where the underlying data lives, and pictures/ holds the logo assets, including the project logo that appears at the top of the README.

So the delivery model is that the data is in git, the pages are generated from it, and the published artefact is Markdown that anybody can read on GitHub or clone and search. There are no GitHub releases, and the last push was on 2026-09-07.

That design has one obvious consequence worth stating early. Because the repository publishes the same content as both a database and a set of rendered pages, the pages are the convenient interface for a human and the database is the convenient interface for a script.

The status column and the counts behind it

The value of this repository is in one column, and the README explains each value carefully.

Y means Yes, the app is currently accepting new testers. F means Full, the beta's testers are full. N means No, the beta is not accepting any new testers right now. D means Removed, the app has been deleted from TestFlight. U means Unknown, the status has not been detected.

The totals at the top of the file give the scale and the shape of the catalogue. The total is 37988, with Y at 10562, F at 338, N at 22049, D at 5039 and U at 0.

Those numbers are worth reading carefully rather than as a headline. A little over a quarter of the entries currently accept testers. The largest group by far, 22049, are betas that exist but are closed. And 5039 have been removed entirely, which is a reminder that a TestFlight link in an old list is often a dead end.

The unknown count of zero tells you something too: the detection pass covers everything in the catalogue, so a blank status is a real observation rather than a gap in the collection.

The README is explicit about the reliability of all of this. The status may lag, and it recommends that you click the TestFlight link to test availability yourself. That warning is the most important sentence in the document, because a stale status is worse than no status: it looks authoritative.

And the statuses are dated. The table carries a Last Updated column in UTC+08:00, and the visible rows are all stamped on the same day in July 2026, which tells you the whole catalogue was checked in one pass rather than continuously.

How a row is built, and what the data tells you

Each row in the table has five columns: the app logo, the app name, the link, the status and the last updated time.

The logo column is filled from Apple's own content delivery network, with the URL pointing at the app store image thumbnail for that application, and it is left empty for many rows. The empty cells are informative rather than broken: the icon is only available when Apple has it published, and the table is a cross-section of apps across many storefronts and languages, so coverage is uneven.

The link column holds the join code rather than the whole URL, so a row reads as an eight-character code next to the join URL it belongs to. The codes are the identifier Apple issues for a beta, and they are what makes the table searchable: a code is unambiguous, where an app name is not, because the same app ships under different names in different regional stores.

And the app names make the international scope obvious. The visible rows carry names in Japanese, Korean and Chinese, alongside the English and Latin-script ones. The list is not a curated selection of English-language apps. It is the whole public surface, and a majority of it is non-English, which is why the README is published in two languages and why the app names in the table are left in their original script.

The last updated timestamps are per row and in UTC+08:00, which is a deliberate choice for a collector whose reference point is the East Asian market.

Why a census of this kind is useful at all

The obvious question is why anyone would want a list of TestFlight links rather than finding them as they go.

The answer is in the status column and the timestamps. A TestFlight beta has a lifecycle: it opens, it fills up, it can be closed to new testers, and eventually the app is removed and the link dies. A list of links without statuses is a list of maybe-landing pages. A list with statuses and dates is a way to find something that will actually let you in today.

There is a second, less obvious use. When you are researching a new app, or looking for a client to test against, or tracking whether a product you follow has a public beta, a per-app status with a date is a fact you would otherwise have to discover by opening every link.

And there is a third use that comes from the scale. Nearly thirty-eight thousand entries, more than five thousand of them removed, is a dataset. You can see how the TestFlight ecosystem churns, you can spot the categories where betas are widely available, and you can build your own tooling on the db/ directory without touching the rendered pages.

That last point is why separating db/ from readme/ matters. The rendered pages are for reading, the database is for querying.

Limits: staleness, incompleteness and what the data cannot tell you

The limits are inherent to what is being collected, and the README is upfront about the main one.

Staleness is the first. The status may lag, and the timestamps show a single detection pass rather than continuous monitoring, so a Y recorded in July 2026 tells you very little about the state of that beta in October. The README's advice, to click the link and test the availability yourself, is not a formality.

Completeness is the second. This is the set of public links Apple exposes. A beta that was never public, or was only shared by direct link, will not be here. Nor will a beta that has already been removed before the collection pass, which is presumably part of why the removed count is as high as 5039 rather than higher. The unknown count being zero means every row was checked at least once, not that every public beta was found.

The third limit is that the status tells you about the beta's TestFlight configuration and nothing else. A Y says the beta accepts new testers; it does not say the app is safe, stable or worth installing, and it does not say whether the tester queue is short. The D category tells you a link is dead; it does not tell you the app was discontinued rather than replaced.

The fourth is that the collection is a snapshot of what was reachable. The last push was on 2026-09-07 and there are no releases, so there is no version history and no changelog to consult to see how a given app's status has moved over time. If you need that, the git history of the database is the only record available.

And the fifth is the scope. The repository covers public links for iOS, iPadOS and macOS TestFlight. It says nothing about Apple Developer Program distribution, about private TestFlight groups, or about how any of this interacts with the terms of service of the apps listed.

Using the data, and the licence position

The repository is GPL-3.0 licensed, and the practical way to use it is either by reading the rendered pages or by querying the database directory directly.

The pages are split across thirty-eight files, with the first in the README and the rest under readme/, so a full-text search over the repository is the way to find a particular app. If you want to answer a question the table does not, the db/ directory is where you build tooling, and it is the part of the repository that does not need regenerating when the pages are rebuilt.

The caveat the README attaches to all of it is that the status may lag, so you should open the link and confirm availability before acting on a Y. And you should read the timestamp first, because a status checked months ago is a historical record rather than a current one.

On the licence, GPL-3.0 covers the repository contents: the collected data and the pages. It says nothing about the applications in the table, each of which has its own terms and its own TestFlight configuration. A public beta being listed here is a fact about a link, not an endorsement of the app, and a removed entry is a record of what was, not a claim about the developer's intentions.

Editorial conclusion

Use global-testflight-link when you need to find a public beta to install today, because the status column tells you which links will actually let you in rather than which ones merely exist. Do not treat the status as authoritative, since the README warns that it may lag and the timestamps are all from a single check. Verify first that a link works by opening it, check the last-updated time against the app you care about, and remember that a removed or full beta is a property of the app's TestFlight configuration rather than of this collection.

Frequently asked questions

What does global-testflight-link collect?

It collects Apple's public TestFlight join links for iOS, iPadOS and macOS betas, and records for each app whether the beta is currently accepting testers, is full, is closed to new testers, or has been removed. The catalogue is published as a table split across thirty-eight pages, with a summary count at the top of the README.

How many TestFlight apps in the list are still accepting testers?

The README's totals give 37988 entries, with 10562 marked Y for currently accepting new testers, 338 marked F for full, 22049 marked N for not accepting new testers, 5039 marked D for removed from TestFlight, and none marked U for undetected.

How reliable is the availability status in global-testflight-link?

The README states the status may lag and recommends clicking the TestFlight link to test availability yourself. Each row carries a last updated timestamp in UTC+08:00, and the visible entries were all checked on the same date, so the catalogue reflects a single detection pass rather than continuous monitoring.

Official sources

  1. fmz200/global-testflight-link on GitHub
  2. Issues
  3. License: GPL-3.0
  4. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/fmz200-global-testflight-link.svg)](https://hysenlabs.com/projects/fmz200-global-testflight-link)

Was this useful?