https://ephemeral.pw/chat/ (Also written in Go)
https://ephemeral.pw/chat/ (Also written in Go)
If you are trusting the server to create or associate identities with keys, the end-to-end encryption is easily subvertible.
Javascript crypto is still a problem though: http://matasano.com/articles/javascript-cryptography/
When you re-download the codebase on every use, there is no way to ensure integrity of the code. This is the reason cryptocat ships as a chrome extension, because it is downloaded once. Even with these issues, I'd take javascript crypto + open source over nothing (or just SSL).
The question is - how does the first public key exchange happen? It has be done outside of the site for it to be secure and your private key must exist locally on your device - which is contradictory to the premise of these websites.
How to ensure the server doesn't get a hold of the private key is the issue (can you really trust the code you're running?).