fastapi-tailwind


Namefastapi-tailwind JSON
Version 2.0.2a1 PyPI version JSON
download
home_pageNone
Summary✨ TailwindCSS support for đŸ”Ĩ FastAPI.
upload_time2025-02-20 02:11:49
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT License Copyright (c) 2024-present Goldy Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords tailwindcss tailwind fastapi fastapi middleware tailwindcss v4
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <div align="center">

  # ✨ đŸ”Ĩ fastapi-tailwind

  <sub>Streamlined approach for adding TailwindCSS V4 to FastAPI **without** NodeJS.</sub>

  [![Pypi Version](https://img.shields.io/pypi/v/fastapi-tailwind?style=flat)](https://pypi.org/project/fastapi-tailwind/)
  [![Python Versions](https://img.shields.io/pypi/dm/fastapi-tailwind?color=informational&label=pypi%20downloads)](https://pypistats.org/packages/fastapi-tailwind)
  [![Pypi Downloads](https://img.shields.io/pypi/pyversions/fastapi-tailwind?style=flat)](https://pypi.org/project/fastapi-tailwind/)

  <img src="./assets/heart_banner_cropped.png">

</div>

> [!WARNING]
> Currently in alpha phase so expect bugs but do report them please. 🙏

## Features ✨
- [x] Zero dependencies đŸĒļ
- [x] Auto watch when in dev mode. 🔎
- [x] Doesn't require NodeJS and NPM. đŸĢ§đŸĒĨ
- [x] Seemless integration into the FastAPI codebase. đŸĨ‚
- [ ] GZIP automatically configured to [compress TailwindCSS](https://v2.tailwindcss.com/docs/controlling-file-size) out of the box. ⚡

## How to add?
> [!NOTE]
> These instructions assume you already have a somewhat intermediate understanding of FastAPI and that you've used TailwindCSS before (if you haven't be sure to read the documentation pages I link below).
>
> If you're using Windows you can still replicate these commands via a file explorer.

1. Install the pypi package.
```sh
pip install fastapi-tailwind
```
2. Edit your FastAPI APP.

Before:
```python
from fastapi import FastAPI
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles

app = FastAPI()

@app.get("/")
def index():
    return FileResponse("./index.html")

app.mount("/static", StaticFiles(directory = "static"), name = "static")
```

After:
```python
# main.py

from fastapi import FastAPI
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles

from fastapi_tailwind import tailwind
from contextlib import asynccontextmanager

static_files = StaticFiles(directory = "static")

@asynccontextmanager
async def lifespan(app: FastAPI):
    # YAY, our tailwind get's compiled here! 😄
    process = tailwind.compile(
        static_files.directory + "/output.css",
        tailwind_stylesheet_path = "./input.css"
    )

    yield # The code after this is called on shutdown.

    process.terminate() # We must terminate the compiler on shutdown to
    # prevent multiple compilers running in development mode or when watch is enabled.

app = FastAPI(
    # See the fastapi documentation for an explanation on lifespans: https://fastapi.tiangolo.com/advanced/events/
    lifespan = lifespan
)

@app.get("/")
def index():
    return FileResponse("./index.html")

# We need somewhere to drop the compiled stylesheet so our html file can link it.
app.mount("/static", static_files, name = "static")
```

3. Make sure the `static` folder exists and create a `input.css` file ([in v4 this is now used for configuration](https://tailwindcss.com/docs/upgrade-guide)).
```sh
mkdir ./static
touch input.css
```

4. Open `input.css` and write `@import "tailwindcss;` in the file or just run this command:
```sh
echo '@import "tailwindcss";' > input.css
```

> ### VSCode TailwindCSS Intellisense FIX!
> There is currently [a bug in the vscode tailwindcss extension](https://github.com/tailwindlabs/tailwindcss/discussions/15132) where you will not get any intellisense in v4 unless we add back the old v3 `tailwind.config.js` file to point to the files with tailwind code in them (e.g. html, markdown, javascript files).
>
> A simple, quick and minimal way to fix this for the time being, is to create a file located at `.vscode/settings.json` where our `input.css` file is (should be in root if you followed my previous instructions) and configure it like so:
> ```json
> {
>     "tailwindCSS.experimental.configFile": "./input.css"
> }
> ```
>
> That should fix that issue.

5. Now write your tailwind css in your `index.html`.
```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>✨ Tailwind in đŸ”Ĩ FastAPI</title>

    <link rel="stylesheet" href="/static/output.css">
</head>
<body class="bg-slate-950">
    <h1 class="mt-10 text-center text-6xl font-bold text-red-400">👋 Hello ✨ Tailwind!</h1>
</body>
</html>
```
6. Then run FastAPI and visit your site. It should be gucci. ✨
```sh
fastapi dev main.py
```
<div align="center">

  <img width="800px" src="./assets/example_page_showcase.png">

</div>

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "fastapi-tailwind",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "tailwindcss, tailwind, fastapi, fastapi middleware, tailwindcss v4",
    "author": null,
    "author_email": "Goldy <goldy@devgoldy.xyz>",
    "download_url": null,
    "platform": null,
    "description": "<div align=\"center\">\n\n  # \u2728 \ud83d\udd25 fastapi-tailwind\n\n  <sub>Streamlined approach for adding TailwindCSS V4 to FastAPI **without** NodeJS.</sub>\n\n  [![Pypi Version](https://img.shields.io/pypi/v/fastapi-tailwind?style=flat)](https://pypi.org/project/fastapi-tailwind/)\n  [![Python Versions](https://img.shields.io/pypi/dm/fastapi-tailwind?color=informational&label=pypi%20downloads)](https://pypistats.org/packages/fastapi-tailwind)\n  [![Pypi Downloads](https://img.shields.io/pypi/pyversions/fastapi-tailwind?style=flat)](https://pypi.org/project/fastapi-tailwind/)\n\n  <img src=\"./assets/heart_banner_cropped.png\">\n\n</div>\n\n> [!WARNING]\n> Currently in alpha phase so expect bugs but do report them please. \ud83d\ude4f\n\n## Features \u2728\n- [x] Zero dependencies \ud83e\udeb6\n- [x] Auto watch when in dev mode. \ud83d\udd0e\n- [x] Doesn't require NodeJS and NPM. \ud83e\udee7\ud83e\udea5\n- [x] Seemless integration into the FastAPI codebase. \ud83e\udd42\n- [ ] GZIP automatically configured to [compress TailwindCSS](https://v2.tailwindcss.com/docs/controlling-file-size) out of the box. \u26a1\n\n## How to add?\n> [!NOTE]\n> These instructions assume you already have a somewhat intermediate understanding of FastAPI and that you've used TailwindCSS before (if you haven't be sure to read the documentation pages I link below).\n>\n> If you're using Windows you can still replicate these commands via a file explorer.\n\n1. Install the pypi package.\n```sh\npip install fastapi-tailwind\n```\n2. Edit your FastAPI APP.\n\nBefore:\n```python\nfrom fastapi import FastAPI\nfrom fastapi.responses import FileResponse\nfrom fastapi.staticfiles import StaticFiles\n\napp = FastAPI()\n\n@app.get(\"/\")\ndef index():\n    return FileResponse(\"./index.html\")\n\napp.mount(\"/static\", StaticFiles(directory = \"static\"), name = \"static\")\n```\n\nAfter:\n```python\n# main.py\n\nfrom fastapi import FastAPI\nfrom fastapi.responses import FileResponse\nfrom fastapi.staticfiles import StaticFiles\n\nfrom fastapi_tailwind import tailwind\nfrom contextlib import asynccontextmanager\n\nstatic_files = StaticFiles(directory = \"static\")\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n    # YAY, our tailwind get's compiled here! \ud83d\ude04\n    process = tailwind.compile(\n        static_files.directory + \"/output.css\",\n        tailwind_stylesheet_path = \"./input.css\"\n    )\n\n    yield # The code after this is called on shutdown.\n\n    process.terminate() # We must terminate the compiler on shutdown to\n    # prevent multiple compilers running in development mode or when watch is enabled.\n\napp = FastAPI(\n    # See the fastapi documentation for an explanation on lifespans: https://fastapi.tiangolo.com/advanced/events/\n    lifespan = lifespan\n)\n\n@app.get(\"/\")\ndef index():\n    return FileResponse(\"./index.html\")\n\n# We need somewhere to drop the compiled stylesheet so our html file can link it.\napp.mount(\"/static\", static_files, name = \"static\")\n```\n\n3. Make sure the `static` folder exists and create a `input.css` file ([in v4 this is now used for configuration](https://tailwindcss.com/docs/upgrade-guide)).\n```sh\nmkdir ./static\ntouch input.css\n```\n\n4. Open `input.css` and write `@import \"tailwindcss;` in the file or just run this command:\n```sh\necho '@import \"tailwindcss\";' > input.css\n```\n\n> ### VSCode TailwindCSS Intellisense FIX!\n> There is currently [a bug in the vscode tailwindcss extension](https://github.com/tailwindlabs/tailwindcss/discussions/15132) where you will not get any intellisense in v4 unless we add back the old v3 `tailwind.config.js` file to point to the files with tailwind code in them (e.g. html, markdown, javascript files).\n>\n> A simple, quick and minimal way to fix this for the time being, is to create a file located at `.vscode/settings.json` where our `input.css` file is (should be in root if you followed my previous instructions) and configure it like so:\n> ```json\n> {\n>     \"tailwindCSS.experimental.configFile\": \"./input.css\"\n> }\n> ```\n>\n> That should fix that issue.\n\n5. Now write your tailwind css in your `index.html`.\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>\u2728 Tailwind in \ud83d\udd25 FastAPI</title>\n\n    <link rel=\"stylesheet\" href=\"/static/output.css\">\n</head>\n<body class=\"bg-slate-950\">\n    <h1 class=\"mt-10 text-center text-6xl font-bold text-red-400\">\ud83d\udc4b Hello \u2728 Tailwind!</h1>\n</body>\n</html>\n```\n6. Then run FastAPI and visit your site. It should be gucci. \u2728\n```sh\nfastapi dev main.py\n```\n<div align=\"center\">\n\n  <img width=\"800px\" src=\"./assets/example_page_showcase.png\">\n\n</div>\n",
    "bugtrack_url": null,
    "license": "MIT License  Copyright (c) 2024-present Goldy  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",
    "summary": "\u2728 TailwindCSS support for \ud83d\udd25 FastAPI.",
    "version": "2.0.2a1",
    "project_urls": {
        "BugTracker": "https://github.com/THEGOLDENPRO/fastapi-tailwind/issues",
        "GitHub": "https://github.com/THEGOLDENPRO/fastapi-tailwind"
    },
    "split_keywords": [
        "tailwindcss",
        " tailwind",
        " fastapi",
        " fastapi middleware",
        " tailwindcss v4"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6ab1f6a8825cb66bc5c7fbdbf548ad9c0238b805757c2e96fa20c3719f8774f7",
                "md5": "69a235605e4cd7e1a2e6542fb65eade9",
                "sha256": "c56a3ad11ca8891b50f8f164b5f92be6941df6bbae55d6302c4b11f880398d10"
            },
            "downloads": -1,
            "filename": "fastapi_tailwind-2.0.2a1-py3-none-macosx_10_9_arm64.whl",
            "has_sig": false,
            "md5_digest": "69a235605e4cd7e1a2e6542fb65eade9",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 35272122,
            "upload_time": "2025-02-20T02:11:49",
            "upload_time_iso_8601": "2025-02-20T02:11:49.448285Z",
            "url": "https://files.pythonhosted.org/packages/6a/b1/f6a8825cb66bc5c7fbdbf548ad9c0238b805757c2e96fa20c3719f8774f7/fastapi_tailwind-2.0.2a1-py3-none-macosx_10_9_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "452d3eaf42c386c6b73cf25de2ab41342577a700d53b7fe362d66649f85b17b8",
                "md5": "cbe25e7f5821452b0220bec784711186",
                "sha256": "95fc8bbf5cbe83a3913d1bf32eb43c8c2839267d59730e0adc02f5ad00f9d008"
            },
            "downloads": -1,
            "filename": "fastapi_tailwind-2.0.2a1-py3-none-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "cbe25e7f5821452b0220bec784711186",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 37987531,
            "upload_time": "2025-02-20T02:12:09",
            "upload_time_iso_8601": "2025-02-20T02:12:09.793857Z",
            "url": "https://files.pythonhosted.org/packages/45/2d/3eaf42c386c6b73cf25de2ab41342577a700d53b7fe362d66649f85b17b8/fastapi_tailwind-2.0.2a1-py3-none-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "30fe8fd050afed61642dd20b70f26ad71c0a789cada84e7f849ea6a7c9ce3b8a",
                "md5": "c884d39359fd75be645ac757b336e23e",
                "sha256": "1310ad633021241dfaaa07dd243ec93668b9a2fa14859b703f520f5447062430"
            },
            "downloads": -1,
            "filename": "fastapi_tailwind-2.0.2a1-py3-none-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "c884d39359fd75be645ac757b336e23e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 35272122,
            "upload_time": "2025-02-20T02:31:07",
            "upload_time_iso_8601": "2025-02-20T02:31:07.397174Z",
            "url": "https://files.pythonhosted.org/packages/30/fe/8fd050afed61642dd20b70f26ad71c0a789cada84e7f849ea6a7c9ce3b8a/fastapi_tailwind-2.0.2a1-py3-none-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "de78ecd49548f40c0f41f07335fe7e55b578b0734b5b1768b01822221ff3f481",
                "md5": "54bcf0dd731f2940903b15c7bb767f21",
                "sha256": "ac7ee3c9458a6955489876c2f1fee7ec0733580d671e48732fcf035c3c6e56ce"
            },
            "downloads": -1,
            "filename": "fastapi_tailwind-2.0.2a1-py3-none-macosx_11_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "54bcf0dd731f2940903b15c7bb767f21",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 37987531,
            "upload_time": "2025-02-20T02:31:29",
            "upload_time_iso_8601": "2025-02-20T02:31:29.266977Z",
            "url": "https://files.pythonhosted.org/packages/de/78/ecd49548f40c0f41f07335fe7e55b578b0734b5b1768b01822221ff3f481/fastapi_tailwind-2.0.2a1-py3-none-macosx_11_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5b325ed927412549b89505ec166f46b3a4bc6f273be68ebbc29d86ed545feff9",
                "md5": "ca29a489bbe74a8474a49d22372af1ca",
                "sha256": "fc838325277049b67c9f91b6967571090aaea8a88790e567ffe4549eb7b9cfce"
            },
            "downloads": -1,
            "filename": "fastapi_tailwind-2.0.2a1-py3-none-manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "ca29a489bbe74a8474a49d22372af1ca",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 50903232,
            "upload_time": "2025-02-20T02:31:55",
            "upload_time_iso_8601": "2025-02-20T02:31:55.384801Z",
            "url": "https://files.pythonhosted.org/packages/5b/32/5ed927412549b89505ec166f46b3a4bc6f273be68ebbc29d86ed545feff9/fastapi_tailwind-2.0.2a1-py3-none-manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1da0c86470b29c2884a0bf5ce8a8deb8f2a39aa2f0dc31d768f25d91c3aaf6de",
                "md5": "cfe30d769427d0820fc94ca7700bc2b2",
                "sha256": "d4a686d17d993678424ea2778d0886786168b5536444406c81c6318d022e195e"
            },
            "downloads": -1,
            "filename": "fastapi_tailwind-2.0.2a1-py3-none-manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "cfe30d769427d0820fc94ca7700bc2b2",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 52322848,
            "upload_time": "2025-02-20T02:32:22",
            "upload_time_iso_8601": "2025-02-20T02:32:22.496184Z",
            "url": "https://files.pythonhosted.org/packages/1d/a0/c86470b29c2884a0bf5ce8a8deb8f2a39aa2f0dc31d768f25d91c3aaf6de/fastapi_tailwind-2.0.2a1-py3-none-manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "da7ac06ef9b40025764aa884cb7d5a67edd76dcb237eee5d8033ecce12e43715",
                "md5": "6173460ff23886ad9d7107cf97976640",
                "sha256": "118b5f6abe6d17fee89c82b176817e913fc77d93439acec498e1651c9eb6079a"
            },
            "downloads": -1,
            "filename": "fastapi_tailwind-2.0.2a1-py3-none-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "6173460ff23886ad9d7107cf97976640",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 51829098,
            "upload_time": "2025-02-20T02:32:48",
            "upload_time_iso_8601": "2025-02-20T02:32:48.974798Z",
            "url": "https://files.pythonhosted.org/packages/da/7a/c06ef9b40025764aa884cb7d5a67edd76dcb237eee5d8033ecce12e43715/fastapi_tailwind-2.0.2a1-py3-none-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "49a67f1e9a706e8b4243fb7b42dd6d176cd32c6a43f4a444f2240e006e98e346",
                "md5": "b56d391966740c65b937831b7575896a",
                "sha256": "2e890c407d06511f7994f2fef05f9bddef60e1a2c103783d07eb09c4489877e3"
            },
            "downloads": -1,
            "filename": "fastapi_tailwind-2.0.2a1-py3-none-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b56d391966740c65b937831b7575896a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 53406468,
            "upload_time": "2025-02-20T02:33:17",
            "upload_time_iso_8601": "2025-02-20T02:33:17.372821Z",
            "url": "https://files.pythonhosted.org/packages/49/a6/7f1e9a706e8b4243fb7b42dd6d176cd32c6a43f4a444f2240e006e98e346/fastapi_tailwind-2.0.2a1-py3-none-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "61abbcfc6641d53abc3ead712f4fffa5af1116741f32e4c89af0198476780e7d",
                "md5": "c6e5ec01e614186a8c2c5cd17170ce76",
                "sha256": "b2e9c0422d8fb56ed70ce8c74413ab3e3807cb88042093ad77252708315ec81c"
            },
            "downloads": -1,
            "filename": "fastapi_tailwind-2.0.2a1-py3-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c6e5ec01e614186a8c2c5cd17170ce76",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 53537340,
            "upload_time": "2025-02-20T02:33:45",
            "upload_time_iso_8601": "2025-02-20T02:33:45.407613Z",
            "url": "https://files.pythonhosted.org/packages/61/ab/bcfc6641d53abc3ead712f4fffa5af1116741f32e4c89af0198476780e7d/fastapi_tailwind-2.0.2a1-py3-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-20 02:11:49",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "THEGOLDENPRO",
    "github_project": "fastapi-tailwind",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "fastapi-tailwind"
}
        
Elapsed time: 1.01144s