---
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:               "",
        },
        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 the DOM is ready. 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 |
| --------------- | --- | --- |
| 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/>

