Skip to main content

Cross-platform native UI toolkit for Android and iOS

Project description

PythonNative

Build native Android and iOS apps in Python.

CI Release PyPI Version Python Versions License: MIT Docs

Documentation · Getting Started · Examples · Contributing


Overview

PythonNative is a cross-platform toolkit for building native Android and iOS apps in Python. It provides a declarative, React-like component model with hooks and automatic reconciliation, powered by Chaquopy on Android and rubicon-objc on iOS. Write function components with use_state, use_effect, and friends, just like React, and let PythonNative handle creating and updating native views.

Features

  • Declarative UI: Describe what your UI should look like with element functions (Text, Button, Column, Row, etc.). PythonNative creates and updates native views automatically.
  • Hooks and function components: Manage state with use_state, side effects with use_effect, and navigation with use_navigation, all through one consistent pattern.
  • Typed style prop: Pass all visual and layout properties through a single style dict, fully described by the pn.Style TypedDict and the ergonomic pn.style(...) helper for IDE autocomplete and static checking. Compose reusable styles with StyleSheet.
  • Cross-platform flexbox engine: A pure-Python, Yoga-style layout engine computes frames once and applies them to native views, so flex, padding, aspect_ratio, and position: "absolute" produce the same geometry on Android and iOS.
  • Virtual view tree + reconciler: Element trees are diffed and patched with minimal native mutations, similar to React's reconciliation.
  • Direct native bindings: Python calls platform APIs directly through Chaquopy and rubicon-objc, with no JavaScript bridge.
  • Custom-component SDK: Wrap any platform widget as a first-class element with type-checked props via pythonnative.sdk (Props, @native_component, element_factory). Plugins distributed on PyPI auto-register through the pythonnative.handlers entry-point group.
  • CLI scaffolding: pn init creates a ready-to-run project; pn run android and pn run ios build and launch your app.
  • Native-backed navigation: Declarative Stack, Tab, and Drawer navigators inspired by React Navigation. The root stack drives the platform's native navigation controller (UINavigationController on iOS, AndroidX Navigation Component on Android), so transitions, back gestures, and the hardware back button match what users expect.
  • Fast Refresh hot reload: pn run --hot-reload watches app/ and patches edits into the running app on save, preserving component state across most changes.
  • Bundled templates: Android Gradle and iOS Xcode templates are included, so scaffolding requires no network access.

Quick Start

Installation

pip install pythonnative

Usage

import pythonnative as pn


@pn.component
def App():
    count, set_count = pn.use_state(0)
    return pn.Column(
        pn.Text(f"Count: {count}", style=pn.style(font_size=24, bold=True)),
        pn.Button(
            "Tap me",
            on_click=lambda: set_count(count + 1),
        ),
        style=pn.style(spacing=12, padding=16),
    )

Documentation

Visit docs.pythonnative.com for the full documentation, including getting started guides, platform-specific instructions for Android and iOS, API reference, and working examples.

Contributing

Contributions are welcome. Please see CONTRIBUTING.md for setup instructions, coding standards, and guidelines for submitting pull requests.

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

pythonnative-0.16.0.tar.gz (315.3 kB view details)

Uploaded Source

Built Distribution

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

pythonnative-0.16.0-py3-none-any.whl (296.5 kB view details)

Uploaded Python 3

File details

Details for the file pythonnative-0.16.0.tar.gz.

File metadata

  • Download URL: pythonnative-0.16.0.tar.gz
  • Upload date:
  • Size: 315.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pythonnative-0.16.0.tar.gz
Algorithm Hash digest
SHA256 153998c44c97c51ad58dcbb5046c00f54cf50a2c55bfc4fd38098f451e11667a
MD5 36bb6c964c4b94574c156c71155ed123
BLAKE2b-256 ec9fe33a798e41e65fa31739250d08a754c71513d965eb6bebf6c3aa13e008e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pythonnative-0.16.0.tar.gz:

Publisher: release.yml on pythonnative/pythonnative

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

File details

Details for the file pythonnative-0.16.0-py3-none-any.whl.

File metadata

  • Download URL: pythonnative-0.16.0-py3-none-any.whl
  • Upload date:
  • Size: 296.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pythonnative-0.16.0-py3-none-any.whl
Algorithm Hash digest
SHA256 103783777df9506ea25e20b0c3dc93bfffd9cdf6ded634f489092f6c07cd0732
MD5 9d8d449cd854834e86b42ed580630f78
BLAKE2b-256 76d1d55d1899cc2f2274e76e20ad23a7aa701b44dbac5c8764b8cc9352b0c6c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pythonnative-0.16.0-py3-none-any.whl:

Publisher: release.yml on pythonnative/pythonnative

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