# What is Appium

**Appium** is an *open source* test automation tool for mobile applications. It allows you to test all the three types of mobile applications: *native*, *hybrid* and *mobile web*.

It also allows you to run the automated tests on actual devices, emulators and simulators.

Today when every mobile app is made in at least two platform iOS and Android, you for sure need a tool, which allows testing cross platform. Having two different frameworks for the same app increases the cost of the product and time to maintain it as well.

The basic philosophy of Appium is that you should be able to reuse code between iOS and Android, and that’s why when you see the API they are same across iOS and android. Another important thing to highlight here is that unlike Calabash, Appium doesn’t modify your app or need you to even recompile the app.

Appium let’s you choose the language you want to write your test in. It doesn’t dictate the language or framework to be used.

## Architecture <a href="#architecture" id="architecture"></a>

So how does Appium do all this? Let’s try to understand what happens behind the scenes.

When you download the Appium app you are basically downloading the server. The server is written in Node.js and implements the Selenium WebDriver. It allows one to use available WebDriver client to fire your tests. And then your mobile app acts precisely like a web app where the DOM is represented by View hierarchy.

So this server basically exposes REST api which performs the following actions:

```
1) Receives connection from client
2) Listen command
3) Execute command
4) Respond back the command execution status
```

In terms of architecture diagram, below is how Appium can be explained.

![Screen](/files/-M4S6bF8ubZHeD3Np03Z)


---

# 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://n-saikiran.gitbook.io/appium-mobile-automation/what-is-appium.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.
