Code Monkey home page Code Monkey logo

webui's Introduction

Logo

WebUI v2.4.2

WebUI is not a web-server solution or a framework, but it allows you to use any web browser as a GUI, with your preferred language in the backend and HTML5 in the frontend. All in a lightweight portable lib.

Screenshot

Download

Contents

Features

  • Portable (Needs only a web browser at runtime)
  • One header file
  • Lightweight (Few Kb library) & Small memory footprint
  • Fast binary communication protocol
  • Multi-platform & Multi-Browser
  • Using private profile for safety

Showcase

This text editor is a lightweight and portable example written in C using WebUI as the GUI library.

Example

UI & The Web Technologies

Borislav Stanimirov discusses using HTML5 in the web browser as GUI at the C++ Conference 2019 (YouTube).

CPPCon

Web application UI design is not just about how a product looks but how it works. Using web technologies in your UI makes your product modern and professional, And a well-designed web application will help you make a solid first impression on potential customers. Great web application design also assists you in nurturing leads and increasing conversions. In addition, it makes navigating and using your web app easier for your users.

Why Use Web Browsers?

Today's web browsers have everything a modern UI needs. Web browsers are very sophisticated and optimized. Therefore, using it as a GUI will be an excellent choice. While old legacy GUI lib is complex and outdated, a WebView-based app is still an option. However, a WebView needs a huge SDK to build and many dependencies to run, and it can only provide some features like a real web browser. That is why WebUI uses real web browsers to give you full features of comprehensive web technologies while keeping your software lightweight and portable.

How Does it Work?

Diagram

Think of WebUI like a WebView controller, but instead of embedding the WebView controller in your program, which makes the final program big in size, and non-portable as it needs the WebView runtimes. Instead, by using WebUI, you use a tiny static/dynamic library to run any installed web browser and use it as GUI, which makes your program small, fast, and portable. All it needs is a web browser.

Runtime Dependencies Comparison

WebView Qt WebUI
Runtime Dependencies on Windows WebView2 QtCore, QtGui, QtWidgets A Web Browser
Runtime Dependencies on Linux GTK3, WebKitGTK QtCore, QtGui, QtWidgets A Web Browser
Runtime Dependencies on macOS Cocoa, WebKit QtCore, QtGui, QtWidgets A Web Browser

Documentation

Note We are currently writing documentation.

Build

  • Windows

    # GCC
    mingw32-make
    
    # MSVC
    nmake

    Windows SSL/TLS (Optional)

    Download and install the OpenSSL pre-compiled binaries for Windows:

    # GCC
    mingw32-make WEBUI_USE_TLS=1 WEBUI_TLS_INCLUDE="C:\curl-xxx-xxx-mingw\curl-xxx-xxx-mingw\include" WEBUI_TLS_LIB="C:\curl-xxx-xxx-mingw\curl-xxx-xxx-mingw\lib"
    
    # MSVC
    nmake WEBUI_USE_TLS=1 WEBUI_TLS_INCLUDE="C:\Program Files\OpenSSL-xxx\include" WEBUI_TLS_LIB="C:\Program Files\OpenSSL-xxx\lib"
  • Linux

    # GCC
    make
    
    # Clang
    make CC=clang

    Linux SSL/TLS (Optional)

    sudo apt update
    sudo apt install libssl-dev
    
    # GCC
    make WEBUI_USE_TLS=1
    
    # Clang
    make WEBUI_USE_TLS=1 CC=clang
  • macOS

    make

    macOS SSL/TLS (Optional)

    brew install openssl
    make WEBUI_USE_TLS=1

Examples

Wrappers

Language Status Link
Go ✔️ Go-WebUI
Nim ✔️ Nim-WebUI
Pascal ✔️ Pascal-WebUI
Python ✔️ Python-WebUI
Rust not complete Rust-WebUI
TypeScript / JavaScript ✔️ Deno-WebUI
V ✔️ V-WebUI
Zig ✔️ Zig-WebUI
Odin not complete Odin-WebUI
Delphi ✔️ WebUI4Delphi

Supported Web Browsers

Browser Windows macOS Linux
Mozilla Firefox ✔️ ✔️ ✔️
Google Chrome ✔️ ✔️ ✔️
Microsoft Edge ✔️ ✔️ ✔️
Chromium ✔️ ✔️ ✔️
Yandex ✔️ ✔️ ✔️
Brave ✔️ ✔️ ✔️
Vivaldi ✔️ ✔️ ✔️
Epic ✔️ ✔️ not available
Apple Safari not available coming soon not available
Opera coming soon coming soon coming soon

License

Licensed under MIT License.

Stargazers

Stargazers repo roster for @webui-dev/webui

webui's People

Contributors

7flash avatar albertshown avatar cardealrusso avatar clzls avatar cwegener avatar demetera avatar desttinghim avatar douganderson444 avatar eltociear avatar fibodevy avatar giuseppecesarano avatar hassandraga avatar itzvoko avatar jinzhongjia avatar jotsr avatar justinmchase avatar konsumer avatar malisipi avatar me00001 avatar mitchcapper avatar mohamedke avatar neroist avatar petabyt avatar rtanabe999 avatar sanderdatema avatar sitd2813 avatar thechampagne avatar ttytm avatar usama-makhzoum avatar waseeld avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

webui's Issues

watch for URL change

Often a login popup-webview needs to show a window, and wait for the URL to change to do things. Here is an example of a login for Gog, written in rust.

Is there a way to do this with webui?

New Feature - Socket Communication For Warppers

I'm thinking of developping a new feature in the WebUI. Instead of making all warappers dealing with the complexity of APIs call, memory object sharing between C and other languages wrappers (Nim, Go, V, Rust, Deno, JS, TS, Python...), instead of that, why no a simple socket connection, and WebUI send/receives event in JSON format.

Now
[Browser] <--> WebSocket <--> [WebUI] <--> Direct APIs call <--> [Wrappers] <--> [Application]

Suggestion
[Browser] <--> WebSocket <--> [WebUI] <--> Socket <--> [Wrappers] <--> [Application]

[!] Error: {session} -> read: Operation canceled

https://github.com/alifcommunity/webui/blob/main/examples/custom_browser.cpp

ميزة مفيدة 👍 استبدلت التالي

https://github.com/alifcommunity/webui/blob/1905918175d79ed956f299800e3389b4bd2205fa/examples/custom_browser.cpp#L51-L53

بالشفرة التالية
		.app = "epiphany",
		.arg = "--private-instance ",
		.link = true
يعمل المتصفح

لقطة شاشة من 2021-03-26 17-38-40

ولكن عند اغلاق المتصفح يظهر الخطأ التالي بتكرار لا نهائي
[!] Error: {session} -> read: Operation canceled
[!] Error: {session} -> read: Operation canceled
[!] Error: {session} -> read: Operation canceled
[!] Error: {session} -> read^C

Originally posted by @me00001 in #9 (comment)

Used firefox window is always displaying "- Mozilla Firefox Private Browsing"

First, impresive tool and very good idea!

I just ran the golang example code. This is the result (dark mode on my screen):
image on imgur

No matter how I edit the <title> flag, it is always showing that "- Mozilla Firefox Private Browsing" extension and title.

Also, the title is always shown twice? The second one should be gone, right? This is what the window title bar is normally used for...

I'm on OpenSUSE LEAP 15.4 (x64)

MAC os support

Anything to try with clang or gcc, otherwise a ticket to watch support.

Navigation API call causes Connection Refused in spawned browser window.

Lines 233-236 of webui.c feature this listener from the Navigation API:

navigation.addEventListener('navigate', (event) => { 
    const url = new URL(event.destination.url); 
    _webui_send_event_navigation(url); 
}); 

On some systems and browsers due to incomplete support, navigation ends up being undefined, which means that the invoked window then cannot communicate with the originating process, throwing "Connection Refused". Commenting these lines and recompiling causes examples to work again, where navigation is not used.

According to the Navigation API documentation, this API is still not fully supported on all browsers, and an alternative navigation method should probably be used.

VUE3 + TS + Naive

Sorry, my English is not very good, may I ask how VUE3 + TS + Naive GUI can be loaded using this library

WebUI 2.0.8 Prototype Suggestion

WebUI 2.0.8 Prototype Suggestion

WebUI is working fine, but if you try to open multiple windows and update the window's content, you will find that the API names need to be clarified. So I'm suggesting new APIs/Rename to make it simpler.

Current

Open a static HTML window, change the content, and close the window.

webui_show(my_window, "MyHTML", webui.browser.any);
webui_refresh(my_window, "MyNewHTML");
webui_close(my_window);

Now let's do the same thing but using HTML files.

const char* url = webui_new_server(my_window, "PATH_TO_ROOT_FOLDER");
webui_open(my_window, url, webui.browser.any); // index.html
webui_open(my_window, "second_page.html", webui.browser.any);
webui_close(my_window);

So, webui_show() shows a window using static HTML code, and webui_open() also shows a window, but for files.

Suggestion

webui_show_file(my_window, "PATH_TO_ROOT_FOLDER", webui.browser.any);
webui_refresh_file(my_window, "second_page.html");
webui_refresh_file(my_window, "/foo/bar.html");
webui_close(my_window);

Options

I suggest to keep old functions webui_new_server() and webui_open(), so If you would like a WebUI server only and open the link in the standard browser to interact with your backend language, then use webui_new_server(). And if you already have a web server let's say Deno, Python.HTTP, or NodeJS... and you would like to use WebUI to open a nice app mode window, then use webui_open().

Add new button

JS after using document. Getelementbyid ("indextext"). InnerHTML = a new button is added, but the bound event is invalid.

The deno example instructions are too vague

I tried to follow the instructions at examples/TypeScript/Deno/deno_server/README.md and examples/TypeScript/Deno/hello_world/hello_world.ts but Step 2 was so vague that I didn't know how to do it.

Yes, I knew how to click on the link and download the .zip file, but which parts of the zip file do I extract to what folders? As a TypeScript developer, I am unfamiliar with the differences between GCC, MSVC, and TCC.

I tried several things, but I wasn't able to get it to work.

Project not working

it builds and runs with no error but it doesn't work and shows nothing.

Windows 10 - VS 2019

Exemples or direction for macOS

Hey,
I tried evaluating the library, but I failed to find exemples or direction for macOS.
Maybe I didn’t look enough? If so would you be so kind to point me to the RTFM please?
Best

[Question] Can I embed `webui` in another GUI?

I write cross-platforms applications using the python framework Kivy.
When I saw your project I wondered if we would be able to embed a webview inside the kivy window. This would be really, really useful. Our Window core provider is SDL2.

Do you believe webui will be able to run inside an existing GUI, or it will always launch a new window? Do you believe it may be possible to run it inside a kivy application?

Thanks

Mac

I am trying to get it working on mac (x86_64 & arm64.) Am I missing a step?:

cd build/MacOS/Clang/
make
cd ../../..
clang build/MacOS/Clang/libwebui-2-aarch64-apple-darwin.a examples/C/minimal/main.c -Iinclude -o minimal
./minimal

This builds fine, but opens a blank page. I am having same trouble with the nim bindings.

Also, I notice it has aarch64 (arm64) in name, even when I am on x86_64:

$ uname -a

Darwin konsumerbook.lan 22.3.0 Darwin Kernel Version 22.3.0: Mon Jan 30 20:42:11 PST 2023; root:xnu-8792.81.3~2/RELEASE_X86_64 x86_64

$ otool -hv build/MacOS/Clang/libwebui-2-aarch64-apple-darwin.a

Archive : build/MacOS/Clang/libwebui-2-aarch64-apple-darwin.a
build/MacOS/Clang/libwebui-2-aarch64-apple-darwin.a(webui.o):
Mach header
      magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
MH_MAGIC_64   X86_64        ALL  0x00      OBJECT     5        776 SUBSECTIONS_VIA_SYMBOLS
build/MacOS/Clang/libwebui-2-aarch64-apple-darwin.a(mongoose.o):
Mach header
      magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
MH_MAGIC_64   X86_64        ALL  0x00      OBJECT     5       1016 SUBSECTIONS_VIA_SYMBOLS

Python runs into "exception: access violation reading 0xFFFFFFFFFFFFFFFF"

2023-01-28 13:09:25.610 | ERROR    | __main__:slot_tab1:226 - exception: access violation reading 0xFFFFFFFFFFFFFFFF
Traceback (most recent call last):

  File "C:\deepl-tr-webui\.venv\lib\site-packages\webui\webui.py", line 88, in events
    self.cb_fun_list[element_id](e)
    │    │           │           └ <webui.webui.event object at 0x000002B1C393D790>
    │    │           └ 2
    │    └ [64, <function close_the_application at 0x000002B1C3868820>, <function slot_tab1 at 0x000002B1C3868940>, <function slot_tab2 ...
    └ <webui.webui.window object at 0x000002B1C38EB700>

> File "C:\mat-dir\pypi-projects\deepl-tr-webui\deepl_tr\__main__.py", line 222, in slot_tab1
    evt.window.show(_)
    │   │      │    └ '\n\n<!DOCTYPE html>\n<html>\n    <head>\n        <title>deepl-tr-webui v0.1.0a1</title>\n\n\t\t<meta charSet="UTF-8"/>\n\t\t...
    │   │      └ <function window.show at 0x000002B1C3240790>
    │   └ <webui.webui.window object at 0x000002B1C38EB700>
    └ <webui.webui.event object at 0x000002B1C393D790>

  File "C:\deepl-tr-webui\.venv\lib\site-packages\webui\webui.py", line 109, in show
    WebUI.webui_show_cpy(self.window, html.encode('utf-8'), 0)
    │     │              │    │       │    └ <method 'encode' of 'str' objects>
    │     │              │    │       └ '\n\n<!DOCTYPE html>\n<html>\n    <head>\n        <title>deepl-tr-webui v0.1.0a1</title>\n\n\t\t<meta charSet="UTF-8"/>\n\t\t...
    │     │              │    └ c_void_p(2962450691904)
    │     │              └ <webui.webui.window object at 0x000002B1C38EB700>
    │     └ <_FuncPtr object at 0x000002B1C39225F0><CDLL 'C:\deepl-tr-webui\.venv\lib\site-packages\webui\webui-2-x64.dll', handle 7ffe91cd0000 at 0x2b1c3...

OSError: exception: access violation reading 0xFFFFFFFFFFFFFFFF
[nodemon] app crashed - waiting for file changes before starting...

I use the newest python binding of webui2. Very often when I try to swap html (my ui implments some tabs, each tab is a some html), webui crashes with the error message above. The webui-2-x64.dll', handle 7ffe91cd0000 at 0x2b1c3... part seems to be the same in each crash. My environ: Win10, python 3.8.10, webui2 2.0.3 (pypi).

Is there anything I can do to fix it? Thanks a lot.

Importing js frameworks

Is it possible to import JavaScript frameworks or external .js files using HTML script tag? Haven't been successful this far; I just want to verify it's a code issue and not just an error on my part...

bind with custom data?

it would be good if the bind could accept a function with event and also data,
that would be something similar to
unsigned int webui_bindex(webui_window_t* win, const char* element, void (*func)(webui_event_t* e, void *data));

Exiting GPU process due to errors during initialization

[48624:48624:0319/192143.121487:ERROR:viz_main_impl.cc(150)] Exiting GPU process due to errors during initialization
[48656:7:0319/192143.244143:ERROR:command_buffer_proxy_impl.cc(122)] ContextResult::kTransientFailure: Failed to send GpuChannelMsg_CreateCommandBuffer.

child process

Probably there is no way to fix this issue:

  • Parent Process (WebUI) 1 -> Start Browser Process 1.
  • Parent Process (WebUI) 2 -> Start Browser Process 2 -> Browser Automatically join process 1 -> Browser Process 2 Exit -> Parent Process (WebUI) 2 Exit.

Basically, when you run twice an application that uses webui_new_server() + webui_open() to serve a folder, the second browser process exit right away and becomes a child of the first browser process, which makes the second application exit as WebUI think the user closed the window, which is the reality the browser decide to join the first process.

The Win32 API AssignProcessToJobObject() won't fix the issue as we don't control the browser behavior.

The only solution is to create a new profile each time WebUI starts, making the startup take 3-5 seconds more.

webui_show() has two arguments in github src and three in docs

Sorry for logging this as an issue, not sure how else to contact a developer...

In the docs webui_show() is called like this:
webui_show(win, "<html>Hello!</html>", webui.browser.any);

But in webui.h the signature is:
EXPORT bool webui_show(webui_window_t* win, const char* content);

There's no browser argument, so I tried running firefox from the example code by calling:
_webui_show_window(my_window, my_html, webui.browser.firefox);

Firefox started but couldn't connect:
WebUI failed to connect to the background application. Please try again.

Is webui hard coded to use Chrome? I found the browser selection code difficult to follow.

Finally, awesome package, thank you! Just what I was looking for, and in C! 🖤

Rust Wrapper

I don't have enough time to finish the Rust wrapper here, if you have experience in Rust, you can try to create a C struct webui_javascript_int_t, pass it to webui_run_js_int_struct() by reference, Another way is you can call webui_run_js_int() and give the necessary references.

This is to run a JavaScript from Rust by sending it to WebUI and receiving the result.

Some wrappers I already finish it:
Go wrapper example
Python wrapper example

Exiting GPU process due to errors during initialization

WebUI generate this error:

[48624:48624:0319/192143.121487:ERROR:viz_main_impl.cc(150)] Exiting GPU process due to errors during initialization
[48656:7:0319/192143.244143:ERROR:command_buffer_proxy_impl.cc(122)] ContextResult::kTransientFailure: Failed to send GpuChannelMsg_CreateCommandBuffer.

unrecognised option '-mbig-obj'

عند البناء بوجود هذا العلم (FLAG) لعملية ترجمة الـ webui يحدث مشكلة عند تشغيل الأمر make ولا يتم البناء.

~/myp/alif/webui/build main
❯ make
[ 16%] Building CXX object webui/CMakeFiles/webui.dir/webui.cpp.o
as: unrecognised option '-mbig-obj'
make[2]: *** [webui/CMakeFiles/webui.dir/build.make:63: webui/CMakeFiles/webui.dir/webui.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:155: webui/CMakeFiles/webui.dir/all] Error 2
make: *** [Makefile:141: all] Error 2

هذا هو سبب العطب.

image

Kiosk mode

We should add in the future Kiosk mode.

favicon issue

When using webui_new_server() it ignores the favicon.ico file and uses the embedded one instead. it should use the file if it exists.

messages queue

right now WebUI send messages directly without any queue. we need to add this feature ASAP.

WebUI v2.2.0 Proposition

WebUI v2.2.0 Proposition

Some issues are hard to fix, like Firefox Closing Process Detection, or some users being confused about how to use show() and open(). Trying to fix those issues can create other issues.

Other issues exist because we are trying to make WebUI cover many different scenarios. Like we are trying to support WebUI Server Only, WebUI Server + Window, Window Only, etc... I guess it's better if we focus on the main reason why WebUI gets created in the first place, which is open a window and connect it to the backend, which is WebUI Server + Window scenario.

I suggest doing this to focus on one scenario:

  1. Remove webui_open()
  2. Remove webui_new_server()
  3. Remove process detection code as it does not work with Firefox (probably other browsers in the future)
  4. Remove struct inside struct to make wrappers code simpler
  5. Make sure all core functions (Wrappers does not need it) start with _webui_xxx
  6. Remove the custom browser code (Probably no user will need it)

Anyway to obtain the local filepath from <input type="file".../>?

Suppose I have <input id="filepath" type="file" accept=".txt" /> in html, how do I get the local filepath of the uploaded file?

All I got is C:\fakepath\tmp.txt. I need to process the local file after a user select a file.

Thanks for the nice package. I use python and quite enjoy it.

manually adding browser link

إن أمكن إضافة خاصية اختيار مسار المتصفح يدويا، في حالة كان الشخص يريد اختيار متصفح ما أو لايوجد لديه المتصفحات المدعومة

Adding Different Browser to macOS?

https://github.com/alifcommunity/webui/blob/c89d92fc80b47ab2056598d9cee1f7fffd214355/src/webui.c#L2174

I tried adding and rebuilding webUI with Clang this line, along with the
webui_open(my_window, url, webui.browser.brave); in the .ts example. doesn't seem to do anything

building off of issue #59

` #elif APPLE

        // Brave on macOS

        if(_webui_cmd_sync("open -R -a \"Brave Browser\"", false) == 0) {

            sprintf(win->core.browser_path, "/Applications/Brave\\ Browser.app/Contents/MacOS/Brave\\ Browser");
            return true;
        }
        else
            return false;`

time to leave Boost ?

Is there any other open source lib that support WebSocket and HTTP server, multi threading, free, and using only standard C++ ?

what is the exact license?

https://github.com/alifcommunity/webui/blob/main/LICENSE says it is LGPL, so if offical DLL is used, the application can be closed-source even for commercial case.

however, https://github.com/alifcommunity/webui/blob/main/README.md says GNU General Public License v3.0 is applied.
At the same time, https://github.com/alifcommunity/webui/blob/main/include/mongoose.h uses GPL for Non-Commercial Project, but needs money for Commercial Product.

So what is the exact license for webui? If it is LGPL, maybe it is more friendly for amateur

refresh will cause the window to close

refresh the page mean closing the current websocket connection
and then the WebUI will terminate this window.

Problem:
Pressing F5
Click on refresh
Browser cache re-load

Suggested solution:
Using JS to stop any F5/Refresh
Using JS to tell WebUI "This is a re-load, don't terminate the window"
Making WebUI waiting 1s for any re-load, otherwise terminate the window

html استخدام الملفات والسائط داخل (ل.و.ت)

وصف المشكلة

عن استخدام ال css, js مباشرة داخل لغة الوسوم التشعبية (ل.و.ت html)، لا توجد مشكلة وكل يشكل يعمل كما هو متوقع، وكذلك إذا استخدمت رابط لملف موجود على شبكة توصيل محتوى (ش.ت.م CDN).

أما إذا أردنا أن نستخدم ملفات موجودة بجوار الملف التنفيذي الذي تم بناؤه، ولا يجد التطبيق هذا الملف، لأنه لم يتم استضافته على نفس النطاق المحلي localhost.

استخدام المسار بأكمله

تطبيق ال webui.

التطبيق لا يعمل السبب بعد هذا الصورة.

image

التطبيق لا يعمل بسبب مشاكل في الأمان.

full-paths-security-error

المتصفح

التطبيق أيضا لا يعمل بالمتصفح.

المسار النسبي relative paths

تطبيق ال webui

كما هو الحال المسارات الكاملة، المسارات النسبية لا تعمل في تطبيق ال webui، مع العلم أن الملفات بجوار الملف التنفيذي الذي تم بناؤه والذي يشغل من الطرفية.

المتصفح

يعمل بالمتصفح.

relative-paths-succeed-in-the-browser

Browsers need to remember the window size and position

Recently Chromium-based browsers do not remember the window size and position anymore. If anyone knows how to tweak this command, please let me know.

Command: "C:\Program Files\Google\Chrome\Application\chrome.exe" --user-data-dir="C:\TestProfile" --no-first-run --disable-gpu --disable-software-rasterizer --no-proxy-server --safe-mode --disable-extensions --disable-background-mode --disable-plugins --disable-plugins-discovery --disable-translate --bwsi --disable-sync --incognito --app=https://google.com

  1. Run the command
  2. Change the window size and position
  3. Close the window
  4. Run the command again

If you are using the latest browser version, probably when you run the command again, the browser won't remember the window size and position.

We can fix this by removing --incognito, but many Chromium-based browsers show an account sync notification or a kind of "Welcome" message. Adding --disable-sync and --no-first-run does not help. The only solution I found is --incognito, but the cost is no window size and position restoration.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.