--- 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, EnableFramelessBorder: false, }, 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. ### EnableFramelessBorder Name: EnableFramelessBorder Type: bool Setting this to `true` will add a border around the window if [Frameless](#Frameless) has been activated. This allows hiding the title bar but still having a border around the window. ## 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:

When clicked, that will open an about message box: