{"id":13517150,"url":"https://github.com/unpoly/unpoly","last_synced_at":"2025-05-13T00:12:39.689Z","repository":{"id":37759243,"uuid":"52203829","full_name":"unpoly/unpoly","owner":"unpoly","description":"Progressive enhancement for HTML","archived":false,"fork":false,"pushed_at":"2025-05-12T20:20:43.000Z","size":19315,"stargazers_count":2524,"open_issues_count":22,"forks_count":81,"subscribers_count":23,"default_branch":"master","last_synced_at":"2025-05-13T00:12:33.575Z","etag":null,"topics":["html","html-driven","html-over-the-wire","progressive-enhancement","server-side-rendering","server-side-technologies","ujs","unobtrusive-javascript"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/unpoly.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2016-02-21T11:43:30.000Z","updated_at":"2025-05-12T20:20:46.000Z","dependencies_parsed_at":"2023-12-18T13:26:16.411Z","dependency_job_id":"ba4bf774-f38b-4b50-8aca-d11a03545aeb","html_url":"https://github.com/unpoly/unpoly","commit_stats":{"total_commits":4260,"total_committers":34,"mean_commits":"125.29411764705883","dds":"0.025821596244131495","last_synced_commit":"3ea2eb4ee748176a82213919d297340cf34e7aa8"},"previous_names":[],"tags_count":218,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unpoly%2Funpoly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unpoly%2Funpoly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unpoly%2Funpoly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unpoly%2Funpoly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/unpoly","download_url":"https://codeload.github.com/unpoly/unpoly/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253843219,"owners_count":21972874,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["html","html-driven","html-over-the-wire","progressive-enhancement","server-side-rendering","server-side-technologies","ujs","unobtrusive-javascript"],"created_at":"2024-08-01T05:01:30.422Z","updated_at":"2025-05-13T00:12:39.658Z","avatar_url":"https://github.com/unpoly.png","language":"JavaScript","readme":"\u003cp\u003e\n  \u003ca href=\"https://makandra.de/\"\u003e\n    \u003cpicture\u003e\n      \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"media/sponsored-by-makandra.light.svg\"\u003e\n      \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"media/sponsored-by-makandra.dark.svg\"\u003e\n      \u003cimg align=\"right\" width=\"27%\" alt=\"Sponsored by makandra\" src=\"media/sponsored-by-makandra.light.svg\"\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://unpoly.com\"\u003e\n    \u003cpicture\u003e\n      \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"media/unpoly-logo.light.svg\"\u003e\n      \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"media/unpoly-logo.dark.svg\"\u003e\n      \u003cimg width=\"330\" alt=\"Unpoly 3\" role=\"heading\" aria-level=\"1\" src=\"media/unpoly-logo.light.svg\"\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp\u003e\n  \u003cimg alt=\"jsDelivr hits (npm)\" src=\"https://img.shields.io/jsdelivr/npm/hy/unpoly\"\u003e\n  \u003cimg alt=\"NPM Downloads\" src=\"https://img.shields.io/npm/dy/unpoly?label=npm\"\u003e\n  \u003cimg alt=\"Dependency count\" src=\"https://badgen.net/bundlephobia/dependency-count/unpoly?label=dependencies\u0026color=grey\"\u003e\n\u003c/p\u003e\n\n\nProgressive enhancement for HTML\n--------------------------------\n\n[Unpoly](https://unpoly.com) enhances your HTML with attributes to build dynamic UI on the server.\n\nUnpoly works with any language or framework. It plays nice with existing code, and gracefully degrades without JavaScript.\n\nThis branch tracks the current major version, Unpoly **3.x**.\\\nIf you're using Unpoly **2.x**, use the [`2.x-stable`](https://github.com/unpoly/unpoly/tree/2.x-stable) branch.\\\nIf you're using Unpoly **1.x** or **0.x**, use the [`1.x-stable`](https://github.com/unpoly/unpoly/tree/1.x-stable) branch.\n\n\nGetting started\n---------------\n\n- See [unpoly.com](https://unpoly.com) for guides and documentation.\n- See [installation instructions](https://unpoly.com/install) for many different package managers and languages.\n- See [discussions](https://github.com/unpoly/unpoly/discussions) for our community forum.\n- See [notable changes](https://unpoly.com/changes).\n\n\nDevelopment\n-----------\n\n### Installing development dependencies\n\nTo build Unpoly you require Node.js, Webpack and other npm packages.\n\nInstall the Node version from `.nvmrc`.\n\nTo install required npm packages, run:\n\n```\nnpm install\n```\n\n### Quick start\n\nThe following will build the library and start a server to run tests:\n\n```\nnpm run dev\n```\n\nAllow a moment for Unpoly and tests to build in `dist/`. Changing a file will re-build automatically.\n\nYou can now run tests using one of the following methods:\n\n- From your console, using `npm run test`\n- In a browser, by accessing `http://localhost:4000` \n\nIf you don't want to use `npm run dev` and prefer to run individual tasks instead, see below.\n\n\n### Building the library\n\nTests don't consume the sources directly, but from a transpiled build in `dist/`.\n\nTo make fresh build for development, run:\n\n```\nnpm run build-dev\n```\n\nThis will build transpiled files such as:\n\n```\ndist/unpoly.js\ndist/unpoly.css\ndist/unpoly-migrate.js\ndist/jasmine.js\ndist/specs.js\n```\n\nThere is also a task `npm run build` for a production build. This does not build files for testing, but also outputs minified versions.\n\n### Watching files for changes\n\nDuring development it is impractical to make a full build after every change. Instead it is recommend to watch the project:\n\n```\nnpm run watch-dev\n```\n\nThis will make a fresh build and then watch the project for changes to the source files. \n\nhen a source changes, affected build files are automatically recompiled. The incremental recompilation is much faster than a full build.\n\n### Running tests\n\nTests need a small background server to run:\n\n```\nnpm run test-server \u0026\n```\n\nYou can now run tests using one of the following methods:\n\n- From your console, using `npm run test`\n- In a browser, by accessing `http://localhost:4000`\n\nIn addition to the unit tests, there is an optional support repo [`unpoly-manual-tests`](https://github.com/unpoly/unpoly-manual-tests). It contains a Rails app to play with Unpoly features that are hard to test well with a unit test. E.g. the visual look of overlays, or edge cases when booting Unpoly.\n\n### Making a new release\n\nThere is a guided CLI interface to lead you through the release process. To start the process run:\n\n```\nnpm run release\n```\n\n\n\nCredits\n-------\n\n- [Henning Koch](mailto:henning.koch@makandra.de) from [makandra](https://makandra.com) ([@triskweline](https://twitter.com/triskweline) on Twitter)\n- [Contributors](https://github.com/unpoly/unpoly/graphs/contributors)\n","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funpoly%2Funpoly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funpoly%2Funpoly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funpoly%2Funpoly/lists"}