Add an “Open in Tab Desktop” button to your GitHub repo
One click on your README gives every visitor a running copy of your project — cloned from the branch you choose into a browser-based desktop, open in a VS Code-class editor, with your dev command already running. Nothing to install, no server behind it. Paste your repository below to get the link and the badge.
Generate yours
Public repos only · showing an example until you paste one
https://tabdesktop.com/os?clone=https%3A%2F%2Fgithub.com%2Flaravel%2Flaravel&vm=laravel[](https://tabdesktop.com/os?clone=https%3A%2F%2Fgithub.com%2Flaravel%2Flaravel&vm=laravel)<a href="https://tabdesktop.com/os?clone=https%3A%2F%2Fgithub.com%2Flaravel%2Flaravel&vm=laravel"><img src="https://tabdesktop.com/open-in-tab-desktop.svg" alt="Open in Tab Desktop" height="28"></a>How it works
- 1. Paste your repository
Enter the public URL of your repo (GitHub, GitLab, Codeberg or any git host that serves smart HTTP).
- 2. Choose what happens on arrival
Optionally pick a branch to clone and a command to run — `npm run dev`, `php artisan serve` — so the visitor lands on a running app, not just a checkout.
- 3. Copy the badge
Copy the Markdown or HTML snippet below and paste it into your README, near the top where a Clone button would go.
- 4. Visitors click it
The link opens Tab Desktop, clones the repository (your branch) into an isolated desktop and opens it in Tab Code with the README rendered, Harbor beside it, and your run command started in the terminal — a running app, first click.
The link is a plain URL — /os?clone=<repository>, plus &vm=<name> for an isolated desktop, &branch=<branch> to clone a branch and &run=<command> to start the app — so it works from a README, a docs site, a tweet or an issue comment. Nothing about your repository is sent anywhere: the clone happens in the visitor's browser over the standard git protocol.
Questions
Does the button work for private repositories?
No. The clone runs in the visitor's browser and speaks the git smart-HTTP protocol without their credentials, so only public repositories work. A private repo shows a clear error rather than a login prompt.
What happens after the clone?
The project opens in Tab Code — a VS Code-class editor with the file tree, an integrated terminal and the README rendered. With a run command in the link it starts right away, in that terminal, with Harbor beside it showing the server. Without one, Harbor reads the repo's package.json, composer.json, artisan or index.html and offers the dev server as one click.
Is anything installed on the visitor's machine?
Nothing. Node.js, PHP, git and the package managers run as WebAssembly inside the tab, and files live in the browser's origin-private storage. Closing the tab keeps the desktop; the visitor can delete it any time.
Why does the link open a separate desktop?
The `vm` parameter gives the clone its own isolated filesystem, so a repository a visitor did not choose themselves never lands in their main desktop. Drop the parameter if you prefer the clone to go to the main desktop.
Can I add a dev command or a branch?
Yes. `branch` clones that branch instead of the default, and `run` is typed into the project's terminal in Tab Code once the clone is open — it runs visibly, next to Harbor, which lists the server it starts. Without `run`, Harbor still reads the project's own start scripts (package.json, composer.json, artisan) and offers them as one click.
What your visitors can run
- Node.js in the browser
- PHP in the browser
- WordPress in the browser
- Laravel in the browser
- Vite + React in the browser
- Vite + Vue in the browser
- Express in the browser
- Strapi in the browser
- Directus in the browser
- Feathers in the browser
- Git in the browser
- Python in the browser
- SQLite in the browser
- TypeScript in the browser
- 13 languages in the browser