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 v9.1.4, released on 2022-12-15.
In addition, we continue to support the v8.1.x LTS release train, currently v8.1.6,
which was released on 2022-12-15. 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 v9.x Release -- 9.1.4 # {#9.1.4}

 Apache Traffic Server v9.1.4 was released on December 15th, 2022.
 [[`PGP`](https://www.apache.org/dist/trafficserver/trafficserver-9.1.4.tar.bz2.asc)]
 [[`SHA512`](https://www.apache.org/dist/trafficserver/trafficserver-9.1.4.tar.bz2.sha512)]

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

v9.1.4 is our latest stable release. Additional details for this release are in the
[CHANGELOG](https://raw.githubusercontent.com/apache/trafficserver/9.1.x/CHANGELOG-9.1.4)
and the the related [Github Issues and PRs](https://github.com/apache/trafficserver/pulls?q=is:closed+is:pr+milestone:9.1.4).

For details on the v9.x release, please see
[9.1.x News](https://docs.trafficserver.apache.org/en/9.1.x/release-notes/whats-new.en.html). There are also
details about [upgrading to 9.x](https://docs.trafficserver.apache.org/en/9.1.x/release-notes/upgrading.en.html).

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

 Apache Traffic Server v8.1.6 was released on December 15th, 2022.
 [[`PGP`](https://www.apache.org/dist/trafficserver/trafficserver-8.1.6.tar.bz2.asc)]
 [[`SHA512`](https://www.apache.org/dist/trafficserver/trafficserver-8.1.6.tar.bz2.sha512)]

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

v8.1.6 is our latest stable release for the 8.x release. Additional details for this release are in the
[CHANGELOG](https://raw.githubusercontent.com/apache/trafficserver/8.1.x/CHANGELOG-8.1.6)
and the the related [Github Issues and PRs](https://github.com/apache/trafficserver/pulls?q=is:closed+is:pr+milestone:8.1.6).

# Archived Releases

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

<!-- test -->
