{"id":13453034,"url":"https://github.com/breach/thrust","last_synced_at":"2025-05-15T04:00:20.109Z","repository":{"id":9674419,"uuid":"11617231","full_name":"breach/thrust","owner":"breach","description":"Chromium-based cross-platform / cross-language application framework","archived":false,"fork":false,"pushed_at":"2024-01-09T14:17:23.000Z","size":3463,"stargazers_count":2768,"open_issues_count":47,"forks_count":121,"subscribers_count":86,"default_branch":"master","last_synced_at":"2025-04-14T03:11:47.839Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/breach.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2013-07-23T19:32:40.000Z","updated_at":"2025-04-10T10:07:30.000Z","dependencies_parsed_at":"2024-01-14T16:12:14.605Z","dependency_job_id":"e4b0b8bc-dd85-44c5-b3d7-80b048947ce9","html_url":"https://github.com/breach/thrust","commit_stats":null,"previous_names":["breach/exo_browser"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/breach%2Fthrust","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/breach%2Fthrust/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/breach%2Fthrust/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/breach%2Fthrust/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/breach","download_url":"https://codeload.github.com/breach/thrust/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254270640,"owners_count":22042858,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T08:00:31.547Z","updated_at":"2025-05-15T04:00:20.063Z","avatar_url":"https://github.com/breach.png","language":"C++","funding_links":[],"categories":["C++","Uncategorized"],"sub_categories":["Uncategorized"],"readme":"#### DEPRECATED - This package is no longer supporter or maintained.\n\n\n\n![Logo Thrust](http://i.imgur.com/IviZAGZ.png)\n\n**Chromium-based cross-platform / cross-language application framework**\n\n*Thrust is `require/import`-able, it lets you distribute NodeJS, Go or Python GUI apps directly \nthrough their native package managers.*\n\nThrust is based on Chromium's Content Module and is supported on Linux, MacOSX and Windows:\n\n![Cross-Platform Screenshots](http://i.imgur.com/7K98jyW.png)\n*Screenshot of Thrust Getting Started example running on each major platform.*\n\nTo better understand what Thrust can do, check out **[JankyBrowser](https://gist.github.com/morganrallen/f07f59802884bcdcad4a)** by \n@morganrallen, the cross-platform browser that fits in a gist:\n```\nnpm install -g \\\n  https://gist.github.com/morganrallen/f07f59802884bcdcad4a/download\n```\n\n#### Table of Contents\n- [Language bindings](#language-bindings)\n  - [NodeJS](#nodejs)\n  - [Go](#go)\n  - [Python](#python)\n  - [Scala](#scala)\n  - [Clojure](#clojure)\n  - [Perl](#perl)\n- [API Reference](#api-reference)\n- [Architecture](#architecture)\n- [Community](#community)\n  - [Request for API](#request-for-api)\n  - [List of Thrust Users](#list-of-thrust-users)\n  - [Thrust 7.5k Contest](#thrust75k-contest)\n  - [Getting Involved](#getting-involved)\n- [Features \u0026 Roadmap](#features--roadmap)\n- [Building Thrust from Sources](#building-thrust-from-sources)\n\n***\n## Language bindings\n\nThrust's binary distribution exposes its API on the standard IO and language\n specific library packages automatically download the binary distribution at \ninstallation. Thrust is based on Chromium's content module and uses web-pages \nas its GUI.\n\nAll these Getting Started example work as is on each major platform (MacOSX,\nWindows, Linux)\n\n### NodeJS\n##### Getting Started\n\nFirst install with `npm install node-thrust`\n\n```Javascript\nrequire('node-thrust')(function(err, api) { \n  api.window({ root_url: 'https://google.com' }).show();\n});\n```\n\n##### Library\n\n- **node-thrust** [breach/node-thrust](https://github.com/breach/node-thrust/)\n\n### Go\n\n##### Getting Started\n\nFirst download with `go get -u github.com/miketheprogrammer/go-thrust/`\n\n```Go\n```\npackage main\n\nimport (\n\t\"github.com/miketheprogrammer/go-thrust/lib/dispatcher\"\n\t\"github.com/miketheprogrammer/go-thrust/lib/spawn\"\n\t\"github.com/miketheprogrammer/go-thrust/lib/bindings/window\"\n\t\"github.com/miketheprogrammer/go-thrust/lib/commands\"\n)\n\nfunc main() {\n\tspawn.Run()\n\tsize := commands.SizeHW{}\n\topts := window.Options{\n\t\tRootUrl:  \"http://google.com\",\n\t\tSize:     size,\n\t\tTitle:    \"Demo window\",\n\t\tHasFrame: true,\n\t}\n\tthrustWindow := window.NewWindow(opts)\n\tthrustWindow.Show()\n\tthrustWindow.Maximize()\n\tthrustWindow.Focus()\n\tdispatcher.RunLoop()\n}\n\n##### Library\n\n- **go-thrust**: [miketheprogrammer/go-thrust](https://github.com/miketheprogrammer/go-thrust)\n\n### Python\n\n##### Getting Started\n\nFirst install with `pip3 install pythrust [--user]` (requires Python3)\n\n```Python\nimport asyncio, pythrust\n\nloop = asyncio.get_event_loop()\napi = pythrust.API(loop)\n\nasyncio.async(api.spawn())\nasyncio.async(api.window({ 'root_url': 'http://google.com' }).show())\n\nloop.run_forever()\n```\n\n##### Library\n\n- **pythrust** [breach/pythrust](https://github.com/breach/pythrust/)\n\n### Scala\n\n##### Getting Started\n\nInclude scala-thrust jar on your classpath. (Add to lib in your project.)\n\n```Scala\nimport scala.concurrent.ExecutionContext.Implicits.global\nimport com.github.eklavya.thrust._\n\nobject Main extends App {\n  Window.create(\"http://google.com\").foreach { w =\u003e\n    w.show\n    w.maximize\n    w.openDevtools\n    w.focus(true)\n    w.onBlur(() =\u003e println(\"we were blurred\"))\n    w.onFocus(() =\u003e println(\"we were focused\"))\n    Menu.create(\"MyMenu\").foreach { m =\u003e\n      val i = MenuItem(\"Item1\", _ =\u003e println(\"Item1 was clicked\"))\n      m.addItem(i)\n      m.popup(w)\n    }\n  }\n}\n```\n\n##### Library\n\n- **scala-thrust** [eklavya/scala-thrust](https://github.com/eklavya/scala-thrust/)\n\n### Clojure\n\n##### Getting Started\n\n- [Installation](https://github.com/solicode/clj-thrust#installation)\n- [Sample Project](https://github.com/solicode/clj-thrust#sample-project)\n\n```clojure\n(ns my-app.core\n  (:require [clj-thrust.core :refer [create-process destroy-process]]\n            [clj-thrust.window :as w]))\n\n(let [process (create-process) ; `create-process` also takes path to Thrust directory\n      window (w/create-window process\n               :root-url \"http://localhost:8080\" ; URL to your web app\n               :size {:width 400 :height 300})]\n  (w/listen-closed window\n    (fn [e]\n      (destroy-process process))) ; Optionally call `(System/exit 0)` here.\n  (w/show window)\n  (w/focus window true))\n```\n\n##### Library\n\n- **clj-thrust** [solicode/clj-thrust](https://github.com/solicode/clj-thrust)\n\n### Perl\n\n##### Getting Started\n\nInstall with `cpanm Thrust [--sudo]`\n\nSimple command line test:\n\n```\nperl -MThrust -e 'Thrust-\u003ewindow-\u003eshow-\u003emaximize-\u003eopen_devtools-\u003erun'\n```\n\nBasic program\n\n```Perl\nuse Thrust;\n\nmy $t = Thrust-\u003enew;\n\nmy $w = $t-\u003ewindow(\n          root_url =\u003e 'data:text/html,Hello World!',\n          title =\u003e 'My App',\n          size =\u003e { width =\u003e 800, height =\u003e 600 },\n        );\n\n$w-\u003eon(closed =\u003e sub { exit });\n\n$w-\u003eshow;\n\n$t-\u003erun; ## enter event loop\n```\n\n##### Library\n\n- [metacpan](https://metacpan.org/pod/Thrust)\n- [github](https://github.com/hoytech/Thrust)\n\n\n***\n## API Reference\n\nThe API reference as well as links to specific language bindings documentations \nare availble in the [docs/](https://github.com/breach/thrust/tree/master/docs)\n directory.\n\n***\n## Architecture\n\n```\n[Thrust Architecture]\n\n          (Platform)           [stdio]      (Your Implementation)\n                                                                          \n                                  #\n               +--------------+   #       +-----------------------+  | \n               | Cocoa / Aura |   #   +---|    win3: (HTML/JS)    |  |\n               +-------+------+   #   |  +-----------------------++  |\n                       |          #   +--|    win2: (HTML/JS)    |   | cli\n+------------+ +-------+------+   #   | +-----------------------++   |\n|            +-+ thrust (C++) +-------+-+    win1: (HTML/JS)    |    |\n| ContentAPI | +-------+------+   #     +-----------------------+    |\n|            |         |          #                | (TCP/FS)      \n| (Blink/v8) | +-------+------+   #     +-----------------------+    |\n|            | + JSON RPC srv +---------+ Client App (any Lang) |    | srv\n+------------+ +--------------+   #     +-----------------------+    |\n                                  #\n```\n\n***\n## Community\n\n##### Request for API\n\n- List of API needed by various projects on Thrust: \n[Request for API](https://github.com/breach/thrust/wiki/Request-for-API)\n\n##### List of Thrust Users \n\n- List of people relying on Thrust: \n[List of Thrust Users](https://github.com/breach/thrust/wiki/List-of-Thrust-Users)\n\n##### Getting Involved\nNo longer maintained actively.\n\n***\n## Features \u0026 Roadmap\n\n- [x] **window creation** create, show, close resize, minimize, maximize, ...\n- [x] **node.js, go** node.js and go bindings libraries\n- [x] **window events** close, blur, focus, unresponsive, crashed\n- [x] **cross-platform** equivalent support on `MacOSX`, `Windows` and `Linux`\n- [x] **sessions** off the record, custom storage path, custom cookie store\n- [x] **kiosk** kiosk mode\n- [x] **application menu** global application menu (MacOSX, X11/Unity)\n- [x] **webview** webview tag (secure navigation, tabs management)\n- [x] **frameless** frameless window and draggable regions\n- [x] **python** python bindings library\n- [x] **remote** thrust specific IPC mechanism for client/server communication\n- [x] **proxy** enable traffic proxying (Tor, header injection, ...)\n- [ ] **tray icon** tray icon native integration\n- [ ] **protocol** specific protocol registration (`file://`, ...)\n\n***\n## Building Thrust from Sources\n\nYou will generally don't need to build thrust yourself. A binary version of \nthrust should be automatically fetched by the library you're reyling on at \ninstallation.\n\nTo build thrust, you'll need to have `python 2.7.x` and `git` installed. You can \nthen boostrap the project with:\n```\n./scripts/boostrap.py                                \n```\n\nBuild both the `Release` and `Debug` targets with the following commands:\n```\n./scripts/update.py\n./scripts/build.py\n```\n\nNote that `bootstrap.py` may take some time as it checks out `brightray` and\ndownloads `libchromiumcontent` for your platform.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbreach%2Fthrust","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbreach%2Fthrust","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbreach%2Fthrust/lists"}