make `template` optional