# 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.0.0-beta-1 Distribution

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

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



## Tobago 5.7.2 Distribution

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

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

## Tobago 5.7.1 Distribution

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

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

## Tobago 5.7.0 Distribution

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

|   | Type | File                                                                                                          | Checksum                                                                                               | Signature                                                                                            |
|---|---|---------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|
| MyFaces Tobago | tar.gz     | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/binaries/myfaces-tobago-5.7.0-dist.tar.gz)      | [Checksum](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-5.7.0-dist.tar.gz.sha256)      | [Signature](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-5.7.0-dist.tar.gz.asc)      |
| MyFaces Tobago | zip        | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/binaries/myfaces-tobago-5.7.0-dist.zip)         | [Checksum](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-5.7.0-dist.zip.sha256)         | [Signature](https://downloads.apache.org/myfaces/binaries/myfaces-tobago-5.7.0-dist.zip.asc)         |
| MyFaces Tobago Source | zip | [Download Site](https://www.apache.org/dyn/closer.lua/myfaces/source/myfaces-tobago-5.7.0-source-release.zip) | [Checksum](https://downloads.apache.org/myfaces/source/myfaces-tobago-5.7.0-source-release.zip.sha256) | [Signature](https://downloads.apache.org/myfaces/source/myfaces-tobago-5.7.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.0 Distribution

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

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