
WinJS: the Windows Library for JavaScript - camus2
http://msdn.microsoft.com/en-us/windows/dn632015
======
SchizoDuckie
Welcome to 2014, where Microsoft web stuff still works best in Microsoft
Internet Explorer...

They had an actual shot on getting up to par with proper HTML5, with funky ms
extensions being optional where absolutely neccessary. Instead, they rely on
an astounding number of non-cross-browser methods and features, as they have
done since '95

[https://github.com/winjs/winjs/issues](https://github.com/winjs/winjs/issues)
Most issues listed currently are about stuff that just doesn't work on any
other browser/platform than IE

Footnote: I'm a web developer myself and I use Windows 8.1. How tempted have I
been at fiddling with the winjs flavour myself? _not_ at all.

Footnote2: I do have to give them credit for the roadmap though. It seems like
they're on the right track
[https://github.com/winjs/winjs/wiki/Roadmap](https://github.com/winjs/winjs/wiki/Roadmap)

Footnote3: I've been fooled into thinking that Microsoft was on the right
track again and again.

~~~
_wmd
It wouldn't be fair to mention this without mentioning of the 3 fixes landed
since that repo was created, 2 are for cross-browser compatibility bugs..

That aside, I love how this negativity only seems to stick to Microsoft when
every other major player has their own private set of bits that only work well
on their platform (WebOS, Firefox OS "proposed standard" mobility APIs, Chrome
endless variety of "we're doing it so it's going to be a standard" APIs, etc).
It's no excuse, but it's hardly unique to MS

~~~
VikingCoder
There's a giant difference between "only work well on their platform" and
"purposefully designed to only work on their platform."

There is NO EXCUSE for a TOGGLE to not work, cross-browser, in the year 2014.

[http://try.buildwinjs.com/default.aspx#toggle](http://try.buildwinjs.com/default.aspx#toggle)

~~~
orf
Works for me on Android Chrome. What browsers don't display this correctly?

~~~
Huppie
I'm on Chrome 33 (latest stable) @ Windows 8.1 and it doesn't work.

~~~
orf
You're right, it doesn't work on my Desktop either. It's very weird that it
works fine on Chrome for Android.

~~~
bluefinity
It works for me if I enable touch emulation (Google Chrome on Linux). I don't
see the styling that you apparently get in IE though.

------
adolfojp
WinJS started out as a tool for creating Metro apps with HTML5 and JavaScript
as an alternative to XAML and C#. I don't know if Microsoft is now spinning it
as a general purpose web tool but that was not its original purpose. And this
has always been explicit. The default ASP.NET MVC template, for example,
bundles Bootstrap and jQuery. And if you look at the SPA examples they're all
in tools like AngularJS and Knockout. In fact, in one of their build sessions
they teach how to create a SPA with AngularJS. As far as I know the ASP.NET
team has never used WinJS.

So it wouldn't surprise me if this library didn't work great on the web on any
browser because it wasn't created for that purpose.

~~~
gum_ina_package
At first I thought it was a cross platform app building something-or-another
(kinda like Xamarin), but now that I actually am building it and playing
around with it I see that it's something else entirely.

I'm actually glad this happened though. Seems like MS is finally rallying
around C# as the defacto language for building apps (as opposed to Visual
Basic or even Visual C++). This project might succeed (or at least find a
nitch) among developers who are building touch centric web applications.

------
tlack
I know everyone has their reservations about Microsoft and their developer
ecosystem, but WinJS really is a delight to use, at least in my limited
experience. A WinJS app is really just a zip of a bunch of JS (using WinJS's
nice APIs for fancy stuff), CSS, and HTML, so most web developers who are used
to the modern tool chain should be pretty comfortable with it. And yes, you
can supposedly use it alongside Backbone/Angular/whatever. Worth a closer
look.

~~~
nthitz
To be honest I've always wanted a file format that is exactly as you
described. A zipped up front end web app. No internet dependencies so it works
100%. User can open the open the format and it opens in their browser of
choice. All the files contained within are "hosted" from a static "webserver"
that just hosts the files within the .zip.

I can't say much to WinJS yet, but I am interested in their choice of
container.

~~~
bananas
Sounds like a java war file (just add container).

~~~
lmm
More like Java Web Start. Which would've been great if it worked with a decent
UI framework.

~~~
bananas
You mean JavaFX. That works with web start :)

You can do ClickOnce and WPF as well if you want.

I rather like these solutions. I've built several of both.

------
VikingCoder
An example of why this sucks:

[http://try.buildwinjs.com/default.aspx#toggle](http://try.buildwinjs.com/default.aspx#toggle)

"GitHub issue 9: This control currently works only in IE due to its dependency
on IE-only styles ::-ms-fill-lower, ::-ms-fill-upper, ::-ms-ticks-before,
::-ms-ticks-after, and ::-ms-tooltip."

Another reason why this sucks, you can even't copy that stupid text from that
page in Chrome.

/me smashes monitor with keyboard, then ragequits.

~~~
toxik
I could! `GitHub issue 9: This control currently works only in IE due to its
dependency on IE-only styles ::-ms-fill-lower, ::-ms-fill-upper, ::-ms-ticks-
before, ::-ms-ticks-after, and ::-ms-tooltip.`

------
forgotAgain
Why call it Win JS? Is it meant to be Windows only? If not then why give a
multi-platform open source library a branded name?

~~~
velikos
The fact that it's branded with Windows makes me hesitant to use it for non-
Microsoft environments.

~~~
adlpz
[https://github.com/winjs/winjs/blob/master/License.txt](https://github.com/winjs/winjs/blob/master/License.txt)

It's Apache 2.0. If it's good _right now_ , there is no reason whatsoever to
not use it.

~~~
sharpneli
Unfortunately it isn't good right now. It's pretty much IE only in practice.
It might become good eventually but it's not there yet.

------
motoford
Am I the only person who had to come here to the comments to even find out
what this library does?

The winjs page is just a bunch of buzzwords randomly strung together.

------
dblock
Issues like
[https://github.com/winjs/winjs/issues/25](https://github.com/winjs/winjs/issues/25)
continue saying that MS is maintaining an internal project and dropping things
to Github and then synching back. That's the last mile, the thing that
desperately needs to change to gain full credibility within the open-source
community. It should only be on Github and all development should be in the
open.

Disclaimer: I'm ex-msft.

------
jholly
Had no idea the Skype and Music app UI's were built with WinJS. Playing around
with the demo's really does pass the eye test. This is really good stuff.

------
Xdes
It's like XAML for the web. I can't wait to write some SPAs with it.

~~~
spankalee
You should check out custom elements and Polymer: [http://www.polymer-
project.org/](http://www.polymer-project.org/)

WinJS looks like another soon-to-be-legacy wrapping framework. It doesn't use
Shadow DOM, or allow developers to create new elements, which means that you
end up with div-soup and important APIs and state that should be part of the
view are in separate objects.

Because of this, WinJS will have a hard time interoperating with other
wrapping frameworks like Angular, Ember, GWT, Ext-JS, etc.

Custom elements and Shadow DOM are hugely important for composable web
applications. At this point, for SPAs, I wouldn't use anything that doesn't
support them, even at the cost of IE8 support.

~~~
MatthewPhillips
Just wanted to point out that can.Component[1] is a custom element
implementation that _does_ support IE8.

[1][http://canjs.com/docs/can.Component.html](http://canjs.com/docs/can.Component.html)

~~~
spankalee
Unless I'm reading something wrong, that doesn't look like W3C custom elements
( [http://www.w3.org/TR/custom-elements/](http://www.w3.org/TR/custom-
elements/) ), but CanJS's own system for recognizing custom tag names, like
Angular directives. The docs even say "Currently, this only works within
can.Mustache templates."

W3C custom elements allow the browser to still parse the document, and when it
encounters a tag that has been registered with document.register() it calls
user code to create construct element. By having the browser be in charge of
parsing and element construction, custom elements work without a framework,
and when you modify the DOM via things like innerHtml.

Approaches like Angular directives, and I'm guessing CanJS components, usually
break down when the DOM is modified outside of certain blessed APIs.

------
pippy
Why would anyone want to use another JavaScript UI library when there are
already libraries that are out there that are more mature and don't have a
companies bias?

~~~
jabits
With that logic you would never ever again be able to use a new library...

~~~
jenscow
Could you elaborate with an example?

------
codeulike
Its for building Windows 8 apps. Lot of people seem to be misunderstanding.

~~~
VikingCoder
It's for building HTML + JS applications that can only run in Internet
Explorer.

You seem to be misunderstanding.

------
Justsignedup
I give them this much. It's a great start for a toolkit of animations and
interactions. Transitions really follow the animations of Windows 8. It looks
really nice.

Problem is that I am not sure if they made a full and good UI framework. How
does it compare with something like Angular? Is this just animations on top of
what can be done in js already?

------
elwell
Prominent "View on GitHub" button is really indicative of the progressive
changes Windows has been making lately.

------
subb
Should this be used for "standard" desktop application? Like building the UI
for Photoshop for example?

------
jdp
One thing that isn't clear at all is if it is necessary to use Visual Studio
to build a WinJS app. Can I develop and test the app on a MacBook or Linux
laptop in a web browser, and only involve Visual Studio when I need to package
the app for the store? Or is VS required to even get started?

~~~
dlannoye
They have a project file for Sublime Text 3 and are using grunt as a build
system so you should be able to use it on a Mac or in Linux. However from
their road map it looks like they are still trying to fix a lot things that
only work in IE.

------
peferron
That's what I got when I clicked on the "Output" button of the "Datasource
edits" sample:

[http://i.imgur.com/fQFAv1R.png](http://i.imgur.com/fQFAv1R.png)

Nice. For a crazy second I thought Microsoft devs were really insane or got
hacked, before coming to the more likely conclusion that it's just random
letters and I got lucky - if you can call it that.

It's even less likely to happen because only FF seems to be showing 4 letters
instead of 15.

(Note: I refreshed to check the randomness theory before taking a screenshot,
so the linked screenshot is actually forged with the inspector. But it looks
just the same as it really did.)

------
rbanffy
I'll be interesting to see if the community adopts it or if all improvements
and fixes will have to go through Microsoft.

~~~
delinka
I find it most interesting that it's on GitHub. MS not moving fast enough for
the community? Fork it.

~~~
kibibu
Agreed. I wonder how the Codeplex team feel about it.

~~~
rbanffy
Considering all external signs, I think "feeling" too much about it will be a
career-limiting move.

I still think most of their stack sucks, but I am quite surprised with this
new Microsoft. It'll be fun to compete against them again.

------
suyash
I thought Microsoft was working on Typescript as an alternate to pure
JavaScript. How does WinJS fit into that picture?

~~~
soAsian
Go to the link and read about it. It's not for web. It's a way for web dev to
create WinStore/Metro apps.

Jesus f Christ! 100% of people commenting here don't even fucking bother to
read what the fuck WinJs is about before shooting off their mouth.

~~~
_pferreir_
How does that invalidate parent's question? TypeScript compiles to JS.
Couldn't MS have developed "WinTS" instead?

~~~
reverius42
Though I haven't checked, I would guess that WinJS has strongly-typed
TypeScript bindings, for those who choose to use TypeScript. But releasing the
library itself in JS makes it available to a wider audience and doesn't
prevent it from being used in TypeScript.

------
cl8ton
We have been developing Lightswitch SPA Apps with VS2013.

WinJS is at the core of Lightswitch development coupled with JQueryMobile.

------
siculars
/bias rant/

I'm writing this on a brand new, never used, lenovo thinkpad loaner with
windows 7 because my 3yr old macbookpro decided to die. (Took it to apple in
NYC, they'll fix it and send it to me in Portland, OR.) I can't begin to
describe the awful feeling I have knowing that I have to use windows for the
next week. This laptop has already frozen twice while using outlook. It takes
forever just to figure out which packages to install to manage mssql server.
I'm installing something now and am not sure it's even the right thing. I've
already had to reboot several times.

Everything Microsoft does is counter intuitive, user and developer hostile and
proprietary in some fashion. Just take a look at the Download Center. It's as
if a horde of product managers were released into a Microsoft hunger games and
the ones with the most esoteric description and versioning/ marketing scheme
came out alive.

How anybody would willingly invest time, money or resources on anything
Microsoft related is beyond me.

/bias rant/

~~~
at-fates-hands
As someone who has a love/hate relationship with MS, I feel your pain. I've
found as long as you stick within the MS family, all is well. Try to deviate
from that pseudo-walled garden and its brutal.

For instance, doing Python or Ruby or ROR on a windows machine? No way. I just
started doing more MEAN (Mongo, Express, Angular, Node) stack stuff and after
several days of cursing the heavens and trying to figure stuff out on my
Windows 7 PC, I just said screw this and went to my box running Linux Mint and
within 15 minutes was up, running and coding.

~~~
jenscow
Whenever I look at the CV for Windows developers, all I see is MS
technologies. I think to myself "how can you tie yourself to a single company?
don't you explorer?"

But it's because it's difficult for them to.

------
taternuts
These examples are half working in chrome, and not a single one is working for
me in IE10.

------
svas
Has anyone tried to "port"/augment bootstrap CSS for this?

------
velikos
I'm surprised they decided to re-implement a lot of the available open source
libraries (like WinJS.Promise looks a lot like kriskowal/q). Why re-invent the
wheel?

~~~
jenscow
It goes against their "not invented here" culture.

------
toblender
Wait am I reading this right? Is this Windows' answer to AngularJS? Is this a
javascript framework or is this something else?

~~~
adolfojp
Negative. This is just a tool for creating Metro apps and it has existed since
Windows 8 came out. People are talking about it now because Microsoft just
open sourced it.

How does it compare with AngularJS? There might be some overlap but it is not
a competitor. In fact, Microsoft uses AngularJS frequently on their sessions,
documents, templates, etc.

[http://channel9.msdn.com/events/build/2014?sort=sequential&d...](http://channel9.msdn.com/events/build/2014?sort=sequential&direction=desc&term=angular#theSessions)

Edit: It seems like Microsoft is transforming WinJS into a general purpose JS
library.

[https://github.com/winjs/winjs/wiki/Roadmap#the-
present](https://github.com/winjs/winjs/wiki/Roadmap#the-present)

------
taylorbuley
Very excited for what WinJS's success could mean for IndexedDB. MSFT is a
surprise champion of this HTML5 API.

~~~
frik
It's still sad that because of Mozilla and Microsoft we have no SQL API in all
HTML5 browsers :(

[http://en.wikipedia.org/wiki/WebSQL](http://en.wikipedia.org/wiki/WebSQL)

IndexedDB is fine for storing JSON objects, etc. but a relational database
with SQL query syntax, indexes, etc. more powerful and means less code to
write. With IndexedDB one has to reinvent the wheel to just get basic query
features.

~~~
_wmd
That's because both thoroughly understand the difference between a standard,
and picking a random implementation that all other browsers would need to
inherit (which was exactly what WebSQL would have led to).

Instead we got a kickass asynchronous IO ordered map + secondary indices
implementation, which is vastly simpler to describe and implement in a uniform
fashion, on top of which one could easily write an SQL parser/planner, or
simply use it as a blobstore for a cross-compiled SQLite binary, or whatever
else.

(Funny how SQLite is about the only SQL implementation that would even be
suitable for this. Same reason WebSQL was a bad idea.. it essentially required
SQLite's exact semantics)

~~~
frik
WebSQL is not deprecation, the W3C Working Group Note actually says 'This
specification is no longer in active maintenance and the Web Applications
Working Group does not intend to maintain it further'.

As SQLite is in public domain, no company would "loose their face" if they
choose to use it. They could fork off SQLite and change the SQL query syntax
(parser) to whatever the W3C finds suitable.

Mozilla Firefox and FirefoxOS both already ship SQLite for years and can be
accessed by its internal JavaScript API. And several Microsoft products
already use it anyway (e.g. Forza Xbox games). Microsoft has of course also
various other SQL database libraries like MS Access JetRed
([http://en.wikipedia.org/wiki/Extensible_Storage_Engine](http://en.wikipedia.org/wiki/Extensible_Storage_Engine)
), MS Outlook JetBlue
([http://en.wikipedia.org/wiki/Extensible_Storage_Engine](http://en.wikipedia.org/wiki/Extensible_Storage_Engine)
) and MS SQL Server Express
([http://en.wikipedia.org/wiki/SQL_Server_Express](http://en.wikipedia.org/wiki/SQL_Server_Express)
) the SQL backend originally forked off for WinFS for Longhorn (Vista beta).
It would be trivial for Microsoft to choose one of its many SQL engines and
add it to IE 12. The same goes for Mozilla (just expose the API).

For some reason Oracle and Mozilla pushed IndexedDB. Oracle has conflicting
interests, as it owns OracleDB(SQL), MySQL (SQL) and BerkeleyDB (NoSQL and now
also SQL support, based on SQLite). Oracle is an official "sponsor" of SQLite
development and even ships it as part of it's BerkeleyDB package:
[http://www.oracle.com/technetwork/database/database-
technolo...](http://www.oracle.com/technetwork/database/database-
technologies/berkeleydb/overview/index.html)

One can speculate that a less powerful HTML5 API translates in the long run to
more SQL server licenses for Oracle and Microsoft. If the web app devs cannot
do the processing & storage on the client side, one has to do it on the server
side.

Anyway, I hope that we get a SQL API for HTML 5.x that also Mozilla and/or
Microsoft implements. As of now WebSQL works fine in webkit based browser
which includes Safari, Chrome, Opera and includes also 95% of all smart
phones.

------
derefr
So, this would basically be Microsoft's Windows-only version of node-
webkit[1], then? (I've been thinking the comparison was pretty clear since
Metro JS apps first appeared, but now that they're going to be able to be
window-ified as well, it's much more stark.)

[1] [https://github.com/rogerwang/node-
webkit](https://github.com/rogerwang/node-webkit)

~~~
oscargrouch
no. In order to do that, they would have to release the IE html rendering
engine (i think they call it Trident) to open-source, and bind it to the
nodejs engine..

This(WinJS) is basically a library that wraps UI components in JS, CSS and
HTML DOM.. its sugar for baked and easy to use UI components (in theory in any
html rendering engine)

~~~
derefr
I didn't mean implementation-wise, I meant in practice: they're both
technologies that allow you to ship a zipped blob of HTML+CSS+JS that presents
itself as a program, and has additional native APIs, beyond the regular HTML5
ones, exposed to the Javascript engine.

~~~
oscargrouch
> has additional native APIs, beyond the regular HTML5 ones

I think maybe in windows you have native bindings to windows-specific api's..
but whats is shipped here is only the UI + databindings, mvc voodoo for plain
HTML5.. for aditional native api's exposed to the javascript engine, you will
need something like node-webkit..

This use nodejs just to compile giving a minified js + css styles.. so it's
more like bootstrap or ionic framework

------
hit8run
Their creepy designer forgot to use padding on that site. Looks like shit on
my ipad.

------
yarou
What happened to "developers, developers, developers, developers"?

------
SonicSoul
i'd love a html wysiwyg editor that supports copy/paste from word.. bummer
that's not a part of these controls.

------
jessaustin
Holy crap what's gotten into HN? Like the top five stories are all Microsoft.
I'm not complaining, just a bit weirded out.

~~~
AdamTReineke
Today is the first day of Microsoft's developer conference, BUILD. (There is
also a non-trivial number of MS employees who read HN, including me.)

------
euske
Am I only one who found it odd that WinJS uses GitHub while TypeScript is
released on CodePlex? Make up your mind, Microsoft!

~~~
seanmcdirmid
Its almost like more than one person works at Microsoft, there might even be
multiple teams of people who make different decisions for whatever reason.

Codeplex at least supports Git.

------
ismaelc
Just when I'm excited to jump in to start coding on WinJS, HN comes to the
rescue...

------
fka
Why not TypeScript?

------
antonwinter
one day they will stop thinking about windows only.

------
rubyfan
"Controls" ha

