
Welcome to the stable version of JSPWiki 2.8!

JSPWiki 2.8.2 is a security and stability update to 2.8.0.  All users
are encouraged to upgrade.

This is the first 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 you can find at http://issues.apache.org/JIRA/

UPDATES SINCE 2.8.0
===================

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

* Russian translation thanks to Andrew Rikhlivsky

* A number of stability and bug fixes.


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.
