Title: Apache Velocity - Download Page

## Downloads

You can download sources and binaries for all Apache Velocity projects from here.

### Mirror Selection

[if-any logo] <a href="[link]"><img src="[logo]" align="right" border="0" alt="logo" /></a>[end]
The currently selected mirror is <b>[preferred]</b>. If you encounter a problem with this mirror, please select another mirror. If all mirrors are failing, there are <i>backup</i> mirrors (at the end of the mirrors list) that should be available.

<form action="[location]" method="get" id="SelectMirror">
    <p>
        Other mirrors:
        <select name="Preferred">
        [if-any http]
            [for http]
            <option value="[http]">[http]</option>
            [end]
        [end]
        [if-any ftp]
            [for ftp]
            <option value="[ftp]">[ftp]</option>
            [end]
        [end]
        [if-any backup]
            [for backup]
            <option value="[backup]">[backup] (backup)</option>
            [end]
        [end]
        </select>
        <input type="submit" value="Change" />
    </p>
</form>

You may also consult the [complete list of mirrors](http://www.apache.org/mirrors/).

The <tt>KEYS</tt> link links to the code signing keys used to sign the product.
The <tt>PGP</tt> links download the OpenPGP compatible signature from our main site. 
The <tt>SHA</tt> links download the checksum from the main site. None of these should be downloaded from the mirrors.

[KEYS](http://www.apache.org/dist/velocity/KEYS)

## Production releases

These releases are considered stable and suitable for production.

### Engine

Be sure to check the [release notes](http://www.apache.org/dist/velocity/engine/2.2/release-notes.html) and the [dependencies](http://velocity.apache.org/engine/2.2/dependencies.html).

#### Inclusion as a maven dependency

    <dependency>
      <groupId>org.apache.velocity</groupId>
      <artifactId>velocity-engine-core</artifactId>
      <version>2.2</version>
    </dependency>

#### Binaries

<table class="smalltable">
  <thead>
  </thead>
  <tbody>
    <tr>
      <th>engine-core</th>
      <td><a href="[preferred]/velocity/engine/2.2/velocity-engine-core-2.2.jar">velocity-engine-core-2.2.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-core-2.2.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-core-2.2.jar.sha256">SHA256</a>]</td>
    </tr>
    <tr>
      <th>engine-scripting</th>
      <td><a href="[preferred]/velocity/engine/2.2/velocity-engine-scripting-2.2.jar">velocity-engine-scripting-2.2.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-scripting-2.2.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-scripting-2.2.jar.sha256">SHA256</a>]</td>
    </tr>
  </tbody>
</table>

#### POM Files

<table class="smalltable">
  <thead>
  </thead>
  <tbody>
    <tr>
      <th>engine-core</th>
      <td><a href="[preferred]/velocity/engine/2.2/velocity-engine-core-2.2.pom">velocity-engine-core-2.2.pom</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-core-2.2.pom.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-core-2.2.pom.sha256">SHA256</a>]</td>
    </tr>
    <tr>
      <th>engine-scripting</th>
      <td><a href="[preferred]/velocity/engine/2.2/velocity-engine-scripting-2.2.pom">velocity-engine-scripting-2.2.pom</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-scripting-2.2.pom.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-scripting-2.2.pom.sha256">SHA256</a>]</td>
    </tr>
    <tr>
      <th>velocity-custom-parser-example</th>
      <td><a href="[preferred]/velocity/engine/2.2/velocity-custom-parser-example-2.2.pom">velocity-engine-scripting-2.2.pom</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-custom-parser-example-2.2.pom.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-custom-parser-example-2.2.pom.sha256">SHA256</a>]</td>
    </tr>
  </tbody>
</table>

#### Javadoc

<table class="smalltable">
  <thead>
  </thead>
  <tbody>
    <tr>
      <th>engine-core</th>
      <td><a href="[preferred]/velocity/engine/2.2/velocity-engine-core-2.2-javadoc.jar">velocity-engine-core-2.2-javadoc.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-core-2.2-javadoc.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-core-2.2-javadoc.jar.sha256">SHA256</a>]</td>
    </tr>
    <tr>
      <th>engine-scripting</th>
      <td><a href="[preferred]/velocity/engine/2.2/velocity-engine-scripting-2.2-javadoc.jar">velocity-engine-scripting-2.2-javadoc.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-scripting-2.2-javadoc.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-scripting-2.2-javadoc.jar.sha256">SHA256</a>]</td>
    </tr>
  </tbody>
</table>

#### Sources

<table class="smalltable">
  <thead>
  </thead>
  <tbody>
    <tr>
      <th>engine-core</th>
      <td><a href="[preferred]/velocity/engine/2.2/velocity-engine-core-2.2-sources.jar">velocity-engine-core-2.2-sources.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-core-2.2-sources.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-core-2.2-sources.jar.sha256">SHA256</a>]</td>
    </tr>
    <tr>
      <th>engine-scripting</th>
      <td><a href="[preferred]/velocity/engine/2.2/velocity-engine-scripting-2.2-sources.jar">velocity-engine-scripting-2.2-sources.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-scripting-2.2-sources.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-scripting-2.2-sources.jar.sha256">SHA256</a>]</td>
    </tr>
  </tbody>
</table>

#### Examples

<table class="smalltable">
  <thead>
  </thead>
  <tbody>
    <tr>
      <th>velocity-engine-examples</th>
      <td><a href="[preferred]/velocity/engine/2.2/velocity-engine-examples-2.2.zip">velocity-engine-examples.zip</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-examples-2.2.zip.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/engine/2.2/velocity-engine-examples-2.2.zip.sha256">SHA256</a>]</td>
    </tr>
  </tbody>
</table>

### Tools

#### Inclusion as a maven dependency

    <dependency>
      <groupId>org.apache.velocity.tools</groupId>
      <artifactId>velocity-tools-generic</artifactId>
      <version>3.0</version>
    </dependency>

    <dependency>
      <groupId>org.apache.velocity.tools</groupId>
      <artifactId>velocity-tools-view</artifactId>
      <version>3.0</version>
    </dependency>

    <dependency>
      <groupId>org.apache.velocity.tools</groupId>
      <artifactId>velocity-tools-view-jsp</artifactId>
      <version>3.0</version>
    </dependency>

#### Binaries

<table class="smalltable">
  <thead>
  </thead>
  <tbody>
    <tr>
      <th>Generic Tools</th>
      <td><a href="[preferred]/velocity/tools/3.0/velocity-tools-generic-3.0.jar">velocity-tools-generic-3.0.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-generic-3.0.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-generic-3.0.jar.sha256">SHA256</a>]</td>
    </tr>
    <tr>
      <th>View Tools</th>
      <td><a href="[preferred]/velocity/tools/3.0/velocity-tools-view-3.0.jar">velocity-tools-view-3.0.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-3.0.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-3.0.jar.sha256">SHA256</a>]</td>
    </tr>
    <tr>
      <th>JSP View Tools</th>
      <td><a href="[preferred]/velocity/tools/3.0/velocity-tools-view-jsp-3.0.jar">velocity-tools-view-jsp-3.0.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-jsp-3.0.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-jsp-3.0.jar.sha256">SHA256</a>]</td>
    </tr>
  </tbody>
</table>

#### POM Files

<table class="smalltable">
  <thead>
  </thead>
  <tbody>
    <tr>
      <th>Generic Tools</th>
      <td><a href="[preferred]/velocity/tools/3.0/velocity-tools-generic-3.0.pom">velocity-tools-generic-3.0.pom</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-generic-3.0.pom.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-generic-3.0.pom.sha256">SHA256</a>]</td>
    </tr>
    <tr>
      <th>View Tools</th>
      <td><a href="[preferred]/velocity/tools/3.0/velocity-tools-view-3.0.pom">velocity-tools-view-3.0.pom</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-3.0.pom.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-3.0.pom.sha256">SHA256</a>]</td>
    </tr>
    <tr>
      <th>JSP View Tools</th>
      <td><a href="[preferred]/velocity/tools/3.0/velocity-tools-view-jsp-3.0.pom">velocity-tools-view-jsp-3.0.pom</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-jsp-3.0.pom.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-jsp-3.0.pom.sha256">SHA256</a>]</td>
    </tr>
  </tbody>
</table>

#### Javadoc

<table class="smalltable">
  <thead>
  </thead>
  <tbody>
    <tr>
      <th>Generic Tools</th>
      <td><a href="[preferred]/velocity/tools/3.0/velocity-tools-generic-3.0-javadoc.jar">velocity-tools-generic-3.0-javadoc.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-generic-3.0-javadoc.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-generic-3.0-javadoc.jar.sha256">SHA256</a>]</td>
    </tr>
    <tr>
      <th>View Tools</th>
      <td><a href="[preferred]/velocity/tools/3.0/velocity-tools-view-3.0-javadoc.jar">velocity-tools-view-3.0-javadoc.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-3.0-javadoc.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-3.0-javadoc.jar.sha256">SHA256</a>]</td>
    </tr>
    <tr>
      <th>JSP View Tools</th>
      <td><a href="[preferred]/velocity/tools/3.0/velocity-tools-view-jsp-3.0-javadoc.jar">velocity-tools-view-jsp-3.0-javadoc.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-jsp-3.0-javadoc.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-jsp-3.0-javadoc.jar.sha256">SHA256</a>]</td>
    </tr>
  </tbody>
</table>

#### Sources

<table class="smalltable">
  <thead>
  </thead>
  <tbody>
    <tr>
      <th>Generic Tools</th>
      <td><a href="[preferred]/velocity/tools/3.0/velocity-tools-generic-3.0-sources.jar">velocity-tools-generic-3.0-sources.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-generic-3.0-sources.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-generic-3.0-sources.jar.sha256">SHA256</a>]</td>
    </tr>
    <tr>
      <th>View Tools</th>
      <td><a href="[preferred]/velocity/tools/3.0/velocity-tools-view-3.0-sources.jar">velocity-tools-view-3.0-sources.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-3.0-sources.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-3.0-sources.jar.sha256">SHA256</a>]</td>
    </tr>
    <tr>
      <th>JSP View Tools</th>
      <td><a href="[preferred]/velocity/tools/3.0/velocity-tools-view-jsp-3.0-sources.jar">velocity-tools-view-jsp-3.0-sources.jar</a></td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-jsp-3.0-sources.jar.asc">PGP</a>]</td>
      <td>[<a href="https://www.apache.org/dist/velocity/tools/3.0/velocity-tools-view-jsp-3.0-sources.jar.sha256">SHA256</a>]</td>
    </tr>
  </tbody>
</table>

Or checkout the svn repository from [the 3.0 subversion tag](https://svn.apache.org/repos/asf/velocity/tools/tags/3.0).

---

## Alpha/Beta Releases

These releases are not considered production-ready but they might contain new features or bug fixes that are not yet in the production release.

## Engine

There are no current Alpha or Beta releases of the Engine project.

## Tools

There are no current Alpha or Beta releases of the Tools project.

---

## Snapshot Releases

Snapshot releases published from times to times on [Apache's repository](https://repository.apache.org/content/repositories/snapshots/org/apache/velocity/).

## Archived Components Releases

### Anakia

Binaries and sources:

+ [anakia-1.0.zip]([preferred]/velocity/anakia/1.0/anakia-1.0.zip) [[PGP](http://www.apache.org/dist/velocity/anakia/1.0/anakia-1.0.zip.asc)] [[SHA1](http://www.apache.org/dist/velocity/anakia/1.0/anakia-1.0.zip.sha1)]
+ [anakia-1.0.tar.gz]([preferred]/velocity/anakia/1.0/anakia-1.0.tar.gz) [[PGP](http://www.apache.org/dist/velocity/anakia/1.0/anakia-1.0.tar.gz.asc)] [[SHA1](http://www.apache.org/dist/velocity/anakia/1.0/anakia-1.0.tar.gz.sha1)]

### Texen

Binaries and sources:

+ [texen-1.0.zip]([preferred]/velocity/texen/1.0/texen-1.0.zip) [[PGP](http://www.apache.org/dist/velocity/texen/1.0/texen-1.0.zip.asc)] [[SHA1](http://www.apache.org/dist/velocity/texen/1.0/texen-1.0.zip.sha1)]
+ [texen-1.0.tar.gz]([preferred]/velocity/texen/1.0/texen-1.0.tar.gz) [[PGP](http://www.apache.org/dist/velocity/texen/1.0/texen-1.0.tar.gz.asc)] [[SHA1](http://www.apache.org/dist/velocity/texen/1.0/texen-1.0.tar.gz.sha1)]

### DVSL

Binaries:

+ [velocity-dvsl-1.0.zip]([preferred]/velocity/dvsl/1.0/velocity-dvsl-1.0.zip) [[PGP](http://www.apache.org/dist/velocity/dvsl/1.0/velocity-dvsl-1.0.zip.asc)] [[SHA1](http://www.apache.org/dist/velocity/dvsl/1.0/velocity-dvsl-1.0.zip.sha1)]
+ [velocity-dvsl-1.0.tar.gz]([preferred]/velocity/dvsl/1.0/velocity-dvsl-1.0.tar.gz) [[PGP](http://www.apache.org/dist/velocity/dvsl/1.0/velocity-dvsl-1.0.tar.gz.asc)] [[SHA1](http://www.apache.org/dist/velocity/dvsl/1.0/velocity-dvsl-1.0.tar.gz.sha1)]

Sources:

+ [velocity-dvsl-1.0-src.zip]([preferred]/velocity/dvsl/1.0/velocity-dvsl-1.0-src.zip) [[PGP](http://www.apache.org/dist/velocity/dvsl/1.0/velocity-dvsl-1.0-src.zip.asc)] [[SHA1](http://www.apache.org/dist/velocity/dvsl/1.0/velocity-dvsl-1.0-src.zip.sha1)]
+ [velocity-dvsl-1.0-src.tar.gz]([preferred]/velocity/dvsl/1.0/velocity-dvsl-1.0-src.tar.gz) [[PGP](http://www.apache.org/dist/velocity/dvsl/1.0/velocity-dvsl-1.0-src.tar.gz.asc)] [[SHA1](http://www.apache.org/dist/velocity/dvsl/1.0/velocity-dvsl-1.0-src.tar.gz.sha1)]

## Older Releases

Older versions of the Apache Velocity projects are available from [our archive site](http://archive.apache.org/dist/velocity/), and documented here:

* [Engine old versions documentation](/engine/#older-releases)
* [Tools old versions documentation](/tools/#older-releases)


Unless otherwise stated, the most current release of the Apache Velocity projects is considered the *best* release and should be used for development and new projects. These older releases are mainly for maintenance purposes and archaeological interests.

<!-- nightly builds -->

## Source Code Repository

You can download the source code to each Apache Velocity project directly from our public subversion repository. Here you get logs, change histories and all the information necessary to follow the development process. If you are interested in the project development, please join the Apache Velocity development list.


Project | Repository URL | ViewVC Subversion browser
--------|----------------|--------------------------
Engine | [http://svn.apache.org/repos/asf/velocity/engine/trunk/](http://svn.apache.org/repos/asf/velocity/engine/trunk/) | [http://svn.apache.org/viewvc/velocity/engine/trunk](http://svn.apache.org/viewvc/velocity/engine/trunk)
Tools| [http://svn.apache.org/repos/asf/velocity/tools/trunk/](http://svn.apache.org/repos/asf/velocity/tools/trunk/) | [http://svn.apache.org/viewvc/velocity/tools/trunk](http://svn.apache.org/viewvc/velocity/tools/trunk)
