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