# JAM SDK
The Parity JAM SDK is at a very early stage of development but is functional for developing JAM services and authorizers. It consists of three main components:
- JAM Types & PVM Common
- JAM Bootstrap Service & Null Authorizer
- JAM PVM Builder
## JAM Types & PVM Common
This the basic API of the SDK, including traits, types, functions and macros needed for expressing Services and Authorizers, including their invocations, returns and host functions.
There are two crates: [`jam-types`](https://docs.rs/jam-types/latest/jam_types/) and [`jam-pvm-common`](https://docs.rs/jam-pvm-common/latest/jam_pvm_common/).
## JAM Bootstrap Service & Null Authorizer
These are two basic PVM modules useful for creating sensible JAM Genesis configurations. They can be found in crates.io under [`jam-null-authorizer`](https://crates.io/crates/jam-null-authorizer) and [`jam-bootstrap-service`](https://crates.io/crates/jam-bootstrap-service).
After installing [`rustup`](https://rustup.rs), Bootstrap service can be downloaded using `cargo clone`:
```sh
$ cargo install cargo-clone # NOTE only needed once
...
$ cargo clone jam-bootstrap-service
```
The code for null authorizer can be cloned in a similar manner.
## JAM PVM Builder
The [JAM PVM Builder](https://crates.io/crates/jam-pvm-builder) is CLI tool which allows PVM code blobs be built, either services or authorizers.
After installing [`rustup`](https://rustup.rs), it can be installed with:
```sh
$ rustup toolchain install nightly-2024-11-01 -c rust-src # NOTE only needed once
$ cargo install jam-pvm-build
```
Its usage can be seen in the usual way:
```sh
$ jam-pvm-build --help
CLI utility for building PVM code blobs, particularly services and authorizers.
Usage: jam-pvm-build [OPTIONS] [PATH]
Arguments:
[PATH]
Path of crate to build, defaults to current directory
Options:
-o, --output <OUTPUT>
Output path
-m, --module <MODULE>
Module type to build
[default: automatic]
Possible values:
- automatic: Automatically derive the module type from the crate name
- service: Service
- authorizer: Authorizer
--auto-install
Install rustc dependencies if missing
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
```
For example, the `jam-null-authorizer` could be built using just:
```sh
$ cargo clone jam-null-authorizer
...
$ jam-pvm-build ./jam-null-authorizer
```
You could find the PVM binary `jam-bootstrap-service.pvm` in the current directory.