<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Xulforge Blog &#187; projects</title>
	<atom:link href="http://xulforge.com/blog/tag/projects/feed/" rel="self" type="application/rss+xml" />
	<link>http://xulforge.com/blog</link>
	<description>Xulforge projects, code, and more</description>
	<lastBuildDate>Mon, 06 Sep 2010 21:41:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>GSOC Project Update: Cancelled</title>
		<link>http://xulforge.com/blog/2010/09/gsoc-project-update-cancelled/</link>
		<comments>http://xulforge.com/blog/2010/09/gsoc-project-update-cancelled/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 21:41:27 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[editors]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=82</guid>
		<description><![CDATA[I&#8217;ve been meaning to write about this for a while now, but I just haven&#8217;t had the time for it given all the work I&#8217;ve been doing surrounding the Firefox 4 release. The editor review queues are predictably getting much more submissions, and I&#8217;ve been trying to keep add-on developers up to date with Firefox [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been meaning to write about this for a while now, but I just haven&#8217;t had the time for it given all the work I&#8217;ve been doing surrounding the Firefox 4 release. The editor review queues are predictably getting much more submissions, and I&#8217;ve been trying to keep add-on developers up to date with Firefox 4 <a href="http://blog.mozilla.com/addons/2010/07/21/compatibility-for-firefox-4-time-to-get-started/">breaking</a> <a href="http://blog.mozilla.com/addons/2010/08/31/compatibility-firefox-4-beta-4/">changes</a>.</p>
<p>A while ago I suggested a different packaging system for add-ons that would (arguably) make it easier to work with. I proposed it as a project for the Google Summer of Code, and <a href="http://xulforge.com/blog/2010/05/add-on-packaging-ideas-gsoc/">it was accepted</a>. That was kind of unexpected, and I was very excited to be part of that experiment. There was a good student submission for the project and everything looked well underway.</p>
<p>Fast forward a few months, and I was contacted by the student working on the project. He wanted to drop it due to lack of time and progress <img src='http://xulforge.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> . After chatting for a while, I agreed with him that dropping it was for the best. In the end the problem was a mixture of poor communication and a scheduling mismatch between the summer break in the US and other countries (Brazil in this case). He just couldn&#8217;t focus on the project due to school work.</p>
<p>So, the experimental implementation never happened, but the idea lives on. The project&#8217;s approval motivated me to create a <a href="https://wiki.mozilla.org/User:Jorge.villalobos/AddonPackaging">pretty decent spec</a> that I&#8217;ll update once Firefox 4 is released. Many changes have been introduced in Firefox 4 that affect manifest files, and others that overlap with some of the proposed features. Once Firefox 4 is stable for add-on developers, I&#8217;ll update the wiki and probably post an update here. I don&#8217;t have any plans to implement this or push the idea too hard, but I still think there&#8217;s some value there and it&#8217;s worthwhile to keep it alive.</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2010/09/gsoc-project-update-cancelled/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Add-on packaging &#8211; Manifests revisited and wiki</title>
		<link>http://xulforge.com/blog/2010/05/add-on-manifests-revisited-wiki/</link>
		<comments>http://xulforge.com/blog/2010/05/add-on-manifests-revisited-wiki/#comments</comments>
		<pubDate>Tue, 25 May 2010 23:35:22 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=73</guid>
		<description><![CDATA[I&#8217;ve been spending some time working on the new wiki for the Add-on Packaging Spec. Here it is. At the moment I&#8217;m writing the complete manifest file specification, basically copying and adapting the current specifications for install manifests and chrome manifests. I&#8217;m pretty much done with the former, and will be adding the latter probably [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been spending some time working on the new wiki for the Add-on Packaging Spec. <a href="https://wiki.mozilla.org/User:Jorge.villalobos/AddonPackaging">Here it is</a>.</p>
<p>At the moment I&#8217;m writing the complete manifest file specification, basically copying and adapting the current specifications for <a href="https://developer.mozilla.org/en/Install_Manifests">install manifests</a> and <a href="https://developer.mozilla.org/en/Chrome_Registration">chrome manifests</a>. I&#8217;m pretty much done with the former, and will be adding the latter probably tomorrow.</p>
<p>After receiving lots of feedback regarding the manifest format, I agreed to take the manifest file the XML way. I followed JJ Barton&#8217;s suggestion of using HTML instead of a custom XML format, which leads to a very <a href="https://wiki.mozilla.org/User:Jorge.villalobos/AddonPackaging/Manifest#Example_minimal_manifest">simple and familiar</a> manifest format, with some very nice <a href="http://xulforge.com/addonpackaging/manifest.html">visualization options</a>. This is the first time I&#8217;ve used the <em>:before</em> pseudo-class and the CSS <em>content</em> property, and I must say that they blew me away, limited as the latter is. Cool stuff.</p>
<p>If you want to discuss the pros and cons of the HTML manifest format, please fire away in the comments. I will be adding more content to the wiki as the project progresses.</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2010/05/add-on-manifests-revisited-wiki/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Add-on packaging spec, part 3</title>
		<link>http://xulforge.com/blog/2010/05/add-on-packaging-spec-3/</link>
		<comments>http://xulforge.com/blog/2010/05/add-on-packaging-spec-3/#comments</comments>
		<pubDate>Thu, 20 May 2010 16:18:24 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=67</guid>
		<description><![CDATA[This is a specification for a project that will be implemented for the Google Summer of Code, and it can still change as feedback is received. There are no concrete plans of making this a part of Firefox in the near future. Read my previous post for more info. Part 3 – Installation Add-on performance [...]]]></description>
			<content:encoded><![CDATA[<p><strong>This is a specification for a project that will be   implemented for the Google Summer of Code, and it can still change as   feedback is received. There are no concrete plans of making this a part   of Firefox in the near future. Read my <a href="../2010/05/2010/05/add-on-packaging-ideas-gsoc/">previous   post</a> for more info.</strong></p>
<h2>Part 3 – Installation</h2>
<p>Add-on performance has been a hot topic recently, given that add-ons are a significant contributor to slowdowns, specially at startup. One of the reasons I&#8217;ve seen mentioned is how extensions are laid out in the file system after installation. The suggestion is to educate developers on how to <a href="http://autonome.wordpress.com/2010/03/10/firefox-extensions-and-performance/#comment-706">package add-ons taking performance into account</a>. That&#8217;s not a bad approach, but I think it&#8217;s easier for developers and more effective in general if the post-install procedure handles performance optimizations. This might even be necessary, considering that different applications and different platforms can have different ways to optimize for performance.</p>
<p>The add-on installer should package most if not all files into a single, uncompressed JAR file, as suggested in <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=533038">this bug report</a>:</p>
<ul>
<li>Add-ons in the new format should not have internal chrome JARs.</li>
<li>All files that can be efficiently read from a JAR file will be moved into a single uncompressed JAR (like a TAR) upon installation. This is a single JAR for all add-ons using the new system. One possible &#8220;cheat&#8221; to accomplish this is to create a fake add-on install directory, with a single JAR and a generated manifest that includes the information for all add-ons contained in it. This manifest could even be an &#8220;old style&#8221; chrome.manifest, in case changing chrome resolution rules turns out to be too difficult.</li>
<li>Files that can&#8217;t be put in the JAR (this is mentioned in the bug report, and I don&#8217;t know why this is the case), such as binary libraries and components should ideally be grouped together in the same place where the big JAR will be located. One concern here would be file name collisions and the way these files are automagically loaded from their special folders, which may be hard to overcome. In case this is too difficult, it&#8217;s probably best to lay them out like it&#8217;s done now: on their separate extension directories.</li>
</ul>
<p>From a performance perspective, this is what makes most sense for all platforms as far as I know, so it would be the default and maybe only behavior. However, if different packaging requirements come up for specific platforms, it can and should be implemented, with the great advantage that it will be possible to do so, at least with add-ons using the new system.</p>
<h2>Spec corrections</h2>
<ul>
<li>By far, the most debated point in this spec has been the format chosen for the manifest. I&#8217;m convinced now, JSON was not the right way to go. I really like John J Barton&#8217;s idea of an HTML manifest, so I think I will pursue this approach. It makes sense due to familiarity, IDE support and even skinability. Somebody mentioned that I should also cover update.rdf and McCoy. This will be done in the new XML-based spec, and it should be very straightforward.</li>
<li>In part 2 I mentioned that having internal JARs would still be possible. I&#8217;m reconsidering this decision. Since the new format is meant to be a fresh start in several regards, I&#8217;m thinking it would be a bad idea to drag these old practices back, considering that they would have a negative effect on the post-install process.</li>
</ul>
<p>The final project spec will be moved to a wiki, where it makes more sense to have a document that will likely see many iterations and corrections. I will being working on this as soon as possible, and will post a link in this blog once there&#8217;s something everybody can look at.</p>
<p>I will also post updates when there&#8217;s more progress on the project.</p>
<h2>Acknowledgements</h2>
<ul>
<li>Google, for creating the very cool GSOC and keeping it alive for many years.</li>
<li>Gerv, choffman, and all GSOC admins.</li>
<li>Hebert Duarte, for volunteering to implement this project.</li>
<li>Everyone who has been posting comments and giving me feedback. It&#8217;s all very valuable and not a single comment has gone unread.</li>
</ul>
<p>Thank you all!</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2010/05/add-on-packaging-spec-3/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Add-on packaging spec, part 2</title>
		<link>http://xulforge.com/blog/2010/05/add-on-packaging-spec-2/</link>
		<comments>http://xulforge.com/blog/2010/05/add-on-packaging-spec-2/#comments</comments>
		<pubDate>Wed, 19 May 2010 01:12:33 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=61</guid>
		<description><![CDATA[This is a specification for a project that will be implemented for the Google Summer of Code, and it can still change as feedback is received. There are no concrete plans of making this a part of Firefox in the near future. Read my previous post for more info. Part 2 – URL resolution Here&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><strong>This is a specification for a project that will be  implemented for the Google Summer of Code, and it can still change as  feedback is received. There are no concrete plans of making this a part  of Firefox in the near future. Read my <a href="../2010/05/add-on-packaging-ideas-gsoc/">previous  post</a> for more info.</strong></p>
<h2>Part 2 – URL resolution</h2>
<p>Here&#8217;s a simple chrome.manifest file, as exemplified in part 1:</p>
<pre>content   xulschoolhello              jar:chrome/xulschoolhello.jar!/content/
skin      xulschoolhello  classic/1.0 jar:chrome/xulschoolhello.jar!/skin/
locale    xulschoolhello  en-US       jar:chrome/xulschoolhello.jar!/locale/en-US/

overlay chrome://browser/content/browser.xul  chrome://xulschoolhello/content/browserOverlay.xul</pre>
<p>There are two things I find silly about it:</p>
<ol>
<li>The file and directory structure is too complicated for a simple add-on. It could be simpler, but the form above is the current recommended way of doing things.</li>
<li>If this is the default, recommended way of doing things, then why is it necessary to explicitly declare it?</li>
</ol>
<p>This part of the specification aims to remove as much redundancy as possible from chrome (and other) declarations, as well as provide sensible defaults so that simple add-ons are simple to develop.</p>
<h3>The simplest manifest</h3>
<p>Let&#8217;s begin with the new manifest file introduced in the previous part of the spec:</p>
<pre>{
  "id" : "helloworld@xulschool.com",
  "name" : "XUL School Hello World",
  "description" : "Welcome to XUL School!",
  "version" : "0.1",
  "authors" : "Appcoast",
  "homepageURL" : "https://developer.mozilla.org/en/XUL_School",
  "type" : "2",
  "targetApplications" : {
    "id" : "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}",
    "minVersion" : "3.0",
    "maxVersion" : "3.6.*"
  },
<strong>  "domains" : "xulschoolhello",
  "overlays" : {
    "source" : "chrome://xulschoolhello/content/overlay.xul",
    "target" : "chrome://browser/content/browser.xul"
  }</strong>
}</pre>
<p>A couple of notes before diving in:</p>
<ul>
<li>There&#8217;s an ongoing discussion of what format is best for the manifest, JSON or some form of XML or HTML. Examples are being presented as JSON but could change eventually. If you want to join the discussion, please do so in <a href="http://xulforge.com/blog/2010/05/add-on-packaging-spec/">Part 1</a>.</li>
<li>The &#8220;domains&#8221; property is now plural, as it should be. (Thanks Wladimir!)</li>
</ul>
<p>The highlighted sections are the equivalent of the chrome.manifest file presented above. The &#8220;domains&#8221; declaration covers the &#8220;content&#8221;,  &#8220;skin&#8221; and &#8220;locale&#8221; declarations in the old format. However, the file layout also needs to change, since the defaults for the new format are much simpler than in the old one. Here are the default resolutions for all URLs and other special folders:</p>
<ul>
<li>&#8220;content&#8221; and &#8220;skin&#8221; URLs default to the root directory, where the manifest file is located. This means that the simplest of add-ons would consist of the manifest file and an overlay file zipped together. Complex add-ons would of course require directory structures in order to keep everything organized, but that&#8217;s left to the authors to determine.</li>
<li>&#8220;locale&#8221; URLs are a little more involved. If the author only wishes to ship the add-on in one locale, then the locale files can be located in the root directory, just like &#8220;content&#8221; and &#8220;skin&#8221; files. If there are more languages, they can be organized under &#8220;/locale/en-US/&#8221; and similar. The &#8220;locale&#8221; directory in the root would have that special meaning, and all directories within it are considered locale folders and are automatically registered. There&#8217;s no need for chrome declarations even in this case.</li>
<li>&#8220;resource&#8221; URLs will also default to the root directory, and will use the same domain. In the example extension above, &#8220;resource://xulschoolhello/hello.jsm&#8221; would point to the &#8220;hello.jsm&#8221; file in the root of the add-on package.</li>
<li>The &#8220;components&#8221; and &#8220;platform&#8221; folders will continue to have their special meaning.</li>
<li>The default preferences file will be named &#8220;defaultPrefs.js&#8221; and will also reside in the package root.</li>
</ul>
<h3>Advanced manifests</h3>
<p>The defaults defined above should be adequate for most add-ons I&#8217;ve ever seen (and I&#8217;ve seen a lot!), but we can&#8217;t leave out add-ons that require more than this. It&#8217;s very important that the new system is as flexible as possible for authors, and that add-ons can be migrated to it without requiring significant changes or refactoring.<br />
First of all, the &#8220;domains&#8221; attribute can be extended to include declarations similar to old-style manifests. Here&#8217;s the equivalent of the first chrome.manifest declarations in the first example:</p>
<pre>"domains" : {
  "name" : "xulschoolhello",
  "content" : {
    "location" : "jar:chrome/xulschoolhello.jar!/content/"
  },
  "skin" : {
    "location" : "jar:chrome/xulschoolhello.jar!/skin/"
  },
  "locale" : {
    "locale" : "en-US",
    "location" : "jar:chrome/xulschoolhello.jar!/locale/en-US/"
  }
},</pre>
<p>Some notes about this expanded format:</p>
<ul>
<li>&#8220;domains&#8221; can be an array, in case multiple domains need to be defined.</li>
<li>The name of the skin is still redundant, so there&#8217;s no need to specify it.</li>
<li>&#8220;content&#8221;, &#8220;skin&#8221;, &#8220;locale&#8221; and &#8220;resources&#8221; can be arrays, to specify multiple entries.</li>
<li>&#8220;content&#8221;, &#8220;skin&#8221;, &#8220;locale&#8221; and &#8220;resources&#8221; support a &#8220;flags&#8221; attribute, in order to support <a href="https://developer.mozilla.org/en/Chrome_Registration#Manifest_Flags">manifest flags</a>. This attribute can also be specified on overlays, overrides and style declarations, which are not exemplified but are the same as the overlay declaration shown before.</li>
</ul>
<p>Moreover, it should be possible to change the locations of any of our &#8220;special&#8221; files and folders, in order to give developers maximum flexibility. For this, the manifest can have a &#8220;locations&#8221; attribute, exemplified here:</p>
<pre>"locations" : {
  "defaultPrefs" : "prefs/myPrefs.js",
  "components" : "code/myComponents/",
  "platform" : "code/platform/"
},
</pre>
<p>The only file that has a mandated name and location would be the manifest file. The rest can be organized to the authors&#8217; preference, provided they don&#8217;t like the defaults and they want to tinker with the manifest.</p>
<h3>Manifest Localization</h3>
<p><a href="https://developer.mozilla.org/en/Install_Manifests#localized">Localizing manifests</a> is an arduous task. The most modern way to do it involves adding all the localized information in the manifest file, which isn&#8217;t yet supported by the most popular add-on localization community, Babelzilla. Keeping the manifest properly localized becomes a burden to add-on developers, and most don&#8217;t even bother.</p>
<p>The suggested solution in the new system is to take advantage of the existing localization infrastructure. The manifest localization file will default to the location &#8220;chrome://firstDeclaredDomain/locale/manifest.properties&#8221;, or can be explicitly defined (needs to be a chrome locale URL):</p>
<pre>"localized" : "chrome://xulschoolhello/locale/manifest.properties",
</pre>
<p>This localized file would hold strings corresponding to the <a href="https://developer.mozilla.org/en/Install_Manifests#localized">localizable attributes</a>:</p>
<pre>name = Hola Mundo de XUL School
description = Bienvenido a XUL School!
translator.1 = Jorge
translator.2 = Somebody else</pre>
<p>The .1 and .2 suffix is just a way to handle multi-valued attributes.</p>
<p>Moving this information out of the manifest has one drawback: the add-on installer needs to do some additional effort to show these values during installation, since it will require to figure out the location of the localized file. This isn&#8217;t too hard to figure out using the manifest, though, and the advantages outweigh a few additional ms during installation.</p>
<p>Part 3 of this specification will cover add-on installation and any pending topics. It will also introduce a wiki page where the full spec will be fleshed out and all edge cases will be covered.</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2010/05/add-on-packaging-spec-2/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Add-on packaging spec, part 1</title>
		<link>http://xulforge.com/blog/2010/05/add-on-packaging-spec/</link>
		<comments>http://xulforge.com/blog/2010/05/add-on-packaging-spec/#comments</comments>
		<pubDate>Thu, 13 May 2010 22:48:29 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=59</guid>
		<description><![CDATA[This is a specification for a project that will be implemented for the Google Summer of Code, and it can still change as feedback is received. There are no concrete plans of making this a part of Firefox in the near future. Read my previous post for more info. Part 1 &#8211; The Manifest File [...]]]></description>
			<content:encoded><![CDATA[<p><strong>This is a specification for a project that will be implemented for the Google Summer of Code, and it can still change as feedback is received. There are no concrete plans of making this a part of Firefox in the near future. Read my <a href="http://xulforge.com/blog/2010/05/add-on-packaging-ideas-gsoc/">previous post</a> for more info.</strong></p>
<h2>Part 1 &#8211; The Manifest File</h2>
<p>Most add-ons rely on 2 manifest files: <a href="https://developer.mozilla.org/en/Install_Manifests">install.rdf</a> and <a href="https://developer.mozilla.org/en/Chrome_Registration">chrome.manifest</a>. The install manifest holds add-on metadata such as its name, description, icon path and compatibility information. The chrome manifest determines where to locate chrome files under different circumstances (OS, application, version, etc.), as well as overlays, skins and locales.</p>
<p>These files are written in very different text formats, and they are not completely independent from each other. For example, the install manifest uses chrome paths to locate the extension icon, preferences window and about window, if defined. Install manifests also hold localized data which hasn&#8217;t been integrated properly into the add-on localization system. It&#8217;s also worth noting that the average add-on has very short and simple manifest files, including a significant amount of boilerplate code.</p>
<p>In order to simplify the packaging system, both manifest files should be merged into a single file. The file specification should allow for the least amount of unnecessary declarations that is possible, so that simple add-ons are simple to make. It should also be robust enough not to limit complex add-on creation, and it should cover every single non-obsoleted feature of both current manifest files. It should work for all add-ons that currently use the XPI format: extensions, themes, locale, and multi-item packages.</p>
<p>The chosen format for the manifest file is JSON. The reasons behind this decision are:</p>
<ul>
<li>JSON is a very compact and easy to read format.</li>
<li>It&#8217;s widely used and well known.</li>
<li>Firefox and Mozilla-based applications already include a fast and safe <a href="https://developer.mozilla.org/en/Using_JSON_in_Firefox">JSON parser</a>.</li>
<li>The Jetpack project uses JSON for its <a href="https://jetpack.mozillalabs.com/sdk/0.3/docs/#guide/packaging">manifest file</a>, and using the same base for all add-ons helps maintain consistency and ease switching between platforms if needed.</li>
</ul>
<p>The only major disadvantage is <a href="http://stackoverflow.com/questions/244777/can-i-comment-a-json-file">not being able to comment</a> in JSON files. There are workarounds, but they&#8217;re not very pretty.</p>
<p>The manifest file will be named <strong>manifest.json</strong>. It&#8217;s not package.json like previously speculated because it doesn&#8217;t serve the exact same purpose as package manifests in Jetpack, and it would cause confusion about the meaning of packages. It&#8217;s not install.json because it could be easily confused with the old install.js manifests.</p>
<p>The presence of manifest.json in the XPI file will indicate this file needs to be handled as a v2 package. If manifest.json isn&#8217;t found, the current install system should be used. XPIs should be able to include old and new manifest files in order to be backward-compatible with application versions that don&#8217;t support the new system.</p>
<h3>A simple manifest file</h3>
<p>A very simple Hello World add-on (taken from <a href="https://developer.mozilla.org/en/XUL_School">XUL School</a>) would have the following manifest files.</p>
<p><strong>install.rdf</strong></p>
<pre>&lt;?xml version="1.0"?&gt;

&lt;RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:em="http://www.mozilla.org/2004/em-rdf#"&gt;
  &lt;Description about="urn:mozilla:install-manifest"&gt;
    &lt;em:id&gt;helloworld@xulschool.com&lt;/em:id&gt;
    &lt;em:name&gt;XUL School Hello World&lt;/em:name&gt;
    &lt;em:description&gt;Welcome to XUL School!&lt;/em:description&gt;
    &lt;em:version&gt;0.1&lt;/em:version&gt;
    &lt;em:creator&gt;Appcoast&lt;/em:creator&gt;
    &lt;em:homepageURL&gt;https://developer.mozilla.org/en/XUL_School&lt;/em:homepageURL&gt;
    &lt;em:type&gt;2&lt;/em:type&gt;
    &lt;em:targetApplication&gt;
      &lt;Description&gt;
        &lt;em:id&gt;{ec8030f7-c20a-464f-9b0e-13a3a9e97384}&lt;/em:id&gt;
        &lt;em:minVersion&gt;3.0&lt;/em:minVersion&gt;
        &lt;em:maxVersion&gt;3.6.*&lt;/em:maxVersion&gt;
      &lt;/Description&gt;
    &lt;/em:targetApplication&gt;
  &lt;/Description&gt;
&lt;/RDF&gt;</pre>
<p><strong>chrome.manifest</strong></p>
<pre>content   xulschoolhello              jar:chrome/xulschoolhello.jar!/content/
skin      xulschoolhello  classic/1.0 jar:chrome/xulschoolhello.jar!/skin/
locale    xulschoolhello  en-US       jar:chrome/xulschoolhello.jar!/locale/en-US/

overlay chrome://browser/content/browser.xul  chrome://xulschoolhello/content/browserOverlay.xul</pre>
<p>The equivalent manifest file in the new system would be the following.</p>
<p><strong>manifest.json</strong></p>
<pre>
<pre>{
  id : "helloworld@xulschool.com",
  name : "XUL School Hello World",
  description : "Welcome to XUL School!",
  version : "0.1",
  authors : "Appcoast",
  homepageURL : "https://developer.mozilla.org/en/XUL_School",
  type: "2",
  targetApplications : {
    id : "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}",
    minVersion : "3.0",
    maxVersion : "3.6.*"
  },     
  domain : "xulschoolhello",
  overlays : {
    source : "chrome://xulschoolhello/content/overlay.xul",
    target : "chrome://browser/content/browser.xul"
  }
}</pre>
</pre>
<p>The (not really) missing chrome declarations will be covered in part 2 of this specification.</p>
<p>Plural attributes in the manifest file (authors, targetApplications, overlays, and others) can either be a single value or object, or an array of them. So, if there were multiple authors to the add-on, the following would also work:</p>
<pre>
<pre>authors : [ "Appcoast", "Mozilla" ],</pre>
</pre>
<p>Part 2 of this specification will attempt to cover all possible attributes in the manifest file, as well as attribute localization.</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2010/05/add-on-packaging-spec/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Add-on Packaging Idea now a GSOC project</title>
		<link>http://xulforge.com/blog/2010/05/add-on-packaging-ideas-gsoc/</link>
		<comments>http://xulforge.com/blog/2010/05/add-on-packaging-ideas-gsoc/#comments</comments>
		<pubDate>Thu, 13 May 2010 20:17:31 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=57</guid>
		<description><![CDATA[When I wrote my previous post about making add-on packaging simpler, I hoped but didn&#8217;t expect much to come out of it. It was more like taking a peek into the community and see how much interest there was for these kinds of proposal. I have a real desire to see things like this come [...]]]></description>
			<content:encoded><![CDATA[<p>When I wrote my <a href="http://xulforge.com/blog/2010/03/xpi-v2-making-ext-dev-easier/">previous post</a> about making add-on packaging simpler, I hoped but didn&#8217;t expect much to come out of it. It was more like taking a peek into the community and see how much interest there was for these kinds of proposal. I have a real desire to see things like this come to fruition, but not enough time or resources to do it myself. And it&#8217;s very difficult for a volunteer to handle a project of such magnitude.</p>
<p>But then the <a href="http://code.google.com/soc/">Google Summer of Code</a> came to the rescue. I believe Gerv mentioned it in one of our weekly all hands meetings, and I thought &#8220;it&#8217;s a long short, but what the hell&#8221;. I just threw the idea into the candidates list. In a matter of a couple of weeks, the idea went from candidate to proposal, to approved proposal, to approved proposal with an assigned student. So, this summer, Hebert Duarte from Brazil will be working on the add-on packaging idea, and hopefully we will have a working implementation within a couple of months. That&#8217;s awesome!</p>
<p>Now it&#8217;s my responsibility to guide Hebert in the right direction, and to give him all he needs to get this project going. For that I will be posting a more detailed specification of the new add-on packaging system, to try to cover the quirks and special cases that need to be addressed. Expect it to appear on this blog very soon. Coding begins on May 24th, so I want to have everything figured out by then. Your feedback as usual is welcome.</p>
<p>Note that having a working implementation doesn&#8217;t guarantee it will become part of Firefox or other applications any time soon. At the moment there are no plans or expectations of when and if we will be including this into the Mozilla code base. That&#8217;s a whole other project <img src='http://xulforge.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2010/05/add-on-packaging-ideas-gsoc/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Doing my part for open audio</title>
		<link>http://xulforge.com/blog/2010/03/doing-my-part-for-open-audio/</link>
		<comments>http://xulforge.com/blog/2010/03/doing-my-part-for-open-audio/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 17:25:21 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[metal]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[pneuma]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=45</guid>
		<description><![CDATA[The past few years have been completely surreal for me. I still can&#8217;t quite believe I&#8217;m working for Mozilla and helping the project in such a significant way. It&#8217;s one of those things you dream about but you never expect it to become true. Then it happens and you realize it&#8217;s just a matter of [...]]]></description>
			<content:encoded><![CDATA[<p>The past few years have been completely surreal for me. I still can&#8217;t quite believe I&#8217;m working for Mozilla and helping the project in such a significant way. It&#8217;s one of those things you dream about but you never expect it to become true. Then it happens and you realize it&#8217;s just a matter of working hard and doing things right. Go figure.</p>
<p>I keep feeling the same about a side project of mine that began shortly before I joined Mozilla. A long time friend of mine has lead a heavy metal band called <a href="http://pneumametal.com/">Pneuma</a> for quite a few years now. They had to break ties with their production company recently because of unacceptable delays on their part, and lots of the typical crap professional musicians have to deal with. They were looking for people to invest in the independent production of their next album, and I guess I was just in the right place at the right time.</p>
<p>Of course I wouldn&#8217;t invest in them if I didn&#8217;t think they were really good.  I have great expectations for their upcoming album and I&#8217;m helping them in every way I can. The best way I can help them is by bringing my knowledge of the web and technology to the table. So far I&#8217;ve helped them set up their <a href="http://pneumametal.com/">temporary website</a> and <a href="http://twitter.com/PneumaRock">twitter account</a>. I will also be helping them out with their online distribution, because not having your album listed on the iTunes Store is a very new and very big mistake a band can easily make.</p>
<p>But I digress. The point of this post is that I decided to use HTML5 on their site, and provide their first single in open OGG/Vorbis format (falling back to MP3 and Quicktime), with the added bonus that the band agreed to have the track available for download and free distribution. So anybody can listen and download the track in their preferred format, MP3 or OGG. The audio player looks fantastic on the site, by the way. Much better than QuickTime or WMP plugins. The audio quality is also great, and the file is much smaller than its MP3 counterpart.</p>
<p>Adding also to the surrealism of the whole &#8220;music producer&#8221; side of my life is the fact that Pneuma will be the opening act at the first Metallica concert in Costa Rica, next Sunday. This is the biggest concert in Costa Rican history, and I&#8217;m pretty sure I&#8217;ll be backstage. I haven&#8217;t really taken that in yet, there&#8217;s just too much work to do before the concert. But <strong>WOW</strong>.</p>
<p>If you like thrash / progressive metal, I recommend you visit <a href="http://pneumametal.com/">http://pneumametal.com/</a> and have a quick listen. I think you&#8217;ll be pleasantly surprised.</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2010/03/doing-my-part-for-open-audio/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Extension update</title>
		<link>http://xulforge.com/blog/2009/07/extension-update/</link>
		<comments>http://xulforge.com/blog/2009/07/extension-update/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 21:27:41 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[add-on]]></category>
		<category><![CDATA[amo]]></category>
		<category><![CDATA[donations]]></category>
		<category><![CDATA[extend firefox]]></category>
		<category><![CDATA[fire.fm]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=13</guid>
		<description><![CDATA[Recently I&#8217;ve been occupying myself with several Firefox extension projects: Most of all, I&#8217;ve been contributing to the AMO editor team to keep the add-on review queues down to a manageable size. There&#8217;s a great deal of new submissions and updates due to the release of Firefox version 3.5. There are hundreds of updates that [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I&#8217;ve been occupying myself with several Firefox extension projects:</p>
<ol>
<li>Most of all, I&#8217;ve been contributing to the <a href="http://addons.mozilla.org">AMO</a> editor team to keep the add-on review queues down to a manageable size. There&#8217;s a great deal of new submissions and updates due to the release of Firefox version 3.5. There are hundreds of updates that are minimal to non existent compatibility changes, so I&#8217;ve been able to review close to 200 updates on this month alone. I enjoy my work with the editor team, specially because I&#8217;ve very fond of doing code review and being ruthlessly critical. It&#8217;s in my nature, what can I say&#8230; There are plans for <a href="http://blog.mozilla.com/addons/2009/07/01/removing-the-sandbox/">removing the AMO sandbox</a>, which I find intriguing, to say the least. I wonder how that will change the editor group and their work.</li>
<li>The <a href="http://labs.mozilla.com/contests/extendfirefox3.5/index.php">Extend Firefox 3.5</a> competition has been officially announced. With an October deadline, it includes several new interesting categories to compete in. Jose and I are already working on Fire.fm 1.3, which will be our entry for best extension update. There&#8217;s a great deal of new features we&#8217;ll be putting into it, which I think will greatly improve our user experience. We&#8217;re also working on a few ideas for new add-ons. I hope to be able to submit a couple of entries to increase our chances of winning.</li>
<li>Finally, the <a href="http://blog.mozilla.com/addons/2009/07/15/firefox-add-ons-contributions-pilot/">Add-ons Contributions pilot</a> was introduced to AMO. This enabled add-on authors to request donations for their project right on AMO, giving our donation links more exposure and possibly allowing a few authors to remove donation requests from their add-on UI, which is always a loss for user experience. We have activated contributions for Fire.fm, and so far the response has been pretty good. We&#8217;re very happy about it and hope people will continue helping us out.</li>
</ol>
<p>I still feel in &#8216;break mode&#8217;, and hope to start working in full gear soon. There&#8217;s so much I want to do, and I still need to get everything sorted out. More updates soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2009/07/extension-update/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Introducing My Personas</title>
		<link>http://xulforge.com/blog/2009/05/introducing-my-personas/</link>
		<comments>http://xulforge.com/blog/2009/05/introducing-my-personas/#comments</comments>
		<pubDate>Thu, 28 May 2009 18:45:02 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[add-on]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[personas]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[xulforge]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=11</guid>
		<description><![CDATA[For my first &#8220;official&#8221; Xulforge project, I decided to take on a relatively simple task, so that I could get the site and blog started quickly. This way at least I have some content to show for while I work on larger projects . This first project is My Personas. This project is a set [...]]]></description>
			<content:encoded><![CDATA[<p>For my first &#8220;official&#8221; Xulforge project, I decided to take on a relatively simple task, so that I could get the site and blog started quickly. This way at least I have some content to show for while I work on larger projects <img src='http://xulforge.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . This first project is <a title="My Personas project at Xulforge" href="http://xulforge.com/personas/">My Personas</a>.</p>
<p>This project is a set of skins for the <a href="http://www.getpersonas.com/">Personas</a> extension. Personas is a new approach to developing themes for Firefox and other Mozilla apps. Creating a skin is pretty simple: all you need is a header image and a footer image. Creating a good one is a little harder; you&#8217;ll need to fill a very, very large image area, while at the same time keeping in mind that only a tiny fraction of the image will be visible in the majority of browsers. Patterns and other artificial designs are probably easier, but mine are just extracts from my large photo collection, so it&#8217;s trickier.</p>
<p>I have a list of the skins I&#8217;ve created in the <a href="http://xulforge.com/personas/">project page</a>, with explanations on why I chose the pictures. So far my designs are doing pretty well, with a few hundred active daily users at this time. You can see the user counts in <a href="http://personas.services.mozilla.com/gallery/Designer/jorgev">my designer page</a>.</p>
<p>My skins were all created using <a href="http://www.gimp.org/">The Gimp</a>, and the pictures were taken with 2 different models of the Canon PowerShot (I upgraded recently). Artistic feedback is greatly appreciated.</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2009/05/introducing-my-personas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Regarding Fire.fm</title>
		<link>http://xulforge.com/blog/2009/05/regarding-firefm/</link>
		<comments>http://xulforge.com/blog/2009/05/regarding-firefm/#comments</comments>
		<pubDate>Thu, 28 May 2009 00:44:14 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[add-on]]></category>
		<category><![CDATA[fire.fm]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[last.fm]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=7</guid>
		<description><![CDATA[Fire.fm is a project that a friend and I began in order to compete in the Extend Firefox 3 competition, particularly to participate in the Best Music Add-on, which was being sponsored by Last.fm. I was a big fan of Last.fm at the time, given that it offered free online radio all around the world.  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://addons.mozilla.org/en-US/firefox/addon/7684">Fire.fm</a> is a project that a friend and I began in order to compete in the Extend Firefox 3 competition, particularly to participate in the Best Music Add-on, which was being sponsored by <a href="http://last.fm/">Last.fm</a>. I was a big fan of Last.fm at the time, given that it offered free online radio all around the world.  Sadly, that <a href="http://blog.last.fm/2009/04/22/radio-subscriptions">ended somewhat abruptly</a>.</p>
<p>Anyway, at the time we were pretty excited about it, and we spent a great deal of time and effort making Fire.fm a sure winner. And <a title="Extend Firefox 3 Winners Announcement" href="http://blog.mozilla.com/extendfirefox/2008/08/21/extend-firefox-3-winners/">we won</a>! We won the Best Music Add-on category, and I think we weren&#8217;t allowed to win in others, because I think we should have won the general competition as well <img src='http://xulforge.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Needless to say, we were super happy with this, and we have been actively maintaining the add-on in our spare time.</p>
<p>Fire.fm is, in a nutshell, a Last.fm radio player. It used to be a very easy way to tune into Last.fm radio without having to be on top of the website all day long. Our users loved it, and shortly we were in the AMO Recommended List.</p>
<p>Sadly, Last.fm cut off their free radio service to most of the world shortly afterward, so at least I lost a lot of the motivation I initially had to continue making it grow. Still, I don&#8217;t want to abandon a project that still has much to be fixed, so I&#8217;ll certainly won&#8217;t quit until all the annoying bugs are solved. Most users have a very smooth experience with Fire.fm, but there are a few unlucky ones that have some serious problems, like not being able to listen to stations at all&#8230; New features in Fire.fm are probably going to be very rare from version 1.2.3 and later.</p>
<p>Xulforge was already in my mind when we began working on Fire.fm, so I always kinda saw it as a Xulforge project. Xulforge was put on hold until very recently, so it feels weird trying to associate the two. I&#8217;ll keep Fire.fm in my project list, though, because I it was one of my first independent projects, and also because it has been very successful and I&#8217;m very proud of it.</p>
<p>Fire.fm is open source, BSD-licensed (more on that in another post). So, if you want to take a look into our code, you&#8217;re more than welcome. See the <a href="https://sourceforge.net/projects/firefm/">Fire.fm Sourceforge Project Page</a> for more information.</p>
<div id="attachment_8" class="wp-caption aligncenter" style="width: 110px"><a href="https://sourceforge.net/projects/firefm/"><img class="size-full wp-image-8" title="Fire.fm Logo" src="http://xulforge.com/blog/wp-content/uploads/2009/05/logo100.png" alt="Fire.fm Logo" width="100" height="100" /></a><p class="wp-caption-text">Fire.fm Logo</p></div>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2009/05/regarding-firefm/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->