waveterm/BUILD.md
Evan Simkowitz e5f98c6475
Update our build workflows to use NodeJS 22 ()
NodeJS 20 is almost EOL so I'm updating our workflows to use NodeJS 22.
This does not change anything about our app, which will still use NodeJS
20 until Electron shifts away from it. NodeJS 22 is fully
backwards-compatible with NodeJS 20 so there's no issue from a testing
standpoint.
2024-11-13 21:06:48 -08:00

4.1 KiB

Building Wave Terminal

These instructions are for setting up dependencies and building Wave Terminal from source on macOS, Linux, and Windows.

Prerequisites

OS-specific dependencies

See Minimum requirements to learn whether your OS is supported.

macOS

macOS does not have any platform-specific dependencies.

Linux

You must have zip installed. We also require the Zig compiler for statically linking CGO.

Debian/Ubuntu:

sudo apt install zip snapd
sudo snap install zig --classic --beta

Fedora/RHEL:

sudo dnf install zip zig

Arch:

sudo pacman -S zip zig
For packaging

For packaging, the following additional packages are required:

  • fpm — If you're on x64 you can skip this. If you're on ARM64, install fpm via Gem
  • rpm — If you're not on Fedora, install RPM via your package manager.
  • snapd — If your distro doesn't already include it, install snapd
  • lxdInstallation instructions
  • snapcraft — Run sudo snap install snapcraft --classic
  • libarchive-tools — Install via your package manager
  • libopenjp2-tools — Install via your package manager
  • squashfs-tools — Install via your package manager

Windows

You will need the GNU build toolchain installed in order for Go to work on Windows. In most cases, this requires installing MinGW-w64.

The easiest way to install this is using MSYS2: https://www.msys2.org/

If you prefer an alternative method, you can find other methods here: https://www.mingw-w64.org/downloads/

Task

Download and install Task (to run the build commands): https://taskfile.dev/installation/

Task is a modern equivalent to GNU Make. We use it to coordinate our build steps. You can find our full Task configuration in Taskfile.yml.

Go

Download and install Go via your package manager or directly from the website: https://go.dev/doc/install

NodeJS

Make sure you have a NodeJS 22 LTS installed.

See NodeJS's website for platform-specific instructions: https://nodejs.org/en/download

Yarn Modern

Once you have NodeJS installed, you'll need to enable Corepack so that Yarn Modern can work:

corepack enable

If your NodeJS distribution does not ship with Corepack, you can install it manually using NPM:

npm install -g corepack
corepack enable

Corepack's official documentation says to uninstall Yarn and PnPM first, but this is probably overkill. If you have any issues, try removing them from your system before continuing.

For more information on Corepack, check out this link.

Clone the Repo

git clone git@github.com:wavetermdev/waveterm.git

or

git clone https://github.com/wavetermdev/waveterm.git

Build and Run

All the methods below will install Node and Go dependencies when they run the first time. All these should be run from within the Git repository.

Development server

Run the following command to build the app and run it via Vite's development server (this enables Hot Module Reloading):

task electron:dev

Standalone

Run the following command to build the app and run it standalone, without the development server. This will not reload on change:

task electron:start

Packaged

Run the following command to generate a production build and package it. This lets you install the app locally. All artifacts will be placed in make/.

task package

If you're on Linux ARM64, run the following:

USE_SYSTEM_FPM=1 task package

Debugging

Frontend logs

You can use the regular Chrome DevTools to debug the frontend application. You can open the DevTools using the keyboard shortcut Cmd+Option+I on macOS or Ctrl+Option+I on Linux and Windows. Logs will be sent to the Console tab in DevTools.

Backend logs

Backend logs for the development version of Wave can be found at ~/.waveterm-dev/waveapp.log. Both the NodeJS backend from Electron and the main Go backend will log here.