7 ms·
Show HN: Firepad, an open source collaborative text editor
- Vecrios 14y agoThis is awesome. It's like a chat but with the ability to edit what other people are saying! So much potential!
- prayag 14y agoThis looks amazing! I have been really impressed with Firebase. Before it building things like this or a chat engine would take weeks if not months.
- mynmyn 14y agoAside from collaborative editors and chat clients - what other valuable use cases could firebase help solve?
- mikelehen 14y agoI'm biased, since I'm a Firebase dev, but honestly, Firebase is great for solving /all kinds/ of use cases. :-) We've had people build everything from emergency response simulations synchronized across multiple devices to iOS apps for grandparents to read books with their grandkids over long distances. Firebase is great any time you need real-time updates, collaboration, or you just want to get something up and running without having to spin up your own servers.
- mynmyn 14y agoThose sounds really interesting, thanks. Looking forward to seeing more of the real-time web evolve.
- Y_Not 14y agoI definitely can see a use case for this if it had some type of integration with MS word. Unfortunately I'm currently stuck working for the big corporation, and we have so many meetings reviewing documents, etc over fairly large teleconferences across the world-- so not face to face meetings. Currently, usually only one person drives the edits in MS Word and screenshares with the group via a WebEx or LiveMeeting... if there could be some sort integration with MS Word so multiple people could edit at the same time and view the same thing, there would be no need for the LiveMeeting/WebEx screenshare and the collaboration would be much more seamless. Would remind me of a SubEthaEdit mashed with MS Word. Regardless, well done.
- mccolin 14y agoHaven't looked into the code/docs deeply, yet, but would love to know if it can be customized to send data to one's own backend service for private implementations. Love the editor. Also had a few great laughs trying to use it alongside so many other people.
- mikelehen 14y agoWe built it as a Firebase app, but we're releasing it as open source and are looking forward to seeing what the community does with it. :-) All of the OT work happens client-side, so it's certainly possible to adapt it to other backends. Additionally, a lot of the OT code is based on ot.js[1], a fantastic open source OT implementation by Tim Baumann. He has a node.js backend as well as Haskell and Python. Of course then you have to run the server code somewhere and figure out how to persist the documents, etc. :-) Definitely worth checking out though. 1. https://github.com/Operational-Transformation/ot.js/ https://github.com/Operational-Transformation/ot.js/
- mccolin 14y agoThis is fantastic. Looked up some more information about your Firebase offerings and like what's going on there, too :-) Keep up the great work!
- hydralist 14y agothis is some entertaining shit going down in the 'chat'
- dmbaggett 14y agoDoes anyone know of an HTML-friendly equivalent of this? I.e., something similar that allows pasting/editing HTML?
- wfle 14y agohttp://scratchpad.io http://scratchpad.io might be what you're looking for.
- gbadman 14y agoPlunker is a collaborative html/css/js/coffee-script/typescript/less/etc... editor: http://plnkr.co/edit/?p=preview&s=YDQtgmV5y7I6EQfJ http://plnkr.co/edit/?p=preview&s=YDQtgmV5y7I6EQfJ
- mikelehen 14y agoFirepad will eventually support rich-text copy/paste and import/export as HTML (export is actually already supported through the API, but not exposed through the existing UI), as well as lists, paragraph indent, and all of the other features that you'd want. They just didn't make it in for the v1 release. :-) As for similar projects that are already more HTML-friendly, maybe check out Etherpad[1]? It has HTML import / export, though I haven't tested it out. 1. http://etherpad.org/ http://etherpad.org/
- deliminator 14y agoWe are building a real time HTML synchronization engine at wikidocs.com (using a custom OT engine). It's still work in progress, but you can already try it out - if you fire up the inspector and manipulate the DOM, your changes will be synchronized automatically.
- peapicker 14y agoWould be nice if each user had their own cursor/state and different users could modify different parts of the doc at the same time without causing crazy to happen.
- mayop100 14y agoEveryone does have their own cursor state and can edit the document separately (even in offline mode). People are testing the limits of it right now though, so you're probably seeing a fair amount of "select all" + "delete" and other annoying behavior. If you want to try it without other people messing with it. Click the "Private Firepad" link in the upper right corner.
- stevejohnson 14y agoI am unable to scroll down on the page without it jumping back up to the animated demo thingy. Chrome 25 OSX.
- nathanb 14y agoIs this actually a text editor, or is it a social experiment? I realize those are not mutually exclusive options.
- jfaucett 14y agookay, after working in this for a couple minutes I found it to be AWESOME!!! great job guys. Obviously, there's a ton of people on it right now, and the proverbial dicks just pasting 10101 all over to annoy, but in a team i could see how this would be really awesome. While working on it there was a short minute where the dicks let off and i really got to see how great this can be for teaming up to iteractively write code. Again awesome app!!
- mikelehen 14y agoThanks! Glad you like it. You can also click the "Private Pad" link in the top right to get away from the chaos. :-)
- BHSPitMonkey 14y agoNitpick: It seems impossible to scroll down and read the stuff below the actual editor (at least in Chrome), since the editor keeps auto-scrolling me back up to itself whenever new data comes in.
- mikelehen 14y agoYeah, sorry! Codemirror automatically keeps your cursor scrolled into view and with lots of people editing, your cursor keeps moving. I just tweaked it (again) so that we remove focus from CodeMirror when you scroll the page, so this should be taken care of. Sorry about that!
- binarysoul 14y agoI don't see how this could be used for collaborative code editing. Is there an example of this?
- mikelehen 14y agoYup! http://www.firepad.io/examples/#code http://www.firepad.io/examples/#code Atlassian[1] and Action.io have already built stuff with it. 1. https://marketplace.atlassian.com/plugins/com.atlassian.stash.plugin.stash-editor-plugin https://marketplace.atlassian.com/plugins/com.atlassian.stas...
- binarysoul 14y agocool thanks
- Johnyma22 14y agoI think this is a really early stage Etherpad. Check out Etherpad's features if you can, you have your work cut out though http://etherpad.org http://etherpad.org
- mayop100 14y agoWhat features would you like to see implemented next in Firepad?
- stephenhuey 14y agoThat's a good question, and I don't have an answer for you. However, since I've heard how awesome Firebase is, I'm wondering what you offer over Etherpad. After Google acquired it and open sourced the engine, lots of other websites have sprung up that use it. I'm sure there are great reasons to use your tool rather than an Etherpad-based one, so it'd be interesting to hear them! http://etherpad.org/ http://etherpad.org/ http://piratepad.net/ http://piratepad.net/ http://titanpad.com/ http://titanpad.com/ http://www.cynapse.com/syncin http://www.cynapse.com/syncin http://openetherpad.org/ http://openetherpad.org/ Mozilla and no doubt many others can easily deploy it on their servers: https://etherpad.mozilla.org/ https://etherpad.mozilla.org/
- mayop100 14y agoThe main reason you might want to use Firepad instead of Etherpad is if you don't want to run the server-side piece of Etherpad. For example, if you're stack is different than theirs it might be a pain to set up a special server environment just for the collaboration portion of your app. Firepad is fully client-side code, so there's no server software for you to set up. The other big reason you might use Firepad is to get all of the other goodies that Firebase provides, like the automatic scaling, Forge debugger, declarative security, etc.
- kevinr 14y agoSo, when you say it's "fully client-side code" -- what that looks to me to mean is not that it's not talking to a server somewhere, but that it's talking to Firebase's servers rather than my servers. Is that correct?
- gautaml 14y agoWhy do people waste time investing into something like this? I realize everyone wants to be on the 'cloud' but I don't really see how anyone could be productive or efficient with something like this.
- davidedicillo 14y agoSeems a lot of people are forgetting about http://hackpad.com http://hackpad.com
- j_s 14y agoPerhaps because hackpad isn't [edit: as gung-ho about being] open source (if they are at all)? I'm sure there are other commercial offerings too... like yours!
- saurik 14y agoOnly slightly, though; I mean, Firebase is built on a fully-proprietary platform (Firebase).
- j_s 14y agoI haven't looked at the code so I can't give you too much of a hard time (have you looked at it?) but the Firebase team might take issue with your use of the word 'slightly'. https://news.ycombinator.com/item?id=5519094 https://news.ycombinator.com/item?id=5519094 > All of the OT work happens client-side, so it's certainly > possible to adapt it to other backends.
- saurik 14y agoI have looked at the code (and had looked at the code before leaving that comment). Please understand that the OT backend they are using is just something they got from someone else, so it isn't really interesting that the OT backend is open source. In essence, they just took an off-the-shelf open-source OT implementation and connected it to an off-the-shelf open-source HTML+JavaScript rich text editor. The main thing that is difficult about building something similar to Firepad would be building the scalable distributed backend: there are no open source projects that I know of that provide that functionality. That is the value add of Firepad: the open source code is just some glue that you can find from other projects (including Etherpad, which is open source with both rich text and OT). The thing that actually makes this interesting is the proprietary scalable synchronization backend from Firebase. That is interesting, no denial from me on that front: except for some issues with trusting the clients (pointed out in my other comment), this seems like a great and simple way for developers to rapidly get access to this collaborative text editing functionality for their applications. The open source parts, though, are not what is compelling. To take some concrete examples: ShareJS is a strong implementation of OT (the guy is one of the people who had worked on Wave), but the backend they provide is less-than-stellar, based on fairly centralized storage into a small handful of backends, and no real attempt at supporting scalable front-end server endpoints (so, you have to have everyone connect to a single machine to act as the single-threaded mediator). Etherpad-lite is based on a similar architecture; you can shard these solutions on the document, but it just doesn't hold up in the same way Firebase does vertically. Looking at this then from an alternative direction: one can imagine just taking the FirebaseAdapter from Firepad and wiring it into the backend of ShareJS. This isn't much work, and would probably be more useful than Firepad's current stack that is tied to the text editor: in addition to being able to use any of a number of text editors people have wired over ShareJS, ShareJS also supports arbitrary JSON document OT, allowing you to build systems that are closer in functionality to Wave (where people were using OT on the program state of things like chess games).
- Jonovono 14y agoCool. I am going to check this out. I was planning to work on a document site like github but for non technical people (http://www.rubberdocky.com http://www.rubberdocky.com), but have put that on the back-burner for now. One of the projects I recently came across that I thought looked awesome was Substance (http://www.substance.io http://www.substance.io). I like the idea of collaborating on documents in a way like github but only more accessibly for anyone.
- akkishore 14y agohttp://codecollab.gamooga.com/ http://codecollab.gamooga.com/ - does server side OT
- amasad 14y agoLooks cool. It'd be great if you hide the firepad instance from the global scope, to make it harder for trolls to do: setInterval(function () {firepad.codeMirror_.setValue('foo'); }, 0);
- mikelehen 14y agoWon't people realize that doing that would detract from the experience of other users? Haha, just kidding! Moved everything into a closure. Thanks for suggesting it.
- marijn 14y agoSure, now they'll need to do `cm = document.body.getElementsByClassName("CodeMirror")[0].CodeMirror` first. (I.e. it's client-side, you can't prevent people from doing whatever they want.)
- jlogsdon 14y agoWell, if you don't attach the Firepad instance to the element and it's in a closure I'm pretty sure you couldn't modify it. I'd love to be corrected if this is incorrect. Obviously you can't be stopped from editing the contents of the editing area, so if it works by simply checking for your updates to the editor then you can't stop it.
- mikelehen 14y agoYeah. They could also build a robot to mash on their keyboard (or make an arduino-based USB input device, or ...) In non-demo scenarios, you'd have authentication and security rules set up to prevent this sort of abuse / trolling / etc. The main reason I bothered adding the closure was so people wouldn't copy/paste the code snippet from the HN post and have it work. :-)
- marijn 14y agoBrowsers have debuggers, which allow users to set breakpoints and inject/run arbitrary code in the context of some function. (At least Chrome allows that, not sure about others.)
- shurcooL 14y agoThis inspired me to create a simple page where people can update their status in real-time. It's similar to the firepad.io text editor, except you can only edit your own status and not that of others. You can try it at https://dl.dropbox.com/u/8554242/live-status.html https://dl.dropbox.com/u/8554242/live-status.html
- KaoruAoiShiho 14y agoCurious why each pad is limited to <18 users? Will firebase have a hard time syncing more than those users?
- mikelehen 14y agoThere's no limit. We had ~50 in some rooms earlier. We did shard users across dozens of rooms so that the user experience wasn't too ridiculous... You could (if you like pain) use firepad with hundreds of users and it shouldn't be an issue. The actual messages being sent around are small.
- natorion 14y agoLooks interesting. Might try it for the incoming interview sessions. A big drawback for me is that I can't use my browser's back button after opening the page because the history is flooded.
- mikelehen 14y agoCould you provide more details? (back button works fine for me in Chrome on OSX). You can reply here or ping firepad@firebase.com. Thanks!
- civilian 14y agoI think there's a bug with text writing over eachother when 2 people are typing: http://imgur.com/1IvMccd http://imgur.com/1IvMccd (You can see how my bold line of text was interrupted by someone else.)
- mikelehen 14y agoCan you provide more detail? Here or firepad@firebase.com or as a github issue? From the screenshot it's not immediately obvious to me what went wrong. People are certainly allowed to write over each other (e.g click in the middle of your sentence and write something). If that's not what happened, let me know!
- bestest 14y agoI'm happy to announce this as a find of the week. Boy there were some good laughs in the public mode. And yes, I'm quite sure private pads might be of use in certain situations.
- colemorrison 14y agoWhoa. That's some FUN stuff! Great job!
- mikegreen 14y agoClicking on Private Pad yields: Error 503 Service Unavailable Service Unavailable Guru Meditation: XID: 1337667656
- dossy 14y agoNice marketing shill for Firebase. Well played, guys.