<commit_before>== Overview

.Document version
[NOTE]
You are reading version {version} of this documentation.

Development of mangoo I/O was started in mid 2015 out of the interest on
how difficult it would be to create an intuitiv, developer friendly,
full stack java web framework from scratch. After the fresh new breeze of
java development for the Web with the https://www.playframework.com[Play
Framwork - Version 1], contributions to the
http://www.ninjaframework.org[Ninja Framework] and having seen a lot of
cumbersome "Enterprise" Applications, I thought it was time for yet
another full stack java framework.

The foundation of mangoo I/O is the very performant
http://undertow.io[Undertow] web server from JBoss. On top of that,
standard, production ready java libraries are used - no reinventing of the
wheel, no bytecode manipulation, no magic whatsoever. The main reason for using Undertow was, that
it is based on non-blocking I/O in the form of
http://xnio.jboss.org[XNIO]. And although Undertow does support the
servlet API, one is not bound to use it in any way. Giving a java developer
the opportunity to work fully stateless.

mangoo I/O is highly inspired by the http://www.ninjaframework.org[Ninja
Web Framework]. Although the mangoo I/O core is a complete custom
implementation, many of the ideas and methodologies were re-used.

Here are some key features of mangoo I/O in a nutshell:

* Intuitiv convention-over-configuration, making a java developer feel
at home from the start
* Highly scalable using a share-nothing stateless architecture
* Hot-Compiling development mode for high productivity
* Easy to use template engine
* Support for Web Sockets
* Simple and self-explaining form handling and validation
* Plain scheduling for recurring tasks
* Easy handling of JSON in- and output
* Buil-in asset minification in development mode
* Flexible testing tools
* Simple Deployment and CI-Integration
* i18N Internationalization
* Easy eMail handling

One main focus of mangoo I/O was to have a good and well documented code
base. Therefore, mangoo I/O is constantly checked against
http://www.sonarqube.org[SonarQube] with a rule set of more than 600
checks.

=== Documentation versions

This documentation always comes from the latest tag of the GitHub
repository. However, you can change the version of the documentation by
simple adding the version number to the URL of the required
documentation. If you want for example the documentation of version
1.0.1 re-open this page with the following URL

-------------------------------------
https://mangoo.io/documentation/1.0.1
-------------------------------------

A quick note in the header will show you, which version of the
documentation you are reading.

== Getting started

=== Preconditions

mangoo I/O requires
http://www.oracle.com/technetwork/java/javase/downloads/index.html[Java]
(at least 1.8) and https://maven.apache.org[Maven] (at least 3.1.1).

==== Java

To make sure that you have Java correctly installed use the following
command

---------------------------------------------------------------
java -version
---------------------------------------------------------------

This should output the Java version information as follows

---------------------------------------------------------------
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
---------------------------------------------------------------

==== Maven

To make sure that you have the required maven version check your maven
installation with the following command

------------
mvn -version
------------

This should output the Maven version information as follows

------------------------------------------------------------------------------
Apache Maven 3.3.3 (...)
Java version: 1.8.0_45, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre
Default locale: de_DE, platform encoding: UTF-8
...
------------------------------------------------------------------------------

=== Creating your first mangoo I/O application

mangoo I/O comes with a ready-to-use Maven archetype, to get your first
application started in no time. To create your first application execute
the following Maven command:

------------------------------------------------------------------------------------------------------
mvn archetype:generate -DarchetypeGroupId=de.svenkubiak -DarchetypeArtifactId=mangooio-maven-archetype
------------------------------------------------------------------------------------------------------

You will be prompted for your group and artifact id for your new
project. You also have to set an application name and an application secret.
Make your secret "secure", as some functions, like sessions and authentication rely on it.
Once the archetpye generation is finished, change in your newly
created project directory and execute the following command:

----------------
mvn clean package
----------------

Once the compilation is finished, you can start the development (dev) mode, by executing the following maven
command

----------------
mvn mangooio:run
----------------

Once maven has downloaded all required dependencies you should see the
mangoo I/O logo showing you that your new application has started
successfully.

---------------------------------------------------------------------------------------------------------
INFO  io.mangoo.core.Bootstrap - mangoo application started @localhost:8080 in 881 ms in dev mode. Enjoy.
---------------------------------------------------------------------------------------------------------

[NOTE]
Whenever you see the mangoo I/O logo the application has started successfully.

Now open your default web browser an say hello to your first mangoo I/O
application by opening the following URL

---------------------
http://localhost:8080<commit_msg>updated documentation<commit_after>== Overview

.Document version
[NOTE]
You are reading version {version} of this documentation.

Development of mangoo I/O was started in mid 2015 out of the interest on
how difficult it would be to create an intuitiv, developer friendly,
full stack java web framework from scratch. After the fresh new breeze of
java development for the Web with the https://www.playframework.com[Play
Framwork - Version 1], contributions to the
http://www.ninjaframework.org[Ninja Framework] and having seen a lot of
cumbersome "Enterprise" Applications, I thought it was time for yet
another full stack java framework.

The foundation of mangoo I/O is the very performant
http://undertow.io[Undertow] web server from JBoss. On top of that,
standard, production ready java libraries are used - no reinventing of the
wheel, no bytecode manipulation, no magic whatsoever. The main reason for using Undertow was, that
it is based on non-blocking I/O in the form of
http://xnio.jboss.org[XNIO]. And although Undertow does support the
servlet API, one is not bound to use it in any way. Giving a java developer
the opportunity to work fully stateless.

mangoo I/O is highly inspired by the http://www.ninjaframework.org[Ninja
Web Framework]. Although the mangoo I/O core is a complete custom
implementation, many of the ideas and methodologies were re-used.

Here are some key features of mangoo I/O in a nutshell:

* Intuitiv convention-over-configuration, making a java developer feel
at home from the start
* Highly scalable using a share-nothing stateless architecture
* Hot-Compiling development mode for high productivity
* Easy to use template engine
* Support for Web Sockets
* Simple and self-explaining form handling and validation
* Plain scheduling for recurring tasks
* Easy handling of JSON in- and output
* Buil-in asset minification in development mode
* Flexible testing tools
* Simple Deployment and CI-Integration
* i18N Internationalization
* Easy eMail handling

One main focus of mangoo I/O was to have a good and well documented code
base. Therefore, mangoo I/O is constantly checked against
http://www.sonarqube.org[SonarQube] with a rule set of more than 600
checks.

=== Documentation versions

This documentation always comes from the latest tag of the GitHub
repository. However, you can change the version of the documentation by
simple adding the version number to the URL of the required
documentation. If you want for example the documentation of version
1.0.1 re-open this page with the following URL

-------------------------------------
https://mangoo.io/documentation/1.0.1
-------------------------------------

A quick note in the header will show you, which version of the
documentation you are reading.

== Getting started

=== Preconditions

mangoo I/O requires
http://www.oracle.com/technetwork/java/javase/downloads/index.html[Java]
(at least 1.8) and https://maven.apache.org[Maven] (at least 3.1.1).

==== Java

To make sure that you have Java correctly installed use the following
command

---------------------------------------------------------------
java -version
---------------------------------------------------------------

This should output the Java version information as follows

---------------------------------------------------------------
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
---------------------------------------------------------------

==== Maven

To make sure that you have the required maven version check your maven
installation with the following command

------------
mvn -version
------------

This should output the Maven version information as follows

------------------------------------------------------------------------------
Apache Maven 3.3.3 (...)
Java version: 1.8.0_45, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre
Default locale: de_DE, platform encoding: UTF-8
...
------------------------------------------------------------------------------

=== Creating your first mangoo I/O application

mangoo I/O comes with a ready-to-use Maven archetype, to get your first
application started in no time. To create your first application execute
the following Maven command:

------------------------------------------------------------------------------------------------------
mvn archetype:generate -DarchetypeGroupId=de.svenkubiak -DarchetypeArtifactId=mangooio-maven-archetype
------------------------------------------------------------------------------------------------------

You will be prompted for your group and artifact id for your new
project. You also have to set an application name and an application secret.
Make your secret "secure", as some functions, like sessions and authentication rely on it.
Once the archetpye generation is finished, change in your newly
created project directory and execute the following command:

----------------
mvn clean package
----------------

Once the compilation is finished, you can start the development (dev) mode, by executing the following maven
command

----------------
mvn mangooio:run
----------------

Once maven has downloaded all required dependencies you should see the
mangoo I/O logo showing you that your new application has started
successfully.

---------------------------------------------------------------------------------------------------------
                                                ___     __  ___  
 _ __ ___    __ _  _ __    __ _   ___    ___   |_ _|   / / / _ \ 
| '_ ` _ \  / _` || '_ \  / _` | / _ \  / _ \   | |   / / | | | |
| | | | | || (_| || | | || (_| || (_) || (_) |  | |  / /  | |_| |
|_| |_| |_| \__,_||_| |_| \__, | \___/  \___/  |___|/_/    \___/ 
                          |___/                                  
https://mangoo.io | @mangoo_io | 1.0.0-RC5

mangoo I/O application started @127.0.0.1:8080 in 437 ms in dev mode. Enjoy.
---------------------------------------------------------------------------------------------------------

[NOTE]
Whenever you see the mangoo I/O logo the application has started successfully.

Now open your default web browser an say hello to your first mangoo I/O
application by opening the following URL

---------------------
http://localhost:8080
{'fraction_non_alphanumeric': 0.21662734889774668, 'fraction_numerical': 0.011551289351663548, 'mean_word_length': 2.0080743821874236, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 7, 'lorem ipsum': 0, 'www.': 10, 'xml': 0}, 'pii_count': 1, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 8, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5561306', 'n_tokens_mistral': 3062, 'n_tokens_neox': 2852, 'n_words': 1360}