<commit_before>.. image:: http://www.bdoubliees.com/journalspirou/sfigures6/schtroumpfs/s3.jpg

Xitrum (means "Smurf" in Vietnamese) is an async and clustered Scala web framework
and HTTP(S) server on top of `Netty <http://www.jboss.org/netty>`_
and `Hazelcast <http://www.hazelcast.com/>`_:

* It tries to fill the spectrum between `Scalatra <https://github.com/scalatra/scalatra>`_
  and `Lift <http://liftweb.net/>`_: more powerful than Scalatra and easier to
  use than Lift. You can easily create both RESTful APIs and postbacks. Xitrum
  is controller-first like Scalatra, not
  `view-first <http://www.assembla.com/wiki/show/liftweb/View_First>`_ like Lift.
* Annotations are used for URL routes, in the spirit of JAX-RS and Rails Engines.
  You don't have to declare all routes in a single place. Think of annotations
  as distributed routes.You can plug an app into another app. If you have a
  blog engine, you can package it as a JAR file. Then you can plug that JAR file
  into another app.
* Typesafe, in the spirit of Scala. All the APIs try to be as typesafe as possible.
* Async, in the spirit of Netty. Your request proccessing action does not have
  to respond immediately. Chunked response (streaming), WebSocket, and Comet
  (using WebSocket or long-polling) are supported.
* Sessions can be stored in cookies (more scalable) or clustered Hazelcast (more secure).
* `jQuery Validation <http://docs.jquery.com/Plugins/validation>`_ is integrated
  for browser side and server side validation.<commit_msg>add important note regarding sessions and continuations<commit_after>.. image:: http://www.bdoubliees.com/journalspirou/sfigures6/schtroumpfs/s3.jpg

Xitrum (means "Smurf" in Vietnamese) is an async and clustered Scala web framework
and HTTP(S) server on top of `Netty <http://www.jboss.org/netty>`_
and `Hazelcast <http://www.hazelcast.com/>`_:

* It tries to fill the spectrum between `Scalatra <https://github.com/scalatra/scalatra>`_
  and `Lift <http://liftweb.net/>`_: more powerful than Scalatra and easier to
  use than Lift. You can easily create both RESTful APIs and postbacks. Xitrum
  is controller-first like Scalatra, not
  `view-first <http://www.assembla.com/wiki/show/liftweb/View_First>`_ like Lift.
* Annotations are used for URL routes, in the spirit of JAX-RS and Rails Engines.
  You don't have to declare all routes in a single place. Think of annotations
  as distributed routes.You can plug an app into another app. If you have a
  blog engine, you can package it as a JAR file. Then you can plug that JAR file
  into another app.
* Typesafe, in the spirit of Scala. All the APIs try to be as typesafe as possible.
* Async, in the spirit of Netty. Your request proccessing action does not have
  to respond immediately. Chunked response (streaming), WebSocket, and Comet
  (using WebSocket or long-polling) are supported.
* Sessions can be stored in cookies (more scalable) or clustered Hazelcast (more secure).
  Hazelcast is recommended when using continuations-based Actions, since serialized
  continuations are usually too big to store in cookies.
* `jQuery Validation <http://docs.jquery.com/Plugins/validation>`_ is integrated
  for browser side and server side validation.
{'fraction_non_alphanumeric': 0.08144936512852276, 'fraction_numerical': 0.0012387736141220192, 'mean_word_length': 4.252032520325203, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 15, 'https://': 2, 'lorem ipsum': 0, 'www.': 8, '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': '2785974', 'n_tokens_mistral': 996, 'n_tokens_neox': 939, 'n_words': 421}