Canjs uses a Model View Controller design pattern, where data is held in a Can Observable or Can Model, flow control is handled by a Can Control, and the view is created in html and Javascript with either EJS or mustache templates. We use EJS mustache currently, because it allows forces us to make conditional statements in outside of the template (which can be bad or good, depending). In addition, routing is handled by a separate router controller that listens to url changes and based on them passes control to different page controllers.
...