@resonatehq/sdk
    Preparing search index...

    @resonatehq/sdk

    resonate component banner

    Resonate TypeScript SDK

    cicd codecov License

    The Resonate TypeScript SDK enables developers to build reliable and scalable cloud applications across a wide variety of use cases.

    quickstart banner

    1. Install the Resonate Server & CLI
    brew install resonatehq/tap/resonate
    
    1. Install the Resonate SDK
    npm install @resonatehq/sdk
    
    1. Write your first Resonate Function

    A countdown as a loop. Simple, but the function can run for minutes, hours, or days, despite restarts.

    import { Resonate, type Context } from "@resonatehq/sdk";

    function* countdown(context: Context, count: number, delay: number) {
    for (let i = count; i > 0; i--) {
    // Run a function, persist its result
    yield* context.run((context: Context) => console.log(`Countdown: ${i}`));
    // Sleep
    yield* context.sleep(delay * 1000);
    }
    console.log("Done!");
    }
    // Instantiate Resonate
    const resonate = new Resonate({ url: "http://localhost:8001" });
    // Register the function
    resonate.register(countdown);

    Clone a working example repo

    1. Start the server
    resonate dev
    
    1. Start the worker
    npx ts-node countdown.ts
    
    1. Run the function

    Run the function with execution ID countdown.1:

    resonate invoke countdown.1 --func countdown --arg 5 --arg 60
    

    Result

    You will see the countdown in the terminal

    npx ts-node countdown.ts
    Countdown: 5
    Countdown: 4
    Countdown: 3
    Countdown: 2
    Countdown: 1
    Done!

    What to try

    After starting the function, inspect the current state of the execution using the resonate tree command. The tree command visualizes the call graph of the function execution as a graph of durable promises.

    resonate tree countdown.1
    

    Now try killing the worker mid-countdown and restarting. The countdown picks up right where it left off without missing a beat.