<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
  ~  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.
  -->

<document>

  <properties>
    <title>Downloads</title>
  </properties>

<body>

<section name="Apache Synapse - Downloads">

    <p>The Apache Synapse team is proud to announce the availability of the 1.1.1 release on the
        28th of January 2008. As of December 2007, Apache Synapse has moved on to become a Top Level Project
        (TLP) of the Apache Software Foundation, moving out from Web Services project.
    </p>

    <p>Releases are available for download under the ASL v2.0 License

    <ul>
        <li><a href="download.html">Releases</a></li>
    </ul>
    </p>

    <p>Source code is available to download under the ASL v2.0 License

    <ul>
        <li><a href="source-repository.html">Source code</a></li>
    </ul>
    </p>

</section>

</body>
</document>
