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.4.tar.gz (76.7 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.4-py3-none-any.whl (91.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: python2mobile-0.1.4.tar.gz
  • Upload date:
  • Size: 76.7 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.4.tar.gz
Algorithm Hash digest
SHA256 90e0ec77319a82908a70fffd8d29c877aa0441bacbfe11ed0ec04291413e7373
MD5 fe3a6ad4b1228aa739901dc79313cd09
BLAKE2b-256 995347b4301a70b8d5f916a767628a95da5e53d0c0f0a6d6092e6acc60582c5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for python2mobile-0.1.4.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.4-py3-none-any.whl.

File metadata

  • Download URL: python2mobile-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 91.1 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 8000913c8bc54eb6459e9fef51980f007866021b40dd873a63d026faaaea1d9a
MD5 e5d575336f5cf29eb1b600a347baa153
BLAKE2b-256 21957d9d1a1ce39f2cd09b64337acac98e75c7376dbf6d7dfe60e279d8e5670b

See more details on using hashes here.

Provenance

The following attestation bundles were made for python2mobile-0.1.4-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