Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Electron Feature Parity #544

Closed
BenoitRanque opened this issue Apr 1, 2020 · 12 comments
Closed

[WIP] Electron Feature Parity #544

BenoitRanque opened this issue Apr 1, 2020 · 12 comments

Comments

@BenoitRanque
Copy link
Contributor

BenoitRanque commented Apr 1, 2020

This issue will be used for tracking feature parity with electron.
The first step is establishing a list of electron features, and determining which of those we wish to eventually implement in tauri

The feature list will be sourced from the electron website

Auto updates
Crash Reporting
Debugging and Profiling
Windows Intaller
Session, Local Storage, Cookies
Define keyboard shortcuts.
Make HTTP/HTTPS requests.
Perform copy and paste operations on the system clipboard.
Manipulate the command line arguments for your app that Chromium reads
Collect tracing data from Chromium to find performance bottlenecks and slow operations.
Create a safe, bi-directional, synchronous bridge across isolated contexts
Access information about media sources that can be used to capture audio and video from the desktop using the navigator.mediaDevices.getUserMedia API.
Display native system dialogs for opening and saving files, alerting, etc.
Control your app in the macOS dock
Control file downloads from remote sources.
Control application configuration and behavior without changing code.
Use the HTML5 File API to work natively with files on the filesystem.
Open a window without toolbars, borders, or other graphical "chrome".
Detect keyboard events when the application does not have keyboard focus.
In-app purchases on Mac App Store.
Handle responses to HTTP/HTTPS requests.
Locale values returned by app.getLocale().
Create native notifications, application menus and context menus.
Add items to native application menus and context menus.
Create tray, dock, and application icons using PNG or JPG files.
Read and respond to changes in Chromium's native color theme.
Issue HTTP/HTTPS requests using Chromium's native networking library
Logging network events for a session.
Create OS desktop notifications
Monitor power state changes.
Block the system from entering low-power (sleep) mode.
Extensions to process object.
Register a custom protocol and intercept existing protocol requests.
Register a custom protocol and intercept existing protocol requests.
Create a browser window with a sandboxed renderer. With this option enabled, the renderer must communicate via IPC to the main process in order to access node APIs.
Retrieve information about screen size, displays, cursor position, etc.
Manage browser sessions, cookies, cache, proxy settings, etc.
Manage files and URLs using their default applications.
Get system preferences.
Create TouchBar layouts for native macOS applications
Create a button in the touch bar for native macOS applications
Create a color picker in the touch bar for native macOS applications
Create a group in the touch bar for native macOS applications
Create a label in the touch bar for native macOS applications
Create a popover in the touch bar for native macOS applications
Create a scrubber (a scrollable selector)
Create a segmented control (a button group) where one button has a selected state
Create a slider in the touch bar for native macOS applications
Create a spacer between two items in the touch bar for native macOS applications
Add icons and context menus to the system's notification area.
Render and control web pages.
Customize the rendering of the current web page.
Intercept and modify the contents of a request at various stages of its lifetime.
Display external web content in an isolated frame and process.
Open a new window and load a URL.
Print to Printer and related options

@nklayman
Copy link
Member

nklayman commented Apr 2, 2020

I think we should split these up into a few groups to make it more clear which features we are implementing, which ones we have no plans to implement, and which ones are somewhere in between. A suggestion for the groups to use are: must have for beta/v1, high priority post-v1, low priority post-v1, no plan to implement, and will not implement.

@BenoitRanque
Copy link
Contributor Author

BenoitRanque commented Apr 2, 2020

I like your idea for the ranking, but I don't feel confident making the call on what is needed and what is not. Here is my own ranking, obviously this is subjective and will change.

Primary

Secondary

Tertiary

MacOS Specific

EDIT (by @nklayman): Added checkboxes

@khionu
Copy link

khionu commented Apr 2, 2020

I like this sorting. There's a few things I think should be switched around, but this is a great start. Thank you very much!

@nothingismagick
Copy link
Member

@nklayman - are you tracking this? would be good to group them into things we can get in before beta / etc. in line with your comment above

@nklayman
Copy link
Member

I'm not sure that I'm the right person to do the grouping as I have so little knowledge of the core rust part. This might be a good thing to put on the tech talk schedule.

@lucasfernog
Copy link
Member

Global shortcut coming up #644

@ljfreelancer88
Copy link

I really need this feature too https://www.electronjs.org/docs/api/screen in Tauri. I'm trying to create an app like minimal "MS Power Point" for our Churches. The output will sending out to HDMI.

@ohmree
Copy link

ohmree commented Sep 28, 2021

I like your idea for the ranking, but I don't feel confident making the call on what is needed and what is not. Here is my own ranking, obviously this is subjective and will change.

Primary

* [x]  [Auto updates](https://www.electronjs.org/docs/api/auto-updater)

* [ ]  [Crash Reporting](https://www.electronjs.org/docs/api/crash-reporter)

* [ ]  [Debugging and Profiling](https://www.electronjs.org/docs/api/content-tracing)

* [x]  [Windows Intaller](https://www.electronjs.org/docs/api/auto-updater#windows)

* [ ]  [Session, Local Storage, Cookies](https://www.electronjs.org/docs/api/session)

* [x]  [Make HTTP/HTTPS requests.](https://www.electronjs.org/docs/api/client-request)

* [ ]  [Handle responses to HTTP/HTTPS requests.](https://www.electronjs.org/docs/api/incoming-message)

* [ ]  [Create a safe, bi-directional, synchronous bridge across isolated contexts](https://www.electronjs.org/docs/api/context-bridge)

* [ ]  [Manage browser sessions, cookies, cache, proxy settings, etc.](https://www.electronjs.org/docs/api/session)

* [x]  [Create native application menus and context menus.](https://www.electronjs.org/docs/api/menu)

Secondary

* [x]  [Define keyboard shortcuts.](https://www.electronjs.org/docs/api/accelerator)

* [ ]  [Perform copy and paste operations on the system clipboard.](https://www.electronjs.org/docs/api/clipboard)

* [ ]  [Collect tracing data from Chromium to find performance bottlenecks and slow operations.](https://www.electronjs.org/docs/api/content-tracing)

* [ ]  [Access information about media sources that can be used to capture audio and video from the desktop using the navigator.mediaDevices.getUserMedia API.](https://www.electronjs.org/docs/api/desktop-capturer)

* [x]  [Display native system dialogs for opening and saving files, alerting, etc.](https://www.electronjs.org/docs/api/dialog)

* [ ]  [Control file downloads from remote sources.](https://www.electronjs.org/docs/api/download-item)

* [ ]  [Use the HTML5 File API to work natively with files on the filesystem.](https://www.electronjs.org/docs/api/file-object)

* [ ]  [Add icons and context menus to the system's notification area.](https://www.electronjs.org/docs/api/tray)

* [x]  [Create OS desktop notifications](https://www.electronjs.org/docs/api/notification)

* [ ]  [Get system preferences.](https://www.electronjs.org/docs/api/system-preferences)

* [x]  [Manage files and URLs using their default applications.](https://www.electronjs.org/docs/api/shell)

* [ ]  [Render and control web pages.](https://www.electronjs.org/docs/api/web-contents)

* [x]  [Print to Printer and related options](https://www.electronjs.org/docs/api/web-contents#contentsgetprinters)

Tertiary

* [x]  [Open a window without toolbars, borders, or other graphical "chrome".](https://www.electronjs.org/docs/api/frameless-window)

* [x]  [Create tray, dock, and application icons using PNG or JPG files.](https://www.electronjs.org/docs/api/native-image)

* [ ]  [Control application configuration and behavior without changing code.](https://www.electronjs.org/docs/api/environment-variables)

* [ ]  [Detect keyboard events when the application does not have keyboard focus.](https://www.electronjs.org/docs/api/global-shortcut)

* [ ]  [Locale values returned by app.getLocale().](https://www.electronjs.org/docs/api/locales)

* [ ]  [Logging network events for a session.](https://www.electronjs.org/docs/api/net-log)

* [ ]  [Monitor power state changes.](https://www.electronjs.org/docs/api/power-monitor)

* [ ]  [Block the system from entering low-power (sleep) mode.](https://www.electronjs.org/docs/api/power-save-blocker)

* [ ]  [Register a custom protocol and intercept existing protocol requests.](https://www.electronjs.org/docs/api/protocol)

* [ ]  [Retrieve information about screen size, displays, cursor position, etc.](https://www.electronjs.org/docs/api/screen)

* [ ]  [Customize the rendering of the current web page.](https://www.electronjs.org/docs/api/web-frame)

* [ ]  [Display external web content in an isolated frame and process.](https://www.electronjs.org/docs/api/webview-tag)

* [x]  [Open a new window and load a URL.](https://www.electronjs.org/docs/api/window-open)

MacOS Specific

* [ ]  [In-app purchases on Mac App Store.](https://www.electronjs.org/docs/api/in-app-purchase)

* [ ]  [Control your app in the macOS dock](https://www.electronjs.org/docs/api/dock)

* [ ]  [Create TouchBar layouts for native macOS applications](https://www.electronjs.org/docs/api/touch-bar)

* [ ]  [Create a button in the touch bar for native macOS applications](https://www.electronjs.org/docs/api/touch-bar-button)

* [ ]  [Create a color picker in the touch bar for native macOS applications](https://www.electronjs.org/docs/api/touch-bar-color-picker)

* [ ]  [Create a group in the touch bar for native macOS applications](https://www.electronjs.org/docs/api/touch-bar-group)

* [ ]  [Create a label in the touch bar for native macOS applications](https://www.electronjs.org/docs/api/touch-bar-label)

* [ ]  [Create a popover in the touch bar for native macOS applications](https://www.electronjs.org/docs/api/touch-bar-popover)

* [ ]  [Create a scrubber (a scrollable selector)](https://www.electronjs.org/docs/api/touch-bar-scrubber)

* [ ]  [Create a segmented control (a button group) where one button has a selected state](https://www.electronjs.org/docs/api/touch-bar-segmented-control)

* [ ]  [Create a slider in the touch bar for native macOS applications](https://www.electronjs.org/docs/api/touch-bar-slider)

* [ ]  [Create a spacer between two items in the touch bar for native macOS applications](https://www.electronjs.org/docs/api/touch-bar-spacer)

* [ ]  [Intercept and modify the contents of a request at various stages of its lifetime.](https://www.electronjs.org/docs/api/web-request)

Why is "intercept and modify the contents of a request at various stages of its lifetime" macOS-specific?
I'd like to implement an approach similar to the one taken in twurple's auth-electron, where the request to the oauth redirect uri is intercepted and the url query params are accessed and processed, and it seems like the only way to do it would be with an api similar to WebRequest.

@dannymcgee
Copy link

Open a window without toolbars, borders, or other graphical "chrome".

I think this Electron feature has not been fully understood wrt the Tauri implementation, unless you've deliberately chosen to implement it differently/with less granularity. In Electron, if you create a window with frame: false, transparent: false, you get a window that still has all of the native window chrome, with only the titlebar removed. Setting frame: false, transparent: true removes the rest of the chrome (border, shadow, etc.). The first option is generally what you would want to do if you just need to implement a custom titlebar, but it doesn't seem to be possible in Tauri currently, as decorations: false removes all of the native window chrome.

MS Teams in Windows 11 uses a custom titlebar with the rest of the native window chrome preserved, so I assume WebView2 exposes this as an option somehow, but I could be wrong:

ms-teams-webview2

(Let me know if this is the wrong place to bring this up — I searched "border" and this seemed to be the most relevant existing issue)

@amrbashir
Copy link
Member

amrbashir commented Dec 7, 2021

@dannymcgee for shadows, take a look at tauri-apps/tao#157 (comment)

@FabianLars
Copy link
Member

FabianLars commented Dec 7, 2021

@dannymcgee about ms teams, afaik they still use the same approach for the titlebar as in their electron based client (html based).
This of course doesn't really matter in the context of the request, but anyway

@amrbashir
Copy link
Member

I think this issue is not needed anymore. We are still missing some features but those are better be tracked in their own issues.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants