# โก Navigator Framework
[](https://pypi.org/project/navigator-api/)
[](https://pypi.org/project/navigator-api/)
[](https://github.com/phenobarbital/navigator/blob/main/LICENSE)
[](https://pepy.tech/project/navigator-api)
> **A batteries-included async web framework built on aiohttp** ๐
Navigator is a next-generation Python framework designed for building high-performance asynchronous APIs and web applications. Built on top of aiohttp and asyncio, it provides enterprise-grade features out of the box with a focus on developer productivity and application scalability.
## โจ Key Features
- **โก Lightning Fast**: Built on aiohttp + uvloop for maximum performance
- **๐ Batteries Included**: Authentication, WebSockets, templates, database connections, and more
- **๐๏ธ Django-style Apps**: Organize code with modular, reusable application components
- **๐ Multi-tenant Ready**: Built-in sub-domain support for SaaS applications
- **๐ง Centralized Config**: Unified configuration management with NavConfig
- **๐ Auto-Connections**: Automatic database connection handling with AsyncDB
- **๐ Class-based Views**: Powerful CRUD operations with ModelViews
- **๐ฏ Extensible**: Plugin architecture for adding custom features
## ๐ Quick Start
### Installation
```bash
# Using uv (recommended)
uv add navigator-api[uvloop,locale]
# Using pip
pip install navigator-api[uvloop,locale]
```
### Create Your First App
```bash
# Create a new Navigator project
nav init
# Create an application
nav app create myapp
# Run the development server
nav run --debug --reload
```
### Hello Navigator
```python
# app.py
import asyncio
import uvloop
from navigator import Application
from aiohttp import web
async def hello(request):
return web.Response(text="Hello Navigator! ๐")
async def main():
# Set uvloop as the event loop policy
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
# Create Navigator application
app = Application(enable_jinja2=True)
# Add routes
app.router.add_get('/', hello)
# Enable WebSocket support
app.add_websockets()
# Setup and run
return app.setup()
if __name__ == '__main__':
asyncio.run(main())
```
## ๐๏ธ Architecture
### Class-based Views
Navigator provides powerful class-based views for building APIs:
```python
from navigator.views import BaseView, ModelView
from aiohttp import web
from datamodel import BaseModel
class UserView(BaseView):
async def get(self):
return web.json_response({"users": []})
async def post(self):
data = await self.request.json()
# Process user creation
return web.json_response({"status": "created"})
# Model-based CRUD operations
class User(BaseModel):
name: str
email: str
age: int
class UserModelView(ModelView):
model = User
path = '/api/users'
# Automatic CRUD operations:
# GET /api/users - List all users
# GET /api/users/{id} - Get specific user
# POST /api/users - Create user
# PUT /api/users/{id} - Update user
# DELETE /api/users/{id} - Delete user
```
### Centralized Configuration
Navigator uses [NavConfig](https://github.com/phenobarbital/navconfig) for unified configuration management:
```python
# settings/settings.py
from navconfig import config
# Database configuration
DATABASE_URL = config.get('DATABASE_URL', 'postgresql://user:pass@localhost/db')
# Cache configuration
REDIS_URL = config.get('REDIS_URL', 'redis://localhost:6379')
# App configuration
DEBUG = config.getboolean('DEBUG', False)
SECRET_KEY = config.get('SECRET_KEY', required=True)
# Multiple environment support
ENV = config.get('ENV', 'development') # development, staging, production
```
### Django-style Applications
Organize your code with modular applications:
```
myproject/
โโโ apps/
โ โโโ users/
โ โ โโโ __init__.py
โ โ โโโ views.py
โ โ โโโ models.py
โ โ โโโ urls.py
โ โ โโโ templates/
โ โโโ products/
โ โโโ __init__.py
โ โโโ views.py
โ โโโ models.py
โโโ settings/
โ โโโ settings.py
โโโ main.py
```
```python
# apps/users/__init__.py
from navigator.applications import AppConfig
class UsersConfig(AppConfig):
name = 'users'
path = '/api/users'
def ready(self):
# App initialization code
pass
```
### Database Integration
Navigator integrates seamlessly with [AsyncDB](https://github.com/phenobarbital/asyncdb) for database operations:
```python
from navigator.views import ModelView
from asyncdb.models import Model
# Define your model
class User(Model):
name: str
email: str
created_at: datetime
class Meta:
name = 'users'
schema = 'public'
# Create CRUD API automatically
class UserAPI(ModelView):
model = User
path = '/api/users'
# Optional: Add custom validation
async def validate_payload(self, data):
if 'email' not in data:
raise ValueError("Email is required")
return data
# Optional: Add custom callbacks
async def _post_callback(self, response, model):
# Send welcome email, log activity, etc.
pass
```
### WebSocket Support
Real-time features with built-in WebSocket support:
```python
from navigator import Application
from navigator.services.ws import WebSocketHandler
class ChatHandler(WebSocketHandler):
async def on_message(self, message):
# Broadcast message to all connected clients
await self.broadcast(message)
app = Application()
app.add_websockets()
app.router.add_websocket('/ws/chat', ChatHandler)
```
## ๐ Extensions
Navigator's extension system allows you to add powerful features:
### Authentication Extension
```python
# Install: pip install navigator-auth
from navigator_auth import AuthConfig
class MyApp(Application):
def configure(self):
# Add JWT authentication
self.add_extension(AuthConfig, {
'secret_key': 'your-secret-key',
'algorithm': 'HS256',
'token_expiration': 3600
})
```
### Admin Interface
```python
# Coming soon: Django-style admin interface
from navigator.admin import admin_site
from .models import User, Product
admin_site.register(User)
admin_site.register(Product)
app.include_router(admin_site.router, prefix='/admin')
```
## ๐ ๏ธ CLI Tools
Navigator includes powerful CLI tools for development:
```bash
# Project management
nav init # Create new project
nav app create myapp # Create new application
# Development
nav run # Start development server
nav shell # Interactive shell
```
## ๐ฆ Available Extensions
Navigator supports various optional dependencies:
```bash
# Performance optimizations
navigator-api[uvloop] # uvloop for better async performance
# Internationalization
navigator-api[locale] # Babel for i18n support
# Caching
navigator-api[memcache] # Memcached support
# Production deployment
navigator-api[gunicorn] # Gunicorn WSGI server
# All features
navigator-api[all] # Install all optional dependencies
```
## ๐ Deployment
### AWS App Runner
Navigator includes built-in support for AWS App Runner deployment:
```yaml
# apprunner.yaml
version: 1.0
runtime: python3
build:
commands:
build:
- pip install -r requirements.txt
- python setup.py build_ext --inplace
run:
runtime-version: '3.11'
command: 'nav run --port 8080'
network:
port: 8080
env: PORT
```
### Docker
```dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
RUN python setup.py build_ext --inplace
EXPOSE 8000
CMD ["nav", "run", "--port", "8000"]
```
## ๐ Requirements
- **Python**: 3.9+ (3.11+ recommended)
- **Dependencies**:
- aiohttp >= 3.10.0
- asyncio (built-in)
- uvloop >= 0.21.0 (optional, recommended)
## ๐งช Testing
```bash
# Install development dependencies
uv add --dev pytest pytest-asyncio coverage
# Run tests
pytest
# Run with coverage
pytest --cov=navigator tests/
```
## ๐ Documentation
- **Official Documentation**: [navigator-api.readthedocs.io](https://navigator-api.readthedocs.io) *(coming soon)*
- **API Reference**: Available in source code docstrings
- **Examples**: Check the [examples/](examples/) directory
- **Tutorial**: See [Quick Start](#-quick-start) section above
## ๐ค Contributing
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
### Development Setup
```bash
# Clone the repository
git clone https://github.com/phenobarbital/navigator.git
cd navigator
# Create development environment
uv venv --python 3.11 .venv
source .venv/bin/activate
# Install development dependencies
uv sync --dev
# Install pre-commit hooks
pre-commit install
# Run tests
pytest
```
## ๐ License
Navigator is licensed under the **BSD 3-Clause License**. See [LICENSE](LICENSE) for details.
## ๐ Credits
Navigator is built on top of these amazing projects:
- [aiohttp](https://docs.aiohttp.org/) - Async HTTP client/server framework
- [asyncio](https://docs.python.org/3/library/asyncio.html) - Asynchronous I/O framework
- [uvloop](https://github.com/MagicStack/uvloop) - Fast asyncio event loop
- [Jinja2](https://jinja.palletsprojects.com/) - Template engine
- [AsyncDB](https://github.com/phenobarbital/asyncdb) - Database connectivity
- [NavConfig](https://github.com/phenobarbital/navconfig) - Configuration management
## ๐ Links
- **PyPI**: https://pypi.org/project/navigator-api/
- **GitHub**: https://github.com/phenobarbital/navigator
- **Issues**: https://github.com/phenobarbital/navigator/issues
- **Discussions**: https://github.com/phenobarbital/navigator/discussions
---
Made with โค๏ธ by the Navigator team. Built for the async future of web development.
Raw data
{
"_id": null,
"home_page": null,
"name": "navigator-api",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": "\"Jesus Lara G.\" <jesuslarag@gmail.com>",
"keywords": "framework, asyncio, uvloop, aiohttp, navigator, web, async",
"author": null,
"author_email": "\"Jesus Lara G.\" <jesuslarag@gmail.com>",
"download_url": null,
"platform": null,
"description": "# \u26a1 Navigator Framework\n\n[](https://pypi.org/project/navigator-api/)\n[](https://pypi.org/project/navigator-api/)\n[](https://github.com/phenobarbital/navigator/blob/main/LICENSE)\n[](https://pepy.tech/project/navigator-api)\n\n> **A batteries-included async web framework built on aiohttp** \ud83d\ude80\n\nNavigator is a next-generation Python framework designed for building high-performance asynchronous APIs and web applications. Built on top of aiohttp and asyncio, it provides enterprise-grade features out of the box with a focus on developer productivity and application scalability.\n\n## \u2728 Key Features\n\n- **\u26a1 Lightning Fast**: Built on aiohttp + uvloop for maximum performance\n- **\ud83d\udd0b Batteries Included**: Authentication, WebSockets, templates, database connections, and more\n- **\ud83c\udfd7\ufe0f Django-style Apps**: Organize code with modular, reusable application components\n- **\ud83c\udf10 Multi-tenant Ready**: Built-in sub-domain support for SaaS applications\n- **\ud83d\udd27 Centralized Config**: Unified configuration management with NavConfig\n- **\ud83d\udd0c Auto-Connections**: Automatic database connection handling with AsyncDB\n- **\ud83d\udcdd Class-based Views**: Powerful CRUD operations with ModelViews\n- **\ud83c\udfaf Extensible**: Plugin architecture for adding custom features\n\n## \ud83d\ude80 Quick Start\n\n### Installation\n\n```bash\n# Using uv (recommended)\nuv add navigator-api[uvloop,locale]\n\n# Using pip\npip install navigator-api[uvloop,locale]\n```\n\n### Create Your First App\n\n```bash\n# Create a new Navigator project\nnav init\n\n# Create an application\nnav app create myapp\n\n# Run the development server\nnav run --debug --reload\n```\n\n### Hello Navigator\n\n```python\n# app.py\nimport asyncio\nimport uvloop\nfrom navigator import Application\nfrom aiohttp import web\n\nasync def hello(request):\n return web.Response(text=\"Hello Navigator! \ud83d\ude80\")\n\nasync def main():\n # Set uvloop as the event loop policy\n asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())\n\n # Create Navigator application\n app = Application(enable_jinja2=True)\n\n # Add routes\n app.router.add_get('/', hello)\n\n # Enable WebSocket support\n app.add_websockets()\n\n # Setup and run\n return app.setup()\n\nif __name__ == '__main__':\n asyncio.run(main())\n```\n\n## \ud83c\udfd7\ufe0f Architecture\n\n### Class-based Views\n\nNavigator provides powerful class-based views for building APIs:\n\n```python\nfrom navigator.views import BaseView, ModelView\nfrom aiohttp import web\nfrom datamodel import BaseModel\n\nclass UserView(BaseView):\n async def get(self):\n return web.json_response({\"users\": []})\n\n async def post(self):\n data = await self.request.json()\n # Process user creation\n return web.json_response({\"status\": \"created\"})\n\n# Model-based CRUD operations\nclass User(BaseModel):\n name: str\n email: str\n age: int\n\nclass UserModelView(ModelView):\n model = User\n path = '/api/users'\n\n # Automatic CRUD operations:\n # GET /api/users - List all users\n # GET /api/users/{id} - Get specific user\n # POST /api/users - Create user\n # PUT /api/users/{id} - Update user\n # DELETE /api/users/{id} - Delete user\n```\n\n### Centralized Configuration\n\nNavigator uses [NavConfig](https://github.com/phenobarbital/navconfig) for unified configuration management:\n\n```python\n# settings/settings.py\nfrom navconfig import config\n\n# Database configuration\nDATABASE_URL = config.get('DATABASE_URL', 'postgresql://user:pass@localhost/db')\n\n# Cache configuration\nREDIS_URL = config.get('REDIS_URL', 'redis://localhost:6379')\n\n# App configuration\nDEBUG = config.getboolean('DEBUG', False)\nSECRET_KEY = config.get('SECRET_KEY', required=True)\n\n# Multiple environment support\nENV = config.get('ENV', 'development') # development, staging, production\n```\n\n### Django-style Applications\n\nOrganize your code with modular applications:\n\n```\nmyproject/\n\u251c\u2500\u2500 apps/\n\u2502 \u251c\u2500\u2500 users/\n\u2502 \u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u2502 \u251c\u2500\u2500 views.py\n\u2502 \u2502 \u251c\u2500\u2500 models.py\n\u2502 \u2502 \u251c\u2500\u2500 urls.py\n\u2502 \u2502 \u2514\u2500\u2500 templates/\n\u2502 \u2514\u2500\u2500 products/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u251c\u2500\u2500 views.py\n\u2502 \u2514\u2500\u2500 models.py\n\u251c\u2500\u2500 settings/\n\u2502 \u2514\u2500\u2500 settings.py\n\u2514\u2500\u2500 main.py\n```\n\n```python\n# apps/users/__init__.py\nfrom navigator.applications import AppConfig\n\nclass UsersConfig(AppConfig):\n name = 'users'\n path = '/api/users'\n\n def ready(self):\n # App initialization code\n pass\n```\n\n### Database Integration\n\nNavigator integrates seamlessly with [AsyncDB](https://github.com/phenobarbital/asyncdb) for database operations:\n\n```python\nfrom navigator.views import ModelView\nfrom asyncdb.models import Model\n\n# Define your model\nclass User(Model):\n name: str\n email: str\n created_at: datetime\n\n class Meta:\n name = 'users'\n schema = 'public'\n\n# Create CRUD API automatically\nclass UserAPI(ModelView):\n model = User\n path = '/api/users'\n\n # Optional: Add custom validation\n async def validate_payload(self, data):\n if 'email' not in data:\n raise ValueError(\"Email is required\")\n return data\n\n # Optional: Add custom callbacks\n async def _post_callback(self, response, model):\n # Send welcome email, log activity, etc.\n pass\n```\n\n### WebSocket Support\n\nReal-time features with built-in WebSocket support:\n\n```python\nfrom navigator import Application\nfrom navigator.services.ws import WebSocketHandler\n\nclass ChatHandler(WebSocketHandler):\n async def on_message(self, message):\n # Broadcast message to all connected clients\n await self.broadcast(message)\n\napp = Application()\napp.add_websockets()\napp.router.add_websocket('/ws/chat', ChatHandler)\n```\n\n## \ud83d\udd0c Extensions\n\nNavigator's extension system allows you to add powerful features:\n\n### Authentication Extension\n\n```python\n# Install: pip install navigator-auth\nfrom navigator_auth import AuthConfig\n\nclass MyApp(Application):\n def configure(self):\n # Add JWT authentication\n self.add_extension(AuthConfig, {\n 'secret_key': 'your-secret-key',\n 'algorithm': 'HS256',\n 'token_expiration': 3600\n })\n```\n\n### Admin Interface\n\n```python\n# Coming soon: Django-style admin interface\nfrom navigator.admin import admin_site\nfrom .models import User, Product\n\nadmin_site.register(User)\nadmin_site.register(Product)\n\napp.include_router(admin_site.router, prefix='/admin')\n```\n\n## \ud83d\udee0\ufe0f CLI Tools\n\nNavigator includes powerful CLI tools for development:\n\n```bash\n# Project management\nnav init # Create new project\nnav app create myapp # Create new application\n\n# Development\nnav run # Start development server\nnav shell # Interactive shell\n\n```\n\n## \ud83d\udce6 Available Extensions\n\nNavigator supports various optional dependencies:\n\n```bash\n# Performance optimizations\nnavigator-api[uvloop] # uvloop for better async performance\n\n# Internationalization\nnavigator-api[locale] # Babel for i18n support\n\n# Caching\nnavigator-api[memcache] # Memcached support\n\n# Production deployment\nnavigator-api[gunicorn] # Gunicorn WSGI server\n\n# All features\nnavigator-api[all] # Install all optional dependencies\n```\n\n## \ud83d\ude80 Deployment\n\n### AWS App Runner\n\nNavigator includes built-in support for AWS App Runner deployment:\n\n```yaml\n# apprunner.yaml\nversion: 1.0\nruntime: python3\nbuild:\n commands:\n build:\n - pip install -r requirements.txt\n - python setup.py build_ext --inplace\nrun:\n runtime-version: '3.11'\n command: 'nav run --port 8080'\n network:\n port: 8080\n env: PORT\n```\n\n### Docker\n\n```dockerfile\nFROM python:3.11-slim\n\nWORKDIR /app\nCOPY requirements.txt .\nRUN pip install -r requirements.txt\n\nCOPY . .\nRUN python setup.py build_ext --inplace\n\nEXPOSE 8000\nCMD [\"nav\", \"run\", \"--port\", \"8000\"]\n```\n\n## \ud83d\udccb Requirements\n\n- **Python**: 3.9+ (3.11+ recommended)\n- **Dependencies**:\n - aiohttp >= 3.10.0\n - asyncio (built-in)\n - uvloop >= 0.21.0 (optional, recommended)\n\n## \ud83e\uddea Testing\n\n```bash\n# Install development dependencies\nuv add --dev pytest pytest-asyncio coverage\n\n# Run tests\npytest\n\n# Run with coverage\npytest --cov=navigator tests/\n```\n\n## \ud83d\udcda Documentation\n\n- **Official Documentation**: [navigator-api.readthedocs.io](https://navigator-api.readthedocs.io) *(coming soon)*\n- **API Reference**: Available in source code docstrings\n- **Examples**: Check the [examples/](examples/) directory\n- **Tutorial**: See [Quick Start](#-quick-start) section above\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Development Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/phenobarbital/navigator.git\ncd navigator\n\n# Create development environment\nuv venv --python 3.11 .venv\nsource .venv/bin/activate\n\n# Install development dependencies\nuv sync --dev\n\n# Install pre-commit hooks\npre-commit install\n\n# Run tests\npytest\n```\n\n## \ud83d\udcdc License\n\nNavigator is licensed under the **BSD 3-Clause License**. See [LICENSE](LICENSE) for details.\n\n## \ud83d\ude4f Credits\n\nNavigator is built on top of these amazing projects:\n\n- [aiohttp](https://docs.aiohttp.org/) - Async HTTP client/server framework\n- [asyncio](https://docs.python.org/3/library/asyncio.html) - Asynchronous I/O framework\n- [uvloop](https://github.com/MagicStack/uvloop) - Fast asyncio event loop\n- [Jinja2](https://jinja.palletsprojects.com/) - Template engine\n- [AsyncDB](https://github.com/phenobarbital/asyncdb) - Database connectivity\n- [NavConfig](https://github.com/phenobarbital/navconfig) - Configuration management\n\n## \ud83d\udd17 Links\n\n- **PyPI**: https://pypi.org/project/navigator-api/\n- **GitHub**: https://github.com/phenobarbital/navigator\n- **Issues**: https://github.com/phenobarbital/navigator/issues\n- **Discussions**: https://github.com/phenobarbital/navigator/discussions\n\n---\n\nMade with \u2764\ufe0f by the Navigator team. Built for the async future of web development.\n",
"bugtrack_url": null,
"license": "BSD-3-Clause",
"summary": "Navigator: a batteries-included Web Framework based on aiohttp",
"version": "2.14.1",
"project_urls": {
"Bug Tracker": "https://github.com/phenobarbital/navigator/issues",
"Changelog": "https://github.com/phenobarbital/navigator/blob/main/CHANGELOG.md",
"Documentation": "https://navigator-api.readthedocs.io",
"Funding": "https://paypal.me/phenobarbital",
"Homepage": "https://github.com/phenobarbital/navigator",
"Repository": "https://github.com/phenobarbital/navigator.git"
},
"split_keywords": [
"framework",
" asyncio",
" uvloop",
" aiohttp",
" navigator",
" web",
" async"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "fee9c3618d4635872a6b90fcd668695e9810a4e64891d6f1495c6690ec74155a",
"md5": "a28631f09d44b9e81e0106f5d5267049",
"sha256": "f92677cbc14271ed5168d81535095c42cd9838d29fbdcfa06571ef270111e600"
},
"downloads": -1,
"filename": "navigator_api-2.14.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"has_sig": false,
"md5_digest": "a28631f09d44b9e81e0106f5d5267049",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 1837543,
"upload_time": "2025-08-20T23:25:35",
"upload_time_iso_8601": "2025-08-20T23:25:35.554827Z",
"url": "https://files.pythonhosted.org/packages/fe/e9/c3618d4635872a6b90fcd668695e9810a4e64891d6f1495c6690ec74155a/navigator_api-2.14.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f6e8c7da95a86f275bc4e8501d9fcd7910ebece0f37a8a43698bcecc8d7f8868",
"md5": "e472bb224e5976528f334f10644c1215",
"sha256": "aa67e1957fc77cc2c6b0a38e48dd0f6ca4ba1b01165e37dc7ea0f91d4f4a8e2d"
},
"downloads": -1,
"filename": "navigator_api-2.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"has_sig": false,
"md5_digest": "e472bb224e5976528f334f10644c1215",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 1933121,
"upload_time": "2025-08-20T23:25:37",
"upload_time_iso_8601": "2025-08-20T23:25:37.977326Z",
"url": "https://files.pythonhosted.org/packages/f6/e8/c7da95a86f275bc4e8501d9fcd7910ebece0f37a8a43698bcecc8d7f8868/navigator_api-2.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "73602ec9c32ef890912bd8bdeac6a188c9ac35e65d341996ee408190c2f3ac48",
"md5": "66103df1e7ddb00cc2bcecf94bf5d7b9",
"sha256": "852e1f427d445898b72a89e71a65c16a7896a4b621e869251c0f40b8da68f03a"
},
"downloads": -1,
"filename": "navigator_api-2.14.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"has_sig": false,
"md5_digest": "66103df1e7ddb00cc2bcecf94bf5d7b9",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 2034519,
"upload_time": "2025-08-20T23:25:39",
"upload_time_iso_8601": "2025-08-20T23:25:39.550152Z",
"url": "https://files.pythonhosted.org/packages/73/60/2ec9c32ef890912bd8bdeac6a188c9ac35e65d341996ee408190c2f3ac48/navigator_api-2.14.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-20 23:25:35",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "phenobarbital",
"github_project": "navigator",
"travis_ci": true,
"coveralls": true,
"github_actions": true,
"tox": true,
"lcname": "navigator-api"
}