It doesn't maintain any state - NixOps uses SQLite database which makes it cumbersome to share with other devs.
Morph can't create machines for you - it doesn't have any backends except for SSH. It means fewer dependencies but you need to create targets manually or with something like Terraform. I've only used 'libvirt' and 'none' backends with NixOps and even wrote a 'dumb' backend that unlike 'none' backend wouldn't generate and store SSH keys in state but respects .ssh/config.
One feature of morph is really nice - declarative health checks that are run after the deployment automatically or can be triggered manually.
I also find it easier to explain to not-that-technical people as it basically requires one or two commands.
Avoiding local state is the primary reason we wrote morph, and the reason morph doesn't support provisioning hosts on AWS/GCE/.. is that we host everything in house. That makes morph simpler in many ways. :-)
(also, we're hiring, if anybody interested in nix near Copenhagen is reading this)
Morph can't create machines for you - it doesn't have any backends except for SSH. It means fewer dependencies but you need to create targets manually or with something like Terraform. I've only used 'libvirt' and 'none' backends with NixOps and even wrote a 'dumb' backend that unlike 'none' backend wouldn't generate and store SSH keys in state but respects .ssh/config.
One feature of morph is really nice - declarative health checks that are run after the deployment automatically or can be triggered manually.
I also find it easier to explain to not-that-technical people as it basically requires one or two commands.
For the reference: https://github.com/DBCDK/morph