# π FastPWA
FastPWA is a minimal FastAPI extension that makes your app installable as a Progressive Web App (PWA). It handles manifest generation, service worker registration, and automatic asset injectionβgiving you a native-like install prompt with almost no setup.
## π What It Does
- π§Ύ Generates a compliant webmanifest from your app metadata
- βοΈ Registers a basic service worker for installability
- πΌοΈ Discovers and injects favicon and static assets (index.css, index.js, etc.)
- π§© Mounts static folders and serves your HTML entrypoint
## π¦ Installation
```commandline
pip install fastpwa
```
## π§ͺ Quickstart
```python
from fastpwa import PWA
app = PWA(title="My App", summary="Installable FastAPI app", prefix="app")
app.static_mount("static") # Mounts static assets and discovers favicon
app.register_pwa(html="static/index.html") # Registers manifest, SW, and index route
```
## π Static Folder Layout
FastPWA auto-discovers and injects these assets if present:
```
static/
βββ index.html
βββ index.css
βββ index.js
βββ global.css
βββ global.js
βββ favicon.png
```
## 𧬠Manifest Customization
You can override manifest fields via `register_pwa()`:
```python
app.register_pwa(
html="static/index.html",
app_name="MyApp",
app_description="A simple installable app",
color="#3367D6",
background_color="#FFFFFF"
)
```
## π License
MIT
Raw data
{
"_id": null,
"home_page": null,
"name": "FastPWA",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "pwa, progressive, web, app, windows, android, iphone, apple, ios, safari",
"author": null,
"author_email": "Cody M Sommer <bassmastacod@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/44/58/678f5cf80710200d2d9723401207c87c73d9917ed2c390668c053f2eeae7/fastpwa-0.2.1b0.tar.gz",
"platform": null,
"description": "# \ud83d\ude80 FastPWA\nFastPWA is a minimal FastAPI extension that makes your app installable as a Progressive Web App (PWA). It handles manifest generation, service worker registration, and automatic asset injection\u2014giving you a native-like install prompt with almost no setup.\n\n## \ud83c\udf1f What It Does\n- \ud83e\uddfe Generates a compliant webmanifest from your app metadata\n- \u2699\ufe0f Registers a basic service worker for installability\n- \ud83d\uddbc\ufe0f Discovers and injects favicon and static assets (index.css, index.js, etc.)\n- \ud83e\udde9 Mounts static folders and serves your HTML entrypoint\n\n## \ud83d\udce6 Installation\n```commandline\npip install fastpwa\n```\n\n## \ud83e\uddea Quickstart\n```python\nfrom fastpwa import PWA\n\napp = PWA(title=\"My App\", summary=\"Installable FastAPI app\", prefix=\"app\")\napp.static_mount(\"static\") # Mounts static assets and discovers favicon\n\napp.register_pwa(html=\"static/index.html\") # Registers manifest, SW, and index route\n```\n\n## \ud83d\udcc1 Static Folder Layout\nFastPWA auto-discovers and injects these assets if present:\n```\nstatic/\n\u251c\u2500\u2500 index.html\n\u251c\u2500\u2500 index.css\n\u251c\u2500\u2500 index.js\n\u251c\u2500\u2500 global.css\n\u251c\u2500\u2500 global.js\n\u2514\u2500\u2500 favicon.png\n```\n\n## \ud83e\uddec Manifest Customization\nYou can override manifest fields via `register_pwa()`:\n```python\napp.register_pwa(\n html=\"static/index.html\",\n app_name=\"MyApp\",\n app_description=\"A simple installable app\",\n color=\"#3367D6\",\n background_color=\"#FFFFFF\"\n)\n```\n\n## \ud83d\udcdc License\nMIT\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Make your FastAPI app installable on mobile devices.",
"version": "0.2.1b0",
"project_urls": {
"Issues": "https://github.com/BassMastaCod/FastPWA/issues",
"Repository": "https://github.com/BassMastaCod/FastPWA.git"
},
"split_keywords": [
"pwa",
" progressive",
" web",
" app",
" windows",
" android",
" iphone",
" apple",
" ios",
" safari"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f6f170d5ce415ef176cf8cde71167a47739b9fa20ffc362d0406ffe35a7bec1b",
"md5": "705e3b5feadd627fbf50c5eb29e87523",
"sha256": "6c4bd248879a055a667ebff14d8ce04eec93c9ff1308bb44a085fd61bd997a36"
},
"downloads": -1,
"filename": "fastpwa-0.2.1b0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "705e3b5feadd627fbf50c5eb29e87523",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 5098,
"upload_time": "2025-10-07T13:34:52",
"upload_time_iso_8601": "2025-10-07T13:34:52.502990Z",
"url": "https://files.pythonhosted.org/packages/f6/f1/70d5ce415ef176cf8cde71167a47739b9fa20ffc362d0406ffe35a7bec1b/fastpwa-0.2.1b0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4458678f5cf80710200d2d9723401207c87c73d9917ed2c390668c053f2eeae7",
"md5": "a08586357fb96dae74e5ccd324cdcc1a",
"sha256": "daba457250a1666e4b72c765add9fde3712bca0f5088a5475c01dcf915901118"
},
"downloads": -1,
"filename": "fastpwa-0.2.1b0.tar.gz",
"has_sig": false,
"md5_digest": "a08586357fb96dae74e5ccd324cdcc1a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 4656,
"upload_time": "2025-10-07T13:34:53",
"upload_time_iso_8601": "2025-10-07T13:34:53.508157Z",
"url": "https://files.pythonhosted.org/packages/44/58/678f5cf80710200d2d9723401207c87c73d9917ed2c390668c053f2eeae7/fastpwa-0.2.1b0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-07 13:34:53",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "BassMastaCod",
"github_project": "FastPWA",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "fastpwa"
}