---
hide:
  - navigation

license: |
  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
      http://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.
---

## Versions

The latest version is 0.2.0.

### 0.2.0-incubating (2023-03-01)

[release note](community/release_notes/release_note_0.2.0.md)

|             |                                                           Download from ASF                                                           |                                                                   Checksum                                                                    | Signature |
|:-----------:|:-------------------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------------------------------------------------------------------------------------:|:---------:|
| Source Code | [src](https://www.apache.org/dyn/closer.lua/incubator/celeborn/celeborn-0.2.0-incubating/apache-celeborn-0.2.0-incubating-source.tgz) | [sha512](https://www.apache.org/dyn/closer.lua/incubator/celeborn/celeborn-0.2.0-incubating/apache-celeborn-0.2.0-incubating-src.tgz.sha512)  | [asc](https://www.apache.org/dyn/closer.lua/incubator/celeborn/celeborn-0.2.0-incubating/apache-apache-celeborn-0.2.0-incubating-src.tgz.asc) |
| Binary      | [bin](https://www.apache.org/dyn/closer.lua/incubator/celeborn/celeborn-0.2.0-incubating/apache-celeborn-0.2.0-incubating-bin.tgz)    | [sha512](https://www.apache.org/dyn/closer.lua/incubator/celeborn/celeborn-0.2.0-incubating/apache-celeborn-0.2.0-incubating-bin.tgz.sha512)  | [asc](https://www.apache.org/dyn/closer.lua/incubator/celeborn/celeborn-0.2.0-incubating/apache-apache-celeborn-0.2.0-incubating-bin.tgz.asc) |

### Past releases

Past celeborn releases are archived and can be found here:

[Apache Archives](https://archive.apache.org/dist/incubator/celeborn/)

### Old releases

Before entering Apache Incubator, it was named as Remote Shuffle Service.

[GitHub releases](https://github.com/apache/incubator-celeborn/releases)


## Verify the integrity

[Public keys](https://downloads.apache.org/incubator/celeborn/KEYS)

[Instructions](https://www.apache.org/info/verification.html)

## Security

For security issues, please refer to [https://www.apache.org/security/](https://www.apache.org/security/)
