Metadata-Version: 2.4
Name: vkapi-framework
Version: 0.1.0
Summary: Async-first VK API SDK and bot framework inspired by aiogram 3
Author-email: Konstantin Ponomarev <cicwak@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: api,asyncio,bot,sdk,vk,vkontakte
Classifier: Development Status :: 3 - Alpha
Classifier: Framework :: AsyncIO
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Communications :: Chat
Classifier: Topic :: Internet
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: <3.15,>=3.11
Requires-Dist: aiohttp<4,>=3.9
Requires-Dist: pydantic<3,>=2.4
Requires-Dist: typing-extensions<5,>=4.8
Provides-Extra: dev
Requires-Dist: build>=1.2; extra == 'dev'
Requires-Dist: mypy>=1.13; extra == 'dev'
Requires-Dist: pyrefly>=1; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest>=8; extra == 'dev'
Requires-Dist: ruff>=0.8; extra == 'dev'
Requires-Dist: twine>=6.0; extra == 'dev'
Provides-Extra: docs
Requires-Dist: sphinx>=7; extra == 'docs'
Provides-Extra: fast
Requires-Dist: orjson>=3.10; extra == 'fast'
Provides-Extra: redis
Requires-Dist: redis[hiredis]<8,>=5; extra == 'redis'
Provides-Extra: release
Requires-Dist: build>=1.2; extra == 'release'
Requires-Dist: twine>=6.0; extra == 'release'
Description-Content-Type: text/markdown

# vkapi

Async-first SDK and bot framework for VK API inspired by aiogram 3.

## Installation

```bash
pip install vkapi-framework
```

The PyPI distribution is named `vkapi-framework`; the Python package is imported
as `vkapi`.

## Quick start

```python
from vkapi import Bot, Dispatcher, Router
from vkapi.filters import Command
from vkapi.types import Message

bot = Bot("TOKEN", group_id=123)
dp = Dispatcher()
router = Router()


@router.message(Command("start"))
async def start(message: Message) -> None:
    await message.answer("Привет")


dp.include_router(router)
dp.run_polling(bot)
```

The first implementation focuses on community Bots Long Poll, typed method objects,
raw VK API fallback, routers, filters, middlewares, dependency injection, keyboards,
and common upload flows.

## Requirements

- Python 3.11-3.14
- aiohttp 3.9+
- pydantic 2.4+

## Development

```bash
uv sync --extra dev
uv run pytest
uv run ruff check .
uv run mypy
```

## Build

```bash
uv build
uv run twine check dist/*
```

## License

MIT
