Skip to main content

Build Electron-like apps without Electron

Project description

demo app screenshot

native-web-app

A drop-in replacement for Python's webbrowser.open() that opens a native browser window without browser controls. Build Electron-style apps without shipping Electron!

import native_web_app

url = "http://localhost:8000/"

try:
    native_web_app.open(url)
except Exception:
    print(f"No web browser found. Please open a browser and point it to {url}.")

Demo

There is an example app in the repository.

API Documentation

This module exposes a single open function:

def open(url: str, try_app_mode: bool = True) -> None:
    """
    Open a URL in a modern browser.
    In contrast to webbrowser.open, this method gracefully degrades
    to a no-op on headless servers, where webbrowser.open would otherwise open lynx.

    Args:
        url:
            The URL to open, e.g. http://localhost:1234.
        try_app_mode:
            If True, try to open the URL in "app mode", i.e. without browser controls.
            This allows for Electron-like apps without having to deal with Electron.
            If no suitable browser is found, it gracefully falls back to a regular browser instance.

    Raises:
        RuntimeError, if no suitable browser is found.
        OSError, if the browser executable could not be executed.

        For robustness, implementors should catch any Exception and take that as a signal that opening the URL failed.
    """

Compatibility

OS Browser Status (✅ app mode, ☑️ regular browser)
Windows 10 (2004) Google Chrome 84
Windows 10 (2004) Microsoft Edge 84
Windows 10 (2004) Windows Subsystem for Linux ☑️
Windows 10 (2004) Default Browser ☑️
Ubuntu 20.04 Google Chrome 84
Ubuntu 20.04 Default Browser ☑️
macOS Catalina Google Chrome 84
macOS Catalina Default Browser ☑️

Firefox implemented app mode ("site-specific browser functionality") in 2020, but enabled it only for https:// URLs. This means it does not work with http://localhost:1234 or file:// URLs. This makes it unsuitable for inclusion in native_web_app.

Changelog

This project follows semantic versioning.

native_web_app 1.0.0 (2020-08-11)

  • Initial Release

native_web_app 1.0.1 (2020-08-12)

  • Enforce browsers to start in background. This fixes compatibility with Microsoft Edge on Windows 10.
  • Extend documentation on compatibility.

FAQ

How do I detect when the browser window is closed?

Monitoring the spawned browser process does not work reliably across platforms. We recommend you use JavaScript to notify your backend:

window.addEventListener('unload', function() {
    navigator.sendBeacon("/shutdown");
}, false);

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

native_web_app-1.0.1-py3-none-any.whl (5.2 kB view details)

Uploaded Python 3

File details

Details for the file native_web_app-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: native_web_app-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 5.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.0

File hashes

Hashes for native_web_app-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8051ea8066895bcd4f5222a6d82b1ad9f68305550a3978690c9ad1619b18492f
MD5 e55d8b348bd3c91a993b3aa1e1df5a9e
BLAKE2b-256 d435e70fa45146b2fadc8d41c218d4c9687cb9b72b0102399fd200b04cba1b70

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page