# 5.1 Key Features

## Modern Architecture

Rather than taking the monolithic framework approach, Aurelia is composed of smaller, focused modules. Use them together as a full-featured framework or pick and choose to build a custom solution.

## Forward-thinking

Written with ES2016. Integrates with Web Components. No external dependencies except polyfills. Leverage the technology of the future but target today's mobile, desktop and browser environments.

## Two-Way Databinding

Aurelia technology enables powerful two-way binding to any object. By using adaptive techniques you can select the most efficient way to observe each property, whether it be through Object.observe, getters and setters, dirty-checking or your own custom mechanism.

## Extensible HTML

Aurelia's extensible HTML compiler lets you create custom HTML elements, attach new behaviors to existing elements, and control template generation, all with full support for dynamic loading, databinding and batched rendering.

## Routing & UI Composition

Leverage our advanced client-side router with its pluggable pipeline, dynamic route patterns, child routers and asynchronous screen activation. Don't need a router but need dynamic, data-driven UI composition? We do that too.

## MV\* with Conventions

Who wants to waste time writing tons of configuration code for their MV\* architecture? Simply leverage conventions to make constructing your app effortless. Don't like the conventions? Plug in your own or drop them altogether.

## Broad Language Support

Use ES5, ES2015, ES2016, TypeScript or CoffeeScript. Aurelia's APIs were carefully designed to be consumed naturally from both today's and tomorrow's popular web programming languages.

## Testable

By combining ES2015 modules with a simple, yet powerful Dependency Injection Container, we make it easy for you to create highly cohesive, yet minimally coupled code, making unit testing a snap.
