Add support for your Linux distro

This guide shows all necessary steps needed for unspported Linux distributions to work with Wails.

if you managed to get Wails working for your desktop please consider making a Pull Request. For more details see the development section.

Identify necessary dependencies

Wails uses cgo to bind to the native rendering engines so a number of platform dependent libraries are needed.

gcc, pkg-config

gtk, webkit

Locate the appropriate equivalent libraries for your distribution.

NOTE: if your distro is a derivative and not a major distribution there are good chances all necessary dependendancies to be the covered on the installation’s prerequisites section.

Gather system’s information

Wails uses /etc/os-release for identification. In a terminal window run cat /etc/os-release.

$ cat /etc/os-release
VERSION="19.04 (Disco Dingo)"
PRETTY_NAME="Ubuntu 19.04"

We are interested in NAME and ID fields. Then identify which of the bellow two commands returns gcc’s full version . This is needed for better support when filling tickets via wails issue.

gcc -dumpversion
gcc -dumpfullversion

For example on Ubuntu you need to use the -dumpfullversion flag.

$ gcc -dumpversion
$ gcc -dumpfullversion

Make a new entry in linuxdb.yaml

linuxdb.yaml lives in wails/cmd/linuxdb.yaml.

Use the NAME and ID fields of the previous step.

    id: `ID`
        name: `NAME`

If your are on derivative distro that shares libraries and software with it’s major a new entry would look like (linux mint sample):

    id: linuxmint
        version: default
        name: Linux Mint
        gccversioncommand: *gccdumpversion
        programs: *debiandefaultprograms
        libraries: *debiandefaultlibraries

If you are adding a previously unspported major release a new entry would like (centOS entry sample)

    id: centos
        version: default
        name: CentOS Linux
        gccversioncommand: *gccdumpversion
          - name: gcc
            help: Please install with `sudo yum install gcc-c++ make` and try again
          - name: pkg-config
            help: Please install with `sudo yum install pkgconf-pkg-config` and try again
          - name: npm
            help: Please install with `sudo yum install epel-release && sudo yum install nodejs` and try again
          - name: gtk3-devel
            help: Please install with `sudo yum install gtk3-devel` and try again
          - name: webkitgtk3-devel
            help: Please install with `sudo yum install webkitgtk3-devel` and try again

Edit linux.go

In wails/cmd/linux.go you have to

  • add a new constant with your distro’s name (use whatever is returned under NAME field two steps back)
const (
	// Unknown is the catch-all distro
	Unknown LinuxDistribution = iota
	// Debian distribution
	// Ubuntu distribution
	// Arch linux distribution
	// CentOS linux distribution
	// NewDistroName linux distribution
  • and a new switch case (case "ID":)
switch osID {
	case "fedora":
		result.Distribution = Fedora
	case "centos":
		result.Distribution = CentOS
	case "arch":
		result.Distribution = Arch
	case "debian":
		result.Distribution = Debian
	case "newdistroID":
		result.Distribution = NewDistroName

When adding a major distro you need to also add a new function to support your distro’s specific package manager.

Here is a sample for dpkg.

// DpkgInstalled uses dpkg to see if a package is installed
func DpkgInstalled(packageName string) (bool, error) {
	program := NewProgramHelper()
	dpkg := program.FindProgram("dpkg")
	if dpkg == nil {
		return false, fmt.Errorf("cannot check dependencies: dpkg not found")
	_, _, exitCode, _ := dpkg.Run("-L", packageName)
	return exitCode == 0, nil

Edit system.go

Finally you have to edit package manager’s switch case in wails/cmd/system.go to also include your distro.

For example if your are on a Debian derivative you would

// Linux has library deps
	if runtime.GOOS == "linux" {
		switch distroInfo.Distribution {
		case Ubuntu, Debian, NewDistroName:
			libraryChecker = DpkgInstalled

If you are adding a major distro with it’s own package manager you have to make a new case entry.

// Linux has library deps
	if runtime.GOOS == "linux" {
		switch distroInfo.Distribution {
		case NewDistroName:
			libraryChecker = NewPackageManagerInstalled

Check that everything works

cd in directory wails/cmd/wails and install the updated Wails by running go install.

Now try running wails setup.