# Vieb: A Vim-Inspired Electron Browser for Keyboard Users

> Vieb combines an Electron browsing environment with Vim-inspired interaction for users who prefer keyboard-oriented web navigation. Its source build path is straightforward, but adoption means accepting a browser architecture and interaction model that differ from conventional Chromium clients.

**Jelmerro/Vieb** — Vim Inspired Electron Browser - Vim bindings for the web by design

- Repository: https://github.com/Jelmerro/Vieb
- Website: https://vieb.dev
- Stars: 1,624 · Forks: 80
- Language: JavaScript
- License: GPL-3.0
- Published: 2026-10-16 · Updated: 2026-10-16 · Language: en
- Canonical page: https://hysenlabs.com/projects/jelmerro-vieb

## Why Vieb Exists Alongside Conventional Desktop Browsers

Vieb addresses users who prefer Vim-inspired keyboard interaction while retaining a desktop web browser. Its stated positioning is direct: "Vim bindings for the web by design," followed by the description "Vim Inspired Electron Browser." That makes the project more than an Electron shell with a few shortcuts. The interaction model is part of its identity, and prospective users are adopting a browser designed around command-oriented input rather than treating Vim bindings as an optional accessory.

The primary audience is therefore people who already understand Vim-style modes, commands and navigation and want a similar model for browsing. A user who expects familiar browser controls, conventional settings pages or direct interaction with a standard Chromium layout may find that Vieb asks for a different operating style. The README does not enumerate every default key binding, so it would be inappropriate to promise that a particular Vim command works exactly as it does in Vim without checking the project's cheatsheet.

Vieb also offers a separate container-oriented startup option called Erwic. According to the README, its purpose is to "Easily Run Websites In Containers," similar to Franz, Ferdi or Rambox, and it can replace desktop apps such as Slack or Discord in isolated Vieb instances. That distinction matters. Vieb itself is the browser, while Erwic is a documented startup mode for running websites separately from an existing Vieb process.

## Electron, Chromium and Vieb's Package Structure

The repository identifies `app/index.js` as the Electron entry point in `package.json`. Vieb is therefore implemented as an Electron application rather than as a browser extension attached to an already installed browser. Its JavaScript dependencies provide clues about the browser-level responsibilities in the repository. They include Electron ad blocking through `@ghostery/adblocker-electron`, page rendering support through `@mozilla/readability`, `darkreader`, syntax highlighting through `highlight.js`, Markdown processing through `marked`, and filesystem-style matching through `picomatch`.

The visible repository layout supports a conventional Electron application structure: application code is under `app/`, the development entry command runs `electron app`, and executable output is directed to `dist` by `build.js`. Additional files include webpack configuration, type checking configuration, internationalization code and an `after-install.sh` script. These entries show a build and desktop application pipeline rather than a small command-line utility.

The README confirms that Vieb can create executable builds, but it does not document the complete browser process model, session-storage layout, extension compatibility or sandbox behavior. It would therefore be unsafe to infer those details merely from the Electron dependency. The documented data boundary is clearer during development: `npm run dev` passes `--datafolder=./ViebData/` and `--config-order=datafolder-only`, directing a local run to use the repository-local `ViebData/` folder. That option gives contributors a defined way to separate local development data from the normal data location.

## Installing Vieb and Starting a Local Instance

For packaged use, the README points to the official download page for current stable builds across many platforms. GitHub Releases provides the same releases with release notes and previous versions listed. On Fedora, the project publishes a custom repository intended to provide automatic updates. Installing through that repository adds the project maintainer's repository and then installs the `vieb` package.

```bash
sudo dnf config-manager addrepo --from-repofile=https://jelmerro.nl/fedora/jelmerro.repo
sudo dnf install vieb
```

Users on other platforms should use `https://vieb.dev/download`, while users who need release notes or an older version should use the GitHub Releases page. The README does not provide commands for Windows, macOS or Linux package managers other than this Fedora route.

For a source installation, the documented prerequisites are Node.js and a local clone or download of the repository. Install the locked dependencies, then start Electron directly against the application directory.

```bash
npm ci
npm start
```

The first command installs the dependency tree represented by `package-lock.json`. The second runs the `start` script, which resolves to `electron app`. The README does not state what output should appear, so the verifiable result is the project process starting through the documented script rather than a particular terminal message.

## Using a Separate Data Folder and Creating Executables

Contributors and developers can keep development state outside the normal application data location. The `dev` script adds two Electron arguments that are important: `./ViebData/` selects a repository-local folder, while `datafolder-only` gives it precedence for configuration resolution.

```bash
npm run dev
```

The documented mechanism maps this script to:

```json
"dev": "electron app --datafolder=./ViebData/ --config-order=datafolder-only"
```

This is the clearest first real workflow for someone working on Vieb itself. It starts the same application entry point as `npm start` but supplies a predictable data folder. The repository also includes development scripts for linting, type checking and tests. `npm run lint` executes ESLint and TypeScript checking, while `npm test` invokes Node's test runner. The combined `test:all` script runs those checks in sequence.

For distributable output, the README specifies `node build`. Builds are written to `dist`, and `node build --help` is the documented route to other build options.

```bash
node build --help
node build
```

The source is declared as CommonJS in `package.json`, with Electron `43.1.1` and `electron-builder` `26.15.3` listed as development dependencies. The README does not enumerate every platform target supported by the build script, so the existence of a build pipeline should not be confused with a claim that every target succeeds on every host.

## Container-Like Instances Through the Erwic Startup Option

Erwic expands Vieb beyond ordinary browser use without changing the fact that each instance remains an Electron-based application. The README states that separate Vieb instances can run from the existing installation and that Erwic can host websites associated with services such as Slack or Discord. The actual usage instructions are delegated to `Erwic.md`, so the README does not establish which websites are bundled, how configuration files are structured or how lifecycle commands are invoked.

This approach has a real difference from a conventional browser profile. A normal browsing session shares one browser application and its normal tabs and data model. Erwic is presented as a separate-instance container model intended to isolate website-oriented applications from the user's main Vieb environment. Franz, Ferdi and Rambox are named as programs with a similar purpose, but the README does not claim feature parity with them.

The repository entry `Erwic.md` is therefore the first file to inspect before selecting Vieb for application-style web use. It is also the correct place to verify startup syntax and per-instance configuration. Commands from other container browsers should not be substituted without checking that file. If the intended workload is a single website, the plain Vieb browser is the more directly documented choice. If the intended workload is Slack, Discord or another service in its own process, Erwic is the relevant mode to investigate.

## Security, Dependency Surface and License Boundaries

Vieb's GPL-3.0-or-later license means redistribution and modification are governed by the GPL text and applicable license conditions. The repository includes the license file, while `package.json` uses the SPDX-style identifier `GPL-3.0-or-later`. This identifies the declared license. It does not by itself answer a deployment-specific legal question, which depends on distribution form and context rather than repository metadata alone.

Vieb also depends on several rendering and filtering packages. The dependency list includes `@ghostery/adblocker-electron` and its preload package at version `2.18.1`, `electron` at `43.1.1`, and other JavaScript components pinned through `package-lock.json`. An Electron application has more moving parts than a native browser wrapper, so dependency upgrades deserve attention. The README does not document an end-user update policy or provide an audit history, so it supports only a factual maintenance judgement.

The repository is not archived, and its last push was on 2026-08-22. Recent releases include `12.10.0` on 2026-07-19, `12.9.0` on 2026-05-10 and `12.8.0` on 2026-04-09. The package version is `12.10.1-dev`, indicating development beyond the latest listed stable release. These dates show recent repository activity, but the README does not state how quickly users should upgrade or how disruptive upgrades are.

## Where Vieb Is the Wrong Browser Choice

The clearest exclusion is a user who wants standard Chromium-style browsing with a minimal departure from the browser interface their operating system already provides. Vieb is explicitly Vim-inspired, so its value depends on accepting a command-oriented browsing model. Someone who does not use Vim concepts may see the interface as unfamiliar without receiving an equivalent benefit.

Electron is another boundary. Vieb is not presented as a lightweight native browser engine or as an extension for an existing Chromium installation. People who reject a browser built on Electron may need a different category of software, regardless of Vieb's key bindings. The README does not publish memory, startup-time or package-size measurements, so it does not support a claim that Vieb is lighter or heavier than any alternative. The architecture itself is the documented fact to evaluate.

Vieb may also be the wrong choice when offline operation or a formal release process matters. Although the README offers binaries for many platforms through the official download page, it does not present Vieb as an offline-first browser. The source build instructions assume Node.js, a repository copy and successful execution of the packaging scripts. An organization that requires reproducible internal builds should inspect `build.js`, `webpack.config.js` and `package-lock.json` before assuming that an internal binary is documented and supported.

## Conclusion

Vieb fits users who specifically want a Vim-inspired browser and are prepared to learn its controls and Electron footprint. It is a poor fit for users seeking a conventional Chromium interface or a browser with no layered application runtime. Before adoption, verify the packaged build for the target operating system, review the documented key bindings and startup behavior, and confirm that the GPL-3.0-or-later distribution model matches the intended use.

## FAQ

### How do I install and run Vieb from source?

Install Node.js, clone or download the repository, then run `npm ci` followed by `npm start`. The start script launches `electron app`.

### What does the Vieb dev script change?

It starts `electron app` with `--datafolder=./ViebData/` and `--config-order=datafolder-only`, using a repository-local development data folder.

### Can Vieb run website containers separately?

Yes, the README says the Erwic startup option can run websites in separate containers and that these instances can operate separately from an existing Vieb process. Full usage is delegated to `Erwic.md`.

### Where can I download packaged Vieb releases?

The official download page provides the latest stable releases for many platforms. GitHub Releases offers the same releases plus release notes and previous versions.

### How are executable Vieb builds produced?

Run `node build` to create executable builds, which are stored in `dist`. Use `node build --help` to see the other available options.

## Sources

- [Jelmerro/Vieb on GitHub](https://github.com/Jelmerro/Vieb)
- [License: GPL-3.0](https://github.com/Jelmerro/Vieb/blob/master/LICENSE)
- [Project website](https://vieb.dev)
- [README](https://github.com/Jelmerro/Vieb/blob/master/README.md)
- [Releases](https://github.com/Jelmerro/Vieb/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/jelmerro-vieb
