> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hedera.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Local Network

<Warning>
  **Hiero Local Node Deprecation (September 2026)**
  Hiero Local Node is entering a 6-month deprecation period. Support ends September 2026. Migrate local testing and CI workflows to [Solo](https://solo.hiero.org/docs/) before then. [Learn more](https://hedera.com/blog/hiero-local-node-deprecation-6-month-transition-to-solo/).
</Warning>

While you are developing your application, you can use the Hedera-supported networks (previewnet and testnet) to test against. You can also run your own local network — a consensus node and mirror node on your machine — for development without testnet rate limits, resets, or faucet dependencies.

With a local network set up, you can:

* Create and submit transactions and queries to a consensus node
* Interact with the mirror node via REST APIs

## Recommended: Solo

[Solo](https://solo.hiero.org/docs/) is the recommended way to run a local Hedera network. It deploys a full stack — consensus node, mirror node, JSON-RPC relay, and block explorer — and is compatible with all Hiero SDKs.

<CardGroup cols={2}>
  <Card title="Get started with Solo" href="https://solo.hiero.org/docs/simple-solo-setup/quickstart/" arrow>
    Install Solo and start a local network.
  </Card>

  <Card title="Using Solo with Hiero SDKs" href="https://solo.hiero.org/docs/using-solo/using-solo-with-hiero-sdks/" arrow>
    Point the JavaScript, Java, or Go SDK at your Solo network.
  </Card>
</CardGroup>

The SDK connection pattern is the same as shown below — `Client.forNetwork()` and `Client.setMirrorNetwork()` — only the endpoint addresses differ. See [Using Solo with Hiero SDKs](https://solo.hiero.org/docs/using-solo/using-solo-with-hiero-sdks/) for the host and port values for your Solo deployment.

## Local Node (deprecated)

<Warning>
  The walkthrough below uses Hiero Local Node, which is in a 6-month deprecation period ending September 2026. The steps remain valid until then, but new projects should use [Solo](#recommended-solo) instead.
</Warning>

### 1. Set Up your local network

Set-up your local network by following the instructions found in the [readme](https://github.com/hiero-ledger/hiero-local-node#docker) of the `hedera-local-node` project. This will create a Hedera network composed of one consensus node and one mirror node. The consensus node will process incoming transactions and queries. The mirror node stores the history of transactions. Both nodes are created at startup.

### 2. Configure your network

Once you have your local network up and running, you will need to configure your Hedera client to point to your local network in your project of choice. Your project should have your language specific Hedera SDK as a dependency and imported into your project. You may reference the environment setup instructions if you don't know how.

Your local network IP address and port will be `127.0.0.1:50211` and your local mirror node IP and port will be `127.0.0.1:5600`. The consensus node account ID is `0.0.3`. This is the node account ID that will receive your transaction and query requests. It is recommended to store these variables in an environment or config file. These values will be hard-coded in the example for demonstration purposes.

Configure your local network by using `Client.forNetwork()`. This allows you to set a custom consensus network by providing the IP address and port. `Client.setMirrorNetwork()` allows you to set a custom mirror node network by providing the IP address and port.

<CodeGroup>
  ```java Java theme={null}
  //Create your local client
  Client client = Client.forNetwork(Collections.singletonMap("127.0.0.1:50211", AccountId.fromString("0.0.3"))).setMirrorNetwork(List.of("127.0.0.1:5600"));
  ```

  ```javascript JavaScript theme={null}
  //Create your local client
  const node = {"127.0.0.1:50211": new AccountId(3)};
  const client = Client.forNetwork(node).setMirrorNetwork("127.0.0.1:5600");
  ```

  ```go Go theme={null}
  //Create your local client
  node := make(map[string]hedera.AccountID, 1)
  node["127.0.0.1:50211"] = hedera.AccountID{Account: 3}

  mirrorNode := []string{"127.0.0.1:5600"}

  client := hedera.ClientForNetwork(node)
  client.SetMirrorNetwork(mirrorNode)
  ```
</CodeGroup>

### 3. Set your local node transaction fee paying account

You will need an account ID and key to pay for the [fees](/learn/networks/mainnet/fees) associated with each transaction and query that is submitted to your local network. You will use the account ID and key provided by the local node on startup to set up your operator account ID and key. The operator is the default account that pays for transaction and query fees.

| **Account ID**  | `0.0.2`                                                                                            |
| --------------- | -------------------------------------------------------------------------------------------------- |
| **Private Key** | `302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137` |

<Danger>
  **Note**: It is not good practice to post your private keys in any public place. These keys are provided only for development and testing purposes only. They do not exist on any production networks.
</Danger>

<CodeGroup>
  ```java Java wrap theme={null}
  client.setOperator(AccountId.fromString("0.0.2"), PrivateKey.fromString("302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137"));
  ```

  ```javascript JavaScript wrap theme={null}
  client.setOperator(AccountId.fromString("0.0.2"),PrivateKey.fromString("302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137"));
  ```

  ```go Go wrap theme={null}
  accountId, err := hedera.AccountIDFromString("0.0.2")
  privateKey, err := hedera.PrivateKeyFromString(
  "302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137")

  client.SetOperator(accountId, privateKey)
  ```
</CodeGroup>

### 4. Submit your transaction

Submit a transaction that will create a new account in your local network. The console should print out the new account ID. In this example, we are using the same key as the transaction fee paying account as the key for the new account. You can also create a [new key](/native/keys/generate-key-pair) if you wish.

<CodeGroup>
  ```java Java theme={null}
  //Submit a transaction to your local node
  TransactionResponse newAccount = new AccountCreateTransaction()
          .setKeyWithoutAlias(PrivateKey.fromString("302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137"))
          .setInitialBalance(new Hbar(1))
          .execute(client);
                  
  //Get the receipt
  TransactionReceipt receipt = newAccount.getReceipt(client);
          
  //Get the account ID
  AccountId newAccountId = receipt.accountId;
  System.out.println(newAccountId);
  ```

  ```javascript JavaScript theme={null}
  //Submit a transaction to your local node
  const newAccount = await new AccountCreateTransaction()
          .setKeyWithoutAlias(PrivateKey.fromString("302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137"))
          .setInitialBalance(new Hbar(1))
          .execute(client);

  //Get receipt
  const receipt = await newAccount.getReceipt(client);

  //Get the account ID
  const newAccountId = receipt.accountId;
  console.log(newAccountId);
  ```

  ```go Go theme={null}
  //Submit a transaction to your local node
  newAccount, err := hedera.NewAccountCreateTransaction().
  	SetKeyWithoutAlias(privateKey).
      	SetInitialBalance(hedera.NewHbar(1)).
  	Execute(client)

  if err != nil {
  	println(err.Error(), ": error getting balance")
  	return
  }

  //Get receipt
  receipt, err := newAccount.GetReceipt(client)

  //Get the account ID
  newAccountId := receipt.AccountID
  fmt.Print(newAccountId)
  ```
</CodeGroup>

### 5. View your transaction

You can view the executed transaction by querying your local mirror node.

The local mirror node endpoint URL is `http://localhost:5551/`.

You can view the transactions that were submitted to your local node by submitting this request:

```http theme={null}
http://localhost:5551/api/v1/transactions
```

The list of supported mirror node REST APIs can be found [here](/reference/rest-api). You have now set-up your local environment. Check out the following links for more examples.

<Columns cols={2}>
  <Card title="Tutorials" arrow href="/native/tutorials/getting-started/create-fund-account" />

  <Card title="SDKs" arrow href="/native/fundamentals" />
</Columns>

### Code Check ✅

<CodeGroup>
  ```java Java wrap theme={null}
  import com.hedera.hashgraph.sdk.*;
  import java.io.IOException;
  import java.util.Collections;
  import java.util.List;
  import java.util.concurrent.TimeoutException;

  public class LocalNode {
      public static void main(String[] args) throws TimeoutException, PrecheckStatusException, ReceiptStatusException, InterruptedException, IOException {

          //Create your local client
          Client client = Client.forNetwork(Collections.singletonMap("127.0.0.1:50211", AccountId.fromString("0.0.3"))).setMirrorNetwork(List.of("127.0.0.1:5600"));

          //Set the transaction fee paying account
          client.setOperator(AccountId.fromString("0.0.2"), PrivateKey.fromString("302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137"));
          
          //Submit a transaction to your local node
          TransactionResponse newAccount = new AccountCreateTransaction()
                  .setKeyWithoutAlias(PrivateKey.fromString("302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137"))
                  .setInitialBalance(new Hbar(1))
                  .execute(client);
         
          //Get the receipt     
          TransactionReceipt receipt = newAccount.getReceipt(client);
          
          //Get the account ID
          AccountId newAccountId = receipt.accountId;
          System.out.println(newAccountId);
      }
  }
  ```

  ```javascript JavaScript theme={null}
  const {
      Client,
      PrivateKey,
      Hbar,
      AccountId,
      AccountCreateTransaction,
  } = require("@hashgraph/sdk");

  async function main() {

          //Create your local client
          const node = {"127.0.0.1:50211": new AccountId(3)}
          const client = Client.forNetwork(node).setMirrorNetwork("127.0.0.1:5600");

          //Set the transaction fee paying account
          client.setOperator(AccountId.fromString("0.0.2"),PrivateKey.fromString("302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137"));

          //Submit a transaction to your local node
          const newAccount = await new AccountCreateTransaction()
                  .setKeyWithoutAlias(PrivateKey.fromString("302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137"))
                  .setInitialBalance(new Hbar(1))
                  .execute(client);

          //Get receipt
          const receipt = await newAccount.getReceipt(client);

          //Get the account ID
          const newAccountId = receipt.accountId;
          console.log(newAccountId);
      }
  void main();
  ```

  ```go Go theme={null}
  package main

  import (
  	"fmt"

  	hedera "github.com/hiero-ledger/hiero-sdk-go/v2/sdk"
  )

  func main() {
  	//Create your local node client
  	node := make(map[string]hedera.AccountID, 1)
  	node["127.0.0.1:50211"] = hedera.AccountID{Account: 3}

  	mirrorNode := []string{"127.0.0.1:5600"}

  	client := hedera.ClientForNetwork(node)
  	client.SetMirrorNetwork(mirrorNode)

  	//Set the transaction fee paying account
  	accountId, err := hedera.AccountIDFromString("0.0.2")
  	privateKey, err := hedera.PrivateKeyFromString("302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137")
  	client.SetOperator(accountId, privateKey)

  	//Submit a transaction to your local node
  	newAccount, err := hedera.NewAccountCreateTransaction().
  		SetKeyWithoutAlias(privateKey).
      		SetInitialBalance(hedera.NewHbar(1)).
  		Execute(client)

  	if err != nil {
  		println(err.Error(), ": error getting balance")
  		return
  	}

  	//Get receipt
  	receipt, err := newAccount.GetReceipt(client)

  	//Get the account ID
  	newAccountId := receipt.AccountID
  	fmt.Print(newAccountId)
  }
  ```
</CodeGroup>
