# Ring [![Build Status](https://github.com/ring-clojure/ring/actions/workflows/test.yml/badge.svg)](https://github.com/ring-clojure/ring/actions/workflows/test.yml)

Ring is a Clojure web applications library inspired by Python's WSGI
and Ruby's Rack. By abstracting the details of HTTP into a simple,
unified API, Ring allows web applications to be constructed of modular
components that can be shared among a variety of applications, web
servers, and web frameworks.

The [SPEC.md][1] file at the root of this distribution provides a
complete description of the Ring interface. The [Wiki][2] contains
more in-depth documentation on how to use Ring.

[1]: https://github.com/ring-clojure/ring/blob/master/SPEC.md
[2]: https://github.com/ring-clojure/ring/wiki

## Libraries

* `ring/ring` - meta-package containing all relevant dependencies
* `ring/ring-core` - core functions and middleware for Ring handlers,
  requests and responses
* `org.ring-clojure/ring-core-protocols` - contains only the protocols
  necessary for building Ring responses
* `org.ring-clojure/ring-websocket-protocols` - contains only the protocols
  necessary for WebSockets
* `ring/ring-devel` - functions for developing and debugging Ring
  applications
* `ring/ring-servlet` - construct legacy Java Servlets (≤ 4.0) from Ring
  handlers
* `org.ring-clojure/ring-jakarta-servlet` construct
  [Jakarta Servlets][3] (≥ 5.0) from Ring handlers
* `ring/ring-jetty-adapter` - a Ring adapter that uses an embedded
  [Jetty][4] web server

[3]: https://projects.eclipse.org/projects/ee4j.servlet
[4]: https://eclipse.dev/jetty/

## Installation

To include one of the above libraries, for instance `ring-core`, add
the following dependency to your `deps.edn` file:

    ring/ring-core {:mvn/version "1.15.5"}

Or to your Leiningen project file:

    [ring/ring-core "1.15.5"]

## Documentation

* [Changelog](https://github.com/ring-clojure/ring/blob/master/CHANGELOG.md)
* [Wiki](https://github.com/ring-clojure/ring/wiki)
* [API docs](https://ring-clojure.github.io/ring/)

## Contributing

Please read [CONTRIBUTING.md][5] before submitting a pull request.

[5]: https://github.com/ring-clojure/ring/blob/master/CONTRIBUTING.md

## Thanks

This project borrows heavily from Ruby's Rack and Python's WSGI;
thanks to those communities for their work. Thanks also go to the many
individuals who have contributed to Ring's code and documentation over
the years.

## License

Copyright © 2009-2026 Mark McGranaghan, James Reeves & contributors.

Released under the MIT license.
