SlideShare a Scribd company logo
Building with XUL Ben Goodger Software Engineer, Google Inc.
What is XUL? XUL is a powerful language that lets you quickly develop client software XUL is used by Mozilla Firefox, Thunderbird and other software projects.
What can XUL do? Extensions (to Firefox, Thunderbird, other applications) - BugMeNot, AdBlock, MiniT, Sage, Enigmail, etc.  Applications (like Firefox, Thunderbird, etc)
XUL Features XML Syntax Flexible Box Model Wide array of application controls Data binding Rich set of platform services Development supported across numerous platforms Scripting and flexibility with implementation language Tools for section 508 accessibility compliance Localizability Tested and deployed to millions of people
Where is XUL going? XUL2.0 (API polish)  XULRunner Standardization (via: WHATWG: datagrid, etc, W3C: XUL Box Model in CSS)
A Simple XUL Demo
What does XUL look like? <?xml version=&quot;1.0&quot;?> <?xml-stylesheet href=&quot;chrome://global/skin/&quot;?> <window id=&quot;test&quot;  xmlns=&quot;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&quot; title=&quot;Hello, World!&quot;> <script type=&quot;application/x-javascript&quot; src=&quot;test.js&quot;/> <vbox flex=&quot;1&quot;> <listbox id=&quot;itemlist&quot; flex=&quot;1&quot;> <listitem label=&quot;Item 1&quot;/> <listitem label=&quot;Item 2&quot;/> </listbox> <hbox> <textbox id=&quot;labelfield&quot; flex=&quot;1&quot; oninput=&quot;validateInput();&quot;/> <button id=&quot;addButton&quot; label=&quot;Add Item&quot; disabled=&quot;true&quot; oncommand=&quot;addItem();&quot;/> </hbox> </vbox> </window>
Making XUL Live function addItem() { var listbox = document.getElementById(&quot;itemlist&quot;); var listitem = document.createElement(&quot;listitem&quot;); var labelfield = document.getElementById(&quot;labelfield&quot;); listbox.appendChild(listitem); listitem.label = labelfield.value; labelfield.value = &quot;&quot;; validateInput(); labelfield.focus(); } function validateInput() { var field = document.getElementById(&quot;labelfield&quot;); var button = document.getElementById(&quot;addButton&quot;); button.disabled = field.value == &quot;&quot;; }
Adding Visual Panache Visual style is added using CSS Icons, colors, backgrounds Themes
Making your XUL Application Live Networking File I/O Preferences Web Services Extensions
Extending XUL XBL is Mozilla’s Extensible Binding Language Create new elements by using others Develop element node apis <binding id=“mytag”>   <content>   <xul:hbox>   <xul:button label=“Button 1”/>   <xul:button label=“Button 2”/>   </xul:hbox>   </content>   <implementation>   <constructor>   alert(“foo”);   </constructor>   </implementation>  </binding>
Building XUL Extensions Changing the UI - overlaying the DOM - executing script
A XUL Extension to Firefox Adds Session History Strip above browser Thumb strip added using XUL overlays Uses <canvas> to render page thumbnails
Packaging XUL Extensions Extension Bundle UI Components Defaults Housekeeping
Packaging XUL Applications Application Bundle UI Components Defaults Housekeeping
Resources http://www.xulplanet.com news://news.mozilla.org irc://irc.mozilla.org  #developers Rapid Application Development with Mozilla Firefox Hacks
Why Use XUL Rapid development Easy to learn Rich platform services especially for internet applications Localizable, accessibility compliant Small application size when targeting deployed XULRunner Platform deployed to millions of users
Questions?

More Related Content

PPT
ODP
DDive11 - Mobile Development For Domino
PPT
Gwt Presentation 1
PPTX
Html5presentation
DOCX
Wildlife conservation project management adri jovin
PDF
Cumberland County Easter Events
PDF
Deployment de Rails
PDF
20 SEP 13 - 20th EN BDE ORG DAY
DDive11 - Mobile Development For Domino
Gwt Presentation 1
Html5presentation
Wildlife conservation project management adri jovin
Cumberland County Easter Events
Deployment de Rails
20 SEP 13 - 20th EN BDE ORG DAY

Similar to Building with XUL (20)

PDF
Mozilla Firefox Extension Development, Course 1: Basic
PPTX
Building with XUL
PDF
XUL - The future of user-interfaces on the web
PDF
Firefox extension Development
PPT
XUL - Mozilla Application Framework
ODP
Ample SDK: A tour de force
PPT
Plug-in Architectures
PPTX
HungryFox - Firefox Extension Workshop
PPT
2/19 regular meeting paper
PPT
Bp308 Ibm Lotus Domino Web Facelift Using Ajax And Dxl
PPT
Creating Extensions For Firefox
PDF
Declarative and standards-based web application development with the Ample SDK
PPTX
Firefox Extension Development
PPT
Hnd201 Building Ibm Lotus Domino Applications With Ajax Plugins
PPT
Sergey Ilinsky Presentation Ample Sdk
PDF
Masterin Large Scale Java Script Applications
PDF
Xsemble - Make software like they make cars!
PPT
Building Complex GUI Apps The Right Way. With Ample SDK - SWDC2010
PDF
Extending XForms with Server-Side Functionality
DOCX
XForms Essentials
Mozilla Firefox Extension Development, Course 1: Basic
Building with XUL
XUL - The future of user-interfaces on the web
Firefox extension Development
XUL - Mozilla Application Framework
Ample SDK: A tour de force
Plug-in Architectures
HungryFox - Firefox Extension Workshop
2/19 regular meeting paper
Bp308 Ibm Lotus Domino Web Facelift Using Ajax And Dxl
Creating Extensions For Firefox
Declarative and standards-based web application development with the Ample SDK
Firefox Extension Development
Hnd201 Building Ibm Lotus Domino Applications With Ajax Plugins
Sergey Ilinsky Presentation Ample Sdk
Masterin Large Scale Java Script Applications
Xsemble - Make software like they make cars!
Building Complex GUI Apps The Right Way. With Ample SDK - SWDC2010
Extending XForms with Server-Side Functionality
XForms Essentials
Ad

More from elliando dias (20)

PDF
Clojurescript slides
PDF
Why you should be excited about ClojureScript
PDF
Functional Programming with Immutable Data Structures
PPT
Nomenclatura e peças de container
PDF
Geometria Projetiva
PDF
Polyglot and Poly-paradigm Programming for Better Agility
PDF
Javascript Libraries
PDF
How to Make an Eight Bit Computer and Save the World!
PDF
Ragel talk
PDF
A Practical Guide to Connecting Hardware to the Web
PDF
Introdução ao Arduino
PDF
Minicurso arduino
PDF
Incanter Data Sorcery
PDF
PDF
Fab.in.a.box - Fab Academy: Machine Design
PDF
The Digital Revolution: Machines that makes
PDF
Hadoop + Clojure
PDF
Hadoop - Simple. Scalable.
PDF
Hadoop and Hive Development at Facebook
PDF
Multi-core Parallelization in Clojure - a Case Study
Clojurescript slides
Why you should be excited about ClojureScript
Functional Programming with Immutable Data Structures
Nomenclatura e peças de container
Geometria Projetiva
Polyglot and Poly-paradigm Programming for Better Agility
Javascript Libraries
How to Make an Eight Bit Computer and Save the World!
Ragel talk
A Practical Guide to Connecting Hardware to the Web
Introdução ao Arduino
Minicurso arduino
Incanter Data Sorcery
Fab.in.a.box - Fab Academy: Machine Design
The Digital Revolution: Machines that makes
Hadoop + Clojure
Hadoop - Simple. Scalable.
Hadoop and Hive Development at Facebook
Multi-core Parallelization in Clojure - a Case Study
Ad

Recently uploaded (20)

PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PPTX
Machine Learning_overview_presentation.pptx
PDF
cuic standard and advanced reporting.pdf
PDF
Electronic commerce courselecture one. Pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Encapsulation_ Review paper, used for researhc scholars
PPT
Teaching material agriculture food technology
PPTX
Cloud computing and distributed systems.
Reach Out and Touch Someone: Haptics and Empathic Computing
MYSQL Presentation for SQL database connectivity
Programs and apps: productivity, graphics, security and other tools
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Assigned Numbers - 2025 - Bluetooth® Document
Machine Learning_overview_presentation.pptx
cuic standard and advanced reporting.pdf
Electronic commerce courselecture one. Pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
gpt5_lecture_notes_comprehensive_20250812015547.pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
The AUB Centre for AI in Media Proposal.docx
MIND Revenue Release Quarter 2 2025 Press Release
Review of recent advances in non-invasive hemoglobin estimation
Encapsulation_ Review paper, used for researhc scholars
Teaching material agriculture food technology
Cloud computing and distributed systems.

Building with XUL

  • 1. Building with XUL Ben Goodger Software Engineer, Google Inc.
  • 2. What is XUL? XUL is a powerful language that lets you quickly develop client software XUL is used by Mozilla Firefox, Thunderbird and other software projects.
  • 3. What can XUL do? Extensions (to Firefox, Thunderbird, other applications) - BugMeNot, AdBlock, MiniT, Sage, Enigmail, etc. Applications (like Firefox, Thunderbird, etc)
  • 4. XUL Features XML Syntax Flexible Box Model Wide array of application controls Data binding Rich set of platform services Development supported across numerous platforms Scripting and flexibility with implementation language Tools for section 508 accessibility compliance Localizability Tested and deployed to millions of people
  • 5. Where is XUL going? XUL2.0 (API polish) XULRunner Standardization (via: WHATWG: datagrid, etc, W3C: XUL Box Model in CSS)
  • 7. What does XUL look like? <?xml version=&quot;1.0&quot;?> <?xml-stylesheet href=&quot;chrome://global/skin/&quot;?> <window id=&quot;test&quot; xmlns=&quot;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&quot; title=&quot;Hello, World!&quot;> <script type=&quot;application/x-javascript&quot; src=&quot;test.js&quot;/> <vbox flex=&quot;1&quot;> <listbox id=&quot;itemlist&quot; flex=&quot;1&quot;> <listitem label=&quot;Item 1&quot;/> <listitem label=&quot;Item 2&quot;/> </listbox> <hbox> <textbox id=&quot;labelfield&quot; flex=&quot;1&quot; oninput=&quot;validateInput();&quot;/> <button id=&quot;addButton&quot; label=&quot;Add Item&quot; disabled=&quot;true&quot; oncommand=&quot;addItem();&quot;/> </hbox> </vbox> </window>
  • 8. Making XUL Live function addItem() { var listbox = document.getElementById(&quot;itemlist&quot;); var listitem = document.createElement(&quot;listitem&quot;); var labelfield = document.getElementById(&quot;labelfield&quot;); listbox.appendChild(listitem); listitem.label = labelfield.value; labelfield.value = &quot;&quot;; validateInput(); labelfield.focus(); } function validateInput() { var field = document.getElementById(&quot;labelfield&quot;); var button = document.getElementById(&quot;addButton&quot;); button.disabled = field.value == &quot;&quot;; }
  • 9. Adding Visual Panache Visual style is added using CSS Icons, colors, backgrounds Themes
  • 10. Making your XUL Application Live Networking File I/O Preferences Web Services Extensions
  • 11. Extending XUL XBL is Mozilla’s Extensible Binding Language Create new elements by using others Develop element node apis <binding id=“mytag”> <content> <xul:hbox> <xul:button label=“Button 1”/> <xul:button label=“Button 2”/> </xul:hbox> </content> <implementation> <constructor> alert(“foo”); </constructor> </implementation> </binding>
  • 12. Building XUL Extensions Changing the UI - overlaying the DOM - executing script
  • 13. A XUL Extension to Firefox Adds Session History Strip above browser Thumb strip added using XUL overlays Uses <canvas> to render page thumbnails
  • 14. Packaging XUL Extensions Extension Bundle UI Components Defaults Housekeeping
  • 15. Packaging XUL Applications Application Bundle UI Components Defaults Housekeeping
  • 16. Resources http://www.xulplanet.com news://news.mozilla.org irc://irc.mozilla.org #developers Rapid Application Development with Mozilla Firefox Hacks
  • 17. Why Use XUL Rapid development Easy to learn Rich platform services especially for internet applications Localizable, accessibility compliant Small application size when targeting deployed XULRunner Platform deployed to millions of users

Editor's Notes

  • #2: Good afternoon ladies and gentleman, my name is Ben Goodger and I’m the lead engineer of the Mozilla Firefox browser. I currently work for Google in Mountain View California. I’m here to talk to you today about XUL, the XML User Interface Language that we built Firefox with. I’m going to give you a brief run through of what XUL is, the benefits it has, show you a little of what developing with XUL and the Mozilla platform looks like, and give you some demos. I’ll also tell you what we’re doing with XUL this year and in the future. At the end there’ll be some time for Q&amp;A.