{"id":49767400,"url":"https://github.com/ilhajs/ilha","last_synced_at":"2026-05-11T11:01:21.221Z","repository":{"id":346566132,"uuid":"1190503575","full_name":"ilhajs/ilha","owner":"ilhajs","description":"A tiny, framework-free island architecture library.","archived":false,"fork":false,"pushed_at":"2026-05-01T12:02:52.000Z","size":5794,"stargazers_count":47,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-01T13:24:11.486Z","etag":null,"topics":["edge","framework","full-stack","hybrid","island","library","node","ssr","template","ui","universal","vanilla-javascript"],"latest_commit_sha":null,"homepage":"https://ilha.build/","language":"TypeScript","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/ilhajs.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":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-24T10:50:24.000Z","updated_at":"2026-05-01T12:00:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ilhajs/ilha","commit_stats":null,"previous_names":["guarana-studio/ilha","ilhajs/ilha"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/ilhajs/ilha","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ilhajs%2Filha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ilhajs%2Filha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ilhajs%2Filha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ilhajs%2Filha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ilhajs","download_url":"https://codeload.github.com/ilhajs/ilha/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ilhajs%2Filha/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32891966,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-10T13:40:02.631Z","status":"online","status_checked_at":"2026-05-11T02:00:05.975Z","response_time":120,"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":["edge","framework","full-stack","hybrid","island","library","node","ssr","template","ui","universal","vanilla-javascript"],"created_at":"2026-05-11T11:01:15.649Z","updated_at":"2026-05-11T11:01:21.214Z","avatar_url":"https://github.com/ilhajs.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ilha\n\n[![Continuous Integration](https://github.com/ilhajs/ilha/actions/workflows/ci.yml/badge.svg)](https://github.com/ilhajs/ilha/actions/workflows/ci.yml)\n[![NPM Version](https://img.shields.io/npm/v/ilha)](https://www.npmjs.com/package/ilha)\n![Bundlephobia](https://badgen.net/bundlephobia/minzip/ilha)\n[![Discord](https://img.shields.io/discord/1428724223756472373)](https://discord.gg/WnVTMCTz74)\n\n\u003e Alpha is live\n\n**Ilha** is a tiny, isomorphic web UI library built around the [islands architecture](https://www.patterns.dev/vanilla/islands-architecture/) — ship minimal JavaScript, hydrate only what matters.\n\n## Features\n\n- **Universal rendering** — SSR, static generation, hybrid, and edge rendering out of the box\n- **Fine-grained reactivity** — signal-based state with no virtual DOM and no compiler required\n- **Flexible scope** — progressively enhance server-rendered HTML, or build fully self-contained apps\n- **SSR + hydration** — render on the server, restore state on the client with zero flicker\n- **File-system routing** — optional Vite plugin for automatic, convention-based routing\n- **Shared global state** — zustand-shaped store backed by the same signal engine as the core\n- **Typed forms** — schema-driven form binding with per-field error tracking and dirty state\n- **Backend agnostic** — integrates with any backend; first-class Nitro and Hono support\n- **Prompt-sized source** — small enough to fit the entire codebase into an AI context window\n- **Type-safe by default** — first-class TypeScript support throughout\n\n## Quick Navigation\n\n- [Website](https://ilha.build)\n- [Documentation](https://ilha.build/guide/getting-started/introduction)\n- [Templates](https://github.com/ilhajs/ilha/tree/main/templates)\n- [Discord](https://discord.gg/WnVTMCTz74)\n- [Follow us on X](https://x.com/ilha_js)\n\n---\n\n## Getting Started\n\n```sh\nnpm install ilha\n# or with Bun\nbun add ilha\n```\n\n## Templates\n\nScaffold a project in seconds with one of the official starters:\n\n| Template                                                                    | Command                                                | Sandbox                                                                     |\n| --------------------------------------------------------------------------- | ------------------------------------------------------ | --------------------------------------------------------------------------- |\n| [Vite](https://stackblitz.com/github/ilhajs/ilha/tree/main/templates/vite)  | `npx giget@latest gh:ilhajs/ilha/templates/vite`       | [Open](https://stackblitz.com/github/ilhajs/ilha/tree/main/templates/vite)  |\n| [Hono](https://github.com/ilhajs/ilha/tree/main/templates/hono)             | `npx giget@latest gh:ilhajs/ilha/templates/hono`       | [Open](https://stackblitz.com/github/ilhajs/ilha/tree/main/templates/hono)  |\n| [Nitro](https://github.com/ilhajs/ilha/tree/main/templates/nitro)           | `npx giget@latest gh:ilhajs/ilha/templates/nitro`      | [Open](https://stackblitz.com/github/ilhajs/ilha/tree/main/templates/nitro) |\n| [Elysia](https://github.com/ilhajs/ilha/tree/main/templates/elysia)         | `npx giget@latest gh:ilhajs/ilha/templates/elysia`     |                                                                             |\n| [Electrobun](https://github.com/ilhajs/ilha/tree/main/templates/electrobun) | `npx giget@latest gh:ilhajs/ilha/templates/electrobun` |                                                                             |\n\n---\n\n## Your First Island\n\nPlace a mount point anywhere in your HTML:\n\n```html\n\u003cbody\u003e\n  \u003cdiv data-ilha=\"Counter\"\u003e\u003c/div\u003e\n\u003c/body\u003e\n```\n\nDefine your island and mount it:\n\n```ts\nimport ilha, { html, mount } from \"ilha\";\n\nconst Counter = ilha\n  .state(\"count\", 0)\n  .on(\"[data-action=increase]@click\", ({ state }) =\u003e state.count(state.count() + 1))\n  .on(\"[data-action=decrease]@click\", ({ state }) =\u003e state.count(state.count() - 1))\n  .render(\n    ({ state }) =\u003e html`\n      \u003cp\u003eCount: ${state.count()}\u003c/p\u003e\n      \u003cbutton data-action=\"increase\"\u003eIncrease\u003c/button\u003e\n      \u003cbutton data-action=\"decrease\"\u003eDecrease\u003c/button\u003e\n    `,\n  );\n\nmount({ Counter });\n```\n\n`mount()` auto-discovers every `[data-ilha]` element on the page and activates the matching island.\n\n---\n\n## Packages\n\nThis monorepo contains the following packages:\n\n| Package                             | Description                                                                      |\n| ----------------------------------- | -------------------------------------------------------------------------------- |\n| [`ilha`](./packages/ilha)           | Core island builder — state, events, SSR rendering, and DOM hydration            |\n| [`@ilha/router`](./packages/router) | Isomorphic SPA router with SSR support and a Vite file-system routing plugin     |\n| [`@ilha/store`](./packages/store)   | Zustand-shaped global store backed by alien-signals — share state across islands |\n\n---\n\n## Community\n\nHave questions or want to share what you're building? [Join our Discord](https://discord.gg/WnVTMCTz74) to connect with other Ilha developers.\n\n---\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filhajs%2Filha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Filhajs%2Filha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filhajs%2Filha/lists"}