{"id":23152805,"url":"https://github.com/ptrd/flupke","last_synced_at":"2025-08-20T05:16:35.785Z","repository":{"id":145798326,"uuid":"606395374","full_name":"ptrd/flupke","owner":"ptrd","description":"Java HTTP3 Client and HTTP3 Server plugin for Kwik","archived":false,"fork":false,"pushed_at":"2024-09-15T20:55:47.000Z","size":702,"stargazers_count":14,"open_issues_count":3,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-09-15T21:56:52.111Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ptrd.png","metadata":{"files":{"readme":"readme.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-LESSER.txt","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":"2023-02-25T11:09:44.000Z","updated_at":"2024-09-05T10:24:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"aadc559b-6a6e-4069-b8e1-b0347a139b33","html_url":"https://github.com/ptrd/flupke","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ptrd%2Fflupke","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ptrd%2Fflupke/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ptrd%2Fflupke/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ptrd%2Fflupke/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ptrd","download_url":"https://codeload.github.com/ptrd/flupke/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230168133,"owners_count":18183877,"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":[],"created_at":"2024-12-17T19:18:52.139Z","updated_at":"2025-08-17T20:33:19.662Z","avatar_url":"https://github.com/ptrd.png","language":"Java","funding_links":[],"categories":["网络编程"],"sub_categories":[],"readme":"![Flupke](https://bitbucket.org/pjtr/flupke/raw/master/docs/Logo%20Flupke%20rectangle.png)\n\n## HTTP3 Java\n\nFlupke is a Java HTTP3 implementation that runs on top of [Kwik](http://kwik.tech).\n\nHTTP3 is a new standard that has been developed by the Internet Engineering Task Force (IETF) and is specified by \n[RFC 9114](https://www.rfc-editor.org/rfc/rfc9114.html).\nHTTP3 uses QUIC as transport protocol and QPACK for header compression. \nFlupke builds on [Kwik](http://kwik.tech), a Java implementation of QUIC;\nheader compression is supported by the [QPACK](https://bitbucket.org/pjtr/qpack/) library.\n\nInitially, Flupke was only a HTTP3 Client, but since June 2021 it also provides a plugin that, when used with Kwik,\nacts as a (simple) HTTP3 webserver server.\n\nFlupke is created and maintained by Peter Doornbosch. The latest greatest can always be found on [BitBucket](https://bitbucket.org/pjtr/flupke/).\n\n## Usage\n\nLatest release can be found at maven central:\n\n    \u003cdependency\u003e\n        \u003cgroupId\u003etech.kwik\u003c/groupId\u003e\n        \u003cartifactId\u003eflupke\u003c/artifactId\u003e\n        \u003cversion\u003e0.5.4\u003c/version\u003e\n    \u003c/dependency\u003e \n\n\nFlupke uses the HTTP Client API introduced with Java 11, e.g. \n\n    HttpClient.Builder clientBuilder = new Http3ClientBuilder();\n    HttpClient client = clientBuilder.build();\n    HttpResponse\u003cString\u003e httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString());\n\nSee the [Sample](https://github.com/ptrd/flupke/blob/master/src/main/java/tech/kwik/flupke/sample/Sample.java) \nclass for a working example.\n\nFlupke also supports POST requests, or more generally, HTTP methods that require or use a request body. \nSee the [PostExample](https://github.com/ptrd/flupke/blob/master/src/main/java/tech/kwik/flupke/sample/PostExample.java) for details.\n\n\n### Work in progress\n\nThis project (as well as the projects it builds on) is work in progress.\n\nFeatures:\n\n- HTTP3 request \u0026 response with all methods (GET, PUT, POST etc)\n- Multiplexing of HTTP3 requests over one underlying QUIC connection\n- Support for asynchronous handling with ```HttpClient.sendAsync()```\n\nLimitations in the current version:\n\n- QPack dynamic table is not supported, neither does the QPack _encoder_ use Huffman encoding. Note that even with these\n  limitations, Flupke can talk to any HTTP/3 compliant server.\n- No support for server push.\n- No support for CONNECT method.\n- No support for GOAWAY.\n\n\nAlso note that `Http3Client.version()` returns null instead of a proper Version object; \nthis is unavoidable as the Java [HTTPClient.Version](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpClient.Version.html)\nenum does not provide a value for HTTP3. See [JDK-8229533](https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8229533).\n\n## Build \u0026 run\n\nBuilding is done by gradle; the gradle wrapper is included in the sources, so after checking out the source, just run\n\n    ./gradlew build\n    \nwhich will run the unit tests and create the `flupke.jar` file in `build/libs`.\nThis `flupke.jar` contains the Flupke library (including QPack classes). \nWhen using in your own project, you will also need the Kwik dependency, which you can fetch from Maven Central.\n\nAlternatively, you can build the uberjar, which contains all dependencies and provides a runnable sample client.\nTo build the uberjar, run\n\n    ./gradlew uberjar\n\nTo run the sample client, use the provided `flupke.sh` shell script and pass the targer URL as a parameter.\nYou can also run the java command directly:\n\n    java -cp build/libs/flupke-uber.jar tech.kwik.flupke.sample.Sample \u003cURL\u003e\n\nWhether the URL is specified with HTTP or HTTPS protocol doesn't matter, Flupke will always (and only) try to set up a QUIC connection.\nThe port specified in the URL must be the UDP port on which the HTTP3/QUIC server listens.\n\nGradle can also generate IntelliJ Idea project files for you:\n\n    gradle idea\n\nBy default, Flupke will use QUIC version 1 (the official RFC version). To let Flupke use a different QUIC version (e.g. QUIC version 2, RFC 9369), put the version in an environment variable called \"QUIC_VERSION\" (for QUIC version 2, use the value \"2\" (without the quotes)).\n\nThe project requires Java 11.\n\n## Contact\n\nIf you have questions about this project, please mail the author (peter dot doornbosch) at luminis dot eu.\n\n## Acknowledgements\n\nThanks to Piet van Dongen for creating the marvellous logo!\n\n## License\n\nThis program is open source and licensed under LGPL (see the LICENSE.txt and LICENSE-LESSER.txt files in the distribution). \nThis means that you can use this program for anything you like, and that you can embed it as a library in other applications, even commercial ones. \nIf you do so, the author would appreciate if you include a reference to the original.\n \nAs of the LGPL license, all modifications and additions to the source code must be published as (L)GPL as well.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fptrd%2Fflupke","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fptrd%2Fflupke","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fptrd%2Fflupke/lists"}