<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to you under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<html lang="en">
<title>Welcome to Apache Derby</title>
<body>
<center><a href="http://db.apache.org/derby/">
        <img src="docs/html/images/logowithtext.jpg" alt="Apache Derby logo" border="0"/></a><br/>
<h2>Contents</h2>
<a href="#new">New to Derby?</a><br/>
<a href="#using">Using Derby</a><br/>
<a href="#thisDistribution">This Distribution</a><br/>
<a href="#resources">More Resources</a><br/>
</center>
<br/>
<a name="new"/><h3>New to Derby?</h3>
<p>If this is your first time using Derby, please look at the <a href="docs/html/getstart/index.html">Getting Started Guide</a> <a href="docs/pdf/getstart/getstartderby.pdf">[PDF]</a> for assistance configuring your environment, creating a new database, and executing SQL statements.</p>
<p>Interested in seeing some code that makes use of Derby? There are also some <a href="demo/programs/readme.html">simple demo applications</a> included to help you understand how to start using Derby in your application.</p>
<p>Derby includes some tools to help you get started working with Derby databases. Additional information about these tools can be found in the <a href="docs/html/tools/index.html">Derby Tools and Utilities Guide</a> <a href="docs/pdf/tools/derbytools.pdf">[PDF]</a>.</p>
<p>If you need more help getting started, the Apache Derby website has a <a href="http://db.apache.org/derby/quick_start.html">Quick Start page</a> with links to tutorials, more demo applications, and instructions on how to use Derby with a variety of different IDEs, tools, and web application servers.</p>
<p>If you need additional help, the Apache Derby Users mailing list can be helpful if you have specific questions regarding setting up and using Derby. For information on how to subscribe and post to the Apache Derby Users mailing list, please read the <a href="http://db.apache.org/derby/derby_mail.html">mailing lists page</a> on the Apache Derby website.</p>
<br/>
<a name="using"/><h3>Using Derby</h3>
<p>
For information on developing and deploying an application with Derby,
  see the
<a href="docs/html/devguide/index.html"/>Derby Developer's Guide</a> <a href="docs/pdf/devguide/derbydev.pdf"/>[PDF]</a>.
A complete reference to Derby's use of JDBC and SQL can be found in the
<a href="docs/html/ref/index.html">Derby Reference Manual</a> <a href="docs/pdf/ref/refderby.pdf">[PDF]</a>.
Information on configuring the security of Derby applications can be
  found in the
<a href="docs/html/security/index.html">Derby Security Guide</a> <a href="docs/pdf/security/secderby.pdf">[PDF]</a>.
</p>

<p>
Derby's public API can be found <a href="javadoc/index.html">here</a>.
</p>
<p>
For information on setting up and using the Derby Network Server, which provides a client/server access model for Derby databases on machines connected over a network, please read the <a href="docs/html/adminguide/index.html">Derby Server and Administration Guide</a> <a href="docs/pdf/adminguide/derbyadmin.pdf">[PDF]</a>.
</p>
<p>
Information on how to tune Derby for your specific needs can be found in <a href="docs/html/tuning/index.html">Tuning Derby</a> <a href="docs/pdf/tuning/tuningderby.pdf">[PDF]</a>. This guide includes a reference to the properties which influence Derby's behavior as well as providing performance tips for certain situations.
</p>
<br/>
<a name="thisDistribution"/><h3>This Distribution</h3>
<p>
Please consult the following documents for details on the contents of
this distribution and how this distribution is licensed.
</p>
<ul>
  <li><a href="RELEASE-NOTES.html">Release Notes</a></li>
  <li><a href="LICENSE">The Apache License</a></li>
  <li><a href="NOTICE">Relevant Copyrights</a></li>
</ul>
<br/>
<a name="resources"/><h3>More Resources</h3>
<p>
If you are looking for more resources on how to use Derby in your application or integrate Derby into a specific environment, please see:
</p>
<ul>
  <li><a href="http://db.apache.org/derby/">The Apache Derby website</a></li>
  <li><a href="http://wiki.apache.org/db-derby/">The Apache Derby wiki</a></li>
  <li><a href="http://db.apache.org/derby/integrate/index.html">The Apache Derby resources page</a></li>
</ul>
<p>
Thank you for your interest in Derby!
</p>
</body>
</html>
