= Community Contributed Clients

[preface]
== Preface
:client: https://www.elastic.co/guide/en/elasticsearch/client

[NOTE]
====
This is a list of clients submitted by members of the Elastic community.
Elastic does not support or endorse these clients.

If you'd like to add a new client to this list, please
https://github.com/elastic/elasticsearch/blob/master/CONTRIBUTING.md#contributing-code-and-documentation-changes[open a pull request].
====

Besides the link:/guide[officially supported Elasticsearch clients], there are
a number of clients that have been contributed by the community for various languages:

* <<b4j>>
* <<cpp>>
* <<clojure>>
* <<coldfusion>>
* <<erlang>>
* <<go>>
* <<haskell>>
* <<java>>
* <<javascript>>
* <<kotlin>>
* <<lua>>
* <<dotnet>>
* <<perl>>
* <<php>>
* <<python>>
* <<r>>
* <<ruby>>
* <<rust>>
* <<scala>>
* <<smalltalk>>
* <<swift>>
* <<vertx>>

[[b4j]]
== B4J
* https://www.b4x.com/android/forum/threads/server-jelasticsearch-search-and-text-analytics.73335/[jElasticsearch]:
  B4J client based on the official Java REST client.

[[cpp]]
== C++
* https://github.com/seznam/elasticlient[elasticlient]: simple library for
  simplified work with Elasticsearch in C++.

[[clojure]]
== Clojure

* https://github.com/mpenet/spandex[Spandex]:
  Clojure client, based on the new official low-level REST client.

* https://github.com/clojurewerkz/elastisch[Elastisch]:
  Clojure client.

[[coldfusion]]
== ColdFusion (CFML)

* https://www.forgebox.io/view/cbelasticsearch[cbElasticSearch]:
  Native ColdFusion (CFML) support for the ColdBox MVC Platform which provides
  you with a fluent search interface for Elasticsearch, in addition to a
  CacheBox Cache provider and a Logbox Appender for logging.

[[erlang]]
== Erlang

* https://github.com/tsloughter/erlastic_search[erlastic_search]:
  Erlang client using HTTP.

* https://github.com/datahogs/tirexs[Tirexs]:
  An https://github.com/elixir-lang/elixir[Elixir] based API/DSL, inspired by
  https://github.com/karmi/tire[Tire]. Ready to use in pure Erlang
  environment.

* https://github.com/sashman/elasticsearch_elixir_bulk_processor[Elixir Bulk
  Processor]: Dynamically configurable Elixir port of the
  {client}/java-api/current/java-docs-bulk-processor.html[Bulk Processor].
  Implemented using GenStages to handle back pressure.

[[go]]
== Go

Also see the {client}/go-api/current/index.html[official Elasticsearch Go
client].

* https://github.com/mattbaird/elastigo[elastigo]:
  Go client.

* https://github.com/olivere/elastic[elastic]:
  Elasticsearch client for Google Go.

* https://github.com/softctrl/elk[elk]:
  Golang lib for Elasticsearch client.


[[haskell]]
== Haskell
* https://github.com/bitemyapp/bloodhound[bloodhound]:
  Haskell client and DSL.

[[java]]
== Java

Also see the {client}/java-api/current/index.html[official Elasticsearch Java
client].

* https://github.com/otto-de/flummi[Flummi]:
  Java Rest client with comprehensive Query DSL API.

* https://github.com/searchbox-io/Jest[Jest]:
  Java Rest client.

[[javascript]]
== JavaScript

See the {client}/javascript-api/current/index.html[official Elasticsearch
JavaScript client].

[[kotlin]]
== Kotlin

* https://github.com/mbuhot/eskotlin[ES Kotlin]:
  Elasticsearch Query DSL for kotlin based on the
  {client}/java-api/current/index.html[official Elasticsearch Java client].

* https://github.com/jillesvangurp/es-kotlin-wrapper-client[ES Kotlin Wrapper
Client]: Kotlin extension functions and abstractions for the
  {client}/java-api/current/index.html[official Elasticsearch high-level
  client]. Aims to reduce the amount of boilerplate needed to do searches, bulk
  indexing and other common things users do with the client.

[[lua]]
== Lua

* https://github.com/DhavalKapil/elasticsearch-lua[elasticsearch-lua]:
  Lua client for Elasticsearch

[[dotnet]]
== .NET

See the {client}/net-api/current/index.html[official Elasticsearch .NET client].

[[perl]]
== Perl

Also see the {client}/perl-api/current/index.html[official Elasticsearch Perl
client].

* https://metacpan.org/pod/Elastijk[Elastijk]: A low-level, minimal HTTP client.


[[php]]
== PHP

Also see the {client}/php-api/current/index.html[official Elasticsearch PHP
client].

* https://github.com/ruflin/Elastica[Elastica]:
  PHP client.

* https://github.com/nervetattoo/elasticsearch[elasticsearch]: PHP client.

* https://github.com/madewithlove/elasticsearcher[elasticsearcher]: Agnostic
lightweight package on top of the Elasticsearch PHP client. Its main goal is to
allow for easier structuring of queries and indices in your application. It does
not want to hide or replace functionality of the Elasticsearch PHP client.

[[python]]
== Python

See the {client}/python-api/current/index.html[official Elasticsearch Python
client].

[[r]]
== R

* https://github.com/ropensci/elastic[elastic]:
  A low-level R client for Elasticsearch.

* https://github.com/ropensci/elasticdsl[elasticdsl]:
  A high-level R DSL for Elasticsearch, wrapping the elastic R client.
  
* https://github.com/UptakeOpenSource/uptasticsearch[uptasticsearch]:
  An R client tailored to data science workflows.

[[ruby]]
== Ruby

Also see the {client}/ruby-api/current/index.html[official Elasticsearch Ruby client].

* https://github.com/printercu/elastics-rb[elastics]:
  Tiny client with built-in zero-downtime migrations and ActiveRecord integration.

* https://github.com/toptal/chewy[chewy]:
  An ODM and wrapper for the official Elasticsearch client.

* https://github.com/ankane/searchkick[Searchkick]:
  Intelligent search made easy.

* https://github.com/artsy/estella[Estella]:
  Make your Ruby models searchable.

[[rust]]
== Rust

Also see the {client}/rust-api/current/index.html[official Elasticsearch Rust
client].

* https://github.com/benashford/rs-es[rs-es]:
  A REST API client with a strongly-typed Query DSL.

* https://github.com/elastic-rs/elastic[elastic]:
  A modular REST API client that supports freeform queries.
  
[[scala]]
== Scala

* https://github.com/sksamuel/elastic4s[elastic4s]:
  Scala DSL.

* https://github.com/gphat/wabisabi[wabisabi]:
  Asynchronous REST API Scala client.
  
* https://github.com/workday/escalar[escalar]:
  Type-safe Scala wrapper for the REST API.

* https://github.com/SumoLogic/elasticsearch-client[elasticsearch-client]:
  Scala DSL that uses the REST API. Akka and AWS helpers included.

[[smalltalk]]
== Smalltalk

* https://github.com/newapplesho/elasticsearch-smalltalk[elasticsearch-smalltalk]:
  Pharo Smalltalk client for Elasticsearch.
  
[[swift]]
== Swift
* https://github.com/brokenhandsio/elasticsearch-nio-client[Elasticsearch NIO Client]: a library for
  working with Elasticsearch in Swift, built on top of SwiftNIO and Swift Package Manager.

[[vertx]]
== Vert.x

* https://github.com/reactiverse/elasticsearch-client[elasticsearch-client]:
  An Elasticsearch client for Eclipse Vert.x.
