gonna copy elm api for canvas