Hello World Quickstart
This quickstart guide shows you how to send transactions to a blockchain node running Rell and retrieve information from it using the postchain-client library. The postchain-client allows you to connect the frontend of your dapp to the backend.
You can get the complete Rell backend from the Hello World repository, or follow this guide to add the client integration. For the complete backend setup, see Build and run the Hello World dapp.
This tutorial assumes you have a Rell backend running. If you don't have one yet, see Build and run the Hello World dapp with Chromia CLI to create the backend first. You can connect the frontend at a later stage.
Prerequisites
- Node.js 18+
 - Your Hello World backend is running and you have the Blockchain RID
 
Create the client project
Create a separate TypeScript project and initialize it.
mkdir my-rell-client && cd my-rell-client
npm init -y
npm install postchain-client --save
npm install -D typescript @types/node tsx
npx tsc --init
mkdir src
Client setup
The code establishes the client connections, creates, signs, and posts a transaction to the blockchain node, and retrieves information through a query. For detailed explanation of the code setup, see JavaScript/TypeScript client reference.
Create my-rell-client/src/index.ts and paste in the code below, replacing <BlockchainRID> with your
Blockchain RID obtained from the node output. For information on finding
Blockchain RID, see
Build and run the Hello World dapp with Chromia CLI.
import { createClient } from "postchain-client";
async function simpleClient() {
  // Key pair (DEV-ONLY, replace for anything beyond localhost)
  const adminPubkey = Buffer.from("031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f", "hex");
  const adminPrivkey = Buffer.from("0101010101010101010101010101010101010101010101010101010101010101", "hex");
  // Connection setup
  const nodeUrl = "http://localhost:7740/"; // Using default postchain node REST API port
  const blockchainRid = "<BlockchainRID>"; // Dapp Blockchain RID
  const client = await createClient({
    nodeUrlPool: [nodeUrl],
    blockchainRid,
  });
  // Transaction
  /*const { status, statusCode, transactionRid } = */ await client.signAndSendUniqueTransaction(
    {
      operations: [
        {
          name: "set_name",
          args: ["Developer"],
        },
      ],
      signers: [adminPubkey],
    },
    { privKey: adminPrivkey, pubKey: adminPubkey }
  );
  // Query
  const result = await client.query("hello_world");
  console.log(result); // Hello Developer!
}
simpleClient().catch((e) => {
  console.error(e);
});
This example uses Node's built-in Buffer. In a Node.js environment, no extra configuration is needed. If you run the
same code in a browser/bundler (for example Vite or webpack 5), you will hit:
ReferenceError: Buffer is not defined
To fix this, install the buffer package and add at the top of your code:
import { Buffer } from "buffer";
(globalThis as any).Buffer = Buffer;
This makes Buffer available globally, just like in Node.js.
Understanding the Rell backend
The client code works with the operation and query specified in the Rell file main.rell. If you created your backend
using the Hello World guide, the code in the main.rell file is as
follows:
module;
object my_name {
  mutable name = "World";
}
operation set_name(name) {
  my_name.name = name;
}
query hello_world() = "Hello %s!".format(my_name.name);
The project structure for the client setup should be as follows:
my-rell-client
    |--node_modules
    |--src
    |   |--index.ts
    |--package-lock.json
    |--package.json
    |--tsconfig.json
Run client code
From the project root:
npx tsx src/index.ts
After running the code, you should see:
Hello Developer!
Congratulations! With the help of the postchain-client library, you have successfully sent transactions and retrieved information from a blockchain node running Rell.
Next steps
- Explore the JavaScript/TypeScript client reference for advanced features
 - Learn about queries and transactions in the cookbook
 - Check out the React Kit for easier React integration