gitmyhub

carlo

JavaScript ★ 9.3k updated 4y ago ▣ archived

Web rendering surface for Node applications

Carlo is a JavaScript library that lets Node.js apps show their UI inside a real Chrome browser window without bundling Chrome. The project is now archived and no longer maintained.

JavaScriptNode.jsChromesetup: moderatecomplexity 2/5

Carlo is a JavaScript library, created by the Google Chrome Labs team, that lets Node.js programs use a real web browser as their interface. Instead of building a plain command-line tool or a separate server with a front-end, developers could write their app logic in Node and have it display inside a Chrome window, just like a normal website.

The idea behind it is straightforward. Carlo finds the copy of Chrome already installed on the user's computer, opens it, and connects to it behind the scenes. The app's HTML, CSS, and JavaScript run inside that Chrome window, while the heavier work, reading files, talking to the system, calling Node libraries, stays in the Node process. The two sides can call functions on each other directly, so a button click in the browser can trigger a Node action, and a Node result can update what the page shows.

This made it a lighter option compared to tools like Electron, which bundle an entire copy of Chrome inside every app. With Carlo, the app relied on whatever Chrome version the user had installed, which kept downloads small but meant the app would not open if Chrome was not present on the machine.

The library also supported packaging the whole thing into a single executable file using a third-party tool called pkg, which let developers ship desktop apps without asking users to install Node separately.

Carlo is no longer maintained. The project was archived by the Google Chrome Labs team, and the README links to the issue thread where this was announced. There are no active bug fixes or new features being added. The examples in the repository still illustrate how the framework worked, with one showing system information and another embedding a terminal, both demonstrating how calls passed back and forth between the browser page and Node.

Where it fits