{"id":14988411,"url":"https://github.com/apache/netbeans-html4j","last_synced_at":"2025-04-04T15:09:33.587Z","repository":{"id":38037012,"uuid":"102083574","full_name":"apache/netbeans-html4j","owner":"apache","description":"Apache NetBeans HTML4J","archived":false,"fork":false,"pushed_at":"2025-01-10T16:43:56.000Z","size":12547,"stargazers_count":29,"open_issues_count":7,"forks_count":20,"subscribers_count":32,"default_branch":"master","last_synced_at":"2025-04-03T04:17:02.513Z","etag":null,"topics":["netbeans"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":false,"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/apache.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","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}},"created_at":"2017-09-01T07:00:11.000Z","updated_at":"2025-01-11T11:54:23.000Z","dependencies_parsed_at":"2025-02-15T10:10:39.311Z","dependency_job_id":"d79f396e-44a8-4d9e-9b10-cdc42d54542a","html_url":"https://github.com/apache/netbeans-html4j","commit_stats":null,"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fnetbeans-html4j","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fnetbeans-html4j/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fnetbeans-html4j/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fnetbeans-html4j/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apache","download_url":"https://codeload.github.com/apache/netbeans-html4j/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247149634,"owners_count":20891986,"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":["netbeans"],"created_at":"2024-09-24T14:16:40.138Z","updated_at":"2025-04-04T15:09:33.565Z","avatar_url":"https://github.com/apache.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HTML/Java API\n\nIn need of cross platform, client side interaction between Java and JavaScript?\n\n[![Linux](https://github.com/apache/netbeans-html4j/actions/workflows/linux.yml/badge.svg)](https://github.com/apache/netbeans-html4j/actions/workflows/linux.yml)\n[![Mac OS X](https://github.com/apache/netbeans-html4j/actions/workflows/mac.yml/badge.svg)](https://github.com/apache/netbeans-html4j/actions/workflows/mac.yml)\n[![Windows](https://github.com/apache/netbeans-html4j/actions/workflows/windows.yml/badge.svg)](https://github.com/apache/netbeans-html4j/actions/workflows/windows.yml)\n[![Javadoc](https://github.com/apache/netbeans-html4j/actions/workflows/javadoc.yml/badge.svg)](https://github.com/apache/netbeans-html4j/actions/workflows/javadoc.yml)\n[![Linux](https://ci-builds.apache.org/job/Netbeans/job/netbeans-html4j-linux/badge/icon)](https://ci-builds.apache.org/job/Netbeans/job/netbeans-html4j-linux/)\n[![Windows](https://ci-builds.apache.org/job/Netbeans/job/netbeans-html4j-windows/badge/icon)](https://ci-builds.apache.org/job/Netbeans/job/netbeans-html4j-windows/)\n\nThe HTML/Java library provides [basic building blocks](https://bits.netbeans.org/html+java/dev/net/java/html/js/package-summary.html)\nas well as advanced [high level concepts](https://bits.netbeans.org/html+java/dev/net/java/html/json/Model.html)\nto make communication between JavaScript and Java as smooth as possible.\n\nRead more in the [latest javadoc](https://bits.netbeans.org/html+java/dev/) documentation.\n\n## Portable Applications\n\nEvery browser widget Java API offers ways for communication between Java and\nJavaScript running in such widget. However, each of them is unique - e.g. one\nwrites different code when communicating with [JavaFX WebView](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/web/WebView.html),\ndifferent one when communicating with [Android WebView](https://developer.android.com/reference/android/webkit/WebView.html),\nyet another one when talking to [iOS WebView](https://developer.apple.com/documentation/uikit/uiwebview).\n\nThe goal of HTML/Java API is to **unify this communication**. By providing simple\nand highly portable [building blocks](https://bits.netbeans.org/html+java/dev/net/java/html/js/package-summary.html)\none can create sophisticated APIs (like\n[UI bindings](https://bits.netbeans.org/html+java/dev/net/java/html/json/package-summary.html),\n[charts](https://dukescript.com/javadoc/charts/),\n[maps](https://dukescript.com/javadoc/leaflet4j/),\n[canvas](https://dukescript.com/javadoc/canvas/), or\n[SnapSVG](https://dukescript.com/javadoc/libs/net/java/html/lib/snapsvg/Snap/package-summary.html))\nthat can be embedded into\n[Swing or JavaFX applications](https://bits.netbeans.org/html+java/dev/net/java/html/boot/fx/FXBrowsers.html),\nexecuted [headlessly on a server](https://bits.netbeans.org/html+java/dev/net/java/html/boot/script/Scripts.html)\nor executed anywhere HTML/Java API was ported.\n\nVarious ports of this rendering pipeline were built including support for\npure [webkit desktop rendring](https://github.com/dukescript/dukescript-presenters/),\n[Android WebView](https://dukescript.com/javadoc/presenters/com/dukescript/presenters/Android.html)\nand [iOS WebView](https://dukescript.com/javadoc/presenters/com/dukescript/presenters/iOS.html)\ndeveloped by [DukeScript project](https://dukescript.com/).\n\nThis technology has also been adopted by some Java bytecode to JavaScript\ntranspilers - for example [TeaVM](http://teavm.org/docs/intro/dukescript.html)\nor [Bck2Brwsr VM](https://github.com/jtulach/bck2brwsr/) -\nas such you can also run the same Java application in a pluginless browser.\n\nPorting of HTML/Java rendering pipeline is as easy as implementing\n[Fn.Presenter](https://bits.netbeans.org/html+java/dev/org/netbeans/html/boot/spi/Fn.Presenter.html)\ninterface and successfully passing the\n[test compatibility kit](https://bits.netbeans.org/html+java/dev/org/netbeans/html/json/tck/package-summary.html).\nSince version `1.7` the project provides pre-made protocol based\n[ProtoPresenter](https://bits.netbeans.org/html+java/dev/org/netbeans/html/presenters/spi/package-summary.html)\nskeleton to simplify integrations with new platforms.\n\n## Getting Started\n\nThe HTML/Java API is IDE and build tool neutral. It can be used with\n[Ant](http://ant.apache.org), [Maven](http://maven.apache.org) or **Gradle**.\nIt is easy to edit it with [Eclipse](https://dukescript.com/best/practices/2015/07/01/DukeScript-with-Eclipse.html),\n[IntelliJ](https://dukescript.com/best/practices/2016/04/19/IDEA.html) or\n[NetBeans](https://dukescript.com/getting_started.html). Here is a short introductory video to get started\nwith **NetBeans** 11.2 and its **Gradle** support:\n\n[![OpenJFX Lite by Geertjan](https://img.youtube.com/vi/cUSDknlhxcY/0.jpg)](https://www.youtube.com/watch?v=cUSDknlhxcY)\n\nThe most comprehensive getting started guide is available from\n[the DukeScript project](https://dukescript.com/getting_started.html) website.\n\n## Contributing\n\nYou can contribute to development of this library by forking\nits [GitHub repository](https://github.com/apache/netbeans-html4j).\nChange, modify, test:\n\n```bash\n$ mvn clean install\n```\n\nand create a pull request, which may then be merged into the\nofficial [Apache repository](https://gitbox.apache.org/repos/asf/netbeans-html4j.git).\n\n### Full History\n\nThe origins of the code in this repository are older than\nits Apache existence. As such significant part of the history\n(before the code was donated to Apache) is kept in an\nindependent repository. To fully understand the code you may\nwant to merge the modern and ancient versions together:\n\n```bash\n$ git clone https://github.com/apache/netbeans-html4j.git html+java+both\n$ cd html+java+both\n$ git log boot/src/main/java/net/java/html/boot/BrowserBuilder.java\n```\n\nThis gives you just few log entries including the initial checkin and change of the\nfile headers to Apache. But then the magic comes:\n\n```bash\n$ git remote add emilian https://github.com/emilianbold/netbeans-html4j.git\n$ git fetch emilian\n$ git replace 408363d d029b8e\n```\n\nWhen you search the log, or use the blame tool, the full history is\navailable:\n\n```bash\n$ git log boot/src/main/java/net/java/html/boot/BrowserBuilder.java\n$ git blame boot/src/main/java/net/java/html/boot/BrowserBuilder.java\n```\n\nMany thanks to Emilian Bold who converted the ancient history to\n[his Git repository](https://github.com/emilianbold/netbeans-html4j)\nand made the magic possible!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Fnetbeans-html4j","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapache%2Fnetbeans-html4j","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Fnetbeans-html4j/lists"}