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]-{{ batik_current_version }}.zip.asc`

*or*

`pgp -ka KEYS pgp batik-[bin|src]-{{ batik_current_version }}.zip.asc`

*or*

`gpg --import KEYS pgp batik-[bin|src]-{{ batik_current_version }}.zip.asc`

*or*

`gpg --import KEYS gpg --verify batik-[bin|src]-{{ batik_current_version }}.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.
