
Welcome to the stable version of JSPWiki 2.8!

JSPWiki 2.8.4 is a security and stability update to 2.8.x-series.  All users
are encouraged to upgrade.

This is the second major version of JSPWiki which is released completely under
the Apache License.  This is done as a part of the transition to the
Apache Incubation.

However, this is NOT an Apache release - JSPWiki 3.0 will be the first
official Apache release.

Please report any issues at https://issues.apache.org/jira/browse/JSPWIKI

UPDATES SINCE 2.8.3
===================

The full list is available in the ChangeLog file.  Highlights include

* Improvements in JCR Export

* Numerous minor bug fixes


UPDATES SINCE 2.8.2
===================

The full list is available in the ChangeLog file.  Highlights include

* Improved logging

* JDK6 compilation support

* Brazilian Portuguese translation, thanks to Paulo Amaral

* Addition of new PageViewPlugin

* Numerous bugfixes, esp. in sorting.


NEW FEATURES SINCE 2.6.x
========================

* JSPWiki now requires JDK 1.5 to run.

* Simplified Chinese, Dutch, Italian and Russian localizations added!

* There is no more need for JAAS files!  Hooray!  This has
  been replaced with custom jspwiki properties.  Please see
  the UPGRADING document.

* Massive improvements to the default template, like
  section editing.
  
* Sneak preview in the default editor

* WikiWizard is removed (it is LGPL), but FCK integration is available,
  and WikiWizard can still be installed as a separate package.

* German, Finnish, Spanish, Simplified Chinese and Dutch language corepages

* Support for the UniversalEditButton (http://universaleditbutton.org/).

* Password hashes are now salted.  This means you can't share the passwords
  if you have JSPWiki 2.6 instances, as the passwords are upgraded
  transparently.

The full log of any issues fixed can be found at:

https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310732&styleName=Html&version=12312864

Please also see http://www.jspwiki.org/wiki/NewIn2.8

UPGRADE NOTES
=============

Please see the UPGRADING document in this same directory.


EXPERIMENTAL FEATURES
=====================

There are some features in this release which could mostly be considered
experimental at best.  The following ones are known to work only
partially:

* WebDAV support.  This is known to be broken on pretty many levels...

* Admin interface.  Check out /admin/Admin.jsp.

KNOWN PROBLEMS
==============

* WebDav does not yet support the new
  authentication/permissions scheme.  Therefore, if you have very
  sensitive data in your wiki, you might not want to enable it.

* Not all old plugins work.  Specifically any plugins, which construct 
  new WikiPages will fail because of the constructor has been changed.

* The PageFilter API was changed in 2.6

* Our documentation simply sucks at this point.  Please forgive us,
  and point where those fixes are needed.  We will improve upon
  based your input.

* The ShortURLConstructor does not work reliably.  Please use
  ShortViewURLConstructor, or Apache mod_rewrite.
