Title: Notes

#Notes


## System requirements { #systemRequirements}

Batik requires a Java 7 or above compatible runtime environment.

## Optional components { #optionalComponents}

By default, the Batik source distribution comes with the [Mozilla Rhino](http://www.mozilla.org/rhino/) JavaScript Engine (`rhino*.jar`).

To enable other scripting languages support, you will only need to install the correct jar files in `lib` directory of Batik and recompile your distribution.


- For Python, you need to download Jython distribution at [http://www.jython.org/](http://www.jython.org/). Then you put the `jython.jar` file in the Batik `lib` directory.

- For Tcl, you need to download Jacl & TclBlend distribution at [http://dev.scriptics.com/software/java/](http://dev.scriptics.com/software/java/). Then you put the `jacl.jar` and `tcljava.jar` files in the Batik `lib` directory.

Conversely, you can remove the `rhino*.jar` of the Batik `lib` directory to remove JavaScript support and have a smaller distribution.

## Jar file dependency graph { #dependencyGraph}

The Batik distribution comes with many jar files. Not all of them are needed in every case (although the provided applications tend to use most of them). The following is a diagram showing the dependencies between the various jar files in the Batik binary distribution.

![Batik jar file dependency graph](images/batik-jars-deps-small.svg "")

All `batik` package references are short for `org.apache.batik`.

## Verify releases { #verify}

It is essential that you verify the integrity of the downloaded files using the PGP or SHA512 signatures.

The PGP signatures can be verified using PGP or GPG. First download the [KEYS](https://www.apache.org/dist/xmlgraphics/batik/KEYS) as well as the `asc` signature file for the particular distribution you choose. Make sure you get these files from the [main distribution directory](https://www.apache.org/dist/xmlgraphics/batik/), rather than from a mirror. Then verify the signatures using:

`pgpk -a KEYS pgpv batik-[bin|src]-1.13.zip.asc`

*or*

`pgp -ka KEYS pgp batik-[bin|src]-1.13.zip.asc`

*or*

`gpg --import KEYS pgp batik-[bin|src]-1.13.zip.asc`

*or*

`gpg --import KEYS gpg --verify batik-[bin|src]-1.13.zip.asc`

Alternatively, you can verify the SHA512 signature on the files. For steps see [here](https://www.apache.org/info/verification.html).

We recommend using PGP signatures as they can provide a much higher level of assurance compared with SHA512.
