{"id":31625011,"url":"https://github.com/p14n/vertx-ring","last_synced_at":"2026-04-18T00:31:45.656Z","repository":{"id":315668378,"uuid":"1059737918","full_name":"p14n/vertx-ring","owner":"p14n","description":"A clojure ring adapter for Eclipse Vert.x 5","archived":false,"fork":false,"pushed_at":"2025-10-05T08:06:58.000Z","size":511,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-05T10:12:32.746Z","etag":null,"topics":["clojure","ring","vertx"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/p14n.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-18T21:48:40.000Z","updated_at":"2025-10-05T08:07:01.000Z","dependencies_parsed_at":"2025-09-20T01:28:17.010Z","dependency_job_id":"41da4a09-9cf5-4143-b55b-71e33c6391e9","html_url":"https://github.com/p14n/vertx-ring","commit_stats":null,"previous_names":["p14n/vertx-ring"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/p14n/vertx-ring","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p14n%2Fvertx-ring","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p14n%2Fvertx-ring/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p14n%2Fvertx-ring/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p14n%2Fvertx-ring/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/p14n","download_url":"https://codeload.github.com/p14n/vertx-ring/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p14n%2Fvertx-ring/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31951258,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T17:29:20.459Z","status":"ssl_error","status_checked_at":"2026-04-17T17:28:47.801Z","response_time":62,"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":["clojure","ring","vertx"],"created_at":"2025-10-06T18:55:20.862Z","updated_at":"2026-04-18T00:31:45.631Z","avatar_url":"https://github.com/p14n.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vertx-ring\n[![Clojure CI](https://github.com/p14n/vertx-ring/actions/workflows/clojure.yml/badge.svg)](https://github.com/p14n/vertx-ring/actions/workflows/clojure.yml)\n\nA Ring adapter for Eclipse Vert.x 5, providing a bridge between Clojure's Ring specification and Vert.x's reactive HTTP server.\n\n## Overview\n\nThis library allows you to run Ring applications on Vert.x, taking advantage of Vert.x's high-performance, reactive, and non-blocking I/O capabilities while maintaining compatibility with the Ring ecosystem.\n\n## Features\n\n- Ring-compliant request/response handling\n- Asynchronous request processing\n- Integration with Vert.x's event loop\n- Support for Ring middleware\n- Configurable server options\n\n## Ring Specification\n\nThis adapter implements the [Ring SPEC](https://github.com/ring-clojure/ring/blob/master/SPEC.md), providing:\n\n- **Request Map**: HTTP requests are converted to Clojure maps with standard Ring keys\n- **Response Map**: Ring response maps are converted back to HTTP responses\n- **Handler Function**: Standard Ring handler function interface\n- **Middleware Support**: Compatible with existing Ring middleware\n\n## Dependencies\n\n- Clojure 1.12.0+\n- Vert.x Core 5.0.4\n- Ring Core 1.13.0\n\n## Usage\n\n### Basic Usage\n\n#### Async (default)\n```clojure\n(require '[com.p14n.vertx-ring.adapter :as adapter])\n\n(defn handler [request respond raise]\n  (respond {:status 200\n            :headers {\"Content-Type\" \"text/plain\"}\n            :body \"Hello, World!\"}))\n\n(adapter/run-server handler {:port 8080})\n```\n\n#### Sync (requires java.util.concurrent.ExecutorService)\n```clojure\n(require '[com.p14n.vertx-ring.adapter :as adapter])\n(import '[java.util.concurrent Executors])\n\n(defn handler [request]\n  {:status 200\n   :headers {\"Content-Type\" \"text/plain\"}\n   :body \"Hello, World!\"})\n\n(adapter/run-server handler {:port 8080\n                             :executor (Executors/newCachedThreadPool)})\n```\n\n### Advanced Configuration\n\nFor more control over Vert.x behavior, you can use the options helpers:\n\n```clojure\n(require '[com.p14n.vertx-ring.adapter :as adapter]\n         '[com.p14n.vertx-ring.options :as options])\n\n(defn handler [request respond raise]\n  (respond {:status 200\n            :headers {\"Content-Type\" \"text/plain\"}\n            :body \"Hello, World!\"}))\n\n;; Configure Vert.x options\n(def vertx-opts (options/map-\u003evertx-options\n                 {:event-loop-pool-size 4\n                  :worker-pool-size 20\n                  :prefer-native-transport true}))\n\n;; Configure HTTP server options\n(def server-opts (options/map-\u003ehttp-server-options\n                  {:port 8080\n                   :host \"0.0.0.0\"\n                   :compression-supported true\n                   :tcp-keep-alive true\n                   :idle-timeout 30}))\n\n(adapter/run-server handler {:vertx-options vertx-opts\n                             :server-options server-opts})\n```\n\n### Configuration Options\n\n#### Vert.x Options\n- `:event-loop-pool-size` - Number of event loop threads\n- `:worker-pool-size` - Number of worker threads\n- `:prefer-native-transport` - Use native transport when available\n- `:ha-enabled` - Enable high availability\n- `:blocked-thread-check-interval` - Thread blocking check interval\n\n#### HTTP Server Options\n- `:port` - Server port (default 8080)\n- `:host` - Server host (default \"localhost\")\n- `:compression-supported` - Enable HTTP compression\n- `:tcp-keep-alive` - Enable TCP keep-alive\n- `:ssl` - Enable SSL/TLS\n- `:idle-timeout` - Connection idle timeout\n- `:max-websocket-frame-size` - Maximum WebSocket frame size\n\n## Quick Start\n\n1. Clone this repository\n2. Start a REPL: `clj -M:dev`\n3. In the REPL:\n   ```clojure\n   (require 'user)\n   (user/start)  ; Starts server on port 8080\n   ```\n4. Test with curl: `curl http://localhost:8080/`\n5. Stop the server: `(user/stop)`\n\n## Examples\n\nSee the `examples/` directory for more usage examples.\n\n## Building\n\nBuild a JAR:\n```bash\nclj -T:build jar\n```\n\n## Testing\n\nRun tests:\n```bash\nclj -M:test\n```\n\n## Development\n\nThis project uses Clojure CLI tools with deps.edn.\n\n### REPL\n\n```bash\nclj -M:repl\n```\n\n### Testing\n\n```bash\nclj -M:test\n```\n\n## License\n\nCopyright © 2025\n\nDistributed under the Eclipse Public License either version 1.0 or (at your option) any later version.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fp14n%2Fvertx-ring","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fp14n%2Fvertx-ring","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fp14n%2Fvertx-ring/lists"}