# Packages structure

Dedot's source code is splitted into multiple packages for different purposes, all of the packages and their purposes are listing in the table below.

### Packages

<table><thead><tr><th width="219">Name</th><th>Description</th></tr></thead><tbody><tr><td><a href="https://github.com/dedotdev/dedot/tree/main/packages/api">@dedot/api</a></td><td>High-level abstraction apis (clients, API executors...)</td></tr><tr><td><a href="https://github.com/dedotdev/dedot/tree/main/packages/providers">@dedot/providers</a></td><td>Providers for connection to JSON-RPC servers (WsProvider, SmoldotProvider)</td></tr><tr><td><a href="https://github.com/dedotdev/dedot/tree/main/packages/types">@dedot/types</a></td><td>Generic shared types across the packages</td></tr><tr><td><a href="https://github.com/dedotdev/dedot/tree/main/packages/runtime-specs">@dedot/runtime-specs</a></td><td>Explicit Runtime API definitions to use for chains only supports Metadata V14</td></tr><tr><td><a href="https://github.com/dedotdev/dedot/tree/main/packages/shape">@dedot/shape</a></td><td>Basic codecs/shapes for scale-codec encode/decode</td></tr><tr><td><a href="https://github.com/dedotdev/dedot/tree/main/packages/contracts">@dedot/contracts</a></td><td>APIs to interact with ink! smart contracts</td></tr><tr><td><a href="https://github.com/dedotdev/dedot/tree/main/packages/codecs">@dedot/codecs</a></td><td>Known codecs for generic purposes ($Metadata, $AccountId32, $Extrinsic ...)</td></tr><tr><td><a href="https://github.com/dedotdev/dedot/tree/main/packages/utils">@dedot/utils</a></td><td>Useful utility functions</td></tr><tr><td><a href="https://github.com/dedotdev/dedot/tree/main/packages/storage">@dedot/storage</a></td><td>Storage API for different purposes (caching, ...)</td></tr><tr><td><a href="https://github.com/dedotdev/dedot/tree/main/packages/codegen">@dedot/codegen</a></td><td>Types &#x26; APIs generation engine for chaintypes &#x26; ink! smart contracts</td></tr><tr><td><a href="https://github.com/dedotdev/dedot/tree/main/packages/cli">@dedot/cli</a></td><td>Dedot's CLI</td></tr><tr><td><a href="https://github.com/dedotdev/dedot/tree/main/packages/merkleized-metadata">@dedot/merkleized-metadata</a></td><td><a href="https://polkadot-fellows.github.io/RFCs/approved/0078-merkleized-metadata.html#rfc-0078-merkleized-metadata">RFC-0078</a> Implementation, with utilities to calculate metadata hash/digest &#x26; proof for extrinsic, extrinsic payload... </td></tr><tr><td><a href="https://github.com/dedotdev/dedot/tree/main/packages/dedot">dedot</a></td><td>Umbrella package re-exporting primitives &#x26; APIs from other packages, including subpath packages</td></tr></tbody></table>

### `dedot` subpath packages

By default `dedot` package only re-exports primitives from `@dedot/api`, `@dedot/providers`, `@dedot/shape`, giving you enough APIs to connect to the network & making on-chain interactions. It also comes with a few subpath packages giving access to APIs to working with ink! contracts, known-codecs, utility functions...

<table><thead><tr><th width="250">Name</th><th>Description</th></tr></thead><tbody><tr><td><code>dedot</code></td><td>Re-exports <code>@dedot/api</code>, <code>@dedot/providers</code> &#x26; <code>@dedot/shape</code> packages</td></tr><tr><td><code>dedot/contracts</code></td><td>Re-exports <code>@dedot/contracts</code> package</td></tr><tr><td><code>dedot/codecs</code></td><td>Re-exports <code>@dedot/codecs</code> package</td></tr><tr><td><code>dedot/utils</code></td><td>Re-exports <code>@dedot/utils</code> package</td></tr><tr><td><code>dedot/types</code></td><td>Re-exports <code>@dedot/types</code> package</td></tr><tr><td><code>dedot/types/json-rpc</code></td><td>Re-exports <code>@dedot/types/json-rpc</code> package for Substrate JSON-RPC API types information (both new &#x26; legacy)</td></tr><tr><td><code>dedot/runtime-specs</code></td><td>Re-exports <code>@dedot/runtime-specs</code> package</td></tr><tr><td><code>dedot/shape</code></td><td>Re-exports <code>@dedot/shape</code> package</td></tr><tr><td><code>dedot/merkleized-metadata</code></td><td>Re-exports <code>@dedot/merkleized-metadata</code> package</td></tr></tbody></table>
