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.2.tar.gz (68.0 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.2-py3-none-any.whl (82.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: python2mobile-0.1.2.tar.gz
  • Upload date:
  • Size: 68.0 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.2.tar.gz
Algorithm Hash digest
SHA256 6f85548078ba05cc8f1fc59c7e2ec5f5c7e83eaee797c084590c091d39cfdf14
MD5 8910d1984d5631b0755bbae60d16144e
BLAKE2b-256 55b98327b94b8574e6429e8a2a43f69d5743f1f49716910b0844c39da45d89b5

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: python2mobile-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 82.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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e1748522555d3b674562eb8a94a2abeb646bf63280b6415f2a11f7f9c0cf00bd
MD5 f873c469f78ac5eb8cbd1bd6390c2ff1
BLAKE2b-256 cf3f45b58c6d278d47406443f2a6105584ca6cf77dc37de803041a06274b3837

See more details on using hashes here.

Provenance

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