{"id":38453615,"url":"https://github.com/tractordev/apptron","last_synced_at":"2026-03-03T01:10:27.575Z","repository":{"id":65170058,"uuid":"438062168","full_name":"tractordev/apptron","owner":"tractordev","description":"Local-first development platform","archived":false,"fork":false,"pushed_at":"2026-02-18T08:52:37.000Z","size":3201,"stargazers_count":1109,"open_issues_count":33,"forks_count":35,"subscribers_count":56,"default_branch":"main","last_synced_at":"2026-02-18T13:00:02.694Z","etag":null,"topics":["development-environment","html5","local-first","vscode","webassembly"],"latest_commit_sha":null,"homepage":"https://apptron.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tractordev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"progrium"}},"created_at":"2021-12-14T00:05:06.000Z","updated_at":"2026-02-18T08:52:41.000Z","dependencies_parsed_at":"2024-06-20T11:53:32.800Z","dependency_job_id":"213ca510-129f-44e4-89e5-190f3e84b7d9","html_url":"https://github.com/tractordev/apptron","commit_stats":null,"previous_names":["progrium/hostbridge"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/tractordev/apptron","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tractordev%2Fapptron","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tractordev%2Fapptron/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tractordev%2Fapptron/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tractordev%2Fapptron/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tractordev","download_url":"https://codeload.github.com/tractordev/apptron/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tractordev%2Fapptron/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30028343,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T00:31:48.536Z","status":"ssl_error","status_checked_at":"2026-03-03T00:30:56.176Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["development-environment","html5","local-first","vscode","webassembly"],"created_at":"2026-01-17T04:50:47.221Z","updated_at":"2026-03-03T01:10:27.567Z","avatar_url":"https://github.com/tractordev.png","language":"TypeScript","readme":"# Apptron\n[![Discord](https://img.shields.io/discord/415940907729420288?label=Discord)](https://discord.gg/nQbgRjEBU4) ![GitHub Sponsors](https://img.shields.io/github/sponsors/progrium?label=Sponsors)\n\nLocal-first development platform\n\n\"The amount of amazing technology in this project is staggering. Seriously, star this.\" —[ibuildthecloud](https://x.com/ibuildthecloud/status/1996979376106492249)\n\n\"WOW there's a lot of interesting stuff in there!\" —[simonw](https://x.com/simonw/status/1997064403523707299) (see [full report](https://github.com/simonw/research/blob/main/apptron-analysis/README.md))\n\n## User Guide\n\nThe \"project environment\" is the main object of Apptron. It is a full Linux \nenvironment running in the browser with a VSCode-based editor for you to do \nwhatever you want with. For example, you can use it as:\n\n* a development environment and editor\n* a sandbox for AI and experiments\n* an editor to publish static sites\n* an embeddable software playground\n* a way to run and share Linux software on the web\n\nHowever, it is fully extendable, customizable, and self-hosted so you could even\nuse it as the foundation for your own development platform or software system.\n\nUnlike cloud IDEs, Apptron runs entirely in the browser and does not depend on\nthe cloud. It also only happens to be an IDE, as it is primarily an IDE for\nitself as a general compute environment, similar to Smalltalk.\n\nSince it is written mostly in Go, it has first-class language support for Go. \nHowever, you are encouraged to get other languages to work on it and add them as\nsupported languages.\n\n### Linux Environment\n\nApptron runs Alpine Linux with a custom Linux kernel in [v86](https://github.com/copy/v86)\nby way of [Wanix](https://github.com/tractordev/wanix), which gives it extra\ncapabilities such as native Wasm executable support and access to various DOM\nAPIs through the filesystem. \n\nThe v86 JIT emulator allows 32-bit x86 software to be run, which can be\ninstalled manually or through the Alpine package manager `apk`. A few packages\nare pre-installed including `make`, `git`, and `esbuild`. \n\n### Persistence\n\nApptron environments are like Docker images in that changes are not persisted\nunless committed or added to the environment build script. However, the project\ndirectory, home directory, and public directory are all persisted via browser\nstorage and cloud synced. Changes outside these directories will be reset\nwith every page load. However, you can mount more directories backed by browser\nstorage.\n\n### Virtual Network\n\nIn order to install packages, full internet access is provided through a virtual\nnetwork. You are given an IP from a virtual DHCP server on this network with \nevery page load. This is known as your session IP. Session IPs are routable to\neach other, allowing communication across browser tabs and devices.\n\nIf you run software that binds to a TCP port on this IP, it will get a public \nHTTPS endpoint. If the service is HTTP, the endpoint will proxy to it for the \nduration the software is running, similar to Ngrok. Non-HTTP TCP services can be \nused over the endpoint tunneled over WebSocket.\n\n### Using Go\n\nGo can be installed via `apk`, but it is better to use the built-in bundle of\nGo 1.25 that includes a pre-compiled standard library. Go runs significantly\nslower in the browser, so this saves a lot of time with the first build. \n\nTo mount and set up Go, run `source /etc/goprofile`. \n\n## Developer Guide\n\n### Prerequisites\n* Docker\n* Go\n* npm\n* wrangler\n\n### Start Local Apptron\n```sh\nmake dev\n```\n","funding_links":["https://github.com/sponsors/progrium"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftractordev%2Fapptron","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftractordev%2Fapptron","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftractordev%2Fapptron/lists"}