# Download Tobago Source- and Binary-Packages

Most common Tobago will be used in a Maven project, so an explicit download is not needed.
Nevertheless, here are the artifacts to download.

Use the links below to download a distribution of MyFaces Tobago 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 Tobago is distributed as a *zip* archive and
as a *tar.gz* archive. 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.

## Tobago 6.3.0 Distribution

Release notes can be found in
[Jira](https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310273&version=12354164)

|                       | Type   | File                                                                                                          | Checksum                                                                                               | Signature                                                                                            |
|-----------------------|--------|---------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|
| MyFaces Tobago        | tar.gz | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/binaries/myfaces-tobago-6.3.0-dist.tar.gz)      | [Checksum](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-6.3.0-dist.tar.gz.sha256)      | [Signature](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-6.3.0-dist.tar.gz.asc)      |
| MyFaces Tobago        | zip    | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/binaries/myfaces-tobago-6.3.0-dist.zip)         | [Checksum](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-6.3.0-dist.zip.sha256)         | [Signature](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-6.3.0-dist.zip.asc)         |
| MyFaces Tobago Source | zip    | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/source/myfaces-tobago-6.3.0-source-release.zip) | [Checksum](https://downloads.apache.org/myfaces/source/myfaces-tobago-6.3.0-source-release.zip.sha256) | [Signature](https://downloads.apache.org/myfaces/source/myfaces-tobago-6.3.0-source-release.zip.asc) |

## Tobago 5.11.0 Distribution

Release notes can be found in
[Jira](https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310273&version=12354165)

|                       | Type   | File                                                                                                           | Checksum                                                                                                | Signature                                                                                             |
|-----------------------|--------|----------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|
| MyFaces Tobago        | tar.gz | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/binaries/myfaces-tobago-5.11.0-dist.tar.gz)      | [Checksum](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-5.11.0-dist.tar.gz.sha256)      | [Signature](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-5.11.0-dist.tar.gz.asc)      |
| MyFaces Tobago        | zip    | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/binaries/myfaces-tobago-5.11.0-dist.zip)         | [Checksum](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-5.11.0-dist.zip.sha256)         | [Signature](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-5.11.0-dist.zip.asc)         |
| MyFaces Tobago Source | zip    | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/source/myfaces-tobago-5.11.0-source-release.zip) | [Checksum](https://downloads.apache.org/myfaces/source/myfaces-tobago-5.11.0-source-release.zip.sha256) | [Signature](https://downloads.apache.org/myfaces/source/myfaces-tobago-5.11.0-source-release.zip.asc) |

## Tobago 4.6.0 Distribution

Release notes can be found in
[Jira](https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310273&version=12352084)

|                       | Type   | File                                                                                                          | Checksum                                                                                               | Signature                                                                                            |
|-----------------------|--------|---------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|
| MyFaces Tobago        | tar.gz | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/binaries/myfaces-tobago-4.6.0-dist.tar.gz)      | [Checksum](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-4.6.0-dist.tar.gz.sha256)      | [Signature](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-4.6.0-dist.tar.gz.asc)      |
| MyFaces Tobago        | zip    | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/binaries/myfaces-tobago-4.6.0-dist.zip)         | [Checksum](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-4.6.0-dist.zip.sha256)         | [Signature](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-4.6.0-dist.zip.asc)         |
| MyFaces Tobago Source | zip    | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/source/myfaces-tobago-4.6.0-source-release.zip) | [Checksum](https://downloads.apache.org/myfaces/source/myfaces-tobago-4.6.0-source-release.zip.sha256) | [Signature](https://downloads.apache.org/myfaces/source/myfaces-tobago-4.6.0-source-release.zip.asc) |

## Tobago 2.5.1 Distribution

Release notes can be found in
[Jira](https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310273&version=12353364)

|                       | Type   | File                                                                                                          | Checksum                                                                                               | Signature                                                                                            |
|-----------------------|--------|---------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|
| MyFaces Tobago        | tar.gz | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/binaries/myfaces-tobago-2.5.1-dist.tar.gz)      | [Checksum](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-2.5.1-dist.tar.gz.sha256)      | [Signature](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-2.5.1-dist.tar.gz.asc)      |
| MyFaces Tobago        | zip    | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/binaries/myfaces-tobago-2.5.1-dist.zip)         | [Checksum](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-2.5.1-dist.zip.sha256)         | [Signature](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-2.5.1-dist.zip.asc)         |
| MyFaces Tobago Source | zip    | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/source/myfaces-tobago-2.5.1-source-release.zip) | [Checksum](https://downloads.apache.org/myfaces/source/myfaces-tobago-2.5.1-source-release.zip.sha256) | [Signature](https://downloads.apache.org/myfaces/source/myfaces-tobago-2.5.1-source-release.zip.asc) |

## Latest Source Code from GIT Repository

The source code is available on
[Github](https://github.com/apache/myfaces-tobago) and Apache
[Gitbox](https://gitbox.apache.org/repos/asf?p=myfaces-tobago.git).

## Archive of Old Releases

Older releases are available in the Apache
[archive](https://archive.apache.org/dist/myfaces/).
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 SHA-256.
This verification ensures the
file was not corrupted during the download or mirroring process.

To verify the hash signature on the files, you need to use a program
called e. g. *sha*, *shasum*, which is
included in many UNIX distributions and macOS.
It is also available for Windows.

## Verifying Signatures

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

First download the Apache MyFaces
[KEYS](https://www.apache.org/dist/myfaces/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.

You need an installation of e. g. OpenPGP or GPG to check the files. More information you'll find on the
Apache [verification](https://www.apache.org/info/verification.html#CheckingSignatures)
site.

Then verify the signatures for all downloaded files. With gpg for the dist.tar.gz it looks like

```
$ TOBAGO_VERSION=5.4.0
$ gpg --import KEYS
$ gpg --verify myfaces-tobago-$TOBAGO_VERSION-dist.tar.gz.asc myfaces-tobago-$TOBAGO_VERSION-dist.tar.gz
```
