- Class-based, object-oriented
- Static typing
- Generics
- Async/await that makes your asynchronous code look like synchronous code - (avoids callback hell)
- Generators
- Future-based, non-blocking APIs
- Positional, named, optional parameters with default values
- Arrow syntax for brevity
- Type inference
- Packages facilitate modularity
- Named constructors
- Functional programming features (map, fold, reduce, where, take, forEach, etc...)
- Cascade operator
- String interpolation
- Implicit interfaces
- Mixins (Code re-use without complex inheritance hiearchies)
- Reflection
- Streams
- Operator overloading
- Metadata annotations
- Concurrency through Isolates
- SIMD
- Call into JavaScript code and vice/versa
- Generate nice documentation with /// dart comments
- Built-in testing facilites - pub run test
- Open source
- Open standard