(EDIT: See the stretch goals.)
I've been a programmer for over 20 years thanks to my parents getting me a Commodore 64 when I was a kid. The thing I really loved about it was that it booted to a programming environment. Creating a program was as simple as typing a couple lines and then typing "RUN".
Today there are fewer and fewer kids getting into programming because consumer devices are locked down and don't come with a way to program them.
The main use case this enables is developing offline in environments like ChromeBooks. I worked on Cloud9IDE for a year and it was a great experience as long as you were online with a fast connection. With this library, HTML5 apps will finally be able to do the full developer lifecycle. They can clone from github to the browser's local file storage when online, work offline using an editor like ACE or CodeMirror, and then when they are online again, they can push their changes back to github. I'll implement branching, merging, diffing, and as many other awesome common tasks from git as possible.
The library will be developed in the open and licensed under the MIT license.
By funding this kickstarter, you will enable me to work full time on this and give it the proper attention. This means full documentation, examples, and sample apps. Also, you'll get cool prizes!
In case you don't know my background, this isn't my first time building developer tools. Some of my past projects include:
- I wrote the initial CoffeeScript compiler in CoffeeScript.
- I have been a node.js contributor since before it was cool.
- I implemented fast AES, MD5, SHA1, and SHA256 routines for browsers as cifre.
- I implemented msgpack codecs for node.js and browser js.
- I re-implemented node.js in lua as the luvit.io project.
- I wrote a fast streaming JSON parser.
- I'm creating a new programming language targeted at kids that runs in a browser called Jack.
- I implemented a real terminal for Cloud9 IDE and designed their RPC and VFS systems.
- I implemented a luajit bytecode interperter in browser js.
I can humbly, but confidently say that implementing the git protocol in a browser is something I can do and do well.
Risks and challenges
But in the case that I'm still wrong and it's way harder than I thought, I can promise that the project will have enough of a head start to survive on its own and be usable before the funds run out.
It will be open sourced on GitHub as soon as the kickstarter succeeds. The code will be under a liberal license and I'll allow trusted collaborators to help in the development of the library.Learn about accountability on Kickstarter
The best way to find all the attempts to solve a problem is to announce to the world that you'll be solving it. I had seen a few before since I've wanted this for a long time and I found a few more after launching this kickstarter.
I will build from existing libraries if they have what I need and are under a nice-enough license. But considering the amount of excitement this is causing, I find it hard to imagine that a perfectly good git implementation exists and nobody has noticed.
Browsers have several new APIs for storing local, offline blobs. I'll most likely use the new file API and/or indexed DB. For the purposes of this project, all that's needed is raw storage. Even local storage could work in a pinch for small repos.
I don't have much money to contribute, but would love to contribute with coding help, is that possible?
Yes, as soon as I start this project after the kickstarter is over, I'll be creating a github repo and write up instructions for how to collaborate. But as you know, nine developers can't have a baby in one month (or something like that). Simply throwing more people at the project won't make the code linearly better or faster. We'll have to collaborate smartly where it makes sense.
You met the minimum goal in just over 27 hours, what will you do with the extra funds? Why should I fund more at this point?
As you probably know, kickstarter is all or nothing. The minimum I put was the absolute minimum I needed to know that I would be able to have something useful done before I had to go back to consulting work.
I'll use the extra funds to continue to improve the project. This would mean I have time for things like a nice graphical diff utility, creating branches offline with gui, tags, import/export of git repos from the local filesystem, etc.
Support this project
- (15 days)