## Description:
The mission of JSPWiki is the creation and maintenance of software related to
Leading open source WikiWiki engine, feature-rich and built around standard 
JEE components (Java, servlets, JSP).

## Issues:
There are no issues requiring board attention.

## Membership Data:
Apache JSPWiki was founded 2013-07-17 (8 years ago)
There are currently 14 committers and 8 PMC members in this project.
The Committer-to-PMC ratio is 7:4.

Community changes, past quarter:
- No new PMC members. Last addition was Dave Koelmeyer on 2016-04-06.
- No new committers. Last addition was Dave Koelmeyer on 2016-04-06.

## Project Activity:
JSPWiki 2.11.2 was released on Feb, 24th, featuring some Markdown support
improvements and a couple of fixed CVEs. Work on 2.11.3 is under way, 
although this quarter has seen a slower development pace.

2.11.3 contains further Markdown support improvements, being usable right
now. We still have two finish it, but as of this release, the wiki syntax
will be completely pluggable.

Another new feature that is being released with 2.11.3 is the Engine 
Lifecycle Extensions, another JSPWiki extension point, that allows custom 
components to be aware of Engine's initialization and shutdown, without 
having to deep dive on Engine's internals. This allows, among other things,
to have smoother custom components installations.

Finally, 4 reported vulnerabilities will be fixed in 2.11.3. Aside from 
that, we got another vulnerability report that was looked into and rejected.

## Community Health:
Traffic on both MLs had an increase compared with last quarter, although
development has been slower. 

We merged a PR from a contributor which fixed some italian texts.

There is enough people to provide project oversight.

