<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- 
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License. 
-->
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Downloads</title>
    <meta name="description" content="Apache Wink -- Downloads">
    <meta name="author" content="dev@wink.apache.org">

    <META http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <META name="Keywords" content="Apache Wink JSR-237 REST JavaEE6 JAX-RS" />
    <META name="Owner" content="dev@wink.apache.org" />
    <META name="Robots" content="index, follow" />
    <META name="Security" content="Public" />
    <META name="DC.Rights" content="Copyright &copy; 2009-2013, The Apache Software Foundation" />

    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
    <!--[if lt IE 9]>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    <!-- Le styles -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="assets/bootstrap/css/bootstrap.min.css" rel="stylesheet">
    <link href="assets/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet">
    <style type="text/css">
      body {
        padding-top: 60px;
        padding-bottom: 40px;
      }
    </style>

    <!-- Le fav and touch icons -->
    <link rel="shortcut icon" href="images/wink.png">
    <link rel="shortcut icon" href="images/favicon.ico">
    <link rel="apple-touch-icon" href="images/apple-touch-icon-iphone.png" />
    <link rel="apple-touch-icon" sizes="72x72" href="images/apple-touch-icon-ipad.png" />
    <link rel="apple-touch-icon" sizes="114x114" href="images/apple-touch-icon-iphone-retina.png" />
    <link rel="apple-touch-icon" sizes="144x144" href="images/apple-touch-icon-ipad-retina.png" />
  </head>

  <body>
    <div class="navbar navbar-inverse navbar-fixed-top">
      <div class="navbar-inner fill">
          <div class="container">
            <!--<a class="brand" href="index.html"><img src="images/favicon.ico" width="15%" height="15%"/></a>-->

            <ul class="nav">
              <li class="active"><a href="index.html">Home</a></li>
              <li class="active"><a href="news.html">News</a></li>
              <li class="active"><a href="downloads.html">Downloads</a></li>
              <li class="active"><a href="documentation.html">Documentation</a></li>
              <li class="active"><a href="community.html">Community</a></li>
              <li class="active"><a href="source.html">Source</a></li>
              <li class="active"><a href="faq.html">FAQ</a></li>
              <li class="active"><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
              <li class="active"><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
              <li class="active"><a href="privacy.html">Privacy</a></li>
            </ul>


            <!-- Google CSE Search Box Begins  -->
              <FORM class="navbar-form pull-right" id="searchbox_007756850371322559056:un2ixevjhis" action="http://www.google.com/cse">
                <INPUT type="hidden" name="cx" value="007756850371322559056:un2ixevjhis">
                <INPUT type="hidden" name="cof" value="FORID:0">
                <INPUT name="q" type="text" placeholder="Search">
              </FORM>
              <!--<SCRIPT type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_007756850371322559056:un2ixevjhis"></SCRIPT>-->
              <!-- Google CSE Search Box Ends -->
        </div><!--/container -->
      </div><!--/navbar-inner -->
    </div><!--/navbar -->
    

    
    <div class="container" id="content">
      <h1>Apache Wink Downloads</h1>

<hr>

<div class="row">
    <div class="span10">
       <p>Apache Wink is distributed in several formats for your convenience.</p>
       <p>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.</p>
       <p>Apache Wink is distributed under the <a href="http://maven.apache.org/license.html">Apache License, version 2.0</a>.</p>
    </div>
</div>

<hr>

<h2>Download Apache Wink 1.3.0</h2>

<div class="row">
    <div class="span10">
        <table class="table table-hover">
        <tr>
          <th><b>Name</b></th><th><b>Archive</b></th><th><b>MD5</b></th><th><b>SHA-1</b></th><th><b>Signature</b></th>
        </tr>

        <tr>
            <td>Wink-1.3.0 (tar.gz)</td><td><a href="http://www.apache.org/dyn/closer.cgi/wink/1.3.0/apache-wink-1.3.0.tar.gz">tar.gz</a></td><td><a href="http://www.apache.org/dist/wink/1.3.0/apache-wink-1.3.0.tar.gz.md5">MD5</a> </td><td>  <a href="http://www.apache.org/dist/wink/1.3.0/apache-wink-1.3.0.tar.gz.sha1">SHA-1</a>  </td><td> <a href="http://www.apache.org/dist/wink/1.3.0/apache-wink-1.3.0.tar.gz.asc">ASC</a> </td>
        </tr>

        <tr>
            <td> Wink-1.3.0 (zip) </td><td> <a href="http://www.apache.org/dyn/closer.cgi/wink/1.3.0/apache-wink-1.3.0.zip">zip</a> </td><td>  <a href="http://www.apache.org/dist/wink/1.3.0/apache-wink-1.3.0.zip.md5">MD5</a> </td><td>  <a href="http://www.apache.org/dist/wink/1.3.0/apache-wink-1.3.0.zip.sha1">SHA-1</a> </td><td> <a href="http://www.apache.org/dist/wink/1.3.0/apache-wink-1.3.0.zip.asc">ASC</a> </td>
        </tr>

        <tr>
            <td> Wink-1.3.0 (Source tar.gz) </td><td> <a href="http://www.apache.org/dyn/closer.cgi/wink/1.3.0/apache-wink-1.3.0-src.tar.gz">tar.gz</a> </td><td>  <a href="http://www.apache.org/dist/wink/1.3.0/apache-wink-1.3.0-src.tar.gz.md5">MD5</a>  </td><td> <a href="http://www.apache.org/dist/wink/1.3.0/apache-wink-1.3.0-src.tar.gz.sha1">SHA-1</a> </td><td> <a href="http://www.apache.org/dist/wink/1.3.0/apache-wink-1.3.0-src.tar.gz.asc">ASC</a> </td>
        </tr>

        <tr>
            <td> Wink-1.3.0 (Source zip) </td><td> <a href="http://www.apache.org/dyn/closer.cgi/wink/1.3.0/apache-wink-1.3.0-src.zip">zip</a> </td><td>  <a href="http://www.apache.org/dist/wink/1.3.0/apache-wink-1.3.0-src.zip.md5">MD5</a> </td><td>  <a href="http://www.apache.org/dist/wink/1.3.0/apache-wink-1.3.0-src.zip.sha1">SHA-1</a> </td><td> <a href="http://www.apache.org/dist/wink/1.3.0/apache-wink-1.3.0-src.zip.asc">ASC</a> </td>
        </tr>

        <tr>
            <td> Release Notes </td><td> <a href="1.3.0/release_notes.html">1.3.0</a> </td><td> </td><td> </td><td> </td></tr><tr class="a"><td> KEYS </td><td> <a href="http://svn.apache.org/repos/asf/wink/tags/wink-1.3.0/KEYS">KEYS</a> </td><td> </td><td> </td><td> </td>
        </tr>
        </table>

        <p>Instructions for checking hashes and signatures is indicated on the <a href="http://www.apache.org/info/verification.html">Verifying Apache Software Foundation Releases</a> page.</p>
        <p>You can also retrieve the source files from our svn repository by typing :</p>

        <pre>svn co http://svn.apache.org/repos/asf/wink/tags/wink-1.3.0/</pre>

        <p>Instructions for checking hashes and signatures is indicated on the <a href="http://www.apache.org/info/verification.html">Verifying Apache Software Foundation Releases</a> page.</p>

        <p>You can also retrieve the source files from our svn repository by typing :</p>

        <pre>svn co http://svn.apache.org/repos/asf/wink/tags/wink-1.3.0/</pre>

        <h4> Using Maven </h4>

        <p>We strongly encourage our users to configure a Maven repository mirror closer to their location, please read <a href="http://maven.apache.org/guides/mini/guide-mirror-settings.html">How to Use Mirrors for Repositories</a>.

        <strong>Dependencies</strong>

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

        <strong>Server:</strong>
        <pre>&lt;dependency&gt;
    &lt;groupId&gt;org.apache.wink&lt;/groupId&gt;
    &lt;artifactId&gt;wink-server&lt;/artifactId&gt;
    &lt;version&gt;1.3.0&lt;/version&gt;
&lt;/dependency&gt;</pre>

        <strong>Client:</strong>
        <pre>&lt;dependency&gt;
    &lt;groupId&gt;org.apache.wink&lt;/groupId&gt;
    &lt;artifactId&gt;wink-client&lt;/artifactId&gt;
    &lt;version&gt;1.3.0&lt;/version&gt;
&lt;/dependency&gt;</pre>
    </div>

</div>

<h2>Previous Releases</h2>

<div class="row">
    <div class="span10">
        All previous releases of Apache Wink can be found in the <a href="http://archive.apache.org/dist/wink/">archives</a>.
    </div>
</div>
    </div> <!-- /container/content -->
    


    <hr>

    <div class="container">
      <footer>
        <div class="xright">
        Copyright &copy; 2009-2013 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All Rights Reserved.Licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.</br>
        Apache and the Apache feather logo are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.</br>
        </p>
    </footer>
  </div> <!-- /container/footer -->


  <!-- Le javascript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="assets/jquery/jquery-1.9.1.min.js"></script>
    <script src="assets/bootstrap/js/bootstrap.min.js"></script>

    <script type="text/javascript">
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-1174707-10']);
      _gaq.push(['_trackPageview']);

      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();
    </script>
    
  </body>
</html>
