Implement DSL and a new CanvasInput