Open-source project
lichtblick-suite/lichtblick avatar
lichtblick-suite/lichtblick

Lichtblick: a browser-based viewer and diagnosis tool for robot data

Lichtblick is an integrated visualization and diagnosis tool for robotics, available in your browser or as a desktop app on Linux, Windows, and macOS.

1,184 stars752 forksTypeScriptNOASSERTION

At a glance

What is it?
Lichtblick is an integrated visualization and diagnosis tool for robotics, shipped as a web app, a desktop app and a Docker image, for inspecting recorded sensor data such as MCAP files. It suits a robotics engineer who wants to look at a bag of topics without writing a plotting script, and its telemetry is off unless the build enables it.
Who is it for?
Adopt Lichtblick if you work with recorded robotics data and want an interactive viewer for topics, plots and panels instead of writing your own script per bag. Skip it if you need continuous live streaming to a central dashboard, since the project is positioned around inspecting recorded data, and expect an Electron install on the desktop.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Lichtblick is for

Lichtblick is an integrated visualization and diagnosis tool for robotics, available in your browser or as a desktop app on Linux, Windows and macOS. The phrase that carries the most weight is integrated, because the alternative in robotics is a pile of separate tools, one for reading a bag file, another for plotting a topic, another for a 3-D view of a point cloud, and a fourth for a sanity check on a timestamp. The topics list for the repository is short, with mcap, robotics and visualization, and the MCAP topic tells you the data format it works with. The primary language is TypeScript, the licence is MPL-2.0 per the badge and the package manifest, the project is not archived, and the last push was on 2026-10-16. The releases are v1.29.1 on 2026-09-08, v1.28.1 on 2026-08-06 and v1.28.0 on 2026-07-28, so the version numbers track the product rather than a library API, and the default branch is `develop` rather than `main`, which tells you the project works on a develop branch with `main` as the released line.

Three ways to run it, one codebase

The first option needs no installation at all, since there is a hosted instance you can open in a browser. The second is Docker, and it is a single command:

sh
docker run --rm -p 8080:8080 ghcr.io/lichtblick-suite/lichtblick:latest

After which you open http://localhost:8080/. The third is building from source, and the sequence is a clone, corepack, an install and a launch. The clone is `git clone https://github.com/lichtblick-suite/lichtblick.git`, then `corepack enable` so that yarn is provided by corepack rather than installed separately, then `yarn install` for the packages from `package.json`. From there the desktop app and the web app are launched with different commands. The desktop path runs `yarn desktop:serve` to start the webpack dev server and then `yarn desktop:start` to launch electron, and the README notes that the serve step has to finish first so the bundle exists. The web path is `yarn run web:serve`, available at http://localhost:8080.

The build pipeline, and where the artefacts land

The build commands are named by target, and the naming is worth reading because it tells you the project is a webpack codebase with three separate bundles. `yarn run desktop:build:prod` compiles the desktop app, and then packaging happens per platform with `yarn run package:win`, `yarn run package:darwin` and `yarn run package:linux`. The web app is built with `yarn run web:build:prod`, and the benchmark bundle has its own set of commands with a serve and a production build. The artefacts land in different places, with the desktop builds in the `dist` directory and the web builds in `web/.webpack`. There is also `yarn run clean`, which shells out to `ci/clean-build.sh` rather than doing the cleanup inline. The packages themselves are compiled separately with `tsc --build` over the per-package tsconfig files, so the TypeScript libraries and the webpack bundles are two different build systems, and the `packages/` directory in the repository root is where the shared code lives.

The Docker image, and the layout override

The Dockerfile is a two-stage build that ends in a very small image. The build stage is `node:22`, it copies the source in, runs `corepack enable` and `yarn install --immutable`, then `yarn run web:build:prod`. The release stage is `caddy:2.5.2-alpine` and it copies the built `web/.webpack` directory across. Caddy then serves the files with `caddy file-server --listen:8080`, and the port is exposed. The entrypoint is the interesting part. It creates a `/lichtblick` directory, touches a `default-layout.json` file inside it, and then replaces a placeholder in `index.html` with the contents of that file, so a default panel layout can be supplied by bind mount without rebuilding the image.

Telemetry, and the design decision to compile it out

Lichtblick includes an opt-in OpenTelemetry integration used to understand how the app is used, for example which menu actions or panel types people interact with, and to help detect performance regressions. The way that opt-in works is unusual and worth reading carefully. Telemetry is off by default, and it is only active if the specific build you are running was compiled with an OTLP collector endpoint through `OTLP_ENDPOINT` at build time. Official public builds do not enable this unless explicitly configured, and if no endpoint is compiled in, nothing is ever collected or sent, and there is no runtime toggle to turn it on. Only anonymous, randomly-generated device and session identifiers are attached, with no user accounts, file contents, message data or personally identifiable information. Only a fixed, closed set of named UI interaction events can be emitted, defined in `packages/suite-base/src/services/IAnalytics.ts`, covering layout selection and creation, panel add and remove and app menu clicks, and there is no free-form event capture and no keystroke or input logging. A token-bucket rate limiter bounds what a single session can emit. If you are building your own distribution you set `OTLP_ENDPOINT` and the app exports to the logs and traces paths under it.

Linux packaging, where the dependency list is explicit

There is a specific warning about the Linux tar.gz package that is worth reading before you distribute it. When installing the `.tar.gz` package, unlike the `.deb`, system dependencies are not installed automatically. In many cases, if you already have Google Chrome or another Chromium-based application installed, Lichtblick will run fine, since those applications bring most of the required libraries. If you see errors about missing libraries when launching it, you have to install them yourself, and the most common missing ones are listed: `libgtk-3-0`, `libatk1.0-0`, `libatk-bridge2.0-0`, `libatspi2.0-0`, `libnss3`, `libnspr4`, `libasound2`, `libcups2`, `libnotify4`, `libxtst6`, `xdg-utils` and `libdrm`. There is a separate GPU note for Ubuntu users, since the application may present issues using the GPU, and the workaround is to bypass it and process on the CPU directly with the `LIBGL_ALWAYS_SOFTWARE` variable set to 1, applied as `LIBGL_ALWAYS_SOFTWARE=1 yarn desktop:start`. The Node.js dependency is v16.10 or newer for the published build, while the package manifest's `engines` field requires node `>=20` for development.

The repository, and the engineering around it

The tree shows a large application with a serious toolchain around it. There is a `packages/` directory holding the shared TypeScript libraries, a `desktop/` directory for the Electron app with its own webpack config, a `web/` directory for the browser build, a `benchmark/` directory with its own webpack configurations, `e2e/` for end-to-end tests, `docs/` for the documentation site, `ci/` for the build scripts, and `patches/` for patched dependencies. The quality tooling is extensive, with `biome.json` for formatting and linting, two ESLint configurations at `eslint.config.mjs` and `eslint.config.ci.mjs` plus a separate `eslint-test.ts` and a `tsconfig.eslint.json` for the type-aware rules, a `jest.config.json` for unit tests, a `sonar-project.properties`, an `.mcp.json` for model context protocol configuration, a `.coderabbit.yaml` for automated review, `.husky/` for git hooks, `.storybook/` for component development, and a `vercel.json` for the web deployment. The author field in the package manifest is Lichtblick with a bmwgroup.com address, which tells you the origin of the project and the corporate backing behind it, and the package manager is pinned to yarn 4.17.0 with a `.yarnrc.yml` in the root, which is why the corepack step in the setup is not optional.

Editorial conclusion

Adopt Lichtblick if you work with recorded robotics data and want an interactive viewer for topics, plots and panels instead of writing your own script per bag. Skip it if you need continuous live streaming to a central dashboard, since the project is positioned around inspecting recorded data, and expect an Electron install on the desktop. Before you deploy the web build, note that it requires Node 20 and yarn 4.17.0 through corepack, and that the container serves the app with Caddy on port 8080 with an optional default layout injected from a bind mount.

Frequently asked questions

How do I run Lichtblick with Docker?

Run `docker run --rm -p 8080:8080 ghcr.io/lichtblick-suite/lichtblick:latest` and open http://localhost:8080/. The image builds the web app with yarn and serves it with Caddy on port 8080.

How do I build Lichtblick from source?

Clone the repository, run `corepack enable` so yarn comes from corepack, then `yarn install`. Launch the web app with `yarn run web:serve`, or the desktop app with `yarn desktop:serve` followed by `yarn desktop:start` once the dev server has finished building.

Is telemetry enabled in the public Lichtblick builds?

No. Telemetry is only active if the build was compiled with an OTLP collector endpoint through OTLP_ENDPOINT at build time. Official public builds do not enable it unless explicitly configured, and there is no runtime toggle to turn it on.

What libraries does the Lichtblick Linux tar.gz package need?

Unlike the .deb, the .tar.gz does not install system dependencies automatically. The most commonly missing ones are libgtk-3-0, libatk1.0-0, libatk-bridge2.0-0, libatspi2.0-0, libnss3, libnspr4, libasound2, libcups2, libnotify4, libxtst6, xdg-utils and libdrm, and having Chrome or another Chromium-based application installed usually supplies them.

How do I work around GPU problems with Lichtblick on Ubuntu?

Bypass the GPU and process on the CPU in software by running the desktop app with the LIBGL_ALWAYS_SOFTWARE variable set to 1, for example `LIBGL_ALWAYS_SOFTWARE=1 yarn desktop:start`.

Official sources

  1. Issues
  2. lichtblick-suite/lichtblick on GitHub
  3. README
  4. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/lichtblick-suite-lichtblick.svg)](https://hysenlabs.com/projects/lichtblick-suite-lichtblick)

Was this useful?