Lightweight, extensible, declarative two-way binding templates