 -----
 Wink Documentation
 -----
 -----
 July 2009

~~
~~ 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.
~~

Apache Wink Documentation

* Wink 1.2.1 

  * User Guide {{{./1.2.1/Apache_Wink_User_Guide.pdf}PDF}} 
  
  * {{{./1.2.1/api/index.html}API}} (Javadoc)

* Wiki

  *  {{{http://cwiki.apache.org/WINK/}Apache Wink Wiki}}

  *  {{{http://cwiki.apache.org/WINK/apache-wink-developer-guide.html}User Guide in Wiki}}

* JAX-RS

 * {{{https://jsr311.dev.java.net/nonav/releases/1.0/index.html}JSR-311 API}} 
 
 * {{{http://cwiki.apache.org/confluence/display/WINK/JAX-RS}JAX-RS Guide}}
 
 * {{{https://jsr311.dev.java.net}JSR 311 Development}}
 
 * {{{http://jcp.org/en/jsr/detail?id=311}JSR 311 Specification}}

* Previous Releases

** Wink 1.2.0 

  * User Guide {{{./1.2.0/Apache_Wink_User_Guide.pdf}PDF}} 
  
  * {{{./1.2.0/api/index.html}API}} (Javadoc)

** Wink 1.1.2 

  * User Guide {{{./1.1.2/Apache_Wink_User_Guide.pdf}PDF}} 
  
  * {{{./1.1.2/api/index.html}API}} (Javadoc)

** Wink 1.1.1

  * User Guide {{{./1.1.1/html/Apache Wink Developer Guide.html}HTML}} / {{{./1.1/Apache_Wink_User_Guide.pdf}PDF}} 
  
  * {{{./1.1.1/api/index.html}API}} (Javadoc)

** Wink 1.1 

  * User Guide {{{./1.1/html/Apache Wink Developer Guide.html}HTML}} / {{{./1.1/Apache_Wink_User_Guide.pdf}PDF}} 
  
  * {{{./1.1/api/index.html}API}} (Javadoc)

** Wink 1.0 

  * User Guide {{{./1.0/html/Apache Wink Developer Guide.html}HTML}} / {{{./1.0/Apache_Wink_User_Guide.pdf}PDF}} 
  
  * {{{./1.0/api/index.html}API}} (Javadoc)

** Wink 0.1 

  * User Guide {{{./0.1/Apache_Wink_User_Guide.htm}HTML}} / {{{./0.1/Apache_Wink_User_Guide.pdf}PDF}} 
  
  * {{{./0.1/api/index.html}API}} (Javadoc)
   
