<commit_before># $mol [![Build Status](https://travis-ci.org/eigenmethod/mol.svg?branch=master)](https://travis-ci.org/eigenmethod/mol)

Reactive micro-modular ui framework. Very simple, but very powerful!

# Features

* [Zero configuration](#zero-configuration). Just checkout and use it.
* [Lazy rendering/evaluating/loading etc](#lazyness).
* [Full reactivity](#reactivity) in all application layers. Not only between View and ViewModel.
* [Automatic dependency tracking](#reactivity) between reactive containers. No need to manual publish/subscribe/unsubscribe and streams routing.
* [Effective state synchronization](atom) in right way. 
* Automatic include modules to package at compile time. No need to manual import them. [Just use it](#zero-configuration).
* Very small modules. [All of them are optional](#zero-configuration).
* Cross platform. [Support any environment](#zero-configuration) (NodeJS, Web browsers, Cordova).
* Static typing ([TypeScript](https://www.typescriptlang.org/)). Full IDE support.
* Full customization. No implementation hiding. [All aspects are overridable](#lego-components).
* [Lifecycle management](#reactivity). Automatic destroy of unnecessary objects.
* [Easy debugging](#debugging). User friendly id's of all objects. Quick access to all objects from console.
* Easy [user friendly logging](#debugging) of all state changes.
* Pseudosynchronous code. [Asynchrony is abstracted by reactivity](#reactivity). No callbacks/promises/streams hell. No async/await/yield virus.
* Automatic [BEM](https://en.bem.info/methodology/naming-convention/)-attributes generation for elements.

# [Demo applications](demo)

* [$mol_app_hello](app/hello) - Very simple application ([online](https://eigenmethod.github.io/mol/app/hello/))
* [$mol_app_demo](app/demo) - Demonstration of all components ([online](http://eigenmethod.github.io/mol/))
* [$mol_app_todomvc](app/todomvc) - [ToDoMVC](http://todomvc.com/) implementation ([online](http://eigenmethod.github.io/mol/app/todomvc/))
* [$mol_app_supplies](app/supplies) - Supplies management tool ([online](https://eigenmethod.github.io/mol/app/supplies/))
* [$mol_app_signup](app/signup) - Simple form with persistence ([online](http://eigenmethod.github.io/mol/#demo=mol_app_signup))
* [$mol_app_users](app/users) - GitHub user "management" tool ([online](http://eigenmethod.github.io/mol/#demo=mol_app_users))
* [$mol_app_taxon](app/taxon) - Big hierarchical table wild database ([online](http://eigenmethod.github.io/mol/app/taxon/demo/))
* [$mol_app_bench](app/bench) - Abstract benchmarking interface ([online](http://eigenmethod.github.io/mol/app/bench/))

# Benchmarks

* [$mol_app_bench_list](app/bench/list) - Frameworks comparison ([online](http://eigenmethod.github.io/mol/app/bench/#becnh=list#sort=fill#))
* [ToDoMVC benchmark](https://github.com/eigenmethod/todomvc/tree/master/benchmark)
([online](https://eigenmethod.github.io/mol/app/bench/#bench=%2Ftodomvc%2Fbenchmark%2F#sample=angular2~angularjs~knockoutjs~mol~polymer~react-alt~vanillajs~vue#sort=fill#))
* [WebPageTest - Loading progress of ToDOMVC applications on some frameworks](https://www.webpagetest.org/video/compare.php?tests=161217_V8_6RFK%2C161217_G9_6RFM%2C161217_YZ_6RFN%2C161217_DM_6RFP%2C161217_2B_6RFQ%2C161217_RJ_6RFR%2C161217_2R_6RFS%2C161217_H5_6RFT%2C161217_CW_6RFV&thumbSize=150&ival=100&end=all)

# Articles

* [$mol: реактивный микромодульный фреймворк](https://habrahabr.ru/post/311172/) - Сomprehensive $mol review
* [$mol_atom: теория и практика реактивности](https://habrahabr.ru/post/317360/) - Object oriented reactive programming
* [Идеальный UI фреймворк](https://habrahabr.ru/post/276747/) - Problems of popular frameworks
* [React'ивные Panel'и](https://habrahabr.ru/post/314752/) - JSX vs view.tree
* [Tree — убийца JSON, XML, YAML и иже с ними](https://habrahabr.ru/post/248147/) - Tree format description
* [Атом — минимальный кирпичик FRP приложения](https://habrahabr.ru/post/235121/) - Theory of reactive containers
* [Принципы написания кода](https://habrahabr.ru/post/236785/) - Code style principles

# Any questions?

* [Ask us](https://github.com/eigenmethod/mol/issues/new?labels=question)
* [All answers](https://github.com/eigenmethod/mol/labels/question)

# Found a bug?

* [Report it](https://github.com/eigenmethod/mol/issues/new?labels=bug)
* [All bugs](https://github.com/eigenmethod/mol/labels/bug)

# Need feature?

* [Suggest it](https://github.com/eigenmethod/mol/issues/new?labels=improvement)
* [Vote for other](https://github.com/eigenmethod/mol/labels/improvement)

# Quick start

**Create MAM project**

Easy way is checkout this [preconfigured MAM repository](http://github.com/eigenmethod/mam) and start dev server:

```sh
git clone https://github.com/eigenmethod/mam.git ./mam && cd mam
npm install && npm start
```

**Create your application component**
<commit_msg>Show closed questions as FAQ.<commit_after># $mol [![Build Status](https://travis-ci.org/eigenmethod/mol.svg?branch=master)](https://travis-ci.org/eigenmethod/mol)

Reactive micro-modular ui framework. Very simple, but very powerful!

# Features

* [Zero configuration](#zero-configuration). Just checkout and use it.
* [Lazy rendering/evaluating/loading etc](#lazyness).
* [Full reactivity](#reactivity) in all application layers. Not only between View and ViewModel.
* [Automatic dependency tracking](#reactivity) between reactive containers. No need to manual publish/subscribe/unsubscribe and streams routing.
* [Effective state synchronization](atom) in right way. 
* Automatic include modules to package at compile time. No need to manual import them. [Just use it](#zero-configuration).
* Very small modules. [All of them are optional](#zero-configuration).
* Cross platform. [Support any environment](#zero-configuration) (NodeJS, Web browsers, Cordova).
* Static typing ([TypeScript](https://www.typescriptlang.org/)). Full IDE support.
* Full customization. No implementation hiding. [All aspects are overridable](#lego-components).
* [Lifecycle management](#reactivity). Automatic destroy of unnecessary objects.
* [Easy debugging](#debugging). User friendly id's of all objects. Quick access to all objects from console.
* Easy [user friendly logging](#debugging) of all state changes.
* Pseudosynchronous code. [Asynchrony is abstracted by reactivity](#reactivity). No callbacks/promises/streams hell. No async/await/yield virus.
* Automatic [BEM](https://en.bem.info/methodology/naming-convention/)-attributes generation for elements.

# [Demo applications](demo)

* [$mol_app_hello](app/hello) - Very simple application ([online](https://eigenmethod.github.io/mol/app/hello/))
* [$mol_app_demo](app/demo) - Demonstration of all components ([online](http://eigenmethod.github.io/mol/))
* [$mol_app_todomvc](app/todomvc) - [ToDoMVC](http://todomvc.com/) implementation ([online](http://eigenmethod.github.io/mol/app/todomvc/))
* [$mol_app_supplies](app/supplies) - Supplies management tool ([online](https://eigenmethod.github.io/mol/app/supplies/))
* [$mol_app_signup](app/signup) - Simple form with persistence ([online](http://eigenmethod.github.io/mol/#demo=mol_app_signup))
* [$mol_app_users](app/users) - GitHub user "management" tool ([online](http://eigenmethod.github.io/mol/#demo=mol_app_users))
* [$mol_app_taxon](app/taxon) - Big hierarchical table wild database ([online](http://eigenmethod.github.io/mol/app/taxon/demo/))
* [$mol_app_bench](app/bench) - Abstract benchmarking interface ([online](http://eigenmethod.github.io/mol/app/bench/))

# Benchmarks

* [$mol_app_bench_list](app/bench/list) - Frameworks comparison ([online](http://eigenmethod.github.io/mol/app/bench/#becnh=list#sort=fill#))
* [ToDoMVC benchmark](https://github.com/eigenmethod/todomvc/tree/master/benchmark)
([online](https://eigenmethod.github.io/mol/app/bench/#bench=%2Ftodomvc%2Fbenchmark%2F#sample=angular2~angularjs~knockoutjs~mol~polymer~react-alt~vanillajs~vue#sort=fill#))
* [WebPageTest - Loading progress of ToDOMVC applications on some frameworks](https://www.webpagetest.org/video/compare.php?tests=161217_V8_6RFK%2C161217_G9_6RFM%2C161217_YZ_6RFN%2C161217_DM_6RFP%2C161217_2B_6RFQ%2C161217_RJ_6RFR%2C161217_2R_6RFS%2C161217_H5_6RFT%2C161217_CW_6RFV&thumbSize=150&ival=100&end=all)

# Articles

* [$mol: реактивный микромодульный фреймворк](https://habrahabr.ru/post/311172/) - Сomprehensive $mol review
* [$mol_atom: теория и практика реактивности](https://habrahabr.ru/post/317360/) - Object oriented reactive programming
* [Идеальный UI фреймворк](https://habrahabr.ru/post/276747/) - Problems of popular frameworks
* [React'ивные Panel'и](https://habrahabr.ru/post/314752/) - JSX vs view.tree
* [Tree — убийца JSON, XML, YAML и иже с ними](https://habrahabr.ru/post/248147/) - Tree format description
* [Атом — минимальный кирпичик FRP приложения](https://habrahabr.ru/post/235121/) - Theory of reactive containers
* [Принципы написания кода](https://habrahabr.ru/post/236785/) - Code style principles

# Any questions?

* [Ask us](https://github.com/eigenmethod/mol/issues/new?labels=question)
* [All answers](https://github.com/eigenmethod/mol/issues?q=label%3Aquestion+is%3Aclosed)

# Found a bug?

* [Report it](https://github.com/eigenmethod/mol/issues/new?labels=bug)
* [All bugs](https://github.com/eigenmethod/mol/labels/bug)

# Need feature?

* [Suggest it](https://github.com/eigenmethod/mol/issues/new?labels=improvement)
* [Vote for other](https://github.com/eigenmethod/mol/labels/improvement)

# Quick start

**Create MAM project**

Easy way is checkout this [preconfigured MAM repository](http://github.com/eigenmethod/mam) and start dev server:

```sh
git clone https://github.com/eigenmethod/mam.git ./mam && cd mam
npm install && npm start
```

**Create your application component**

{'fraction_non_alphanumeric': 0.1492857142857143, 'fraction_numerical': 0.026326530612244898, 'mean_word_length': 5.906976744186046, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 46, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1390758', 'n_tokens_mistral': 3596, 'n_tokens_neox': 3278, 'n_words': 656}