## 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:
After almost a year since last release, this quarter we managed to finally 
release 2.11.0. A few days after that, we had to release 2.11.1, to address
recent log4j2 rce vulnerability.

Aside from the releases, dev activity has been focused on providing support
for markdown inside JSPWiki. Currently we have a parser and a renderer, and
we need to add support for both plain and WYSIWYG editors. For the latter,
there's a refactor ongoing, which should be completed soon.

2 vulnerability disclosures were published and fixed in 2.11.0, we have a
couple more, one being worked on, the other one still needing investigation.

Finally there was a discuss thread on moving from jira to github issues,
but got nowhere, so we'll stick with jira for now.

## Community Health:
Traffic on both MLs had an increase compared with last quarter, due to both 
releases and the increased number of commits that were pushed this quarter. 
There is enough people to provide project oversight. 

