 ~~ 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.
 
 ------
Download Apache MyFaces Trinidad
 ------

Download Apache MyFaces Trinidad


  Use the links below to download a distribution of Apache MyFaces Trinidad from
  one of our mirrors. It is good practice to verify the integrity of the
  distribution files.

  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 MyFaces Trinidad is distributed as a <<<zip>>> archive (for Windows) and
  as a <<<tar.gz>>> archive (for UNIX). The content is the same. Please note
  that the <<<tar.gz>>> archives contain file names longer than 100 characters and have been
  created using GNU tar extensions. Thus they must be untarred with a GNU compatible
  version of tar.

    << Apache MyFaces Trinidad 2.0.1 Distribution for JSF 2.0 >>

    Release notes can be found
  {{{https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310661&version=12316369}here}}.
  
*-------------------------+---------+----------+-----------+
|                         | Mirrors | Checksum | Signature |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 2.0.1 (tar.gz) | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-2.0.1-dist.tar.gz} trinidad-2.0.1-dist.tar.gz}} | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-2.0.1-dist.tar.gz.md5} trinidad-2.0.1-dist.tar.gz.md5}} | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-2.0.1-dist.tar.gz.asc} trinidad-2.0.1-dist.tar.gz.asc}} |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 2.0.1 (zip)    | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-2.0.1-dist.zip} trinidad-2.0.1-dist.zip}} | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-2.0.1-dist.zip.md5} trinidad-2.0.1-dist.zip.md5}} | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-2.0.1-dist.zip.asc} trinidad-2.0.1-dist.zip.asc}} |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 2.0.1 Example (tar.gz)    | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-2.0.1-example.tar.gz} trinidad-2.0.1-example.tar.gz}} | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-2.0.1-example.tar.gz.md5} trinidad-2.0.1-example.tar.gz.md5}} | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-2.0.1-example.tar.gz.asc} trinidad-2.0.1-example.tar.gz.asc}} |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 2.0.1  Example (zip)      | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-2.0.1-example.zip} trinidad-2.0.1-example.zip}} | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-2.0.1-example.zip.md5} trinidad-2.0.1-example.zip.md5}} | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-2.0.1-example.zip.asc} trinidad-2.0.1-example.zip.asc}} |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 2.0.1  Source (zip)       | {{{http://www.apache.org/dyn/closer.cgi/myfaces/source/trinidad-2.0.1-src-all.zip} trinidad-2.0.1-src-all.zip}} | {{{http://www.apache.org/dyn/closer.cgi/myfaces/source/trinidad-2.0.1-src-all.zip.md5} trinidad-2.0.1-src-all.zip.md5}} | {{{http://www.apache.org/dyn/closer.cgi/myfaces/source/trinidad-2.0.1-src-all.zip.asc} trinidad-2.0.1-src-all.zip.asc}} |
*-------------------------+---------+----------+-----------+

    << Apache MyFaces Trinidad 1.2.14 Distribution for JSF 1.2 >>

    Release notes can be found
  {{{https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310661&styleName=Html&version=12314551}here}}.

*-------------------------+---------+----------+-----------+
|                         | Mirrors | Checksum | Signature |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 1.2.14 (tar.gz)     | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-1.2.14-dist.tar.gz} trinidad-1.2.14-dist.tar.gz}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.2.14-dist.tar.gz.md5} trinidad-1.2.14-dist.tar.gz.md5}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.2.14-dist.tar.gz.asc} trinidad-1.2.14-dist.tar.gz.asc}} |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 1.2.14 (zip)      | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-1.2.14-dist.zip} trinidad-1.2.14-dist.zip}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.2.14-dist.zip.md5} trinidad-1.2.14-dist.zip.md5}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.2.14-dist.zip.asc} trinidad-1.2.14-dist.zip.asc}} |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 1.2.14 Example (tar.gz)     | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-1.2.14-example.tar.gz} trinidad-1.2.14-example.tar.gz}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.2.14-example.tar.gz.md5} trinidad-1.2.14-example.tar.gz.md5}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.2.14-example.tar.gz.asc} trinidad-1.2.14-example.tar.gz.asc}} |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 1.2.14  Example (zip)      | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-1.2.14-example.zip} trinidad-1.2.14-example.zip}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.2.14-example.zip.md5} trinidad-1.2.14-example.zip.md5}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.2.14-example.zip.asc} trinidad-1.2.14-example.zip.asc}} |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 1.2.14  Source (zip)      | {{{http://www.apache.org/dyn/closer.cgi/myfaces/source/trinidad-1.2.14-src-all.zip} trinidad-1.2.14-src-all.zip}} | {{{http://www.apache.org/dist/myfaces/source/trinidad-1.2.14-src-all.zip.md5} trinidad-1.2.14-src-all.zip.md5}} | {{{http://www.apache.org/dist/myfaces/source/trinidad-1.2.14-src-all.zip.asc} trinidad-1.2.14-src-all.zip.asc}} |
*-------------------------+---------+----------+-----------+

    << Apache MyFaces Trinidad 1.0.13 Distribution  for JSF 1.1 >>

    Release notes can be found
  {{{https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310661&styleName=Html&version=12314764}here}}.

*-------------------------+---------+----------+-----------+
|                         | Mirrors | Checksum | Signature |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 1.0.13 (tar.gz)     | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-1.0.13-dist.tar.gz} trinidad-1.0.13-dist.tar.gz}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.0.13-dist.tar.gz.md5} trinidad-1.0.13-dist.tar.gz.md5}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.0.13-dist.tar.gz.asc} trinidad-1.0.13-dist.tar.gz.asc}} |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 1.0.13 (zip)      | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-1.0.13-dist.zip} trinidad-1.0.13-dist.zip}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.0.13-dist.zip.md5} trinidad-1.0.13-dist.zip.md5}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.0.13-dist.zip.asc} trinidad-1.0.13-dist.zip.asc}} |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 1.0.13 Example (tar.gz)     | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-1.0.13-example.tar.gz} trinidad-1.0.13-example.tar.gz}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.0.13-example.tar.gz.md5} trinidad-1.0.13-example.tar.gz.md5}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.0.13-example.tar.gz.asc} trinidad-1.0.13-example.tar.gz.asc}} |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 1.0.13  Example (zip)      | {{{http://www.apache.org/dyn/closer.cgi/myfaces/binaries/trinidad-1.0.13-example.zip} trinidad-1.0.13-example.zip}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.0.13-example.zip.md5} trinidad-1.0.13-example.zip.md5}} | {{{http://www.apache.org/dist/myfaces/binaries/trinidad-1.0.13-example.zip.asc} trinidad-1.0.13-example.zip.asc}} |
*-------------------------+---------+----------+-----------+
| Apache MyFaces Trinidad 1.0.13  Source (zip)      | {{{http://www.apache.org/dyn/closer.cgi/myfaces/source/trinidad-1.0.13-src-all.zip} trinidad-1.0.13-src-all.zip}} | {{{http://www.apache.org/dist/myfaces/source/trinidad-1.0.13-src-all.zip.md5} trinidad-1.0.13-src-all.zip.md5}} | {{{http://www.apache.org/dist/myfaces/source/trinidad-1.0.13-src-all.zip.asc} trinidad-1.0.13-src-all.zip.asc}} |
*-------------------------+---------+----------+-----------+

Latest source code from SVN repository

    If you want to use the latest Apache MyFaces Trinidad features, the source code is under
    version control with SVN.  Click {{{source-repository.html} here }}
    for information on how to use the ASF Trinidad SVN Repository.

Nightly builds from SVN repository

     There are also {{{https://repository.apache.org/content/repositories/snapshots/org/apache/myfaces/trinidad} nightly builds}}
     available every 24 hours (11:00 PM EST).

Archive of old releases

    Older releases are available in the {{{http://archive.apache.org/dist/myfaces/} archive}}.  Those
    releases are only provided as historical artifacts. We strongly
    recommend not to use those releases, but upgrade to the most recent release.

Verifying checksums

    It is essential that you verify the integrity of the downloaded
    files using the PGP and MD5 signatures. MD5 verification ensures the
    file was not corrupted during the download process. PGP verification
    ensures that the file came from a certain person.

    To verify the MD5 signature on the files, you need to use a program
    called <<<md5>>> or <<<md5sum>>>, which is
    included in many UNIX distributions.  It is also available as part of
    {{{http://www.gnu.org/software/textutils/textutils.html}GNU Textutils}}.
    Windows users can get binary md5 programs from {{{http://www.fourmilab.ch/md5/}here}},
    {{{http://www.pc-tools.net/win32/freeware/console/}here}}, or
    {{{http://www.slavasoft.com/fsum/}here}}.

Verifying signatures

  	PGP verification ensures that the file came from a certain person.  We strongly recommend
	  you verify your downloads with both PGP and MD5.

	  The PGP signatures can be verified using {{{http://www.pgpi.org/}PGP}} or
	  {{{http://www.gnupg.org/}GPG}}.  First download the Apache MyFaces Trinidad
	  {{http://svn.apache.org/repos/asf/myfaces/trinidad/trunk/KEYS/}KEYS}}	as well as the <<<asc>>> signature file
	  for the particular distribution. It is important that you get these files from the ultimate
	  trusted source - the main ASF distribution site, rather than from a mirror.
	  Then verify the signatures using ...

	  <<<
	  % pgpk -a KEYS
	  % pgpv trinidad-1.0.13-dist.tar.gz.asc trinidad-1.0.13-dist.tar.gz
	  >>>

	  <or>

	  <<<
	  % pgp -ka KEYS
	  % pgp trinidad-1.0.13-dist.tar.gz.asc trinidad-1.0.13-dist.tar.gz
	  >>>

	  <or>

	  <<<
  	% gpg --import KEYS
	  % gpg --verify trinidad-1.0.13-dist.tar.gz.asc trinidad-1.0.13-dist.tar.gz
	  >>>
