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.2.0, released on 2023-01-23.
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.2.0 # {#9.2.0}

 Apache Traffic Server v9.2.0 was released on January 23rd, 2023.
 [[`PGP`](https://www.apache.org/dist/trafficserver/trafficserver-9.2.0.tar.bz2.asc)]
 [[`SHA512`](https://www.apache.org/dist/trafficserver/trafficserver-9.2.0.tar.bz2.sha512)]

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

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

For details on the v9.x release, please see
[9.2.x News](https://docs.trafficserver.apache.org/en/9.2.x/release-notes/whats-new.en.html)
(there's a new section specific to v9.2.x). There are also
details about [upgrading to 9.x](https://docs.trafficserver.apache.org/en/9.2.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 -->
