Open-source project
RadishXN/run-abroad avatar
RadishXN/run-abroad

run-abroad ranks 71 visa paths by which single gap blocks the most of them

填 10 项基本信息,从 71 条签证 / 移民路径里筛出适合你的,并告诉你还差什么

504 stars26 forksJavaScriptMIT

At a glance

What is it?
A browser-only decision tool for immigration and visa routes, with no build step, no dependencies and no backend. Its interesting contribution is not the list of 71 paths but three pieces of reasoning: four tiers instead of a yes or no, a distinction between thresholds you can fix and thresholds you cannot, and a counter for which gap is blocking the most possibilities.
Who is it for?
run-abroad suits someone at the start of a long, expensive decision who needs an ordering rather than another article, and it is worth using precisely because it is explicit about its own errors. Treat every result as a reading list, follow the official links on each card, and check the contribution rules before you file a correction, since changes without an official source will not be merged.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 36 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

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

Editorial analysis

Four tiers, because almost nobody is fully qualified or fully disqualified

The tool's first design decision is to refuse a binary answer.

The stated reasoning is observational: in practice very few people either meet every condition or meet none of them. Most are stuck in the middle, which means a tool that answers yes or no is answering a question nobody asked.

So results are sorted into four tiers. The first is that you meet the conditions and can go straight to studying application materials. The second is that you are close, missing only one or two items that are all fixable, with the examples given being a language score, work experience, proof of funds, or a job offer. The third is that you need long preparation, meaning there are several gaps but the direction itself is not blocked. The fourth is that a path is currently out of reach because a hard threshold exists that you cannot change soon.

The design goal shows in the middle two tiers. They are where the actionable information lives, and a binary filter would have discarded both of them into a single unhelpful word.

It also has an effect on how the list is read. A four-tier list reads as a queue with an order in it, which is a different artefact from a set of options you either have or do not have.

The hard and soft threshold split is the load-bearing idea

The second design decision is described as the most important judgement in the whole tool, and it is easy to see why once stated.

Two applicants can both fail a condition, and the failures mean opposite things. A hard gap is one that cannot be changed in the short term, so the only response is to route around it. The examples given are an age limit being exceeded, a graduation date falling outside an eligibility window, and an institution ranking that is not high enough.

A soft gap is one that time or money can close. The examples are a language score in any of the relevant languages, work experience, proof of funds, an employer offer, and where the degree was studied.

The consequence the documentation draws is the useful part. A path blocked only by soft gaps is still in your options, it just needs preparation. A path blocked by a hard gap is not, and effort spent on it is wasted.

From there comes the project's own framing of its own value: knowing which paths to stop thinking about matters as much as knowing which ones to pursue. Most immigration information does not make you feel that, because it is organised by country and by policy rather than by what is closed to you.

The distinction also keeps the four tiers coherent. The middle tiers are populated by soft gaps, and the last tier exists because hard gaps cannot be scheduled around.

The bottleneck counter is the output worth stealing

The third design decision is the one that goes beyond eligibility filtering, and it is the most transferable idea in the project.

The engine counts which gap blocks the largest number of paths across the whole dataset, and reports that count. The worked example in the documentation shows three lines: improving a language score to a named level unlocks twenty paths, upgrading education by doing a master's unlocks eighteen, and accumulating proof of funds unlocks nine.

That turns a list into a decision. With seventy-one paths and a four-tier classification, a user has an overwhelming number of individually valid options and no ordering among them. Ranking the paths is one kind of help. Ranking the actions by how many paths each one opens is a better one, because it directly answers what to do next.

The stated logic is that time and money are finite, so effort is better spent removing the bottleneck that blocks the most possibilities than spread evenly across all of them. Whether the arithmetic is exact does not matter much for the value of the output. What matters is that the tool commits to a number, which forces whoever maintains the data to think about which requirements overlap and which are independent.

A tool that only told you which paths you qualify for would let you do this reasoning in your head, badly, with seventy-one items to hold. Doing it in the tool is the whole difference.

No bundler, on purpose, and one page the diagram does not show

The engineering posture is the simplest one available: no build step, no package manager, no third-party dependencies:

bash
git clone https://github.com/RadishXN/run-abroad.git
cd run-abroad

open index.html              # macOS 直接打开
python3 -m http.server 8000  # 或起个本地服务器

You clone the repository and open a file.

The scripts are loaded as plain script tags in order, and the README states that modularisation and bundling are deliberately avoided. The stated reason is contribution cost: anyone can change one line of data, refresh the page, and see the result.

That is a defensible trade for a dataset-shaped project where the contribution is mostly data. It also means the site has no build to break, no dependency to audit, and nothing to install on a machine that only needs a browser.

Two small inconsistencies are visible. The project structure diagram lists eight scripts across the main and student sections, while the statement about not modularising refers to three, which is the main trio rather than all of them. And the repository's file listing contains one more page than the diagram shows, a separate pathway detail page that appears in neither the structure block nor the feature description.

There is one stylesheet, with automatic adaptation to dark mode, which is consistent with the no-dependency stance.

The deployment path is equally simple: a workflow file is already in the repository, and enabling Pages with Actions as the source plus a push to the main branch publishes the site.

Fourteen student paths deliberately kept out of the seventy-one

The main dataset covers seventy-one paths across thirty-two countries and regions, organised into eleven categories from working holidays and graduate job-seeker visas through talent schemes, skilled migration, work visas, study and post-study routes, digital nomad visas, startup and investment routes, vocational training, seasonal work, and low-cost residence options. Every card carries a link to the relevant government page.

Then there is a separate student section with fourteen paths, and the documentation is explicit that these are not folded into the main count.

The stated reason is worth repeating because it is a refusal rather than an omission. The student set includes language schools, co-op placements, exchange programmes, crew routes and home-exchange platforms, and platforms and programmes are not visas. Counting them would inflate the headline number with entries that do not answer the question the main list answers.

So the site is five separate entry points rather than one long list, each with its own data file and its own matching rules. A student questionnaire runs on a separate rule tree from the global one.

That separation has a cost worth stating: a path that appears in the student section cannot appear in the global one, so a student who graduates and stops qualifying for the student routes has to re-enter the global form to see the rest.

A built-in validator, and a test that catches the most common data error

The contribution guide asks for corrections and additions, on the grounds that immigration policy changes quickly enough that any single entry may already be wrong. The rules for submitting are specific.

A reported error should come with a link to an official source, and the rule is absolute: changes without an official source cannot be merged. Adding a path means adding an object in the shape the data file already uses. Changing the matching logic means editing the engine file, and scoring weights are open for discussion.

The most valued contribution of all is written into the notes field, and the guidance on what belongs there is unusually clear. Practical information, not a restatement of the threshold. The example of what to write describes a route that recently gained an annual processing cap because application volume surged, which lengthened waiting times significantly and where agencies promising guaranteed approval are high risk. The example of what not to write is a sentence calling it a good visa for young people.

Then there is a self-check with a specific instruction. Open the page, open the developer console, and a validation function runs automatically on load, checking for duplicate identifiers, missing fields and undefined types. After that, fill in several different sets of conditions and confirm that the new path does not report every applicant as meeting the conditions, since that outcome usually means a threshold was left out of the data.

That last check is the one that catches the dangerous error. A path with no thresholds renders as universally open, which looks like good news rather than like a bug.

Nothing is stored, until you press the share button

The privacy story is short and mostly true. There is no backend, no database, no analytics and no cookies. Everything you type lives in the page's memory and is gone when you close the tab.

Then there is one exception, and the documentation is upfront about it. A feature copies a result link, which encodes your options into the address so you can save or share the result. Whether you generate one is entirely your decision.

It is worth being precise about what that means. The encoded options are the answers you gave, which for this form means the profile you typed in: an age, a degree level, scores, work history. So the link is not a neutral reference to a result, it is a statement about you, and sharing it shares that statement. Anyone with the link can read what the answers were even without running the tool.

The disclaimer is written with the same directness. This is a screening tool and not legal advice. A result means which paths are worth reading about, not that an application would succeed, and a real application involves documents, background checks, interviews and administrative review that the tool cannot cover. Salary thresholds, quotas and lists of recognised institutions change nearly every year, every card links to the official page, and the official page is authoritative. Agencies claiming guaranteed approval, internal allocation or guaranteed issuance should be treated with suspicion, since most listed routes can be applied for directly.

The scope is stated as well: only legal routes are discussed, and nothing involving forged documents, sham marriages or unlawful stay is accepted.

Editorial conclusion

run-abroad suits someone at the start of a long, expensive decision who needs an ordering rather than another article, and it is worth using precisely because it is explicit about its own errors. Treat every result as a reading list, follow the official links on each card, and check the contribution rules before you file a correction, since changes without an official source will not be merged.

Frequently asked questions

What does run-abroad do?

It is a browser-only decision tool covering 71 visa and immigration paths across 32 countries and regions. You enter a small set of basic details and it compares them item by item against each path's thresholds, returning a sorted result that annotates the specific gaps rather than a pass or fail.

Why does run-abroad use four result categories instead of yes or no?

Because the documentation argues that very few people either meet every condition or meet none, and most are stuck in the middle. The four tiers are meeting the conditions, being close and missing one or two fixable items, needing long preparation, and having a hard threshold that cannot be changed soon.

What is the hard versus soft threshold distinction in run-abroad?

A hard gap cannot be changed in the short term, such as an exceeded age limit, a graduation date outside an eligibility window, or an insufficient institution ranking, so the only response is to route around it. A soft gap can be closed with time or money, such as a language score, work experience, proof of funds, an employer offer, or where the degree was studied.

How does run-abroad decide what to work on first?

It counts which single gap blocks the largest number of paths across the whole dataset and reports that count, so the output is an ordered list of actions rather than paths. The worked example shows a language improvement unlocking twenty paths, a master's degree eighteen, and proof of funds nine.

Does run-abroad send my information anywhere?

There is no backend, no database, no analytics and no cookies, and everything you type stays in the page until you close the tab. The single exception is the result link feature, which encodes your options into the address, so sharing that link also shares the answers you gave.

How do I contribute a correction to run-abroad?

Open an issue with a link to an official source, because changes without an official source will not be merged. New paths are added as objects following the shape in the data file, and the engine file is where scoring weights are changed. A validation function runs in the browser console on load and checks for duplicate identifiers, missing fields and undefined types.

Official sources

  1. Issues
  2. License: MIT
  3. Project website
  4. RadishXN/run-abroad on GitHub
  5. 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/radishxn-run-abroad.svg)](https://hysenlabs.com/projects/radishxn-run-abroad)