
Thrust: Chromium-based cross-platform, cross-language application framework - mhernandez1988
https://github.com/breach/thrust/
======
spolu
Quick note on comparison with node-webkit / atom-shell:

node-webkit and atom-shell embeds NodeJS along the chromium content module
forcing its user to use not only NodeJS but a particular build of it.

On the contrary, Thrust embeds the Chromium content module and exposes an API
on the standard IO, which makes it bindable in any language and works
perfectly well as a dependency with vanilla nodeJS / Go / Python

Makes the distribution of cross-platform GUI apps through the pip/npm
possible.

~~~
notastartup
This would be absolutely phenomenal if you could have the entire pip ecosystem
and write cross platform desktop apps in python.

~~~
spolu
pip or npm yes!

~~~
mhernandez1988
As well as go get -u {urltopackage} go install

~~~
toqueteos
Doesn't go get already do go install?

~~~
mhernandez1988
Yes. In some cases ive experienced both. Sometimes it installed sometimes it
did not.

------
morganrallen
As a proof of concept I knocked up JankyBrowser in about 3 hours. Nagivation?
Check. Tabs? Check (how long did other browser take to get those!). All in a
little over 6K of JS.

[https://gist.github.com/morganrallen/f07f59802884bcdcad4a](https://gist.github.com/morganrallen/f07f59802884bcdcad4a)

~~~
christiangenco
...wow! This is a really compelling

I know it's really fashionable to hate on javascript, but there's really
something to be said for being able to code _a web browser_ with tools you can
learn on Khan Academy.

~~~
al2o3cr
"var webview = document.createElement("webview");"

Turns out, it's pretty easy to code a web browser in ANYTHING if one of the
primitives you can instantiate is A WEB BROWSER...

~~~
mhernandez1988
al2o3cr, actually no. There are a load of difficult implementations needed to
achieve even the most basic webbrowser, even when building on top of the
already great chromium content lib. For instance, Thrust's predecessor
ExoBrowser failed where Thrust is succeeding, thankfully we have progressed to
a state of composability where we can take the work of others before and
compose it into something useable for the world. The 500 something commits to
Thrust were no simple feat, and their are many more to come.

------
hardwaresofton
This is really awesome. Reminds me of
[http://www.tidesdk.org](http://www.tidesdk.org)

Honestly, I'm super prepared for the world where HTML/CSS is used for all the
GUIs (while HTML/CSS are not perfect, I think they've done a pretty good job
being flexible enough style to millions of user-facing GUI applications, also
known as web sites, for so long). I don't think many people agree, but the day
I don't have to try and choose between TK, GTK, QT, and some other smaller
framework is gonna be a good day.

Not quite the same (since this runs on chromium, and I'm not sure that TideSDK
does also -- at least it's been around too long that it feels like they
couldn't possibly have).

~~~
jmnicolas
This is not a popular view, but I think as developers we should focus on one
platform and serve it well, instead of making nearly tolerable apps for every
platforms.

~~~
joshguthrie
I'm supplying a node-webkit app to thousand of clients and I feel you.

We thought "Hey, it runs on everything!" would be nice for our future
roadmap...but didn't we say the same about Java?

------
mcdermed
As a web developer this is a very cool project. It's a very simple sandbox to
develop a custom application or even customize my browsing experience. Being
built on the current stable release of Chrome makes it even better.

------
xtacy
I get this error when building it. Any thoughts?

    
    
        $ go get -u github.com/miketheprogrammer/go-thrust                                                                                          
        package github.com/miketheprogrammer/go-thrust
        	imports github.com/miketheprogrammer/go-thrust
        	imports github.com/miketheprogrammer/go-thrust: no buildable Go source files in /Users/user/.gocode/src/github.com/miketheprogrammer/go-thrust

~~~
mhernandez1988
Apologies to all, we are restructuring the application to work better with go
get. You can try with the -d flag to avoid building files. this should
download the application to the proper gopath. then you can use the
instructions from the go-thrust repo homepage.

------
albertzeyer
Node that there is also the same-called project:
[http://thrust.github.io/](http://thrust.github.io/)

------
liuyanghejerry
Seems nice, especially with variant bindings instead of only one. One more
question, how to update the whole application after distributed, including
HTML/CSS/JS files and the framework binaries? Do I still have to make one
updater(which is not really an easy task if you want a fancy UI), or is
Chromium's update framework included already?

------
venti
This is great! Installed it via PIP and it just worked. I would love to see
this combined with
[https://github.com/enthought/jigna](https://github.com/enthought/jigna) /
[https://www.youtube.com/watch?v=KHSXq5jfv_4](https://www.youtube.com/watch?v=KHSXq5jfv_4)
.

------
stereosteve
Awesome project. Breach is also very cool. What are the plans for the future
of Breach?

~~~
morganrallen
It will get rebuilt on top of Thrust.

------
roxtar
Can someone tell me use-case wise how this differs from PhantomJS and CEF?

~~~
morganrallen
Unlike PhantomJS, this is not a headless browser (though can be!), its a
browser that can be designed in HTML/CSS/JS. This is to say, the navigation
buttons are controlled by you, your own download manager, etc. Time and
imagination are your limits.

~~~
Charlieee
You could write a browser in assembler. Only time and imagination are your
limits.

------
JasonFruit
I think this is the first time I've seen the phrase, "requires Python 3." It's
certainly the first time I've seen it on something that I want badly enough to
mess with it.

~~~
jpgvm
To be fair the Python bindings are pretty simple, you could easily implement
it in Python 2. You do need evented I/O however so you could write either
gevent or twisted bindings.

~~~
spolu
Yes exactly. I started coding in Python 2 days ago so I went with what I found
(asyncio) but it could be easily recoded in Python2!

------
WorldWideWayne
Sounds great. Just one question about the Windows screenshot - why are the
fonts so jagged?

~~~
spolu
Screenshot from a remote server running on AWS. I guess the settings are
screwed up on that machine!

------
notastartup
So my question is what's your rationale for using Thrust vs. Node-webkit?

~~~
mhernandez1988
Node-Webkit is hacky at best. Atom-Shell is a major improvement on Node-
Webkit, however not quite there. Native modules need to be compiled for a
completely different target.

Thrust takes it a step further, improving on the past. Thrust uses the same
backing library as Atom-Shell (brightray) to expose the Chromium Content
Library.

Thrust is cross-platform cross-language. Use a similar familiar api from any
language you want, or roll your own. No need to use javascript on the backend
if you dont want to.

For example, Go-Thrust can compile, this is a particular advantage for
distributing applications.

~~~
swah
Could one write a fast text editor using Thrust? Can one use C++ instead of
Python/JS/Go?

~~~
mhernandez1988
One could use c++ instead of Python/JS/Go, I would however recommend still
using the JSONRpc bridge to communicate. I would not recommend using c/c++ at
all, as Atom.io has proven more modern garbage collected languages have become
so incredibly fast that c/c++ are primarily distractions unless you are a
master of the incredibly huge ecosystem and can sling code together fast
without having leaks, pointer issues, and a host of other security issues.

At a minimum, I would recommend using Go or NodeJS with a C binding for any
extremely low level operations you would like to achieve, that would make
everything much more suitable, you would also benefit of the ecosystem of
modules.

~~~
swah
Agreed, though I'm sure Atom doesn't steal more users from Sublime Text (C++ &
Python for the plugins) due to its so-so performance.

