Metadata-Version: 2.4
Name: boneshield
Version: 0.2.2
Summary: Express-like Python backend framework with MongoDB, JWT, and WebSockets
Author: BoneShield
License: MIT
Project-URL: Homepage, https://pypi.org/project/boneshield/
Keywords: boneshield,mongodb,fastapi,express,jwt,websocket,backend
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: uvicorn[standard]>=0.30
Requires-Dist: starlette>=0.38
Requires-Dist: motor>=3.5
Requires-Dist: pymongo>=4.8
Requires-Dist: PyJWT>=2.8
Requires-Dist: python-dotenv>=1.0
Provides-Extra: dev
Requires-Dist: httpx>=0.27; extra == "dev"
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
Dynamic: license-file

# BoneShield

Express-like Python backend for beginners — MongoDB, JWT, WebSockets, nested file routing.

Default port: **313**.

## Install

```bash
pip install boneshield
```

## Create a project

```bash
mkdir my-api
cd my-api
boneshield make
python main.py
```

Or: `boneshield run`

## Beginner style (no imports)

`main.py` starts with one wiring line, then you use builtins directly:

```python
import boneshield.bootstrap  # framework wiring — you can ignore this line

db = connect_mongo()

use("/api", "routes/api.py")

@get("/health")
def health(req):
    return makeResponse(200, data={"ok": True})

app.run()
```

Nest routes up to **5 layers** with `use("/prefix", "file.py")`.  
Attach controllers like Node: `get("/", usersController.list)`.

See **GUIDE.md** (routing, `@useable`, variables) and **MONGO.md** (database).

## Autocomplete in Cursor / VS Code

`boneshield make` creates:

- `typings/__builtins__.pyi` (Pylance treats these as builtins — no import needed)
- `.vscode/settings.json` + `boneshield.code-snippets`
- `pyrightconfig.json`

Then **reload the window** once so suggestions for `makeResponse`, `get`, `use`, … show up while typing.

## Commands

```text
boneshield make          # scaffold project
boneshield make --force  # overwrite scaffold files
boneshield run           # run main.py with the loader
boneshield --help
boneshield --version
```
