/resonate

a dead simple programming model for modern applications

Primary LanguageGoApache License 2.0Apache-2.0

Resonate is in the Design Phase

Our code base is constantly evolving as we are exploring Resonate's programming model. If you are passionate about a dead simple developer experience, join us on this journey of discovery and share your thoughts.

Join our slack



Resonate

ci dst codecov Go Report Card License

Docs   •   Twitter   •   Slack   •   Issues   •   Roadmap

Why Resonate?

Resonate offers a programming model that allows you to build distributed applications using an intuitive paradigm you already know — async await.

What is Distributed Async Await?

Distributed Async Await extends the async await programming model beyond the boundaries of a single process and makes distributed computing a first-class citizen.

Install

Resonate is currently in active development without a formal release cycle. We welcome early adopters to experiment with the latest build from main as we work towards our first stable release. Your feedback is greatly appreciated.

OS Architecture Link
MacOS x86_64 Install
MacOS aarch64 Install
Linux x86_64 Install
Linux aarch64 Install

Getting Started

Resonate makes it easy to get started creating and interacting with durable promises. Follow these steps to build and run Resonate, then start creating and completing promises.

  1. Build and Run

    The resonate server supports http and grpc protocols as well as sqlite and postgres as a data store.

    # Build
    go build -o resonate
    
    # Start
    ./resonate serve

    Once running, you'll see log output like:

    time=2023-01-01T00:00:00.000-00:00 level=INFO msg="starting http server" addr=0.0.0.0:8001
    time=2023-01-01T00:00:00.000-00:00 level=INFO msg="starting grpc server" addr=0.0.0.0:50051
    time=2023-01-01T00:00:00.000-00:00 level=INFO msg="starting metrics server" addr=:9090
  2. Create a Promise

    On a separate terminal, create a durable promise.

    # Create a promise with data, headers and tags
    resonate promises create foo --timeout 1h --data foo --header bar=bar --tag baz=baz
  3. Complete a Promise

    Finally, complete the promise by resolving or rejecting.

    # Resolve a promise with data and headers 
    resonate promises resolve foo --data foo --header bar=bar
    # Reject a promise with data and headers
    resonate promises reject foo --data foo --header bar=bar

Write Distributed Async Await Applications

Resonate provides client SDKs for different programming languages to easily interact with the Resonate server and write elegant distributed async await applications. More are coming soon!

Type Language Source Code Package
TS SDK TS SDK https://github.com/resonatehq/resonate-sdk-ts NPM

Contributing

See our contribution guidelines.

Development

go run ./...
go test -v ./...

License

The Resonate Server is available under the Apache 2.0 License.