> See the [documentation web site](http://doc.e-is.pro/duniter4j/)
- a command line tool (duniter4j-client), to execute basic operation on a Duniter currency : transfer, view peers, ...
- an API (duniter4j-core-client), that allow developer to access to a Duniter network.
## Modules
- a ElastiSearch node (duniter4j-elasticsearch), to add store & full-text capabilities, on blockchain data, user profiles (Cesium+) and more (private message).
## Command line tool
- Download the file `duniter4j-client-<version>-full-<platform>.zip` from the [lastest releases page](/releases)
- Unzip the archive
Duniter4j has tree main modules :
-The open a terminal and call duniter4j.sh
-`duniter4j-client`: [a command line tool](./src/site/markdown/CLI.md), to execute basic operation on a Duniter currency: transfer, view peers, ...
## ElastiSearch node
### Prerequisites
#### Install Java
- Install Java JRE 8 or more.
-`duniter4j-core-client`: [a Java API](./src/site/markdown/Java_API.md) to help Java developers to communicate with a Duniter network.
- Windows: see [Oracle web site](http://oracle.com/java/index.html)
-`duniter4j-elasticsearch`: [a ElastiSearch node](./src/site/markdown/ES.md) used to store (with full-text capabilities) all blockchain data, and additional user data.
- Linux (Ubuntu):
```bash
sudo apt-get install openjdk-8-jre
```
### Install libsodium
[The Sodium crypto library (libsodium)](https://download.libsodium.org/doc/installation/) is a modern, easy-to-use software library for encryption, decryption, signatures, password hashing and more.
[2016-09-24 00:16:46,270][INFO ][env][ES-NODE-1] using [1] data paths, mounts [[/home (/dev/mapper/isw_defjaaicfj_Volume1p1)]], net usable_space [1tb], net total_space [1.7tb], spins? [possibly], types [ext4]
- Linux: after [installation](http://doc.libsodium.org/installation/index.html), make sure the file 'libsodium.so' exists on: /usr/local/lib or /opt/local/lib.
If not, create a symbolic link.
- Windows: copy the file 'sodium.dll' into directory 'duniter4j-core/lib/'
- Add a new index for TX, with validation percentage
- Enable P2P synchronisation between Duniter4j ES nodes
## Troubleshooting
### Could not find an implementation class.
Message:
```
java.lang.RuntimeException: java.lang.RuntimeException: Could not find an implementation class.
at org.duniter.core.util.websocket.WebsocketClientEndpoint.<init>(WebsocketClientEndpoint.java:56)
at org.duniter.core.client.service.bma.BlockchainRemoteServiceImpl.addNewBlockListener(BlockchainRemoteServiceImpl.java:545)
at org.duniter.elasticsearch.service.BlockchainService.listenAndIndexNewBlock(BlockchainService.java:106)
```
Cause:
Plugin use Websocket to get notification from a Duniter nodes. The current library ([Tyrus](https://tyrus.java.net/)) is loaded throw java Service Loader, that need access to file `META-INF/services/javax.websocket.ContainerProvider` contains by Tyrus.
ElasticSearch use separated classloader, for each plugin, that disable access to META-INF resource.
Solution :
* This API is used by [Cesium+](https://www.github.com/duniter/cesium)(a Duniter wallet).
Move Tyrus libraries into elasticsearch `lib/` directory :