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.3.tar.gz (73.9 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.3-py3-none-any.whl (88.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: python2mobile-0.1.3.tar.gz
  • Upload date:
  • Size: 73.9 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.3.tar.gz
Algorithm Hash digest
SHA256 8a5a307db87aaa6100d36f186ccfde0bbc21937ac2952230df03710689314f36
MD5 8edade4060c62357a424550fd9587999
BLAKE2b-256 196c68be76fb05cd29a2298c0fbb9dc5dd000d3147b9f019f793c50a53cbe4da

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: python2mobile-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 88.4 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 3d956ff16ab9f8e291c51827afc05ee68d151924a3d944473843c498f4403e39
MD5 aaecc08dd4b60252494cf35671e22d01
BLAKE2b-256 3d62baeaa355389465e422696eb1ad5697e389d3b7c9f39b452462c2829fe1fb

See more details on using hashes here.

Provenance

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