{"id":50908013,"url":"https://github.com/ateeducacion/nextcloud-playground","last_synced_at":"2026-06-16T07:02:36.406Z","repository":{"id":362837249,"uuid":"1260790445","full_name":"ateeducacion/nextcloud-playground","owner":"ateeducacion","description":"Run Nextcloud in the browser via WebAssembly PHP","archived":false,"fork":false,"pushed_at":"2026-06-14T20:41:34.000Z","size":1669,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-14T22:21:52.068Z","etag":null,"topics":["emscripten","nextcloud","playground","wasm","webassembly"],"latest_commit_sha":null,"homepage":"https://ateeducacion.github.io/nextcloud-playground/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ateeducacion.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-05T21:56:57.000Z","updated_at":"2026-06-14T20:39:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ateeducacion/nextcloud-playground","commit_stats":null,"previous_names":["ateeducacion/nextcloud-playground"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ateeducacion/nextcloud-playground","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ateeducacion%2Fnextcloud-playground","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ateeducacion%2Fnextcloud-playground/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ateeducacion%2Fnextcloud-playground/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ateeducacion%2Fnextcloud-playground/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ateeducacion","download_url":"https://codeload.github.com/ateeducacion/nextcloud-playground/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ateeducacion%2Fnextcloud-playground/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34393305,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["emscripten","nextcloud","playground","wasm","webassembly"],"created_at":"2026-06-16T07:02:35.513Z","updated_at":"2026-06-16T07:02:36.399Z","avatar_url":"https://github.com/ateeducacion.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nextcloud Playground\n\n\u003e Run a full Nextcloud server in the browser — no server required.\n\n[**Live demo**](https://ateeducacion.github.io/nextcloud-playground/) · [Documentation](docs/) · [Blueprints](docs/blueprint-json.md)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://ateeducacion.github.io/nextcloud-playground/\"\u003e\n    \u003cimg src=\".github/screenshot.png\" alt=\"Nextcloud Playground\" width=\"800\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://ateeducacion.github.io/nextcloud-playground/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cimg src=\"assets/playground-preview-button.svg\" alt=\"Try it in Playground\" width=\"224\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nNextcloud Playground runs [Nextcloud](https://nextcloud.com) entirely in the\nbrowser using WebAssembly, powered by [WordPress Playground](https://github.com/WordPress/wordpress-playground)'s\n`@php-wasm` runtime. Every page load boots a fresh Nextcloud instance backed by\nan in-browser SQLite database — nothing is stored on a server and nothing leaves\nyour browser.\n\nIt is a sibling of the Moodle, Omeka S, and FacturaScripts playgrounds, and the\n**first known port of Nextcloud to php-wasm**. See\n[`docs/feasibility-spike.md`](docs/feasibility-spike.md) for how that was proven.\n\n## Getting started\n\n### Try it online\n\nOpen the live playground — no install needed:\n**\u003chttps://ateeducacion.github.io/nextcloud-playground/\u003e**\n\nIt boots a fresh Nextcloud and signs you in automatically as `admin`.\n\n### Run it locally\n\n```bash\ngit clone https://github.com/ateeducacion/nextcloud-playground.git\ncd nextcloud-playground\nmake up\n```\n\nThen open \u003chttp://localhost:8085\u003e.\n\n**Default credentials:** username `admin`, password `admin`.\n\n### Prerequisites\n\n- Node.js 18+\n- npm\n- PHP 8.3 (used by the build to read the bundled release version)\n- Python 3 (for the docs site, optional)\n\n## How it works\n\n```text\nindex.html          Shell UI (toolbar, address bar, log panel)\n  └─ remote.html    Runtime host — registers the Service Worker\n       ├─ sw.js     Intercepts requests → routes to the PHP worker\n       └─ php-worker.js\n            └─ @php-wasm (WebAssembly, PHP 8.3 + intl)\n                 ├─ Nextcloud core in writable MEMFS  (extracted from a ZIP bundle)\n                 └─ In-memory state                   (SQLite + data dir in MEMFS)\n```\n\nOn boot the PHP worker extracts the Nextcloud bundle into MEMFS, installs a\n**posix polyfill** (`auto_prepend_file`), and runs `occ maintenance:install`\nagainst SQLite. A handful of `PHP_SAPI === 'wasm'`-gated source patches make\nNextcloud's posix, file-locking, and avatar code paths WASM-safe — see\n[`docs/feasibility-spike.md`](docs/feasibility-spike.md).\n\nState is **ephemeral by design** (MEMFS resets when you close the tab), matching\nthe sibling playgrounds.\n\n### Supported versions\n\nMulti-version: **Nextcloud 30 / 31 / 32 / 33** on PHP 8.3 (default 33). Versions are\ndeclared in [`src/shared/nextcloud-versions.js`](src/shared/nextcloud-versions.js).\n\n## Blueprints\n\nBlueprints are JSON files that provision an instance at boot, translated to\n`occ` commands. Override the default with `?blueprint-url=\u003curl\u003e` or\n`?blueprint=\u003cinline-json-or-base64\u003e`.\n\n```json\n{\n  \"landingPage\": \"/index.php/apps/dashboard\",\n  \"admin\": { \"username\": \"admin\", \"password\": \"admin\" },\n  \"apps\": [\"activity\", \"text\"],\n  \"steps\": [\n    { \"step\": \"createGroup\", \"group\": \"staff\" },\n    { \"step\": \"createUser\", \"username\": \"alice\", \"password\": \"alicepass\", \"groups\": [\"staff\"] },\n    { \"step\": \"setConfig\", \"key\": \"default_language\", \"value\": \"en\" }\n  ]\n}\n```\n\nSee [`docs/blueprint-json.md`](docs/blueprint-json.md) for all step types and\n[`assets/blueprints/default.blueprint.json`](assets/blueprints/default.blueprint.json).\n\n## Development\n\n```bash\nmake prepare     # sync browser deps + build the worker bundle\nmake bundle      # build one Nextcloud bundle (default NC 33)\nmake bundle-all  # build NC 30, 31, 32 and 33\nmake serve       # serve at http://localhost:8085\nmake test        # unit tests\nmake test-e2e    # Playwright browser tests\nmake lint        # Biome\n```\n\nThe build downloads a Nextcloud **release tarball** (pre-built, no\ncomposer/npm), applies the WASM patches, trims it (~807 MB → ~345 MB), and zips\nit per version into `assets/nextcloud/`. See\n[`docs/development.md`](docs/development.md).\n\n## Known limitations\n\nPreview generation, office/collaborative editing, antivirus, and anything using\n`proc_open`/`exec` do not work under WASM; letter avatars fall back to a solid\ncolour; cron is AJAX-only; storage is ephemeral. See\n[`docs/KNOWN-ISSUES.md`](docs/KNOWN-ISSUES.md).\n\n## License\n\n[AGPL-3.0-or-later](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fateeducacion%2Fnextcloud-playground","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fateeducacion%2Fnextcloud-playground","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fateeducacion%2Fnextcloud-playground/lists"}