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.2 (2020-08-12)

  • Add support for Python 3.5 and 3.6.

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.

native_web_app 1.0.0 (2020-08-11)

  • Initial Release

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.2-py3-none-any.whl (5.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: native_web_app-1.0.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2259aae94852dabbaaf99ba884983518d44dfb9b669fefa16fa89dc18a61f1a8
MD5 911aef7e8ae2b7e3f2a3add94cd19cb3
BLAKE2b-256 a2fbd213b13689929d857605df15f1eee712e1f80f1d5639ceeba1a2f87a971b

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