---
title: Sign ICLA Guide
sidebar_position: 4
description: Sign ICLA Guide
author: "xiaoyu"
categories: "Apache ShenYu"
tags: ["ICLA"]
date: 2021-05-18
cover: "/img/architecture/shenyu-framework.png"
---

## Apache Sign ICLA Guide {#apache-sign-icla-guide}

Apache CLA short for Apache Contributor License Agreement, the purpose of this agreement is to clearly define the terms under which intellectual property has been contributed to the ASF and thereby allow us to defend the project should there be a legal dispute regarding the software at some future time.
A signed ICLA is required to be on file before an individual is given commit rights to any ASF project.

If you have already signed an Apache ICLA, no need to send an email. As you have already submitted an ICLA under your public name, no need to resubmit it. If you have never signed an ICLA, please indicate this in your email, and PMC can apply for this account directly.

The process of submitting ICLA are:

**1. First, click the link [Apache Licenses](https://www.apache.org/licenses/#clas) and find CLAs under the Contributor License Agreements section.**

![](/img/shenyu/icla/page_link_v2.0.png)

**2. At the top of the page, there are two download links choose ICLA(Individual Contributor License Agreement) and download it.**

![](/img/shenyu/icla/download_v2.0.png)

**3. Open the PDF, and fill in the following columns in English.**

> To be noticed:
>
> - Tick the family first box
> - Leave a space between family name and last name, remember capitalize the first letter, please write family name at first. Leave the public name empty or add a name with more than a single word; this is not an id
> - Include your complete postal address where you receive postal mail, not a conference room or corporate address
> - If you sign with a gpg signature, be sure that the email in the public key matches the email on the form
> - Preferred Apache id(s) is a required field for committers.

![](/img/shenyu/icla/write_info_v2.0.png)

**4. The signature at the bottom of the document:**
Apache only accept hand-written signature or [PDF signature software](https://pdf.yozocloud.cn/p/pdfaddsign)

![](/img/shenyu/icla/hand_write.png)

**5.After signing, send the icla.pdf command as `username-icla.pdf` to the email address `secretary@apache.org` and copy to `private@shenyu.apache.org`, Do not copy any other person or list.**

**6.After the email is sent successfully, Apache ShenYu official community informs**

## Manual signature and PDF software signature Demo {#manual-signature-and-pdf-software-signature-demo}

> PDF online signature
>
> - Download the PDF source file
> - Fill in items and personal information
> - Open PDF and sign URL online
> - Signature
> - Save and download signed pdf fils
> - Send to the specified mailbox

![](/img/shenyu/icla/example_v2.0.png)

![](/img/shenyu/icla/pls_sign_v2.0.png)

> Handwritten signature
>
> - Download the PDF source file
> - Fill in items and personal information
> - Print documents
> - Handwritten signature
> - Convert photos into **single pdf** file
> - Send to the specified mailbox

Note: Handwritten signature due to document upgrade, content reference PDF

![](/img/shenyu/icla/example_v2.0.png)

![](/img/shenyu/icla/pls_sign_v2.0.png)

## Email Template {#email-template}

![](/img/shenyu/icla/email_v2.0.png)
![](/img/shenyu/icla/email_template.png)

addressee

```
secretary@apache.org
```

template

```
Hello Apache,
    I am willing contribute to the ASF. The attachment is my ICLA information. My Github account is : https://github.com/xxxx.
Thanks !
```
