extensions can use canonical JSON