<ul>
  <li>
    <strong>one app to find them all, and in the darkness bind them.</strong>
    <ul>
      <li>open to anyone. dependent on no one.</li>
      <li>like mac os x's <a href="http://www.apple.com/macosx/upgrade/softwareupdates.html">Software Update</a>
      </li>
      <li>extensible</li>
    </ul>
  </li>
  <li>
    <strong>simple plugin interface</strong>
    <ul>
      <li>format<br>
        <code>
          <pre>
            &lt;?xml version="1.0" encoding="utf-8"?&gt;
            &lt;application&gt;
            &lt;name&gt;Delicious Library&lt;/name&gt;
            &lt;host&gt;delicious-monster.com&lt;/host&gt;
            &lt;updateInfoURI&gt;http://delicious-monster.com/softwareUpdate/update.xml&lt;/updateInfoURI&gt;
            &lt;/application&gt;
          </pre>
        </code>
      </li>
      <li>optional nodes<br>
        <code>
          <pre>
            &lt;updateFrequency&gt;daily&lt;/updateFrequency&gt;
            &lt;updateFrequency&gt;weekly&lt;/updateFrequency&gt;
            &lt;updateFrequency&gt;monthly&lt;/updateFrequency&gt;

            &lt;requiredMinimumVersion&gt;2.0&lt;/requiredMinimumVersion&gt;
            &lt;requiredMinimumUpdated&gt;20040118&lt;/requiredMinimumUpdated&gt;
          </pre>
        </code>
      </li>
      <li>plugins by users or developers (partying together)</li>
    </ul>
  </li>
  <li>
    <strong>server side : update.xml</strong>
  </li>
  <ul>
    <li>single app<br>
      <code>
        <pre>
          &lt;host name="delicious-monster.com"&gt;
          &lt;application&gt;
          &lt;name&gt;Delicious Library&lt;/name&gt;
          &lt;updated&gt;20041118&lt;/updated&gt;
          &lt;version&gt;1.0.5&lt;/version&gt;
          &lt;updateURI&gt;http://delicious-monster.com/downloads/DeliciousLibrary.dmg&lt;/updateURI&gt;
          &lt;/application&gt;
          &lt;/host&gt;
        </pre>
      </code>
    </li>
    <li>multiple apps<br>
      <code>
        <pre>
          &lt;host name="ranchero.com.com"&gt;
          &lt;application&gt;
          &lt;name&gt; NetNewsWire&lt;/name&gt;
          &lt;updated&gt;20041022&lt;/updated&gt;
          &lt;version&gt;2.0b6&lt;/version&gt;
          &lt;updateURI&gt;http://ranchero.com/downloads/NetNewsWire2.0b6.dmg.gz&lt;/updateURI&gt;
          &lt;/application&gt;
          &lt;application&gt;
          &lt;name&gt;MarsEdit&lt;/name&gt;
          &lt;updated&gt;20041116&lt;/updated&gt;
          &lt;version&gt;1.0b12&lt;/version&gt;
          &lt;updateURI&gt; http://ranchero.com/downloads/MarsEdit1.0b12.dmg.gz &lt;/updateURI&gt;
          &lt;/application&gt;
          &lt;/host&gt;
        </pre>
      </code>
    </li>
    <li>optional nodes<br>
      <code>
        <pre>
          &lt;updateFrequency&gt;daily&lt;/updateFrequency&gt;
          &lt;updateFrequency&gt;weekly&lt;/updateFrequency&gt;
          &lt;updateFrequency&gt;monthly&lt;/updateFrequency&gt;

          &lt;requiredMinimumVersion&gt;2.0&lt;/requiredMinimumVersion&gt;
          &lt;requiredMinimumUpdated&gt;20040118&lt;/requiredMinimumUpdated&gt;

          &lt;endOfLife&gt;true&lt;/endOfLife&gt;
          &lt;endOfLife&gt;false&lt;/endOfLife&gt;
        </pre>
      </code>
    </li>
  </ul>
  <li>
    <strong>download prefs</strong>
  </li>
  <ul>
    <li>respect server side unless overwritten client side by user</li>
    <li>update frequency : all items</li>
    <ul>
      <li>daily</li>
      <li>weekly</li>
      <li>monthly</li>
      <li>manually</li>
    </ul>
    <li>enable / disable : item specific</li>
    <li>auto download : item specific</li>
    <li>auto download : item specific</li>
    <li>admin password : save in keychain (BOOL)</li>
  </ul>
  <li>
    <strong>auto open files</strong>
  </li>
  <ul>
    <li>resolve decompression</li>
    <ul>
      <li>if zip, gz, tar, et al : decompress internally</li>
      <li>if sit, sitx : farm out to stuffitexpander</li>
    </ul>
    <li>replace old version</li>
    <li>backup older version pref (BOOL)</li>
    <li>keep originals pref (BOOL)</li>
  </ul>
  <li>
    <strong>issues to work out</strong>
  </li>
  <ul>
    <li>initial lastUpdated date for each app</li>
    <ul>
      <li>from the app's 'date modified' data?</li>
      <li>sounds like good enough to me</li>
    </ul>
    <li>xml namespaces</li>
    <ul>
      <li>are namespaces necessary?</li>
      <li>beneficial?</li>
    </ul>
  </ul>
  <li>
    <strong>benefits</strong>
  </li>
  <ul>
    <li>for users</li>
    <ul>
      <li>easy maintenance</li>
      <li>stay up to date</li>
      <li>open to all apps</li>
      <li>
        <a href="http://growl.info/">growl notifications</a>
      </li>
    </ul>
    <li>for developers</li>
    <ul>
      <li>can easily migrate existing check for update systems</li>
      <li>inexpensive deployment</li>
      <li>inexpensive maintenance</li>
      <li>inexpensive bandwidth</li>
      <li>keeps user base up to date</li>
    </ul>
  </ul>
</ul>