Skip to content

Instantly share code, notes, and snippets.

@darwin
Created August 4, 2015 15:56
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save darwin/d8fc8556e6fbdc7dee11 to your computer and use it in GitHub Desktop.
Save darwin/d8fc8556e6fbdc7dee11 to your computer and use it in GitHub Desktop.
Some thoughts

EXPERIMENTAL

This is an experimental fork of LightTable which is going to diverge into a separate project.

THE GOAL

I'm going to build semantic ClojureScript IDE with first-class structural editor written in ClojureScript.

A BIT OF CONTEXT

Building a decent code editor is a huge task. Building something which is far better than what we have today is a moon shot.

Instead of starting from scratch I decided to fork LightTable, start with its design, dramatically limit its scope, clean it up and incrementally rewrite its components while adding my own pieces.

LightTable design is great and Chris made a lot of good decisions:

IMO, the problem with LightTable is that it had too big ambitions. It tried to become a general IDE and serve different groups of developers on its crusade to take over the world. Being endlessly extensible for various language plugins is a great sell but it adds tons of complexity and support burden. Also later GitHub announced the Atom editor and it took wind out of LightTable's sails because it declared similar mission and cared for similar groups of developers.

That is my explanation why Chris and his team pivoted and switched their efforts beyond LightTable. As expected, LightTable development dwindled since then.

THE CURRENT PLAN

  1. limit the scope:

    • ClojureScript only (even no Clojure support)
    • Mac only
    • no plugins (fork instead!)
  2. reimplement:

    • BOT pattern shall be incrementally replaced with re-frame pattern
    • HTML UI shall be rendered with reagent + react
    • Electron APIs/state shall be driven by react-native-like library
    • IDE as a value, with no compromises => keep all state in one true source of truth: app-db
    • extract all interaction with outer world into an onion layer (io.js interop, incoming electron events, incoming DOM events)
  3. implement ClojureScript IDE:

    • edit trees, not text
    • smalltalk-style namespace browser
      • basically it will generate something like this on the fly from namespaces participating in your project
    • github/clojars integration
      • birds-eye overview of all your project dependencies and their evolution over time (by polling github for new commits)

MAYBE THE FUTURE

  1. Support for other platforms
  2. Support Clojure

ABOUT DARWIN

Until recently I used to develop hack popular Mac apps TotalFinder and TotalTerminal. Unfortunately due to introduction of System Integrity Protection, those apps will be no longer viable under OS X 10.11 (El Capitan). The good news is that now I have free hands to start something new.

I have been always interested in building web apps and tools around them. Recently I got attracted by ClojureScript development. Clojure and ClojureScript communities are great, but still pretty small. One contributing reason is that the tooling is rough and needs improvements. My goal is to help with that.

Recently I have published cljs-devtools which was desperately needed for my workflow while I was developing experimental mid-sized Faceboard project (Om-based ClojureScript SPA).

It is all history now, but back in times I have developed and maintained several popular Firebug plugins FireQuery, FireLogger, FireRainbow and XRefresh.

Also back in 2009, I have applied to join Mozilla and their Bespin team. Didn't join them back then, but this could be a proof that I was an early believer. The world needed a new hackable web development editor built using web technologies. Yes, it was too early and many early attempts had to fail maybe to pave the way for the Atom editor.

I believe - that in the long term - ClojureScript developers will need their own editor built using ClojureScript technologies and with Lisp nature in mind. Let's build that foundation today.

DISCLAIMER

This is an experimental project. I can decide to scrap it anytime.

Also please note that I understand that you have opinions, needs and pressing issues, but this is not a commercial product. No support is provided whatsoever.

LICENSE

All files in this project are under the LICENSE.md license unless otherwise stated in the file or by a dependency's license file.

@jeluard
Copy link

jeluard commented Aug 8, 2015

Very cool project!

Have you considered how bootstrapped ClojureScript could be leveraged? Especially I am thinking about how it could be used to improve dev workflow à la figwheel.

@darwin
Copy link
Author

darwin commented Sep 20, 2015

@jeluard I somehow missed your comment here. I'm probably not getting notifications without mentioning @darwin.

I believe that bootstrapped ClojureScript will be big part of this, at least for "intellisense". Actually I did some experiments with it already. But it was too rough two months ago. I have more pressing task of getting basic editor working. Will happily wait for Mike to show the way with planck (and iron out show stoppers on the way).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment