Skip to main content
#  Fapix

**Fapix** is a high-productivity, **Django-inspired** web framework built on top of **FastAPI**, **Tortoise-ORM**, and **Typer**.

It brings the modular structure, built-in CLI automation, and seamless migration workflows of Django into the modern, asynchronous, and lightning-fast Python ecosystem.

---

##  Key Features

* **Django-Style App Architecture:** Modular project layout using `apps/` with automatic model discovery and router registration.
* **DRF-Style ViewSets & Routers:** Declarative `ModelViewSet` classes, dynamic `DefaultRouter`, fine-grained permissions, and custom `@action` decorators located in `fapix.views` and `fapix.decorators`.
* **Built-in Authentication:** Out-of-the-box user models, routes, and CLI user creation tools generated instantly via `fapix startapp auth`.
* **Smart Database Migrations:** Powered by `aerich`, featuring automated model detection, missing migration fallbacks, and single-command upgrades.
* **Built-in Interactive API Tester:** Integrated lightweight API tester (Postman alternative) and WebSocket tester hosted directly at `/tester`.
* **Built-in CLI Automation:** Manage projects, user authentication, migrations, and servers using the `fapix` command-line utility.

---

## 🛠️ Installation

### **Prerequisites**
* **Python:** `3.10+`
* **Database:** SQLite *(Default for development)* or PostgreSQL

---

### **Local Setup**

1. **Clone the repository:**
   ```bash
   git clone https://github.com/devHashim111/fapix
   cd fapix
  1. Create and activate a virtual environment:
# Linux / macOS
python3 -m venv venv
source venv/bin/activate

# Windows
py -m venv venv
venv\Scripts\activate
  1. Install dependencies in editable mode:
pip install -e .
  1. Verify CLI installation:
fapix --help

📖 Quickstart Guide

1️⃣ Create a New Project

Initialize a pre-configured project structure using the Fapix CLI:

fapix startproject myproject
cd myproject

Generated Directory Structure

myproject/
├── main.py            # Application entrypoint & router initialization
├── db_config.py       # Tortoise-ORM configuration & model registry
├── pyproject.toml     # Project metadata & Aerich configuration
└── apps/              # Business logic modules
    └── auth/          # Default otpional auth application 

2️⃣ Setup Built-in Authentication App

Fapix provides a fully pre-built authentication module out of the box (including user models, password hashing, and authentication endpoints). Generate it with:

fapix startapp auth

Since the auth app comes with built-in models, run database migrations immediately to initialize the user tables:

fapix makemigrations
fapix migrate

3️⃣ User & Superuser Management

Manage users directly from your terminal using Fapix CLI commands:

Create a Standard User:

fapix createuser

Create a Superuser (Admin):

fapix createsuperuser

4️⃣ Creating Custom Apps, ViewSets & Routers

Fapix features DRF-style ModelViewSet classes in fapix.views along with permission handlers and @action decorators in fapix.decorators.

Generate a custom app (e.g., product):

fapix startapp product

Defined Model (apps/product/models.py)

from tortoise import fields
from tortoise.models import Model


class Product(Model):
    id = fields.UUIDField(pk=True)
    name = fields.CharField(max_length=100)
    slug = fields.CharField(max_length=100, unique=True)
    description = fields.TextField(null=True)
    price = fields.DecimalField(max_digits=10, decimal_places=2)
    stock = fields.IntField(default=0)
    is_active = fields.BooleanField(default=True)
    created_at = fields.DatetimeField(auto_now_add=True)

    class Meta:
        table = "products"

Defined ViewSet with DRF Parity (apps/product/views.py)

from fapix.views import ModelViewSet
from apps.auth.permissions import IsSuperUser, IsSuperUserOrRole
from .models import Product
from .schemas import (
    ProductSchema,
    ProductCreateSchema,
    ProductUpdateSchema,
    ProductRetrieveSchema,
)


class ProductViewSet(ModelViewSet):
    model = Product
    schema = ProductSchema  # Default response schema

    # Dynamic action schemas
    action_schemas = {
        "create": ProductCreateSchema,
        "update": ProductUpdateSchema,
        "retrieve": ProductRetrieveSchema,
        "bulk_create": ProductCreateSchema,
    }
    lookup_fields = ["slug"]

    # Action-level permissions
    permission_classes = []  # Public read access (list, retrieve)
    action_permissions = {
        "create": [IsSuperUserOrRole("admin")],
        "update": [IsSuperUser],
        "destroy": [IsSuperUser],
        "bulk_create": [IsSuperUser],
        "bulk_delete": [IsSuperUser],
    }

    # Filtering, Searching, & Ordering Configuration
    search_fields = ["name", "description"]
    filterset_fields = ["is_active", "stock"]
    ordering_fields = ["price", "id", "stock"]
    default_ordering = ["-price"]

Defined Function Views with decorators (apps/product/views.py)

from fastapi import FastAPI, Depends
from fapix.decorators import permission_classes, api_view

@api_view
@permission_class([IsAuthenticated])
async def home():
    #Your function goes here

### Another Approach 
from fastapi import FastAPI, Depends
from apps.auth.permissions import IsAuthenticated, IsSuperUser , IsSuperUserOrRole


async def home(
    current_user = Depends(IsAuthenticated())
):
    #Your function goes here

URL Registration & DefaultRouter (apps/product/urls.py)

from fastapi import APIRouter
from fapix.core.router import register_urlpatterns
from fapix.router import DefaultRouter
from . import views

router = APIRouter(prefix="/products", tags=["products"])

# 1. Initialize DefaultRouter and register ViewSets
product_router = DefaultRouter()

product_router.register("", views.ProductViewSet, basename="product")
product_router.register("items", views.ProductWebSocketViewSet, basename="product-ws")

# 2. Combine auto-generated router urlpatterns with explicit endpoints
urlpatterns = [
    # Custom / Manual views
]

# 3. Extend with automatically generated ViewSet patterns
urlpatterns.extend(product_router.generate_urlpatterns())

# 4. Register patterns onto router
register_urlpatterns(router, urlpatterns)

5️⃣ Run Custom Migrations

After defining or modifying Tortoise models in custom apps (like product), generate and apply migrations:

fapix makemigrations
fapix migrate

To target a specific app:

fapix makemigrations product

📌 Self-Healing Engine: If database tables or migration directories are uninitialized, fapix migrate automatically initializes database configurations and syncs missing files before applying schema upgrades.


6️⃣ Run the Development Server

Start the application server using default settings or custom parameters:

Default Execution (Port 8000):

fapix runserver

Custom Port & Log Level:

fapix runserver 9000 --log-level info

7️⃣ Interactive API & WebSocket Tester

Fapix ships with a built-in GUI client (a lightweight alternative to Postman) and an integrated WebSocket tester to exercise generated endpoints.

Access the tools in your browser:

  • 🧪 Interactive Tester (Postman-style UI & WebSockets): http://localhost:8000/tester
  • 🌐 Swagger UI: http://localhost:8000/docs
  • 🌐 ReDoc: http://localhost:8000/redoc

(Note: Replace 8000 with your custom port if configured, e.g., http://localhost:9000/tester).


📄 License

Distributed under the MIT License.


Metadata

Release files for fapix 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fapix 0.1.1
File Size Uploaded
fapix-0.1.1.tar.gz 33.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fapix 0.1.1
File Interpreter ABI Platform
fapix-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 73.0 kB

Release files / fapix-0.1.1.tar.gz

Download URL fapix-0.1.1.tar.gz
Size 33.7 kB
Tags Source
SHA-256 checksum
How to use checksums
d01aff326d729f9363c4cc13ceb5112a1b18d06c52029ca390092d74724c1c9c
BLAKE2b-256 checksum
How to use checksums
7f317de938ac8a77e1f6cb5bfbb0db224e607602da1dc8615da4e62f1ead3b04
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.7

Release files / fapix-0.1.1-py3-none-any.whl

Download URL fapix-0.1.1-py3-none-any.whl
Size 39.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
59889806d704bd1c0f33a2ddd57eedc6ba6c698a4f7a0c7f7edbd1cce45c7d4e
BLAKE2b-256 checksum
How to use checksums
77db6893eee75be1f69d0951cacccf38dac0562aec5a672b05c1ea9cc9786c6e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.7

Release history Release notifications | RSS feed

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page