--- title: Introduction sidebar_label: Introduction sidebar_position: 0 slug: / --- import HighlightTag from '@site/src/components/HighlightTag'; # CosmWasm ICA Controller Welcome to the documentation for CosmWasm Interchain Accounts Controller. This document will guide you through understanding the [ICS-27](https://github.com/cosmos/ibc/tree/main/spec/app/ics-027-interchain-accounts) Interchain Accounts protocol and how to use `cw-ica-controller` to create and manage interchain accounts on any IBC enabled CosmWasm chain. The CosmWasm ICA Controller is a CosmWasm contract that implements the ICS-27 interchain accounts controller in pure Rust. It is designed to be used by other CosmWasm contracts to create and manage interchain accounts on the chain where the contract is deployed. ## High Level Overview The following diagram shows how `cw-ica-controller` works at a high level. ![High Level Overview](/img/cw-ica-controller.svg) The `cw-ica-controller` contract code is deployed on a chain that supports IBC CosmWasm. This chain does not need to support ICS-27 interchain accounts nor does it need to support any custom IBC bindings. Then when an external account or a contract instantiates a `cw-ica-controller` contract, the contract will initiate the ICS-27 handshake with a chain that supports ICS-27 interchain accounts based on the options provided by the caller. :::note The counterparty chain need not be a CosmWasm chain. It can be any chain that uses ibc-go and supports `ICS-27`. Such as CosmosHub, Osmosis, etc. ::: Then the rest of the ICS-27 handshake is completed by the relayers automatically. Both the hermes relayer and the go relayer support `ICS-27` interchain accounts. Once the handshake is complete, the `cw-ica-controller` contract makes a callback to the callback contract if one was provided during instantiation.