Share this project

Done

Share this project

Done
A JavaScript library that allows browsers and other restricted JS environments to have working git clones for real offline development.
A JavaScript library that allows browsers and other restricted JS environments to have working git clones for real offline development.
405 backers pledged $19,587 to help bring this project to life.

About this project

$19,587

405

(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 web platform in particular has come a long way and now has all the primitives to build a real development environment.  There are sandboxed filesystems, mature javascript libraries for editing code and tools for compilers and transpilers galore.  The main thing that's missing is software configuration management (like GIT).

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 the postgres wire protocol in javascript.
  • 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 wrote webgl bindings for node.js so native webos games could be written in javascript.
  • 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

As with all software projects, we're exploring new territory. There may be unexpected hard problems along the way. I've built several low-level javascript projects before and have studied a couple of git implementations. I have a rough idea how much work this will take.

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

FAQ

  • It will not be CoffeeScript, I'm quite comfortable writing JavaScript directly. I want the library to be as lite-weight as possible. I will evaluate using Emscripten to compile one of the existing C libraries, but I expect the generated JavaScript to be too large and not flexible enough. My network and FS requirements are quite different than what git in C expects to be available.

    Last updated:
  • 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.

    Last updated:
  • Yes, JavaScript is amazing! Have you seen the JS implementation of PDF reading that Mozilla ships in their browser? Have you seen the projects I linked to?

    JavaScript run-times are everywhere. It's in your phone, your tablet, your laptop, and everywhere that can access the web.

    Last updated:
  • 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.

    Last updated:
  • 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.

    Last updated:
  • 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.

    Last updated:

Support this project

  1. Select this reward

    Pledge $25 or more About $25

    Supporter. You really support this idea and want to do your part to help see it happen.

    Your name will be in the BACKERS.md file for all history to see.

    Less
    Estimated delivery
    194 backers
    $
    Kickstarter is not a store.

    It's a way to bring creative projects to life.

    Learn more about accountability.
  2. Select this reward

    Pledge $50 or more About $50

    Believer. You believe this project is important and want to enable me to create it.

    I'll send you a vinyl laptop sticker with the awesome JSGit logo on it so you can show off your support.

    Your name will be in the BACKERS.md file for all history to see.

    Less
    Estimated delivery
    Ships to Anywhere in the world
    104 backers
    $
    Kickstarter is not a store.

    It's a way to bring creative projects to life.

    Learn more about accountability.
  3. Select this reward

    Pledge $200 or more About $200

    Open Web Warrior. You believe in enabling the web platform and put your money where your mouth is.

    To reward your generosity, I'll give personal assistance to you or your company integrating the library into your project. This can be up to an hour of video chat or several email/chat sessions.

    You will get a sheet of laptop stickers and your name, and optional url will be in the BACKERS.md file for all history to see.

    Less
    Estimated delivery
    Ships to Anywhere in the world
    23 backers
    $
    Kickstarter is not a store.

    It's a way to bring creative projects to life.

    Learn more about accountability.
  4. Select this reward

    Pledge $4,000 or more About $4,000

    Deep Backer. You really wish this project existed and probably derive some sort of commercial value out of its existence.

    If you're within the continental United States. I'll come to your company and spend a day helping you integrate the library into your project.

    Your name, url, and short blurb will be in the BACKERS.md file for all history to see.

    Less
    Estimated delivery
    Ships to Only United States
    Limited 1 backer
    $
    Kickstarter is not a store.

    It's a way to bring creative projects to life.

    Learn more about accountability.

Funding period

- (15 days)