Skip to main content

Python to Mobile - Write mobile apps in pure Python with DSL

Project description

Python2Mobile (P2M)

Write mobile apps in pure Python with a declarative DSL. P2M generates or runs native/hybrid apps for Android, iOS, and Web.

Features

  • Python DSL - Write UI and logic in familiar Python syntax
  • Tailwind-like Styling - Use CSS class names for mobile styling
  • Hot Reload - See changes instantly during development
  • Multi-LLM Support - OpenAI, Claude, Ollama, or any OpenAI-compatible API
  • Multiple Targets - Generate React Native or Flutter code
  • DevServer - Preview apps in browser before building

Quick Start

pip install python2mobile

# Create a new app
p2m new myapp
cd myapp

# Run in development mode (hot reload)
p2m run

# Build for production
p2m build --target android
p2m build --target ios
p2m build --target web

Example App

from p2m.core import Render
from p2m.ui import Container, Text, Button

def click_button():
    print("Button clicked!")

def create_view():
    container = Container(class_="bg-gray-100 min-h-screen flex items-center justify-center")
    inner = Container(class_="text-center space-y-6 p-8 bg-white rounded-2xl shadow-lg")
    
    text = Text("Welcome to P2M", class_="text-gray-800 text-2xl font-bold")
    button = Button(
        "Click Me",
        class_="bg-blue-600 text-white font-semibold py-3 px-8 rounded-xl hover:bg-blue-700",
        on_click=click_button
    )
    
    inner.add(text).add(button)
    container.add(inner)
    return container.build()

def main():
    Render.execute(create_view)

if __name__ == "__main__":
    main()

Configuration

Create a p2m.toml file:

[project]
name = "MyApp"
version = "0.1.0"
entry = "main.py"

[build]
target = ["android", "ios", "web"]
generator = "flutter"  # or "react-native"
llm_provider = "openai"  # openai | anthropic | ollama | openai-compatible
llm_model = "gpt-4o"
output_dir = "./build"
cache = true

[devserver]
port = 3000
hot_reload = true
mobile_frame = true

[style]
system = "tailwind"

LLM Configuration

OpenAI

[llm.openai]
api_key = "sk-..."
model = "gpt-4o"

Claude (Anthropic)

[llm.anthropic]
api_key = "sk-ant-..."
model = "claude-3-opus-20240229"

Ollama (Local)

[llm.ollama]
base_url = "http://localhost:11434"
model = "llama2"

OpenAI Compatible

[llm.custom]
base_url = "https://api.example.com/v1"
api_key = "your-api-key"
model = "your-model-name"
x_api_key = "optional-header"

Architecture

┌─────────────────────────────────────────────────────┐
│                   DEVELOPER                         │
│              writes in Python P2M                   │
└──────────────────────┬──────────────────────────────┘
                       │
          ┌────────────▼────────────┐
          │      p2m CLI            │
          │  (p2m run / p2m build)  │
          └────────────┬────────────┘
                       │
         ┌─────────────┴──────────────┐
         │                            │
    ┌────▼────┐                 ┌─────▼──────┐
    │ p2m run │                 │ p2m build  │
    │ (dev)   │                 │ (prod)     │
    └────┬────┘                 └─────┬──────┘
         │                            │
    ┌────▼────────────┐        ┌──────▼───────────┐
    │ P2M Runtime     │        │  AI Code Generator│
    │ - AST Parser    │        │  - LLM Integration│
    │ - Safe Eval     │        │  - React Native   │
    │ - HTML Renderer │        │  - Flutter        │
    │ - Hot Reload    │        │  - Web            │
    └────┬────────────┘        └──────┬───────────┘
         │                            │
    ┌────▼────────────┐        ┌──────▼───────────┐
    │ Web Visualizer  │        │ /build/           │
    │ localhost:3000  │        │  android/         │
    │ Mobile Preview  │        │  ios/             │
    └─────────────────┘        │  web/             │
                               └──────────────────┘

Project Structure

p2m/
├── __init__.py
├── cli.py                    # CLI entry point
├── config.py                 # Configuration management
├── core/
│   ├── __init__.py
│   ├── runtime.py           # Python runtime engine
│   ├── ast_walker.py        # AST analysis
│   ├── render_engine.py     # Component tree → HTML
│   ├── hot_reload.py        # File watcher
│   └── event_bridge.py      # JS ↔ Python bridge
├── ui/
│   ├── __init__.py
│   ├── components.py        # Base components
│   ├── layouts.py           # Layout components
│   └── styles.py            # Style system
├── devserver/
│   ├── __init__.py
│   ├── server.py            # FastAPI server
│   ├── templates.py         # Jinja2 templates
│   └── websocket_handler.py # WebSocket bridge
├── llm/
│   ├── __init__.py
│   ├── base.py              # Base LLM interface
│   ├── openai_provider.py   # OpenAI integration
│   ├── anthropic_provider.py # Claude integration
│   ├── ollama_provider.py   # Ollama integration
│   └── factory.py           # LLM factory
├── build/
│   ├── __init__.py
│   ├── generator.py         # Code generator
│   ├── react_native.py      # React Native templates
│   ├── flutter.py           # Flutter templates
│   └── cache.py             # Build cache
└── utils/
    ├── __init__.py
    ├── logger.py            # Logging
    └── validators.py        # Validation

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python2mobile-0.1.5.tar.gz (78.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python2mobile-0.1.5-py3-none-any.whl (92.7 kB view details)

Uploaded Python 3

File details

Details for the file python2mobile-0.1.5.tar.gz.

File metadata

  • Download URL: python2mobile-0.1.5.tar.gz
  • Upload date:
  • Size: 78.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for python2mobile-0.1.5.tar.gz
Algorithm Hash digest
SHA256 9a8304d0a26f92f19470f350a0e55bf22220ad8cfcb5a13153a753eb045f2f85
MD5 abd5975d9aa56872e7facfb514631d89
BLAKE2b-256 58d285f3e27e94bb2309dd5fd963d46590d04eed99a7166e52b2baa9440f04af

See more details on using hashes here.

Provenance

The following attestation bundles were made for python2mobile-0.1.5.tar.gz:

Publisher: publish.yml on alvaro-brito/python2mobile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python2mobile-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: python2mobile-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 92.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for python2mobile-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 9e39115d5aae09514aa306f9cc1a5e46d2b734a19fb464feb3f3c694458302c9
MD5 20f6f6c0d06a8bea61b8d424cc137700
BLAKE2b-256 d0412bbfeed20c684bb8e924b6e00246f004c06bafc3b8909a934543ff63ba09

See more details on using hashes here.

Provenance

The following attestation bundles were made for python2mobile-0.1.5-py3-none-any.whl:

Publisher: publish.yml on alvaro-brito/python2mobile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page