Title: Apache Traffic Server Downloads
Notice:    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
           .
             https://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.
RSS:       /rss/releases.rss



The latest stable release of Apache Traffic Server is 8.0.8, released on 2020-06-23.
In addition, we continue to support the v7.1.x LTS release train, currently v7.1.11
which was released on 2020-06-23. We follow the [Semantic Versioning](http://semver.org)
scheme. The goal is to release patch releases frequently, and minor releases as needed.
Within the major versions, all such patch and minor releases are all compatible.

When downloading from a mirror, please be sure to [verify the hash and OpenPGP
compatible signature](https://www.apache.org/info/verification.html).  To validate
the PGP signatures the [public keys from the release manager](https://www.apache.org/dist/trafficserver/KEYS)
will be needed.  You can also
[browse through all releases](https://archive.apache.org/dist/trafficserver/)
and hash signatures.

# Current v8.x Release -- 8.0.8 # {#8.0.8}

 Apache Traffic Server v8.0.8 was released on June 23rd, 2020.
 [[`PGP`](https://www.apache.org/dist/trafficserver/trafficserver-8.0.8.tar.bz2.asc)]
 [[`SHA512`](https://www.apache.org/dist/trafficserver/trafficserver-8.0.8.tar.bz2.sha512)]

 <a href="https://www.apache.org/dyn/closer.cgi/trafficserver/trafficserver-8.0.8.tar.bz2" class="download_ts">Traffic Server 8.0.8</a>

v8.0.8 is our latest stable release. Additional details for this release are in the
[CHANGELOG](https://raw.githubusercontent.com/apache/trafficserver/8.0.x/CHANGELOG-8.0.8)
and the the related [Github Issues and PRs](https://github.com/apache/trafficserver/milestone/37?closed=1).

For details on the v8.0.x release, please see
[8.0.x News](https://cwiki.apache.org/confluence/display/TS/What's+New+in+v8.0.x). There are also
details about [upgrading to 8.x](https://cwiki.apache.org/confluence/display/TS/Upgrading+to+v8.0).

# Current v7.x Release -- 7.1.11 # {#7.1.11}

 Apache Traffic Server v7.1.11 was released on June 23rd, 2020.
 [[`PGP`](https://www.apache.org/dist/trafficserver/trafficserver-7.1.11.tar.bz2.asc)]
 [[`SHA512`](https://www.apache.org/dist/trafficserver/trafficserver-7.1.11.tar.bz2.sha512)]

 <a href="https://www.apache.org/dyn/closer.cgi/trafficserver/trafficserver-7.1.11.tar.bz2" class="download_ts">Traffic Server 7.1.11</a>

v7.1.11 is our latest stable release. Additional details for this release are in the
[CHANGELOG](https://raw.githubusercontent.com/apache/trafficserver/7.1.x/CHANGELOG-7.1.11)
and the the related [Github Issues and PRs](https://github.com/apache/trafficserver/milestone/39?closed=1).

For details on the v7.1.x release train, please see
[7.1.x News](https://cwiki.apache.org/confluence/display/TS/What's+New+in+v7.1.x). There are also
details about [upgrading to 7.x](https://cwiki.apache.org/confluence/display/TS/Upgrading+to+v7.0).

# Archived Releases

## [Apache Traffic Server Archive](https://archive.apache.org/dist/trafficserver/)

<!-- test -->
