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.1, released on 2021-11-2.
In addition, we continue to support the v8.1.x LTS release train, currently v8.1.3,
which was released on 2021-11-02. 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.2 # {#9.1.2}

 Apache Traffic Server v9.1.2 was released on March 11th, 2022.
 [[`PGP`](https://www.apache.org/dist/trafficserver/trafficserver-9.1.2.tar.bz2.asc)]
 [[`SHA512`](https://www.apache.org/dist/trafficserver/trafficserver-9.1.2.tar.bz2.sha512)]

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

v9.1.2 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.2)
and the the related [Github Issues and PRs](https://github.com/apache/trafficserver/milestone/55?closed=1).

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.4 # {#8.1.4}

 Apache Traffic Server v8.1.4 was released on March 21st, 2022.
 [[`PGP`](https://www.apache.org/dist/trafficserver/trafficserver-8.1.4.tar.bz2.asc)]
 [[`SHA512`](https://www.apache.org/dist/trafficserver/trafficserver-8.1.4.tar.bz2.sha512)]

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

v8.1.4 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.4)
and the the related [Github Issues and PRs](https://github.com/apache/trafficserver/milestone/54?closed=1).

# Archived Releases

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

<!-- test -->
