Type hints → Web UI. Minimal-boilerplate web apps from Python functions.
FuncToWeb is actively maintained and used in production by myself and the community (featured in Awesome Python). The current version (0.9.x) is stable and production-ready. Version 1.0.0 is in active development with major improvements including function chaining with shared context and cleaner architecture for long-term maintainability. Until then, only critical bug fixes will be released.
pip install func-to-webfrom func_to_web import run
def divide(a: float, b: float):
return a / b
run(divide)Open |
Complete documentation with examples and screenshots for each feature:
|
|
Full Documentation API Reference
- ✅ Rapid Prototyping - From pure Python function to usable web interface in seconds.
- ✅ Image Processing - Upload, process, and download images with PIL/Pillow.
- ✅ Data Science & Reporting - Instantly publish Pandas/Polars DataFrames and matplotlib plots without frontend code.
- ✅ High-Performance File Transfer - Stream uploads and downloads at native network/disk speeds. Handles massive files efficiently with minimal memory footprint.
- ✅ Secure Internal Apps - Admin panels, dashboards, and team tools protected by built-in authentication.
from pathlib import Path
from func_to_web import run
from func_to_web.types import File
desktop_path = Path.home() / "Desktop"
def upload_files(
files: list[File],
):
for f in files:
print(f"Uploaded file: {f}")
return "Files uploaded successfully!"
run(upload_files, auto_delete_uploads=False, uploads_dir=desktop_path)Protect sensitive tools with built-in authentication in one line.
import subprocess
from typing import Literal
from func_to_web import run
# 🔒 MANDATORY: Use HTTPS (Nginx).
def restart_service(service: Literal['nginx', 'gunicorn', 'celery']):
"""Restarts a system service."""
# check=True raises an error shown in the Web UI if the command fails
subprocess.run(["sudo", "supervisorctl", "restart", service], check=True)
return f"✅ Service {service} restarted."
run(restart_service, auth={"admin": "super_secret_password"})Generate QR codes instantly from text.
import qrcode
from func_to_web import run
def make_qr(text: str):
"""Returns a QR code image for the given text."""
return qrcode.make(text).get_image()
run(make_qr)Merge multiple PDF files into a single document instantly.
from io import BytesIO
from pypdf import PdfWriter
from func_to_web import run
from func_to_web.types import DocumentFile, FileResponse
def merge_pdfs(files: list[DocumentFile]):
"""Upload PDFs and get a single merged file back."""
merger = PdfWriter()
for pdf in files:
merger.append(pdf)
output = BytesIO()
merger.write(output)
return FileResponse(data=output.getvalue(), filename="merged.pdf")
run(merge_pdfs)Check the examples/ folder for +20 complete examples (Covers all features)
Core:
- Python 3.10+
- FastAPI, Uvicorn, Pydantic, Jinja2, python-multipart, itsdangerous
Optional (for extended functionality):
- Pillow, Matplotlib, Pandas, NumPy, Polars
Development:
- pytest, mkdocs, mkdocs-material
pytest tests/ -vMIT License • Made by Beltrán Offerrall • Contributions welcome!

