Invest in the future:
build for the web!

Soledad Penadés


Apps Engineer, Mozilla

Some time before...


You can earn a living with Android apps

Photography apps

Faster than stock app

Image filters

Good feedback, but...

Interactive picture books start-up

Layout was DIFFICULT

Bad habits, deeply ingrained

One day I woke up and wondered...

why is this not HTML+JS+CSS?

... because the web is not ready yet... ... you can’t have smooth animations and audio in the browser...


Contracting for local newspaper

We basically built a glorified RSS reader.

One day I woke up and wondered again...

why is this not HTML+JS+CSS?

... because the web is not ready yet... ... you can’t store offline data... ... you can’t have push notifications...


One day I was updating the company website and opened DevTools to live edit it

I had an epiphany

We’re recreating browsers again and again because...

“the web is not ready”

Enough is enough.

I’m out of this madness, and back to the web.

Back with a vengeance

Two sides of the fence

I joined Mozilla

We want YOU to build for the web

Why build for the web?

We helped unlock desktop browsers from monopoly

We’re doing the same in mobile with Firefox OS

New APIs

Prefixed API implementations

It’s the testing ground

Submitted to standards track

To help shaping standards, not to build a proprietary OS in JS

Existing APIs→

efficient mobile implementations

Existing APIs

Over two billion people still don’t have access to the Internet


$25 phone

Better tooling

The Web is more than documents today

Responsive design mode

Network + cache inspector


Canvas inspector

Shader editor

Web Audio Editor

Polyfills and libraries

Filling the gaps


Phonegap + Firefox OS


// In localStorage, we would do:
localStorage.setItem('key', JSON.stringify('value'));

// With localForage, we use callbacks:
localforage.setItem('key', 'value', doSomethingElse);

// Or we can use Promises:
localforage.setItem('key', 'value').then(doSomethingElse);


var imgs = document.querySelectorAll('img');
var ag = new Animated_GIF();
var animatedImage = document.createElement('img');
ag.setSize(320, 240);

for(var i = 0; i < imgs.length; i++) {

ag.getBase64GIF(function(image) {
    animatedImage.src = image;


Yeah, but...

Missing a feature?

Don’t just complain,

get involved!

This is not the 90s anymore.

The Web is YOURS,

so shape it!

Getting involved means you make informed decisions.

What works?

What doesn’t?


Is there a work around?

Getting involved means your needs are taken into account.

We need this feature for our use case...

This feature can't work for this reason...

A W3C editor sitting on their chair on a lonely room will never know about your needs unless you tell them.

Ways to get involved

For the Web to be ours, it needs everyone’s input.

Let’s build this together.