# Native IoTeX Development

{% hint style="warning" %}
This documentation is provided for backward compatibility support. IoTeX is fully Ethereum-compatible; therefore, developers are encouraged to utilize Ethereum tools to build dApps on IoTeX.
{% endhint %}

## Overview of Antenna SDK

**Antenna** is the IoTeX native SDK, enabling direct interaction with a local or remote IoTeX node using a gRPC connection. It is available for the most popular programming languages. The key difference between developing with Antenna versus the Web3 SDK is that Antenna wraps the full gRPC Native API of the IoTeX protocol and uses the native representation of IoTeX addresses.

While IoTeX fully supports the Ethereum API, allowing the use of Web3 tools for dApp development, IoTeX's architecture is more complex than Ethereum's. This makes Antenna the necessary choice when leveraging IoTeX's unique features. For example, concepts such as "Delegates," "Block Producers," "Staking Transactions," "Buckets," and "Voting" have no equivalents in Ethereum. Therefore, to utilize these features in your dApp, you need to use Antenna instead of tools like Web3.js.

The **Example Code** section includes samples for each supported language.

## Supported Languages <a href="#supported-languages" id="supported-languages"></a>

### antenna-js (Javascript)

[ GitHub](https://github.com/iotexproject/iotex-antenna)

In your JS project root, use `npm install` or `yarn add`.

```
npm install iotex-antenna
```

or add the following line to your html.

```
<script src="https://cdn.jsdelivr.net/npm/iotex-antenna@0.29.1/lib/iotex-antenna.browser.min.js"></script>
```

A few useful links:

* **Reference Code**: the docs section with reference implementation for most common blockchain requirements.
* **Integrate IoPay Wallet**: the docs section explaining how to integrate your web client with [IoPay Wallet](https://iopay.iotex.io/)
* [Antenna-JS Reference](https://iotexproject.github.io/iotex-antenna/): the API reference documentation for Antenna-JS

### antenna-java (java):&#x20;

[GitHub](https://github.com/iotexproject/iotex-antenna-java)

### Install By Maven <a href="#install-by-maven" id="install-by-maven"></a>

```
<dependency>
  <groupId>com.github.iotexproject</groupId>
  <artifactId>iotex-antenna-java</artifactId>
  <version>0.5.8</version>
</dependency>
```

### Install by Gradle <a href="#install-by-gradle" id="install-by-gradle"></a>

```
implementation 'com.github.iotexproject:iotex-antenna-java:0.5.8'
```

### antenna-go (go lang):&#x20;

[GitHub](https://github.com/iotexproject/iotex-antenna-go)

In your Golang project root, use `go dep` or `go mod`.

```
go get -u github.com/iotexproject/iotex-antenna-go
```

A few useful links:

* [Reference Code](https://docs.iotex.io/developer/sdk/account-create#golang): the docs section with reference implementation for most common blockchain requirements.
* [Code Examples](https://docs.iotex.io/developer/examples/chain-info) section for most common SDK use case in Go.

### antenna-swift (iOS):&#x20;

[GitHub](https://github.com/iotexproject/iotex-antenna-swift)

In your JS project root, use `npm install` or `yarn add`.

```
pod 'iotex-antenna-swift', '~> 0.1'
```

A few useful links:

* [Reference Code](https://docs.iotex.io/developer/sdk/account-create#swift): the docs section with reference implementation for most common blockchain requirements.

### antenna-embedded (C):&#x20;

[GitHub](https://github.com/iotexproject/iotex-antenna-embedded)

Download [the latest release](https://github.com/iotexproject/iotex-antenna-embedded/releases) of Antenna Embedded, then in your C file include the following:

```c
#include "u128.h"
#include "iotex_emb.h"

int main(int argc, char **argv) {

    int ret;
    iotex_st_config config = {0};

    config.ver = 1;
    config.cert_file = "cacert.pem";

    /* Initialize Antenna-c lib */
    if ((ret = iotex_emb_init(&config)) != 0) {
        fprintf(stderr, "Initialize iotex emb failed, error code: %d\n", ret);
        return -1;
    }

    // Interact with the blockchain
    // ...
```

## Features <a href="#features" id="features"></a>

* **Crypto**: Provides cryptographic functions to generate public/private keys, sign transactions and data, and other utility functions.
* **RPC-Methods**: Allows calling any RPC method provided by an IoTeX Blockchain Gateway.
* **Account**: Functions to create and manage blockchain accounts.
* **Action**: Enables creation and management of blockchain actions.
* **Contract**: Facilitates interaction with contracts deployed on the IoTeX Blockchain, given the contract address and ABI.
* **XRC20**: Supports sending, receiving, and querying wallets for XRC20 tokens deployed on the IoTeX Blockchain.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.iotex.io/depin/builders/reference-docs/native-iotex-development.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
