---
sidebar_position: 3
---

# Options

## Application Options

The `Options.App` struct contains the application configuration.
It is passed to the `wails.Run()` method:

```go title="Example"
import "github.com/wailsapp/wails/v2/pkg/options"

func main() {

    err := wails.Run(&options.App{
        Title:             "Menus Demo",
        Width:             800,
        Height:            600,
        DisableResize:     false,
        Fullscreen:        false,
        Frameless:         true,
        MinWidth:          400,
        MinHeight:         400,
        MaxWidth:          1280,
        MaxHeight:         1024,
        StartHidden:       false,
        HideWindowOnClose: false,
        RGBA:              &options.RGBA{R: 0, G: 0, B: 0, A: 255},
        AlwaysOnTop:       false,
        Assets:            assets,
        Menu:              app.applicationMenu(),
        Logger:            nil,
        LogLevel:          logger.DEBUG,
        OnStartup:         app.startup,
        OnDomReady:        app.domready,
        OnShutdown:        app.shutdown,
        OnBeforeClose:     app.beforeClose,
        WindowStartState:  options.Maximised,
        Bind: []interface{}{
            app,
        },
        Windows: &windows.Options{
            WebviewIsTransparent:              false,
            WindowIsTranslucent:               false,
            DisableWindowIcon:                 false,
            DisableFramelessWindowDecorations: false,
            WebviewUserDataPath:               "",
            Theme:                             windows.SystemDefault,
            CustomTheme: &windows.ThemeSettings{
                DarkModeTitleBar:   windows.RGB(20, 20, 20),
                DarkModeTitleText:  windows.RGB(200, 200, 200),
                DarkModeBorder:     windows.RGB(20, 0, 20),
                LightModeTitleBar:  windows.RGB(200, 200, 200),
                LightModeTitleText: windows.RGB(20, 20, 20),
                LightModeBorder:    windows.RGB(200, 200, 200),
            },
        },
        Mac: &mac.Options{
            TitleBar: &mac.TitleBar{
                TitlebarAppearsTransparent: true,
                HideTitle:                  false,
                HideTitleBar:               false,
                FullSizeContent:            false,
                UseToolbar:                 false,
                HideToolbarSeparator:       true,
            },
			Appearance:           mac.NSAppearanceNameDarkAqua,
            WebviewIsTransparent: true,
            WindowIsTranslucent:  false,
            About: &mac.AboutInfo{
                Title:   "My Application",
                Message: "© 2021 Me",
                Icon:    icon,
            },
        },
    })
    if err != nil {
        log.Fatal(err)
    }
}

```



### Title

Name: Title

Type: string

The text shown in the window's title bar.

### Width

Name: Width

Type: int

The initial width of the window.
Default: 1024.

### Height

Name: Height

Type: int

The initial height of the window.
Default: 768

### DisableResize

Name: DisableResize

Type: bool

By default, the main window is resizable. Setting this to `true` will keep it a fixed size.

### Fullscreen

Name: Fullscreen

Type: bool

Setting this to `true` will make the window fullscreen at startup.

### Frameless

Name: Frameless

Type: bool

When set to `true`, the window will have no borders or title bar.
Also see [Frameless Windows](/docs/guides/frameless).

### MinWidth

Name: MinWidth

Type: int

This sets the minimum width for the window. If the value given in `Width` is less than this value,
the window will be set to `MinWidth` by default.

### MinHeight

Name: MinHeight

Type: int

This sets the minimum height for the window. If the value given in `Height` is less than this value,
the window will be set to `MinHeight` by default.

### MaxWidth

Name: MaxWidth

Type: int

This sets the maximum width for the window. If the value given in `Width` is more than this value,
the window will be set to `MaxWidth` by default.

### MaxHeight

Name: MaxHeight

Type: int

This sets the maximum height for the window. If the value given in `Height` is more than this value,
the window will be set to `MaxHeight` by default.

### StartHidden

Name: StartHidden

Type: bool

When set to `true`, the application will be hidden until [WindowShow](/docs/reference/runtime/window#WindowShow)
is called.

### HideWindowOnClose

Name: HideWindowOnClose

Type: bool

By default, closing the window will close the application. Setting this to `true` means closing the window will
hide the window instead.

### RGBA

Name: RGBA

Type: int (0xRRGGBBAA)
Example: 0xFF000088 - Red at 50% transparency

This value is the RGBA value to set the window by default.
Default: 0xFFFFFFFF.

### AlwaysOnTop

Name: AlwaysOnTop

Type: bool

Indicates that the window should stay above other windows when losing focus.

### Assets

Name: Assets

Type: \*embed.FS

The frontend assets to be used by the application. Requires an `index.html` file.

### Menu

Name: Menu

Type: \*menu.Menu

The menu to be used by the application. More details about Menus in the [Menu Reference](/docs/reference/runtime/menu).

NOTE: On Mac, if no menu is specified, a default menu will be created.

### Logger

Name: Logger

Type: logger.Logger

Default: Logger to Stdout

The logger to be used by the application. More details about logging in the [Log Reference](/docs/reference/runtime/log).

### LogLevel

Name: LogLevel

Type: logger.LogLevel

Default: `Info` in dev mode, `Error` in production mode

The default log level. More details about logging in the [Log Reference](/docs/reference/runtime/log).

### OnStartup

Name: OnStartup

Type: func(ctx context.Context)

This callback is called after the frontend has been created, but before `index.html` has been loaded. It is given
the application context.

### OnDomReady

Name: OnDomReady

Type: func(ctx context.Context)

This callback is called after the frontend has loaded `index.html` and its resources. It is given
the application context.

### OnShutdown

Name: OnShutdown

Type: func(ctx context.Context)

This callback is called after the frontend has been destroyed, just before the application terminates. It is given
the application context.

### OnBeforeClose

Name: OnBeforeClose

Type: func(ctx context.Context) bool

If this callback is set, it will be called when the application is about to quit, either by clicking the window close
button or calling `runtime.Quit`. Returning true will cause the application to continue, false will continue shutdown
as normal. This is good for confirming with the user that they wish to exit the program.

Example:
```go title=windowsapp.go
func (b *App) beforeClose(ctx context.Context) (prevent bool) {
	dialog, err := runtime.MessageDialog(ctx, runtime.MessageDialogOptions{
		Type:          runtime.QuestionDialog,
		Title:         "Quit?",
		Message:       "Are you sure you want to quit?",
	})

	if err != nil {
		return false
	}
	return dialog != "Yes"
}
```

### WindowStartState

Name: WindowStartState

Type: options.WindowStartState

Defines how the window should present itself at startup.

| Value           | Win | Mac | Lin |
| --------------- | --- | --- | --- |
| Fullscreen      | ✅  | ✅   | ✅ |
| Maximised       | ✅  | ✅   | ✅ |
| Minimised       | ✅  |     | ✅ |

### Bind

Name: Bind

Type: []interface{}

A slice of struct instances defining methods that need to be bound to the frontend.

### Windows

Name: Windows

Type: \*windows.Options

This defines [Windows specific options](#windows-specific-options).

### Mac

Name: Mac

Type: \*mac.Options

This defines [Mac specific options](#mac-specific-options).

## Windows Specific Options

### WebviewIsTransparent

Name: WebviewIsTransparent

Type: bool

Setting this to `true` will make the webview background transparent when an alpha value of `0` is used.
This means that if you use `rgba(0,0,0,0)`, the host window will show through.
Often combined with [WindowIsTranslucent](#WindowIsTranslucent) to make frosty-looking applications.

### WindowIsTranslucent

Name: WindowIsTranslucent

Type: bool

Setting this to `true` will make the window background translucent. Often combined
with [WebviewIsTransparent](#WebviewIsTransparent) to make frosty-looking applications.

### DisableWindowIcon

Name: DisableWindowIcon

Type: bool

Setting this to `true` will remove the icon in the top left corner of the title bar.

### DisableFramelessWindowDecorations

Name: DisableFramelessWindowDecorations

Type: bool

Setting this to `true` will remove the window decorations in [Frameless](#Frameless) mode. This means there will be no
'Aero Shadow' and no 'Rounded Corners' shown for the window. Please note that 'Rounded Corners' are only supported on
Windows 11.

### WebviewUserDataPath

Name: WebviewUserDataPath

Type: string

This defines the path where the WebView2 stores the user data. If empty `%APPDATA%\[BinaryName.exe]` will be used.

## Mac Specific Options

### TitleBar

Name: TitleBar

Type: [*mac.TitleBar](#titlebar-struct)

The TitleBar struct provides the ability to configure the look and feel of the title bar.

### Appearance

Name: Appearance

Type: [AppearanceType](#appearance-type)

Appearance is used to set the style of your app in accordance with Apple's [NSAppearance](https://developer.apple.com/documentation/appkit/nsappearancename?language=objc) names.

### WebviewIsTransparent

Name: WebviewIsTransparent

Type: bool

Setting this to `true` will make the webview background transparent when an alpha value of `0` is used.
This means that if you use `rgba(0,0,0,0)`, the host window will show through.
Often combined with [WindowIsTranslucent](#WindowIsTranslucent) to make frosty-looking applications.

### WindowIsTranslucent

Name: WindowIsTranslucent

Type: bool

Setting this to `true` will make the window background translucent. Often combined
with [WebviewIsTransparent](#WebviewIsTransparent) to make frosty-looking applications.

### About

Name: About

Type: [About](#about-struct)

This configuration lets you set the title, message and icon for the "About" menu item in the app menu created by the "AppMenu" role.

#### Titlebar struct

The titlebar of the application can be customised by using the TitleBar options:

```go
type TitleBar struct {
	TitlebarAppearsTransparent bool
	HideTitle                  bool
	HideTitleBar               bool
	FullSizeContent            bool
	UseToolbar                 bool
	HideToolbarSeparator       bool
}
```

| Name | Description |
| ---- | ----------- |
| TitlebarAppearsTransparent | Makes the titlebar transparent. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindow/1419167-titlebarappearstransparent?language=objc)  |
| HideTitle                  | Hides the title of the window. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindowtitlevisibility?language=objc)  |
| HideTitleBar               | Removes [NSWindowStyleMaskTitled](https://developer.apple.com/documentation/appkit/nswindowstylemask/nswindowstylemasktitled/) from the style mask  |
| FullSizeContent            | Makes the webview fill the entire window. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindowstylemask/nswindowstylemaskfullsizecontentview)|
| UseToolbar                 | Adds a default toolbar to the window. [Apple Docs](https://developer.apple.com/documentation/appkit/nstoolbar?language=objc)  |
| HideToolbarSeparator       | Removes the line beneath the toolbar. [Apple Docs](https://developer.apple.com/documentation/appkit/nstoolbar/1516954-showsbaselineseparator?language=objc)  |

Preconfigured titlebar settings are available:

| Setting | Example |
| ------- | ------- |
|`mac.TitleBarDefault()` | ![](/img/reference/titlebar-default.png) |
|`mac.TitleBarHidden()` | ![](/img/reference/titlebar-hidden.png) |
|`mac.TitleBarHiddenInset()` | ![](/img/reference/titlebar-hidden-inset.png) |

Example:
```go
Mac: &mac.Options{
	TitleBar:     mac.TitleBarHiddenInset(),
}
```

Click [here](https://github.com/lukakerr/NSWindowStyles) for some inspiration on customising the titlebar.

#### Appearance type

You can specify the application's [appearance](https://developer.apple.com/documentation/appkit/nsappearance?language=objc).

| Value           | Description |
| --------------- | ------------------ |
| DefaultAppearance | DefaultAppearance uses the default system value |
| NSAppearanceNameAqua | The standard light system appearance |
| NSAppearanceNameDarkAqua | The standard dark system appearance |
| NSAppearanceNameVibrantLight | The light vibrant appearance |
| NSAppearanceNameAccessibilityHighContrastAqua | A high-contrast version of the standard light system appearance |
| NSAppearanceNameAccessibilityHighContrastDarkAqua | A high-contrast version of the standard dark system appearance |
| NSAppearanceNameAccessibilityHighContrastVibrantLight | A high-contrast version of the light vibrant appearance |
| NSAppearanceNameAccessibilityHighContrastVibrantDark | A high-contrast version of the dark vibrant appearance |

Example:
```go
Mac: &mac.Options{
    Appearance: mac.NSAppearanceNameDarkAqua,
}
```

#### About struct

```go
type AboutInfo struct {
	Title   string
	Message string
	Icon    []byte
}
```
If these settings are provided, an "About" menu item will appear in the app menu (when using the `AppMenu` role).
Given this configuration:
```go
//go:embed build/appicon.png
var icon []byte

func main() {
	err := wails.Run(&options.App{
	    ...
        Mac: &mac.Options{
            About: &mac.AboutInfo{
                Title:   "My Application",
                Message: "© 2021 Me",
                Icon:    icon,
            },
        },
    })
```
The "About" menu item will appear in the app menu:

<div class="text--center">
    <img src="/img/reference/about-menu.png" style={{"box-shadow": "rgb(255 255 255 / 20%) 0px 4px 8px 0px, rgb(104 104 104) 0px 6px 20px 0px"}}/>
</div>
<br/>

When clicked, that will open an about message box:

<div class="text--center">
    <img src="/img/reference/about-dialog.png" width="40%" style={{"box-shadow": "rgb(255 255 255 / 20%) 0px 4px 8px 0px, rgb(104 104 104) 0px 6px 20px 0px"}}/>
</div>
<br/>

## Linux Specific Options

### Icon

Name: Icon

Type: []byte

Sets up the icon representing the window. This icon is used when the window is minimized (also known as iconified).
Some window managers or desktop environments may also place it in the window frame, or display it in other contexts.
On others, the icon is not used at all, so your mileage may vary.

NOTE: Gnome on Wayland at least does not display this icon. To have a application icon there, a `.desktop` file has to be used.
On KDE it should work.

The icon should be provided in whatever size it was naturally drawn; that is, don’t scale the image before passing it.
Scaling is postponed until the last minute, when the desired final size is known, to allow best quality.
