---
layout: page
title: Download
description: Project Download Page
group: nav-right
---
<!--
{% comment %}
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.
{% endcomment %}
-->

<!-- Hero  -->
<section class="full-stripe full-stripe--subpage-header clear-header">
  <div class="ml-container ml-container--horizontally-center">
    <div class="col col-12 content-group content-group--center-content content-group--center-align">
      <h1>{{ site.data.project.name }} Downloads</h1>
    </div>
  </div>
</section>

<section class="full-stripe full-stripe--alternate">
  <div class="ml-container">
    <div class="col col-12 content-group content-group--medium-bottom-margin">
      <h2>Downloads</h2>
      <p>Apache SystemML is released as a source artifact. Binary artifacts (including the ones available in Maven) are made available for your convenience. You will be prompted for a mirror - if the file is not found on yours, please be patient, as it may take 24 hours to reach all mirrors. Apache SystemML is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, version 2.0</a>. </p>
    </div>
    <div class="col col-12 content-group">
      <h2>Download SystemML {{ site.data.project.release_version }} for Spark 2.0.2 and above</h2>
    </div>

    <div class="col col-12 content-group row">
        <div class="span10">
          <table class="table table-hover">
          <tr>
            <th><b>Name</b></th>
            <th><b>SHA512</b></th>
            <th><b>Signature</b></th>
          </tr>
          <tr>
            <td><a href="http://www.apache.org/dyn/closer.lua/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-bin.tgz" target="_blank"> {{ site.data.project.release_name }}-{{ site.data.project.release_version }} (Binary tgz)</a></td>
            <td><a href="https://www.apache.org/dist/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-bin.tgz.sha512">SHA512</a> </td>
            <td><a href="https://www.apache.org/dist/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-bin.tgz.asc">ASC</a></td>
          </tr>
          <tr>
            <td><a href="http://www.apache.org/dyn/closer.lua/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-bin.zip" target="_blank">{{ site.data.project.release_name }}-{{ site.data.project.release_version }} (Binary zip)</a></td>
            <td><a href="https://www.apache.org/dist/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-bin.zip.sha512">SHA512</a></td>
            <td><a href="https://www.apache.org/dist/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-bin.zip.asc">ASC</a></td>
          </tr>
          <tr>
            <td><a href="http://www.apache.org/dyn/closer.lua/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-src.tgz" target="_blank">{{ site.data.project.release_name }}-{{ site.data.project.release_version }} (Source tgz)</a></td>
            <td><a href="https://www.apache.org/dist/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-src.tgz.sha512">SHA512</a></td>
            <td><a href="https://www.apache.org/dist/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-src.tgz.asc">ASC</a></td>
          </tr>
          <tr>
            <td><a href="http://www.apache.org/dyn/closer.lua/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-src.zip" target="_blank">{{ site.data.project.release_name }}-{{ site.data.project.release_version }} (Source zip)</a></td>
            <td><a href="https://www.apache.org/dist/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-src.zip.sha512">SHA512</a></td>
            <td><a href="https://www.apache.org/dist/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-src.zip.asc">ASC</a></td>
          </tr>
          <tr>
            <td><a href="http://www.apache.org/dyn/closer.lua/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-python.tgz" target="_blank">{{ site.data.project.release_name }}-{{ site.data.project.release_version }} (Python package .tgz)</a></td>
            <td><a href="https://www.apache.org/dist/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-python.tgz.sha512">SHA512</a></td>
            <td><a href="https://www.apache.org/dist/systemml/{{ site.data.project.release_version }}/systemml-{{ site.data.project.release_version }}-python.tgz.asc">ASC</a></td>
          </tr>

          <tr>
            <td><a href="release-notes/systemml-release-notes-{{ site.data.project.release_version }}.html">Release Notes</a></td>
            <td></td>
            <td></td>
          </tr>
          </table>

          <p>Instructions for checking hashes and signatures is described on the <a href="http://www.apache.org/info/verification.html" target="_blank">Verifying Apache Software Foundation Releases</a> page.
          These <a href="https://www.apache.org/dist/systemml/KEYS" target="_blank">KEYS</a> can be used to <a href="http://www.apache.org/dyn/closer.cgi#verify" target="_blank">verify</a> the integrity of the downloaded artifact using PGP signature (.asc).
          </p>

          <h3>Using Maven</h3>

          <p>We strongly encourage our users to configure a Maven repository mirror closer to their location. <br>
          Please read <a href="http://maven.apache.org/guides/mini/guide-mirror-settings.html" target="_blank">How to Use Mirrors for Repositories</a>.

          <h4>Dependencies</h4>

          <p>Add the following dependencies to your Maven pom.xml.</p>

          <pre>&lt;dependency&gt;
  &lt;groupId&gt;org.apache.systemml&lt;/groupId&gt;
  &lt;artifactId&gt;systemml&lt;/artifactId&gt;
  &lt;version&gt;{{ site.data.project.release_version }}&lt;/version&gt;
&lt;/dependency&gt;</pre>

          <h3>Previous Releases</h3>
          <p>Previous releases of Apache SystemML can be obtained from <a href="http://archive.apache.org/dist/systemml/" target="_blank">archives</a>. Previous incubator releases can be obtained from <a href="http://archive.apache.org/dist/incubator/systemml/" target="_blank">incubator archives</a>.  For Spark 1.6 support, please use Apache SystemML 0.12.</p>
       </div>
    </div>
  </div>
</section>
