Using individual components of theia

Hey folks,

I have an existing custom browser-based IDE using monaco, and I’m interested in exploring the potential of gradually moving bits and pieces to theia, with the goal of eventually turning my IDE into a variety of modules on top of theia.

Does anyone have any advice for how I’d go about rendering just one component of theia (say, monaco), without needing to import a bunch of unrelated things? Still getting used to the inversify style dependency injection, so perhaps theres something that I am missing.

Cheers

[original thread by John Wiseheart]

If you want to have a custom shell, i.e without bottom, side, status and menu bars, just with main area and Monaco editor. You will need to customize and rebind the default shell: https://github.com/theia-ide/theia/blob/6af076b80e7f8985dd957de34e9a4a1350b7c901/packages/core/src/browser/shell/application-shell.ts#L115

here is the issue to support custom shell: https://github.com/theia-ide/theia/issues/479

as @spoenemann mentioned there are opened Qs about how it should work for existing extensions

[John Wiseheart]

Thanks for the info. On this topic, what would be required to use theia as only a frontend. I expect that I would have to provide frontend implementations of a lot of the websocket stuff, but I’d like to try to get it working with only localStorage if possible.

You will need to look at all services which are bound over web socket and provide frontend based implementation for them. It is about 20 in theia repo i think. Plus there are services which are relying on HTTP endpoint, files for example. Regarding language servers you will be able to support only JS based, other won’t run in browser.

[John Wiseheart]

Cheers, managed to override most of the services which use websockets to use a local implementation.

interesting what you are doing there :slight_smile: Is it possible to see some app?

[Jayson Minard]

@john-wiseheart any chance of sharing those overriden services?

[John Wiseheart]

@anton-kosyakov Unfortunately not something I can show publicly :frowning: @apatrida Mostly the overriden services just involved re-binding - to make the basic app work, I rebound FileSystem to use our own implementation, as well as WorkspaceServer and ApplicationServer.