<!--
 * 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.
-->

<p><span class="weinre">weinre</span> is implemented as a
<a href="http://nodejs.org/">node.js</a> application, and so you'll
need to <a href="http://nodejs.org/download/">download and install
a node runtime</a> to run <span class="weinre">weinre</span>.

<p>To install <span class="weinre">weinre</span>, use <tt>npm</tt>,
or download a binary package. <span class="weinre">weinre</span> is not
sensitive to the directory it's installed in, and does not
write to any files.

<!-- ======================================================================= -->
<h2>npm installation</h2>

<p><span class="weinre">weinre</span> can be installed as an
<a href="http://npmjs.org/doc/README.html">npm package</a>.  The
<tt>*-bin.tar.gz</tt> urls/files for binary packages
can be used as a target of the
<a href="http://npmjs.org/doc/install.html"><tt>npm install</tt></a>
command.

<p>It's likely you will want to install <span class="weinre">weinre</span>
globally instead of locally (in the <tt>npm</tt> sense), which means you
will typically want to use the <tt>npm -g</tt> option to install.  For
*ix and Mac, this also means prefixing your command with sudo.  For Windows,
AFAIK, you don't need sudo or any equivalent.

<p>Here's an example of installing from a binary package via URL:

<pre>
sudo npm -g install http://example.com/path/to/apache-cordova-weinre-X.Y.Z-bin.tar.gz
</pre>

<p><span class="weinre">weinre</span> is also deployed on
<a href="https://npmjs.org/package/weinre">https://npmjs.org/package/weinre</a>
so that you can install it via:

<pre>
sudo npm -g install weinre
</pre>

<!-- ======================================================================= -->
<h2>Binary Packages</h2>

<!--
<p>The recent source and binary release archives should be available at:

<ul>
<li><a href="http://www.apache.org/dyn/closer.cgi/incubator/cordova">http://apache.org/dist/incubator/cordova/</a>
<br><b><i>(at the time of this writing, that link does not actually resolve because
there are no official releases)</i></b>
</ul>

<p>All of the source and binary release archives should be available at:

<ul>
<li><a href="http://archive.apache.org/dist/incubator/cordova/">http://archive.apache.org/dist/incubator/cordova/</a>
<br><b><i>(at the time of this writing, that link does not actually resolve because
there are no official releases)</i></b>
</ul>
-->

<p>Unofficial binary packages for your convenience:

<ul>
<li><a href="http://people.apache.org/~pmuellr/weinre/">http://people.apache.org/~pmuellr/weinre/</a>
</ul>

<p>The binary packages available are:

<ul>
<li><tt>apache-cordova-weinre-{version}-bin.tar.gz</tt>
<li><tt>apache-cordova-weinre-{version}-bin.zip</tt>
<li><tt>apache-cordova-weinre-{version}-doc.tar.gz</tt>
<li><tt>apache-cordova-weinre-{version}-doc.zip</tt>
<li><tt>apache-cordova-weinre-{version}-src.tar.gz</tt>
<li><tt>apache-cordova-weinre-{version}-src.zip</tt>
</ul>

<p>The difference between the <tt>.tar.gz</tt> and <tt>.zip</tt>
archives is the archive format only.  When expanded, both archives
produce the same files.

<p>The <tt>doc</tt> archives contain the stand-alone HTML documentation
<p>The <tt>src</tt> archives contain the ready-to-rebuild source
<p>The <tt>bin</tt> archives contain the ready-to-run binaries

<p>If the <tt>{version}</tt> contains a moniker like <tt>pre</tt>, this
is indicative of an unofficial, non-final binary package for your convenience,
as opposed to an official release.
