{"id":36826318,"url":"https://github.com/pronghorn-tech/server","last_synced_at":"2026-01-12T14:05:13.978Z","repository":{"id":56462319,"uuid":"103336061","full_name":"pronghorn-tech/server","owner":"pronghorn-tech","description":"A low-level, high performance HTTP server.","archived":false,"fork":false,"pushed_at":"2020-11-06T00:14:33.000Z","size":289,"stargazers_count":65,"open_issues_count":1,"forks_count":7,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-01-23T00:11:49.293Z","etag":null,"topics":["coroutines","http","kotlin","server"],"latest_commit_sha":null,"homepage":"https://www.pronghorn.tech","language":"Kotlin","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/pronghorn-tech.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}},"created_at":"2017-09-13T00:59:33.000Z","updated_at":"2024-01-23T00:11:49.293Z","dependencies_parsed_at":"2022-08-15T19:10:48.051Z","dependency_job_id":null,"html_url":"https://github.com/pronghorn-tech/server","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/pronghorn-tech/server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pronghorn-tech%2Fserver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pronghorn-tech%2Fserver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pronghorn-tech%2Fserver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pronghorn-tech%2Fserver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pronghorn-tech","download_url":"https://codeload.github.com/pronghorn-tech/server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pronghorn-tech%2Fserver/sbom","scorecard":{"id":746950,"data":{"date":"2025-08-18","repo":{"name":"github.com/pronghorn-tech/server","commit":"3fbeb23bc585881c97c8304b0c7b5c699d981e7a"},"scorecard":{"version":"v5.2.1-41-g40576783","commit":"40576783fda6698350fcbbeaea760ff827433034"},"score":2.9,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#dangerous-workflow"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-22T19:06:30.399Z","repository_id":56462319,"created_at":"2025-08-22T19:06:30.399Z","updated_at":"2025-08-22T19:06:30.399Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28340293,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T12:22:26.515Z","status":"ssl_error","status_checked_at":"2026-01-12T12:22:10.856Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["coroutines","http","kotlin","server"],"created_at":"2026-01-12T14:05:13.883Z","updated_at":"2026-01-12T14:05:13.964Z","avatar_url":"https://github.com/pronghorn-tech.png","language":"Kotlin","readme":"# Pronghorn HTTP Server\nThe Pronghorn HTTP Server is a low-level, high performance HTTP server written in [Kotlin](https://kotlinlang.org/). It utilizes the Pronghorn Coroutine Framework to fully utilize available system resources with minimal overhead. No external dependencies are required, however, functionality can be enhanced through optional [plugins](#plugins) which may contain external dependencies.\n\n_Note: The Pronghorn HTTP Server is early in development, and is in many ways a testbed for the [Pronghorn Coroutine Framework](https://github.com/pronghorn-tech/coroutines).  As such it is not currently recommended in production environments.  Documentation will improve as it matures._\n\n## Use Cases\nPronghorn is best suited for applications where high throughput and/or low latency with minimal cpu overhead are critical requirements.\n\n## Quick Start\nThe following is the simple Hello World server example using Pronghorn.\n\n```kotlin\nfun main(args: Array\u003cString\u003e) {\n    val helloWorldResponse = HttpResponses.OK(\"Hello, World!\", CommonContentTypes.TextPlain)\n    val helloWorldHandler = StaticHttpRequestHandler(helloWorldResponse)\n\n    val server = HttpServer(\"localhost\", 8080)\n    server.registerUrlHandler(\"/hello\", helloWorldHandler)\n    server.start()\n}\n```\n\n### Configuration\nAlternatively to the above, The HttpServer class can be constructed with an instance of HttpServerConfig\n\n```kotlin\nval config = HttpServerConfig(address = ..., ...)\nval server = HttpServer(config)\n```\n\n#### Full Configuration Options\n* __address__ - The address to bind to.\n* __workerCount__ - The number of worker threads to utilize, should likely be the number of cores available _(default: number of logical cpu cores)_\n* __sendServerHeader__ - If true, the Server header is automatically sent with each response _(default: true)_\n* __sendDateHeader__ - If true, the Date header is automatically sent with each response _(default: true)_\n* __serverName__ - The value to send in the Server response header if sendServerHeader is true _(default: \"Pronghorn\")_\n* __reusableBufferSize__ - The size of pooled read/write buffers, should be at least as large as the average expected request _(default: 64 KiB)_\n* __reusePort__ - If true, the SO_REUSEPORT socket option is used and each worker uses a dedicated socket _(default: auto-detected)_\n* __listenBacklog__ - The value for the accept queue for the server socket _(default: 128)_\n* __acceptGrouping__ - How many connections should be accepted in a batch, usually equal to the listen backlog _(default: 128)_\n* __maxPipelinedRequests__ - The maximum number of http requests allowed to be pipelined on a single connection _(default: 64)_\n* __maxRequestSize__ - The maximum acceptable size of a single http request _(default: 1 MiB)_\n* __useDirectByteBuffers__ - Whether socket read/write buffers should be direct ByteBuffers _(default: true)_\n\n# Plugins\nPronghorn ships with three optional plugins\n\n### SLF4J Logging Plugin\nUtilizes the popular [SLF4J](https://www.slf4j.org/) library for logging. See [https://www.slf4j.org/manual.html](https://www.slf4j.org/manual.html) for more information.\n\n### JCTools Collections Plugin\nThis plugin offers high performance alternatives for collection types used at critical points throughout Pronghorn. The excellent [JCTools](https://github.com/JCTools/JCTools) library provides wait free and lock less implementations of many concurrent data structures. Utilizing these in place of Java standard library collections results in performance improvements for some workloads.\n\n### OpenHFT Hashing Plugin\nThis plugin utilizes the [OpenHFT Zero Allocation Hashing](https://github.com/OpenHFT/Zero-Allocation-Hashing) library to provide high performance hashing ByteArrays. This improves Pronghorn performance under some workloads and configurations.\n\n## Enabling Plugins\nThere are two ways to configure Pronghorn to utilize a plugin implementation.\n\n### Resource File Plugin Configuration\nBy default Pronghorn looks for a resource file named \"pronghorn.properties\" in [Java properties file format](https://en.wikipedia.org/wiki/.properties). The keys of this file should be the Plugin class for which an implementation is being specified, with the value being the implementation.\n\nFor example, if all of the above plugin dependencies have been included, the _pronghorn.properties_ file would appear as:\n\n    pronghorn.plugins.LoggingPlugin       = tech.pronghorn.plugins.Slf4jLoggingPlugin\n    pronghorn.plugins.SpscQueuePlugin     = tech.pronghorn.plugins.JCToolsSpscQueuePlugin\n    pronghorn.plugins.MpscQueuePlugin     = tech.pronghorn.plugins.JCToolsMpscQueuePlugin\n    pronghorn.plugins.ConcurrentMapPlugin = tech.pronghorn.plugins.JCToolsConcurrentMapPlugin\n    pronghorn.plugins.ConcurrentSetPlugin = tech.pronghorn.plugins.JCToolsConcurrentSetPlugin\n    pronghorn.plugins.ArrayHasherPlugin   = tech.pronghorn.plugins.OpenHFTArrayHasherPlugin\n\n### Programmatic Plugin Configuration\nAlternatively, plugins can be configured programmatically utilizing the _setPlugin_ method as in this example:\n\n    LoggingPlugin.setPlugin(Slf4jLoggingPlugin)\n\n# License\nCopyright 2017 Pronghorn Technology LLC\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","funding_links":[],"categories":["网络编程"],"sub_categories":["Spring Cloud框架"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpronghorn-tech%2Fserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpronghorn-tech%2Fserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpronghorn-tech%2Fserver/lists"}