{"id":13514782,"url":"https://github.com/vaadin/hilla","last_synced_at":"2026-02-24T09:27:27.730Z","repository":{"id":37050936,"uuid":"362121444","full_name":"vaadin/hilla","owner":"vaadin","description":"Build better business applications, faster. No more juggling REST endpoints or deciphering GraphQL queries. Hilla seamlessly connects Spring Boot and React to accelerate application development.","archived":false,"fork":false,"pushed_at":"2025-04-29T13:25:36.000Z","size":68883,"stargazers_count":951,"open_issues_count":436,"forks_count":64,"subscribers_count":23,"default_branch":"main","last_synced_at":"2025-04-29T17:47:19.206Z","etag":null,"topics":["client-side","frontend","java","lit","lit-element","react","reactive","reactjs","stateless","typescript","vaadin"],"latest_commit_sha":null,"homepage":"https://hilla.dev","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vaadin.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}},"created_at":"2021-04-27T13:25:07.000Z","updated_at":"2025-04-28T13:40:59.000Z","dependencies_parsed_at":"2023-09-22T17:24:47.185Z","dependency_job_id":"c06a142e-ee05-4a13-abfd-d7dc2ed0eb90","html_url":"https://github.com/vaadin/hilla","commit_stats":{"total_commits":1679,"total_committers":40,"mean_commits":41.975,"dds":0.7939249553305538,"last_synced_commit":"567ad7e885c31b5e408dd42972efd1c8309c2f82"},"previous_names":["vaadin/fusion"],"tags_count":395,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vaadin%2Fhilla","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vaadin%2Fhilla/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vaadin%2Fhilla/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vaadin%2Fhilla/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vaadin","download_url":"https://codeload.github.com/vaadin/hilla/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251584287,"owners_count":21613004,"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":["client-side","frontend","java","lit","lit-element","react","reactive","reactjs","stateless","typescript","vaadin"],"created_at":"2024-08-01T05:01:01.725Z","updated_at":"2026-02-13T12:58:34.605Z","avatar_url":"https://github.com/vaadin.png","language":"Java","readme":"\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"hilla-logo.svg\" style=\"width: 6em;\"\u003e\n\u003ch1\u003eHilla\u003c/h1\u003e\n\nThe modern web framework\nfor Java\n\n![Latest Stable Version](https://img.shields.io/npm/v/@vaadin/hilla-frontend.svg)\n[![Releases](https://img.shields.io/maven-metadata/v?metadataUrl=https%3A%2F%2Frepo1.maven.org%2Fmaven2%2Fcom%2Fvaadin%2Fhilla%2Fmaven-metadata.xml)](https://github.com/vaadin/hilla/releases)\n  \n[Website](https://vaadin.com/hilla) · [Docs](https://vaadin.com/docs/latest/hilla) · [Forum](https://vaadin.com/forum/c/hilla/18)\n\n\u003c/div\u003e\n\n---\n\nHilla integrates a Spring Boot Java backend with a reactive TypeScript front end. It helps you build apps faster with type-safe server communication, included UI components, and integrated tooling.\n\n## Simple type-safe server communication\n\nHilla helps you access the backend easily with type-safe endpoints.\n\n`index.ts`\n\n```ts\n// Type info is automatically generated based on Java\nimport Person from 'Frontend/generated/com/vaadin/hilla/demo/entity/Person';\nimport { PersonService } from 'Frontend/generated/endpoints';\n\nasync function getPeopleWithPhoneNumber() {\n  const people: Person[] = await PersonService.findAll();\n\n  // Compile error: The property is 'phone', not 'phoneNumber'\n  return people.filter((person) =\u003e !!person.phoneNumber);\n}\n\nconsole.log('People with phone numbers: ', getPeopleWithPhoneNumber());\n```\n\n`PersonService.java`\n\n```java\n@BrowserCallable\n@AnonymousAllowed\npublic class PersonService {\n\n    private PersonRepository repository;\n\n    public PersonService(PersonRepository repository) {\n        this.repository = repository;\n    }\n\n    public @Nonnull List\u003c@Nonnull Person\u003e findAll() {\n        return repository.findAll();\n    }\n}\n```\n\n`Person.java`\n\n```java\n@Entity\npublic class Person {\n\n    @Id\n    @GeneratedValue\n    private Integer id;\n\n    @Nonnull private String firstName;\n    @Nonnull private String lastName;\n    @Email @Nonnull private String email;\n    @Nonnull private String phone;\n\n    // getters, setters\n}\n```\n\nLearn more at [vaadin.com/hilla](https://vaadin.com/hilla)\n\n## Get started\n\nFollow the tutorials at https://vaadin.com/docs/latest/getting-started\n\n## Contributing\n\nThe best way to contribute is to try out Hilla and provide feedback to the development team in our [Forum](https://vaadin.com/forum/c/hilla/18) or with [GitHub issues](https://github.com/vaadin/hilla/issues). Those marked with the [good first issue](https://github.com/vaadin/hilla/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22) label are a good starting point.\n\n### Development\n\nIf you want to develop Hilla, you can clone the repo and run tests using the following commands:\n\n```sh\ngit clone https://github.com/vaadin/hilla.git\nnpm install\nnpm run build\nmvn clean spotless:apply install -DskipTests\nnpm test\nmvn verify -Pproduction\n```\n\nYou need the following versions of SDKs and tools:\n\n- **Node.js**: `\u003e= 22 LTS`,\n- **npm**: `\u003e=10` (`package-lock.json` is of version 3)\n- **JDK**: `\u003e=17`\n- **Maven**: `\u003e=3`\n\n### Testing changes locally\n\nJava modules are located in `./packages/java`. If you make changes to Java code and want to test them in a real application, you can set the Vaadin version to `SNAPSHOT` in the `pom.xml` of your application. This requires using the Vaadin pre-release repositories. Make sure to add the following to your `pom.xml`:\n\n```xml\n\u003crepositories\u003e\n    \u003crepository\u003e\n        \u003cid\u003evaadin-prereleases\u003c/id\u003e\n        \u003curl\u003ehttps://maven.vaadin.com/vaadin-prereleases\u003c/url\u003e\n        \u003csnapshots\u003e\n            \u003cenabled\u003etrue\u003c/enabled\u003e\n        \u003c/snapshots\u003e\n    \u003c/repository\u003e\n    \u003crepository\u003e\n        \u003cid\u003eVaadin Directory\u003c/id\u003e\n        \u003curl\u003ehttps://maven.vaadin.com/vaadin-addons\u003c/url\u003e\n        \u003csnapshots\u003e\n            \u003cenabled\u003efalse\u003c/enabled\u003e\n        \u003c/snapshots\u003e\n    \u003c/repository\u003e\n\u003c/repositories\u003e\n\n\u003cpluginRepositories\u003e\n    \u003cpluginRepository\u003e\n        \u003cid\u003evaadin-prereleases\u003c/id\u003e\n        \u003curl\u003ehttps://maven.vaadin.com/vaadin-prereleases\u003c/url\u003e\n        \u003csnapshots\u003e\n            \u003cenabled\u003etrue\u003c/enabled\u003e\n        \u003c/snapshots\u003e\n    \u003c/pluginRepository\u003e\n\u003c/pluginRepositories\u003e\n```\nTypeScript modules are located in `./packages/ts`. If you make changes to the TypeScript code, you can package your changes locally by running the following command in the modified package:\n\n```sh\nnpm run build \u0026\u0026 npm pack\n```\n\nIt will create a `.tgz` file in the package root. Then, in your application, you can install that package using the following command:\n\n```sh\nnpm install \u003cpath-to-tgz\u003e\n```\n\nRemember to delete the line that points to the package in `package.json` when you are done testing. The next run will add back the corresponding default package.\n\n---\n\n[![Validation](https://github.com/vaadin/hilla/actions/workflows/validation.yml/badge.svg)](https://github.com/vaadin/hilla/actions/workflows/validation.yml)\n[![codecov](https://codecov.io/gh/vaadin/hilla/branch/main/graph/badge.svg?token=PQMTMS8ECC)](https://codecov.io/gh/vaadin/hilla)\n","funding_links":[],"categories":["Java"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvaadin%2Fhilla","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvaadin%2Fhilla","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvaadin%2Fhilla/lists"}