Lilya Converter¶
Convert FastAPI codebases into Lilya using deterministic rules, explicit diagnostics, and reproducible reports.
Documentation: https://lilya-converter.dymmond.com 📚
Source Code: https://github.com/dymmond/lilya-converter 💻
The official supported version is always the latest released.
Installation¶
Start Here¶
What You Get¶
- Deterministic conversion outputs.
- Rule-level diagnostics and reports.
- Dry-run and unified diff previews.
- Verification checks after conversion.
Quick Command Preview¶
# Analyze
# lilya-converter analyze ./fastapi_project --json
# Convert with preview
# lilya-converter convert ./fastapi_project ./lilya_project --dry-run --diff
# Persist reports
# lilya-converter convert ./fastapi_project ./lilya_project --report ./reports/convert.json
# lilya-converter verify ./lilya_project --report ./reports/verify.json
# Mapping introspection
# lilya-converter map rules
# lilya-converter map applied ./reports/convert.json
Conversion Preview¶
FastAPI input:¶
from fastapi import APIRouter, FastAPI
from fastapi.responses import ORJSONResponse, PlainTextResponse
app = FastAPI(openapi_url=None)
router = APIRouter()
@router.api_route(
"/payload",
methods=["PATCH"],
response_class=ORJSONResponse,
response_model=dict,
responses={404: {"description": "missing"}},
status_code=201,
)
async def payload():
return {"value": 1}
@router.trace("/trace", include_in_schema=False)
async def trace_route():
return PlainTextResponse("trace")
app.include_router(router)
Lilya output:¶
from lilya.apps import Lilya as FastAPI
from lilya.responses import PlainText as PlainTextResponse
from lilya.routing import Router as APIRouter
app = FastAPI(enable_openapi=False)
router = APIRouter()
@router.route("/payload", methods=["PATCH"])
async def payload():
return {"value": 1}
@router.route("/trace", include_in_schema=False, methods=["TRACE"])
async def trace_route():
return PlainTextResponse("trace")
app.include(path="", app=router)
