5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-04 17:30:17 +08:00
wails/mkdocs-website/docs/en/development/status.md
2023-11-06 10:48:42 -06:00

24 KiB

Status

Status of features in v3.

!!! note

    This list is a mixture of public and internal API support.<br/>
    It is not complete and probably not up to date.

Known Issues

  • Linux is not yet up to feature parity with Windows/Mac

Application

Application interface methods

Method Windows Linux Mac Notes
run() error Y Y Y
destroy() Y Y
setApplicationMenu(menu *Menu) Y Y Y
name() string Y Y
getCurrentWindowID() uint Y Y Y
showAboutDialog(name string, description string, icon []byte) Y Y
setIcon(icon []byte) - Y Y
on(id uint) Y
dispatchOnMainThread(fn func()) Y Y Y
hide() Y Y Y
show() Y Y Y
getPrimaryScreen() (*Screen, error) Y Y
getScreens() ([]*Screen, error) Y Y

Webview Window

Webview Window Interface Methods

Method Windows Linux Mac Notes
center() Y Y Y
close() y Y Y
destroy() Y Y
execJS(js string) y Y Y
focus() Y Y
forceReload() Y Y
fullscreen() Y Y Y
getScreen() (*Screen, error) y Y Y
getZoom() float64 Y Y
height() int Y Y Y
hide() Y Y Y
isFullscreen() bool Y Y Y
isMaximised() bool Y Y Y
isMinimised() bool Y Y Y
maximise() Y Y Y
minimise() Y Y Y
nativeWindowHandle() (uintptr, error) Y Y Y
on(eventID uint) y Y
openContextMenu(menu *Menu, data *ContextMenuData) y Y Y
relativePosition() (int, int) Y Y Y
reload() y Y Y
run() Y Y Y
setAlwaysOnTop(alwaysOnTop bool) Y Y Y
setBackgroundColour(color RGBA) Y Y Y
setEnabled(bool) Y Y
setFrameless(bool) Y Y
setFullscreenButtonEnabled(enabled bool) - Y Y There is no fullscreen button in Windows
setHTML(html string) Y Y Y
setMaxSize(width, height int) Y Y Y
setMinSize(width, height int) Y Y Y
setRelativePosition(x int, y int) Y Y Y
setResizable(resizable bool) Y Y Y
setSize(width, height int) Y Y Y
setTitle(title string) Y Y Y
setURL(url string) Y Y Y
setZoom(zoom float64) Y Y Y
show() Y Y Y
size() (int, int) Y Y Y
toggleDevTools() Y Y Y
unfullscreen() Y Y Y
unmaximise() Y Y Y
unminimise() Y Y Y
width() int Y Y Y
zoom() Y Y
zoomIn() Y Y Y
zoomOut() Y Y Y
zoomReset() Y Y Y

Runtime

Application

Feature Windows Linux Mac Notes
Quit Y Y Y
Hide Y Y Y
Show Y Y

Dialogs

Feature Windows Linux Mac Notes
Info Y Y Y
Warning Y Y Y
Error Y Y Y
Question Y Y Y
OpenFile Y Y Y
SaveFile Y Y Y

Clipboard

Feature Windows Linux Mac Notes
SetText Y Y Y
Text Y Y Y

ContextMenu

Feature Windows Linux Mac Notes
OpenContextMenu Y Y Y
On By Default
Control via HTML Y

The default context menu is enabled by default for all elements that are contentEditable: true, <input> or <textarea> tags or have the --default-contextmenu: true style set. The --default-contextmenu: show style will always show the context menu The --default-contextmenu: hide style will always hide the context menu

Anything nested under a tag with --default-contextmenu: hide style will not show the context menu unless it is explicitly set with --default-contextmenu: show.

Screens

Feature Windows Linux Mac Notes
GetAll Y Y Y
GetPrimary Y Y Y
GetCurrent Y Y Y

System

Feature Windows Linux Mac Notes
IsDarkMode Y

Window

Y = Supported U = Untested

  • = Not available
Feature Windows Linux Mac Notes
Center Y Y Y
Focus Y Y
FullScreen Y Y Y
GetZoom Y Y Y Get current view scale
Height Y Y Y
Hide Y Y Y
Maximise Y Y Y
Minimise Y Y Y
RelativePosition Y Y Y
Screen Y Y Y Get screen for window
SetAlwaysOnTop Y Y Y
SetBackgroundColour Y Y Y https://github.com/MicrosoftEdge/WebView2Feedback/issues/1621#issuecomment-938234294
SetEnabled Y U - Set the window to be enabled/disabled
SetMaxSize Y Y Y
SetMinSize Y Y Y
SetRelativePosition Y Y Y
SetResizable Y Y Y
SetSize Y Y Y
SetTitle Y Y Y
SetZoom Y Y Y Set view scale
Show Y Y Y
Size Y Y Y
UnFullscreen Y Y Y
UnMaximise Y Y Y
UnMinimise Y Y Y
Width Y Y Y
ZoomIn Y Y Y Increase view scale
ZoomOut Y Y Y Decrease view scale
ZoomReset Y Y Y Reset view scale

Window Options

A 'Y' in the table below indicates that the option has been tested and is applied when the window is created. An 'X' indicates that the option is not supported by the platform.

Feature Windows Linux Mac Notes
AlwaysOnTop Y Y
BackgroundColour Y Y
BackgroundType Acrylic seems to work but the others don't
CSS Y Y
DevToolsEnabled Y Y Y
DisableResize Y Y
EnableDragAndDrop Y
EnableFraudulentWebsiteWarnings
Focused Y Y
Frameless Y Y
FullscreenButtonEnabled Y
Height Y Y
Hidden Y Y
HTML Y Y
JS Y Y
Mac - -
MaxHeight Y Y
MaxWidth Y Y
MinHeight Y Y
MinWidth Y Y
Name Y Y
OpenInspectorOnStartup
StartState Y
Title Y Y
URL Y Y
Width Y Y
Windows Y - -
X Y Y
Y Y Y
Zoom
ZoomControlEnabled

Log

To log or not to log? System logger vs custom logger.

Menu

Event Windows Linux Mac Notes
Default Application Menu Y Y Y

Tray Menus

Feature Windows Linux Mac Notes
Icon Y Y Y Windows has default icons for light/dark mode & supports PNG or ICO.
Label - Y Y
Label (ANSI Codes) -
Menu Y Y Y

Methods

Method Windows Linux Mac Notes
setLabel(label string) - Y Y
run() Y Y Y
setIcon(icon []byte) Y Y Y
setMenu(menu *Menu) Y Y Y
setIconPosition(position int) - Y Y
setTemplateIcon(icon []byte) - Y Y
destroy() Y Y Y
setDarkModeIcon(icon []byte) Y Y Y Darkmode isn't handled yet (linux)

Cross Platform Events

Mapping native events to cross-platform events.

Event Windows Linux Mac Notes
WindowWillClose WindowWillClose
WindowDidClose
WindowDidResize
WindowDidHide
ApplicationWillTerminate

... Add more

Bindings Generation

Working well.

Models Generation

Working well.

Task file

Contains a lot needed for development.

Theme

Mode Windows Linux Mac Notes
Dark Y
Light Y
System Y

NSIS Installer

TBD

Templates

All templates are working.

Plugins

Built-in plugin support:

Plugin Windows Linux Mac Notes
Browser Y Y
KV Store Y Y Y
Log Y Y Y
Single Instance Y Y
SQLite Y Y Y
Start at login Y Y
Server

TODO:

  • Ensure each plugin has a JS wrapper that can be injected into the window.

Packaging

Windows Linux Mac Notes
Icon Generation Y Y
Icon Embedding Y Y
Info.plist - Y
NSIS Installer -
Mac bundle - Y
Windows exe Y -

Frameless Windows

Feature Windows Linux Mac Notes
Resize Y Y
Drag Y Y Y Linux - can always drag with Meta+left mouse

Mac Specific

  • Translucency

Mac Options

Feature Default Notes
Backdrop MacBackdropNormal Standard solid window
DisableShadow false
TitleBar Standard window decorations by default
Appearance DefaultAppearance
InvisibleTitleBarHeight 0 Creates an invisible title bar for frameless windows
DisableShadow false Disables the window drop shadow

Windows Specific

  • Translucency
  • Custom Themes

Windows Options

Feature Default Notes
BackdropType Solid
DisableIcon false
Theme SystemDefault
CustomTheme nil
DisableFramelessWindowDecorations false
WindowMask nil Makes the window the contents of the bitmap

Linux Specific

Implementation details for the functions utilized by the *_linux.go files are located in the following files:

  • linux_cgo.go: CGo implementation
  • linux_purego.go: PureGo implementation

CGO

By default CGO is utilized to compile the Linux port. This prevents easy cross-compilation and so the PureGo implementation is also being simultaneously developed.

Purego

The examples can be compiled using the following command:

CGO_ENABLED=0 go build -tags purego

Note: things are currently not working after the refactor