The Apache FtpServer project team is proud to announce the release of 
Apache FtpServer, version 1.0.0

The Apache FTP Server is a 100% pure Java FTP server. It's designed to be 
a complete and portable FTP server engine solution based on currently 
available open protocols. FtpServer can be run standalone as a Windows 
service of Unix/Linux daemon, or as embedded into a Java application. 
The default network support is based on Apache MINA, a high performance 
asyncronous IO library.

It is also a FTP application platform. We have developed a Java API to let 
you write Java code to process FTP event notifications that we call the Ftplet 
API. Apache FtpServer provides an implementation of FTP server to support 
this API. 

1.0.0
--------------------------------
This is the first major release of FtpServer and we now recommend this version
for production usage. The release contains a few minor bug fixes found since the
last release candidate.   

1.0.0-RC2
--------------------------------
The release contains fixes to a small set of bugs found in 1.0.0-RC1.  

1.0.0-RC1
--------------------------------
This release focuses on stabilizing the code base and fixing reported bugs. No major
additions or other improvements was included in this version.   

1.0.0-M4
--------------------------------
The FtpServer API is now stabilized for the upcoming 1.0.0 release. The release 
also contains a large number of bug fixes and minor improvements as well as 
complete Javadoc documentation for our API. 

1.0.0-M3
--------------------------------
This release fixes a number of bugs found since the release of 1.0.0-M2. 
We have also made some major improvements, especially to Ftplets which are now
able to intercept any FTP command. 

1.0.0-M2
--------------------------------
This is the very first release of Apache FtpServer.
