[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-3266":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":37,"readmeContent":38,"aiSummary":39,"trendingCount":16,"starSnapshotCount":16,"syncStatus":40,"lastSyncTime":41,"discoverSource":42},3266,"webvm","leaningtech\u002Fwebvm","leaningtech","Virtual Machine for the Web","https:\u002F\u002Fwebvm.io",null,"JavaScript",16919,3211,100,12,0,8,31,112,33,45,"Apache License 2.0",false,"main",true,[27,28,29,30,31,32,33,34,35,5,36],"cheerp","cheerpx","cpp","lwip","repl","tailscale","vm","wasm","webassembly","xterm-js","2026-06-12 02:00:48","# WebVM\n\n[![Discord server](https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F988743885121548329?color=%235865F2&logo=discord&logoColor=%23fff)](https:\u002F\u002Fdiscord.gg\u002FyWRr2YnD9c)\n[![Issues](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002Fleaningtech\u002Fwebvm)](https:\u002F\u002Fgithub.com\u002Fleaningtech\u002Fwebvm\u002Fissues)\n\nThis repository hosts the source code for [https:\u002F\u002Fwebvm.io](https:\u002F\u002Fwebvm.io), a Linux virtual machine that runs in your browser.\n\nTry out the new Alpine \u002F Xorg \u002F i3 graphical environment: [https:\u002F\u002Fwebvm.io\u002Falpine.html](https:\u002F\u002Fwebvm.io\u002Falpine.html)\n\n\u003Cimg src=\"\u002Fassets\u002Fwelcome_to_WebVM_alpine_2024.png\" width=\"90%\">\n\n## What is WebVM?\n\nWebVM is a server-less virtual environment running fully client-side in HTML5\u002FWebAssembly. It's designed to be Linux ABI-compatible and runs an unmodified Debian distribution including many native development toolchains.\n\nWebVM is powered by the **CheerpX** virtualization engine, which provides:\n\n- x86-to-WebAssembly JIT compiler\n- Virtual block-based file system\n- Linux syscall emulator\n- Safe, sandboxed client-side execution\n\n## Table of Contents\n\n- [Networking](#networking)\n- [Development & Customization](#development--customization)\n  - [Deploy to GitHub Pages](#deploy-to-github-pages)\n  - [Local Serving & Image Configuration](#local-serving--image-configuration)\n- [Claude AI Integration](#claude-ai-integration)\n- [Community & Support](#community--support)\n- [Learn More](#learn-more)\n- [License](#license)\n\n> [!NOTE]\n> Visit [https:\u002F\u002Fwebvm.io](https:\u002F\u002Fwebvm.io) to get started immediately in your browser. No setup required.\n>\n> For local setup, custom image builds, and fork\u002Fdeploy guidance, see [Development & Customization](#development--customization).\n\n## Networking\n\nWebVM supports **Tailscale** integration. So your browser VM can reach your private network and, with an exit node, the public internet too.\n\n> [!NOTE]\n> Some low-level networking operations (especially ICMP used by `ping`) are not currently available in this environment. For connectivity checks, use `curl` or `wget`.\n\n### Local network\n\n1.  Open the \"Networking\" panel from the sidebar\n2.  Click \"Connect to Tailscale\"\n3.  Log in (create a free account at [tailscale.com](https:\u002F\u002Ftailscale.com) if needed)\n4.  Click \"Connect\" when prompted\n\nWebVM now has access to all machines in your Tailscale network!\n\n### Internet Usage Tips\n\n> [!TIP]\n> On slower connections there may be a short delay before initialisation. Connection status is shown as a colored dot on the button: orange = local network, green = global\u002Finternet. The button text shows your Tailscale IP address once connected.\n\nTo access the public internet from WebVM, set up an **Exit Node** on another device in your Tailscale network:\n\n1. Follow the [Tailscale Exit Node quickstart](https:\u002F\u002Ftailscale.com\u002Fkb\u002F1408\u002Fquick-guide-exit-nodes?tab=linux) (sections: \"Advertise a device as an exit node\")\n2. WebVM automatically uses the exit node once advertised\n\n### Using an Auth Key\n\nAs an alternative to interactive login, add your Tailscale auth key to the URL fragment:\n\n```\nhttps:\u002F\u002Fwebvm.io\u002F#authKey=\u003Cyour-ephemeral-key>\n```\n\nThis is equivalent to Tailscale's `--login-server` option.\n\n> [!TIP]\n> If you also need a custom control server, add `controlUrl` in the same URL fragment and separate values with `&`, for example: `#authKey=...&controlUrl=...`.\n\n### Self-Hosting Tailscale with Headscale\n\nWe also support [headscale](https:\u002F\u002Fheadscale.net\u002Fstable\u002F), a selfhosted open source implementation of the Tailscale control server.\nBecause Headscale does not add CORS headers by default, you will need a proxy in front of it. See the [Headscale reverse proxy setup docs](https:\u002F\u002Fheadscale.net\u002Fstable\u002Fref\u002Fintegration\u002Freverse-proxy\u002F#nginx) for an example.\n\nOnce ready, add the following line to your `location \u002F` block in your nginx config file.\n\n```nginx\nif ($http_origin = \"https:\u002F\u002Fyourdomain.com\") {\n    add_header 'Access-Control-Allow-Origin' \"$http_origin\";\n    add_header 'Access-Control-Allow-Credentials' 'true' always;\n}\n```\n\nThen access WebVM with:\n\n```\nhttps:\u002F\u002Fyourdomain.com\u002F#controlUrl=\u003Cyour-headscale-url>\n```\n\n## Development & Customization\n\n> [!NOTE]\n> Users have root privileges by default. `sudo` is not installed though this can easily be added to the Dockerfile if needed.\n\n### Deploy to GitHub Pages\n\nThis is a simple, beginner-friendly workflow. For local hosting and customization, see below [Local Serving & Image Configuration](#local-serving--image-configuration).\n\nFork the WebVM repository to deploy your own version to GitHub Pages:\n\n\u003Cimg src=\"\u002Fassets\u002Ffork_deploy_instructions.gif\" alt=\"deploy_instructions_gif\" width=\"90%\">\n\n1. **Fork the repository**\n2. **Enable GitHub Pages** _via forked repository_ in Settings → Pages using \"GitHub Actions\" as source\n3. **Run the `Deploy` workflow** from Actions\n4. After completion, open the URL shown under the `deploy_to_github_pages` job\n\n\u003Cimg src=\"\u002Fassets\u002Fresult.png\" width=\"70%\">\n\nThe same `Deploy` workflow also builds custom `.ext2` disk images from a Dockerfile. You can point it at `dockerfiles\u002Fdebian_mini` or another Dockerfile, then either publish the result as a GitHub Release asset or deploy the Pages build from your fork.\n\n> [!NOTE]\n> `dockerfiles\u002Fdebian_large` is too large of an image for GitHub pages.\n\n### Local Serving & Image Configuration\n\n#### 1. Clone the repository\n\n```sh\ngit clone https:\u002F\u002Fgithub.com\u002Fleaningtech\u002Fwebvm.git\ncd webvm\n```\n\n#### 2. Put your image in `custom-disk-images\u002F`\n\nThis repository includes a persistent `custom-disk-images\u002F` directory for local `.ext2` files.\n\nTo use the official Debian mini image, download it from Releases:\n\n[debian_mini_20230519_5022088024.ext2](https:\u002F\u002Fgithub.com\u002Fleaningtech\u002Fwebvm\u002Freleases\u002Fdownload\u002Fext2_image\u002Fdebian_mini_20230519_5022088024.ext2)\n\nYou can also copy in an image you built yourself.\n\n#### 3. Point WebVM to your local image\n\nEdit `config_public_terminal.js`:\n\n```js\nexport const diskImageUrl =\n  \"\u002Fcustom-disk-images\u002Fdebian_mini_20230519_5022088024.ext2\";\nexport const diskImageType = \"bytes\";\n```\n\n#### 4. Install dependencies and build\n\n```sh\nnpm install\nnpm run build\n```\n\n#### 5. Start Nginx and open WebVM\n\n```sh\nnginx -p . -c nginx.conf\n```\n\nThen open `http:\u002F\u002F127.0.0.1:8081` and enjoy your local WebVM!\n\nFor the full Alpine desktop environment, see [leaningtech\u002Falpine-image](https:\u002F\u002Fgithub.com\u002Fleaningtech\u002Falpine-image).\n\nFor more details, see [CheerpX Custom Images documentation](https:\u002F\u002Fcheerpx.io\u002Fdocs\u002Fguides\u002Fcustom-images).\n\n> [!TIP]\n> For Python3 REPL, the `Deploy` workflow takes into account the `CMD` specified in the Dockerfile.\n>\n> To build a REPL you can simply change `CMD [ \"\u002Fbin\u002Fbash\" ]` to `CMD [ \"\u002Fusr\u002Fbin\u002Fpython3\" ]` and deploy.\n\n## Claude AI Integration\n\nTo access Claude AI, you need an API key. Follow these steps to get started:\n\n#### 1. Create an account\n\n- Visit [Anthropic Console](https:\u002F\u002Fconsole.anthropic.com\u002Flogin) and sign up with your e-mail. You'll receive a sign in link to the Anthropic Console.\n\n#### 2. Get your API key\n\n- Once logged in, navigate to **Get API keys**.\n- Purchase the amount of credits you need. After completing the purchase, you'll be able to generate the key through the API console.\n\n#### 3. Log in with your API key\n\n- Navigate to your WebVM and hover over the robot icon. This will show the Claude AI Integration tab. For added convenience, you can click the pin button in the top right corner to keep the tab in place.\n- You'll see a prompt where you can insert your Claude API key.\n\n#### 4. Start using Claude AI\n\n- Once your API key is entered, you can begin interacting with Claude AI by asking questions such as:\n\n**\"Solve the CTF challenge at `\u002Fhome\u002Fuser\u002Fchall1.bin.` Note that the binary reads from stdin.\"**\n\n\u003Cimg src=\"\u002Fassets\u002Fwebvm_claude_ctf.gif\" alt=\"deploy_instructions_gif\" width=\"90%\">\n\n**Important:** Your API key is private and should never be shared. We do not have access to your key, it is only stored locally in your browser.\n\n## Community & Support\n\n**Report issues:** Use [GitHub Issues](https:\u002F\u002Fgithub.com\u002Fleaningtech\u002Fwebvm\u002Fissues) to report bugs or request features.\n\n**Chat with us:** Join our [Discord community](https:\u002F\u002Fdiscord.gg\u002FyTNZgySKGa) to discuss WebVM, share ideas, and get help.\n\n## Learn More\n\n**Articles & Resources:**\n\n- [WebVM: Server-less x86 virtual machines in the browser](https:\u002F\u002Fleaningtech.com\u002Fwebvm-server-less-x86-virtual-machines-in-the-browser\u002F)\n- [WebVM: Linux Virtualization in WebAssembly with Full Networking via Tailscale](https:\u002F\u002Fleaningtech.com\u002Fwebvm-virtual-machine-with-networking-via-tailscale\u002F)\n- [Mini.WebVM: Your own Linux box from Dockerfile, virtualized in the browser via WebAssembly](https:\u002F\u002Fleaningtech.com\u002Fmini-webvm-your-linux-box-from-dockerfile-via-wasm\u002F)\n- [Crafting the Impossible: X86 Virtualization in the Browser with WebAssembly](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=VqrbVycTXmw) — Talk at JsNation 2022\n\n**Example Deployment:**\n\n- [Mini.WebVM Reference](https:\u002F\u002Fmini.webvm.io) — A running example deployed to GitHub Pages\n\n**Technology Behind WebVM:**\n\nThis project is powered by:\n\n- **[CheerpX](https:\u002F\u002Fcheerpx.io\u002F)** — x86-to-WebAssembly JIT compiler | by [Leaning Technologies](https:\u002F\u002Fleaningtech.com\u002F)\n- **[xterm.js](https:\u002F\u002Fxtermjs.org\u002F)** — Web-based terminal emulator\n- **[Tailscale](https:\u002F\u002Ftailscale.com\u002F)** — VPN networking layer\n- **[lwIP](https:\u002F\u002Fsavannah.nongnu.org\u002Fprojects\u002Flwip\u002F)** — TCP\u002FIP stack, compiled for the Web via [Cheerp](https:\u002F\u002Fgithub.com\u002Fleaningtech\u002Fcheerp-meta\u002F)\n\n**Versioning:**\n\nWebVM uses the [CheerpX](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@leaningtech\u002Fcheerpx) NPM package, which is updated on every release.\n\nEvery build is immutable. If a specific version works well for you today, it will keep working forever.\n\n## License\n\nWebVM is released under the Apache License, Version 2.0.\n\nYou are welcome to use, modify, and redistribute the contents of this repository.\n\nThe public CheerpX deployment is provided **as-is** and is **free to use** for technological exploration, testing and use by individuals. Any other use by organizations, including non-profit, academia and the public sector, requires a license. Downloading a CheerpX build for the purpose of hosting it elsewhere is not permitted without a commercial license.\n\nRead more [here](https:\u002F\u002Fcheerpx.io\u002Fdocs\u002Flicensing) about our licensing practices.\n\nIf you want to build a product on top of CheerpX\u002FWebVM, please see our other licensing options: [CheerpX licensing](https:\u002F\u002Fcheerpx.io\u002Flicensing) or get in touch: sales@leaningtech.com\n","WebVM 是一个在浏览器中运行的 Linux 虚拟机。它利用 CheerpX 虚拟化引擎，通过 x86-to-WebAssembly 的即时编译器、虚拟块文件系统和 Linux 系统调用模拟器，实现了完全客户端侧的执行环境，并且支持未修改的 Debian 发行版及其开发工具链。此外，WebVM 还集成了 Tailscale，使用户能够访问私有网络和互联网。该项目适合需要在浏览器中进行 Linux 环境下开发、测试或演示的场景，无需任何服务器端支持，提供了便捷且安全的解决方案。",2,"2026-06-11 02:53:12","top_language"]