explaingit

googlechromelabs/carlo

9,268JavaScriptAudience · developerComplexity · 2/5Setup · moderate

TLDR

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.

Mindmap

mindmap
  root((carlo))
    What it does
      Node UI in Chrome
      Two-way calls
      No bundled browser
    Tech Stack
      JavaScript
      Node.js
      Chrome browser
    Use Cases
      Desktop GUI apps
      System info tools
      Single executable app
    Status
      Archived
      No active updates
      Examples remain
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Build a desktop app for a Node.js script that shows a real Chrome window as its interface instead of a command line.

USE CASE 2

Pass data back and forth between a Node.js backend and an HTML browser UI without setting up a separate web server.

USE CASE 3

Package a Node.js and browser UI app into a single executable using pkg so users don't need to install Node separately.

Tech stack

JavaScriptNode.jsChrome

Getting it running

Difficulty · moderate Time to first run · 30min

Requires Google Chrome already installed on the user's machine. Project is archived with no active maintenance or bug fixes.

In plain English

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.

Copy-paste prompts

Prompt 1
Using Carlo from googlechromelabs, show me how to open a Chrome window from a Node.js script that displays an HTML page and calls a Node function when a button is clicked.
Prompt 2
With Carlo, write a Node.js app that reads system memory stats in Node and displays them live in a Chrome browser window. Show the two-way function calls between Node and the browser page.
Prompt 3
Using Carlo with pkg, how do I package my Node.js and Chrome UI app into a single self-contained executable that users can run without installing Node or a separate server?
Open on GitHub → Explain another repo

← googlechromelabs on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.