2020-06-10 17:26:25 +02:00
# CosmJS
2020-01-22 09:41:48 +01:00
2020-06-18 11:58:00 +02:00
CosmJS is the Swiss Army knife to power JavaScript based client solutions
2020-06-18 09:48:56 +02:00
ranging from Web apps/explorers over browser extensions to server-side clients
like faucets/scrapers in the Cosmos ecosystem.
2020-06-18 11:58:00 +02:00
"Cosm" is short for Cosmos and "JS" is short for _runs everywhere_ – we actually
2020-06-18 09:48:56 +02:00
develop in TypeScript.
## Packages
CosmJS is a library that consists of many smaller npm packages within the
[@cosmjs namespace ](https://www.npmjs.com/org/cosmjs ), a so called monorepo.
Here are some of them to get an idea:
2020-06-18 10:09:01 +02:00
| Package | Description | Latest |
| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| [@cosmjs/sdk38 ](packages/sdk38 ) | A client library for the Cosmos SDK 0.38 | [](https://www.npmjs.com/package/@cosmjs/sdk38 ) |
| [@cosmjs/faucet ](packages/faucet ) | A faucet application for node.js | [](https://www.npmjs.com/package/@cosmjs/faucet ) |
| [@cosmjs/cosmwasm ](packages/cosmwasm ) | Client for chains with the CosmWasm module enabled | [](https://www.npmjs.com/package/@cosmjs/cosmwasm ) |
| [@cosmjs/crypto ](packages/crypto ) | Cryptography for blockchain projects, e.g. hashing (SHA-2, Keccak256, Ripemd160), signing (secp256k1, ed25519), HD key derivation (BIPO39, SLIP-0010), KDFs and symmetric encryption for key storage (PBKDF2, Argon2, XChaCha20Poly1305) | [](https://www.npmjs.com/package/@cosmjs/crypto ) |
| [@cosmjs/encoding ](packages/encoding ) | Encoding helpers for blockchain projects | [](https://www.npmjs.com/package/@cosmjs/encoding ) |
| [@cosmjs/math ](packages/math ) | Safe integers; decimals for handling financial amounts | [](https://www.npmjs.com/package/@cosmjs/math ) |
2020-06-18 09:48:56 +02:00
### Modularity
We're pretty proud of the modularity and a clean dependency tree in this
monorepo. This ensures software quality on our side and lets users pick exactly
2020-06-18 10:09:01 +02:00
what they need. Here you see how everything fits together (every item is a npm
2020-06-18 09:48:56 +02:00
package; right depends on left):

2020-06-28 20:26:46 +02:00
If this was not enough to scare you away, check out the version including app runtime dependencies: [cosmjs-tree-full.png ](docs/cosmjs-tree-full.png ).
2020-06-18 09:48:56 +02:00
<!--
Build with depsight (https://github.com/webmaster128/depsight), using:
2020-06-28 20:26:46 +02:00
from_npm . | depsight --include "^@cosmjs " --format png --output docs/cosmjs-tree.png
from_npm . | depsight --exclude cosmjs-monorepo-root --format png --output docs/cosmjs-tree-full.png
optipng docs/cosmjs-tree*.png
2020-06-18 09:48:56 +02:00
-->
### Supported JS environments
2020-06-18 10:09:01 +02:00
Currently the codebase supports the following runtime environments:
2020-06-18 09:48:56 +02:00
1. Node.js 10+
2020-06-18 10:09:01 +02:00
2. Modern browsers (Chromium/Firefox/Safari, no Internet Explorer or
[Edge Spartan ](https://en.wikipedia.org/wiki/Microsoft_Edge#Development ))
2020-06-18 09:48:56 +02:00
3. Browser extensions (Chromium/Firefox)
2020-06-18 11:58:00 +02:00
Our current JavaScript target standard is ES2017, giving us native async/await
support. We use WebAssembly to implement certain cryptographic functions.
2020-06-18 09:48:56 +02:00
We're happy to adjust this list according to users' needs as long as you don't
2020-06-18 10:09:01 +02:00
ask for Internet Explorer support. If your environment does not support Wasm, we
can work on a solution with swapable implementations.
2020-01-22 09:41:48 +01:00
2020-06-19 18:04:21 +02:00
## Roadmap
In addition to the
[development board ](https://github.com/orgs/CosmWasm/projects/2 ) and our
[release milestones ](https://github.com/CosmWasm/cosmjs/milestones ), we maintain
a higher level roadmap
[in this Trello board ](https://trello.com/b/vIW8awLl/cosmjs-roadmap ).
2020-01-22 22:24:09 +01:00
## Development
Requires Node 10+. For best results, use yarn. The basic commands are:
```sh
2020-06-18 09:48:56 +02:00
yarn install
2020-01-22 22:24:09 +01:00
# compile the code
yarn build
# run unit tests
yarn test
# format and lint the code
yarn format & & yarn lint
```
### Integration tests
2020-06-18 09:48:56 +02:00
To run the entire test suite, you need to run a local blockchain to test
against. We use [wasmd ](https://github.com/CosmWasm/wasmd ) for both CosmWasm
tests and as a generic Cosmos SDK 0.38 blockchain. This should work on any
Linux/OSX system with docker installed:
2020-01-22 22:24:09 +01:00
```sh
2020-02-17 15:31:07 +01:00
./scripts/wasmd/start.sh
./scripts/wasmd/init.sh
2020-02-17 15:35:29 +01:00
WASMD_ENABLED=1 yarn test
2020-02-17 15:31:07 +01:00
./scripts/wasmd/stop.sh
2020-01-22 22:24:09 +01:00
```