h1. Apache Wink Downloads

 Apache Wink is distributed in several formats for your convenience.

 You will be prompted for a mirror - if the file is not found on yours, please be patient, as it may take 24 hours to reach all mirrors.

 Apache Wink is distributed under the [Apache License, version 2.0|http://maven.apache.org/license.html].


h2. Download Wink 1.2.1

|| Name ||  Archive || MD5 || SHA-1 || Signature ||
| ${download_1_2_1Name} (tar.gz) | [tar.gz|${download_1_2_1MirrorUrl}/${download_1_2_1File}.tar.gz] |  [MD5|${download_1_2_1DistUrl}/${download_1_2_1File}.tar.gz.md5] |  [SHA-1|${download_1_2_1DistUrl}/${download_1_2_1File}.tar.gz.sha1]  | [ASC|${download_1_2_1DistUrl}/${download_1_2_1File}.tar.gz.asc] |
| ${download_1_2_1Name} (zip) | [zip|${download_1_2_1MirrorUrl}/${download_1_2_1File}.zip] |  [MD5|${download_1_2_1DistUrl}/${download_1_2_1File}.zip.md5] |  [SHA-1|${download_1_2_1DistUrl}/${download_1_2_1File}.zip.sha1] | [ASC|${download_1_2_1DistUrl}/${download_1_2_1File}.zip.asc] |
| ${download_1_2_1Name} (Source tar.gz) | [tar.gz|${download_1_2_1MirrorUrl}/${download_1_2_1File}-src.tar.gz] |  [MD5|${download_1_2_1DistUrl}/${download_1_2_1File}-src.tar.gz.md5]  | [SHA-1|${download_1_2_1DistUrl}/${download_1_2_1File}-src.tar.gz.sha1] | [ASC|${download_1_2_1DistUrl}/${download_1_2_1File}-src.tar.gz.asc] |
| ${download_1_2_1Name} (Source zip) | [zip|${download_1_2_1MirrorUrl}/${download_1_2_1File}-src.zip] |  [MD5|${download_1_2_1DistUrl}/${download_1_2_1File}-src.zip.md5] |  [SHA-1|${download_1_2_1DistUrl}/${download_1_2_1File}-src.zip.sha1] | [ASC|${download_1_2_1DistUrl}/${download_1_2_1File}-src.zip.asc] |
| Release Notes | [${download_1_2_1Version}|1.2.1/release\_notes] | | | |
| KEYS for {$download_1_2_1Name} | [KEYS|${download_1_2_1TagUrl}/KEYS] | | | |

Instructions for checking hashes and signatures is indicated on the [Verifying Apache Software Foundation Releases|http://www.apache.org/info/verification.html] page.

You can also retrieve the source files from our svn repository by typing
{code}
svn co ${download_1_2_1TagUrl}/
{code}

Instructions for checking hashes and signatures is indicated on the [Verifying Apache Software Foundation Releases|http://www.apache.org/info/verification.html] page.

You can also retrieve the source files from our svn repository by typing
{code}
svn co ${download_1_2_1TagUrl}/
{code}

h3. Using Maven

 We strongly encourage our users to configure a Maven repository mirror closer to their location, please read [How to Use Mirrors for Repositories|http://maven.apache.org/guides/mini/guide-mirror-settings.html].

h4. Dependencies

 Add the following dependencies to your Maven pom.xml to include the Apache Wink Client module or the Server module.

h5. Server

{code}
<dependency>
    <groupId>org.apache.wink</groupId>
    <artifactId>wink-server</artifactId>
    <version>${download_1_2_1Version}</version>
</dependency>
{code}

h5. Client

{code}
<dependency>
    <groupId>org.apache.wink</groupId>
    <artifactId>wink-client</artifactId>
    <version>${download_1_2_1Version}</version>
</dependency>
{code}

h2. Previous Releases

h3. Download Wink 1.2.0

|| Name ||  Archive || MD5 || SHA-1 || Signature ||
| ${download_1_2_0Name} (tar.gz) | [tar.gz|${download_1_2_0MirrorUrl}/${download_1_2_0File}.tar.gz] |  [MD5|${download_1_2_0DistUrl}/${download_1_2_0File}.tar.gz.md5] |  [SHA-1|${download_1_2_0DistUrl}/${download_1_2_0File}.tar.gz.sha1]  | [ASC|${download_1_2_0DistUrl}/${download_1_2_0File}.tar.gz.asc] |
| ${download_1_2_0Name} (zip) | [zip|${download_1_2_0MirrorUrl}/${download_1_2_0File}.zip] |  [MD5|${download_1_2_0DistUrl}/${download_1_2_0File}.zip.md5] |  [SHA-1|${download_1_2_0DistUrl}/${download_1_2_0File}.zip.sha1] | [ASC|${download_1_2_0DistUrl}/${download_1_2_0File}.zip.asc] |
| ${download_1_2_0Name} (Source tar.gz) | [tar.gz|${download_1_2_0MirrorUrl}/${download_1_2_0File}-src.tar.gz] |  [MD5|${download_1_2_0DistUrl}/${download_1_2_0File}-src.tar.gz.md5]  | [SHA-1|${download_1_2_0DistUrl}/${download_1_2_0File}-src.tar.gz.sha1] | [ASC|${download_1_2_0DistUrl}/${download_1_2_0File}-src.tar.gz.asc] |
| ${download_1_2_0Name} (Source zip) | [zip|${download_1_2_0MirrorUrl}/${download_1_2_0File}-src.zip] |  [MD5|${download_1_2_0DistUrl}/${download_1_2_0File}-src.zip.md5] |  [SHA-1|${download_1_2_0DistUrl}/${download_1_2_0File}-src.zip.sha1] | [ASC|${download_1_2_0DistUrl}/${download_1_2_0File}-src.zip.asc] |
| Release Notes | [${download_1_2_0Version}|1.2.0/release\_notes] | | | |
| KEYS for {$download_1_2_0Name} | [KEYS|${download_1_2_0TagUrl}/KEYS] | | | |

h3. Wink 1.1.3

|| Name ||  Archive || MD5 || SHA-1 || Signature ||
| ${download_1_1_3Name} (tar.gz) | [tar.gz|${download_1_1_3MirrorUrl}/${download_1_1_3File}.tar.gz] |  [MD5|${download_1_1_3DistUrl}/${download_1_1_3File}.tar.gz.md5] |  [SHA-1|${download_1_1_3DistUrl}/${download_1_1_3File}.tar.gz.sha1]  | [ASC|${download_1_1_3DistUrl}/${download_1_1_3File}.tar.gz.asc] |
| ${download_1_1_3Name} (zip) | [zip|${download_1_1_3MirrorUrl}/${download_1_1_3File}.zip] |  [MD5|${download_1_1_3DistUrl}/${download_1_1_3File}.zip.md5] |  [SHA-1|${download_1_1_3DistUrl}/${download_1_1_3File}.zip.sha1] | [ASC|${download_1_1_3DistUrl}/${download_1_1_3File}.zip.asc] |
| ${download_1_1_3Name} (Source tar.gz) | [tar.gz|${download_1_1_3MirrorUrl}/${download_1_1_3File}-src.tar.gz] |  [MD5|${download_1_1_3DistUrl}/${download_1_1_3File}-src.tar.gz.md5]  | [SHA-1|${download_1_1_3DistUrl}/${download_1_1_3File}-src.tar.gz.sha1] | [ASC|${download_1_1_3DistUrl}/${download_1_1_3File}-src.tar.gz.asc] |
| ${download_1_1_3Name} (Source zip) | [zip|${download_1_1_3MirrorUrl}/${download_1_1_3File}-src.zip] |  [MD5|${download_1_1_3DistUrl}/${download_1_1_3File}-src.zip.md5] |  [SHA-1|${download_1_1_3DistUrl}/${download_1_1_3File}-src.zip.sha1] | [ASC|${download_1_1_3DistUrl}/${download_1_1_3File}-src.zip.asc] |
| Release Notes | [${download_1_1_3Version}|1.1.3/release\_notes] | | | |
| KEYS for {$download_1_1_3Name} | [KEYS|${download_1_1_3TagUrl}/KEYS] | | | |

h3. Wink 1.1.2
| ${download_1_1_2Name} (tar.gz) | [tar.gz|${download_1_1_2MirrorUrl}/${download_1_1_2File}.tar.gz] |  [MD5|${download_1_1_2DistUrl}/${download_1_1_2File}.tar.gz.md5] |  [SHA-1|${download_1_1_2DistUrl}/${download_1_1_2File}.tar.gz.sha1]  | [ASC|${download_1_1_2DistUrl}/${download_1_1_2File}.tar.gz.asc] |
| ${download_1_1_2Name} (zip) | [zip|${download_1_1_2MirrorUrl}/${download_1_1_2File}.zip] |  [MD5|${download_1_1_2DistUrl}/${download_1_1_2File}.zip.md5] |  [SHA-1|${download_1_1_2DistUrl}/${download_1_1_2File}.zip.sha1] | [ASC|${download_1_1_2DistUrl}/${download_1_1_2File}.zip.asc] |
| ${download_1_1_2Name} (Source tar.gz) | [tar.gz|${download_1_1_2MirrorUrl}/${download_1_1_2File}-src.tar.gz] |  [MD5|${download_1_1_2DistUrl}/${download_1_1_2File}-src.tar.gz.md5]  | [SHA-1|${download_1_1_2DistUrl}/${download_1_1_2File}-src.tar.gz.sha1] | [ASC|${download_1_1_2DistUrl}/${download_1_1_2File}-src.tar.gz.asc] |
| ${download_1_1_2Name} (Source zip) | [zip|${download_1_1_2MirrorUrl}/${download_1_1_2File}-src.zip] |  [MD5|${download_1_1_2DistUrl}/${download_1_1_2File}-src.zip.md5] |  [SHA-1|${download_1_1_2DistUrl}/${download_1_1_2File}-src.zip.sha1] | [ASC|${download_1_1_2DistUrl}/${download_1_1_2File}-src.zip.asc] |
| Release Notes | [${download_1_1_2Version}|1.1.2/release\_notes] | | | |
| KEYS for {$download_1_1_2Name} | [KEYS|${download_1_1_2TagUrl}/KEYS] | | | |

h3. Wink 1.1.1

|| Name ||  Archive || MD5 || SHA-1 || Signature ||
| ${download_1_1_1Name} (tar.gz) | [tar.gz|${download_1_1_1MirrorUrl}/${download_1_1_1File}.tar.gz] |  [MD5|${download_1_1_1DistUrl}/${download_1_1_1File}.tar.gz.md5] |  [SHA-1|${download_1_1_1DistUrl}/${download_1_1_1File}.tar.gz.sha1]  | [ASC|${download_1_1_1DistUrl}/${download_1_1_1File}.tar.gz.asc] |
| ${download_1_1_1Name} (zip) | [zip|${download_1_1_1MirrorUrl}/${download_1_1_1File}.zip] |  [MD5|${download_1_1_1DistUrl}/${download_1_1_1File}.zip.md5] |  [SHA-1|${download_1_1_1DistUrl}/${download_1_1_1File}.zip.sha1] | [ASC|${download_1_1_1DistUrl}/${download_1_1_1File}.zip.asc] |
| ${download_1_1_1Name} (Source tar.gz) | [tar.gz|${download_1_1_1MirrorUrl}/${download_1_1_1File}-src.tar.gz] |  [MD5|${download_1_1_1DistUrl}/${download_1_1_1File}-src.tar.gz.md5]  | [SHA-1|${download_1_1_1DistUrl}/${download_1_1_1File}-src.tar.gz.sha1] | [ASC|${download_1_1_1DistUrl}/${download_1_1_1File}-src.tar.gz.asc] |
| ${download_1_1_1Name} (Source zip) | [zip|${download_1_1_1MirrorUrl}/${download_1_1_1File}-src.zip] |  [MD5|${download_1_1_1DistUrl}/${download_1_1_1File}-src.zip.md5] |  [SHA-1|${download_1_1_1DistUrl}/${download_1_1_1File}-src.zip.sha1] | [ASC|${download_1_1_1DistUrl}/${download_1_1_1File}-src.zip.asc] |
| Release Notes | [${download_1_1_1Version}|1.1.1/release\_notes] | | | |
| KEYS for {$download_1_1_1Name} | [KEYS|${download_1_1_1TagUrl}/KEYS] | | | |

h3. Wink 1.1

|| Name ||  Archive || MD5 || SHA-1 || Signature ||
| ${download_1_1Name} (tar.gz) | [tar.gz|${download_1_1MirrorUrl}/${download_1_1File}.tar.gz] |  [MD5|${download_1_1DistUrl}/${download_1_1File}.tar.gz.md5] |  [SHA-1|${download_1_1DistUrl}/${download_1_1File}.tar.gz.sha1]  | [ASC|${download_1_1DistUrl}/${download_1_1File}.tar.gz.asc] |
| ${download_1_1Name} (zip) | [zip|${download_1_1MirrorUrl}/${download_1_1File}.zip] |  [MD5|${download_1_1DistUrl}/${download_1_1File}.zip.md5] |  [SHA-1|${download_1_1DistUrl}/${download_1_1File}.zip.sha1] | [ASC|${download_1_1DistUrl}/${download_1_1File}.zip.asc] |
| ${download_1_1Name} (Source tar.gz) | [tar.gz|${download_1_1MirrorUrl}/${download_1_1File}-src.tar.gz] |  [MD5|${download_1_1DistUrl}/${download_1_1File}-src.tar.gz.md5]  | [SHA-1|${download_1_1DistUrl}/${download_1_1File}-src.tar.gz.sha1] | [ASC|${download_1_1DistUrl}/${download_1_1File}-src.tar.gz.asc] |
| ${download_1_1Name} (Source zip) | [zip|${download_1_1MirrorUrl}/${download_1_1File}-src.zip] |  [MD5|${download_1_1DistUrl}/${download_1_1File}-src.zip.md5] |  [SHA-1|${download_1_1DistUrl}/${download_1_1File}-src.zip.sha1] | [ASC|${download_1_1DistUrl}/${download_1_1File}-src.zip.asc] |
| Release Notes | [${download_1_1Version}|1.1/release\_notes] | | | |
| KEYS for {$download_1_1Name} | [KEYS|${download_1_1TagUrl}/KEYS] | | | |

h3. Wink 1.0

|| Name ||  Archive || MD5 || SHA-1 || Signature ||
| ${download_1_0Name} (tar.gz) | [tar.gz|${download_1_0MirrorUrl}/${download_1_0File}.tar.gz] |  [MD5|${download_1_0DistUrl}/${download_1_0File}.tar.gz.md5] |  [SHA-1|${download_1_0DistUrl}/${download_1_0File}.tar.gz.sha1]  | [ASC|${download_1_0DistUrl}/${download_1_0File}.tar.gz.asc] |
| ${download_1_0Name} (zip) | [zip|${download_1_0MirrorUrl}/${download_1_0File}.zip] |  [MD5|${download_1_0DistUrl}/${download_1_0File}.zip.md5] |  [SHA-1|${download_1_0DistUrl}/${download_1_0File}.zip.sha1] | [ASC|${download_1_0DistUrl}/${download_1_0File}.zip.asc] |
| ${download_1_0Name} (Source tar.gz) | [tar.gz|${download_1_0MirrorUrl}/${download_1_0File}-src.tar.gz] |  [MD5|${download_1_0DistUrl}/${download_1_0File}-src.tar.gz.md5]  | [SHA-1|${download_1_0DistUrl}/${download_1_0File}-src.tar.gz.sha1] | [ASC|${download_1_0DistUrl}/${download_1_0File}-src.tar.gz.asc] |
| ${download_1_0Name} (Source zip) | [zip|${download_1_0MirrorUrl}/${download_1_0File}-src.zip] |  [MD5|${download_1_0DistUrl}/${download_1_0File}-src.zip.md5] |  [SHA-1|${download_1_0DistUrl}/${download_1_0File}-src.zip.sha1] | [ASC|${download_1_0DistUrl}/${download_1_0File}-src.zip.asc] |
| Release Notes | [${download_1_0Version}|1.0/release\_notes] | | | |
| KEYS for {$download_1_0Name} | [KEYS|${download_1_0TagUrl}/KEYS] | | | |

h3. Wink 0.1

|| Name ||  Archive || MD5 || SHA-1 || Signature ||
| ${download_0_1Name} (tar.gz) | [tar.gz|${download_0_1MirrorUrl}/${download_0_1File}.tar.gz] |  [MD5|${download_0_1DistUrl}/${download_0_1File}.tar.gz.md5] |  [SHA-1|${download_0_1DistUrl}/${download_0_1File}.tar.gz.sha1]  | [ASC|${download_0_1DistUrl}/${download_0_1File}.tar.gz.asc] |
| ${download_0_1Name} (zip) | [zip|${download_0_1MirrorUrl}/${download_0_1File}.zip] |  [MD5|${download_0_1DistUrl}/${download_0_1File}.zip.md5] |  [SHA-1|${download_0_1DistUrl}/${download_0_1File}.zip.sha1] | [ASC|${download_0_1DistUrl}/${download_0_1File}.zip.asc] |
| ${download_0_1Name} (Source tar.gz) | [tar.gz|${download_0_1MirrorUrl}/${download_0_1File}-src.tar.gz] |  [MD5|${download_0_1DistUrl}/${download_0_1File}-src.tar.gz.md5]  | [SHA-1|${download_0_1DistUrl}/${download_0_1File}-src.tar.gz.sha1] | [ASC|${download_0_1DistUrl}/${download_0_1File}-src.tar.gz.asc] |
| ${download_0_1Name} (Source zip) | [zip|${download_0_1MirrorUrl}/${download_0_1File}-src.zip] |  [MD5|${download_0_1DistUrl}/${download_0_1File}-src.zip.md5] |  [SHA-1|${download_0_1DistUrl}/${download_0_1File}-src.zip.sha1] | [ASC|${download_0_1DistUrl}/${download_0_1File}-src.zip.asc] |
| Release Notes | [${download_0_1Version}|0.1/release\_notes] | | | |
| KEYS for ${download_0_1Name} | [KEYS|${download_0_1TagUrl}/KEYS] | | | |

Instructions for checking hashes and signatures is indicated on the [Verifying Apache Software Foundation Releases|http://www.apache.org/info/verification.html] page.

You can also retrieve the source files from our svn repository by typing
{code}
svn co ${download_0_1TagUrl}/
{code}
