Also check out https://www.restate.dev/ . We chose this internally after evaluating it against temporal, hatchet, and dbos. The docs are pretty good and development locally and deployment to k8s was simple.
On the other hand, durable execution in dbos is implemented in libraries so you have different features for different languages (the Go one doesn't support SQLite as a backend for example while the Python one does), whereas Temporal and Restate are not embedded like this.