Skip to content

PythonNative Roadmap (v0.2.0 → v0.10.0)

This roadmap focuses on transforming PythonNative into a workable, React Native / Expo-like framework from a developer-experience and simplicity standpoint. Releases are incremental and designed to be shippable, with DX-first improvements balanced with platform capability.

Assumptions - Scope: Android (Chaquopy/Java bridge) and iOS (Rubicon-ObjC), Python 3.9–3.12 - Goals: Zero-config templates, one CLI, fast iteration loop, portable component API, and a curated subset of native capabilities with room to expand.

Guiding Principles - Single CLI for init/run/build/clean. - Convention over configuration: opinionated project layout (app/, pythonnative.json, requirements.txt). - Hot reload (where feasible) and rapid feedback. - Stable component API; platform shims kept internal. - Progressive enhancement: start with a minimal but complete loop, add breadth and depth over time.

Milestones

0.2.0 — Foundations: DX Baseline and Templates - CLI - pn init: generate project with app/, pythonnative.json, requirements.txt, .gitignore. - pn run android|ios: scaffold template apps (from bundled zips), copy app/, install requirements, build+install/run. - pn clean: remove build/ safely. - Templates - Bundle templates/android_template.zip and templates/ios_template.zip into package to avoid network. - Ensure Android template uses Kotlin+Chaquopy; iOS template uses Swift+PythonKit+Rubicon. - Core APIs - Stabilize Page, StackView, Label, Button, ImageView, TextField, TextView, Switch, ProgressView, ActivityIndicatorView, WebView with consistent ctor patterns. - Add utils.IS_ANDROID fallback detection improvements. - Docs - Getting Started (one page), Hello World, Concepts: Components, Guides: Android/iOS quickstart. - Roadmap (this page). Contributing.

Success Criteria - New user can: pn init → pn run android → sees Hello World UI; same for iOS.

0.3.0 — Navigation and Lifecycle - API - Page navigation abstraction with push/pop (Android: Activity/Fragment shim, iOS: UINavigationController). - Lifecycle events stabilized and wired from host to Python (on_create/start/resume/pause/stop/destroy). - Templates - Two-screen sample demonstrating navigation and parameter passing. - Docs - Navigation guide with examples.

Success Criteria - Sample app navigates between two pages on both platforms using the same Python API.

0.4.0 — Layout and Styling Pass - API - Improve StackView configuration: axis, spacing, alignment; add ScrollView wrapping helpers. - Add lightweight style API (padding/margin where supported, background color, text color/size for text components). - DX - Component property setters return self for fluent configuration where ergonomic. - Docs - Styling guide and component property reference.

Success Criteria - Build complex vertical forms and simple horizontal layouts with predictable results on both platforms.

0.5.0 — Developer Experience: Live Reload Loop - DX - pn dev android|ios: dev server watching app/ with file-sync into running app. - Implement soft-reload: trigger Python module reload and page re-render without full app restart where possible. - Fallback to fast reinstall when soft-reload not possible. - Templates - Integrate dev menu gesture (e.g., triple-tap or shake) to trigger reload. - Docs - Dev workflow: live reload expectations and caveats.

Success Criteria - Edit Python in app/, trigger near-instant UI update on device/emulator.

0.6.0 — Forms and Lists - API - ListView cross-platform wrapper with simple adapter API (Python callback to render rows, handle click). - Input controls: DatePicker, TimePicker, basic validation utilities. - Add PickerView parity or mark as experimental if iOS-first. - Performance - Ensure cell reuse on Android/iOS to handle 1k-row lists smoothly. - Docs - Lists guide, forms guide with validation patterns.

Success Criteria - Build a basic todo app with a scrollable list and an add-item form.

0.7.0 — Networking, Storage, and Permissions Primitives - API - Simple fetch-like helper (thin wrapper over requests/URLSession with threading off main UI thread). - Key-value storage abstraction (Android SharedPreferences / iOS UserDefaults). - Permission prompts helper (camera, location, notifications) with consistent API returning futures/promises. - DX - Background threading utilities for long-running tasks with callback to main thread. - Docs - Data fetching, local storage, permissions cookbook.

Success Criteria - Build a data-driven screen that fetches remote JSON, caches a token, and requests permission.

0.8.0 — Theming and Material Components (Android parity), iOS polish - API - Theme object for colors/typography; propagate defaults to components. - Material variants: MaterialButton, MaterialProgress, MaterialSearchBar, MaterialSwitch stabilized. - iOS polishing: ensure UIKit equivalents’ look-and-feel is sensible by default. - DX - Dark/light theme toggling hook. - Docs - Theming guide with examples.

Success Criteria - Switch between light/dark themes and see consistent component styling across screens.

0.9.0 — Packaging, Testing, and CI - CLI - pn build android|ios: produce signed (debug) APK/IPA or x archive guidance; integrate keystore setup helper for Android. - pn test: run Python unit tests; document UI test strategy (manual/host-level instrumentation later). - Tooling - Add ruff/black/mypy default config and pn fmt, pn lint wrappers. - Docs - Release checklist; testing guide.

Success Criteria - Produce installable builds via pn build; run unit tests with a single command.

0.10.0 — Plugin System (Early) and Project Orchestration - Plugins - Define pythonnative.plugins entry point allowing add-ons (e.g., Camera, Filesystem) to register platform shims. - pn plugin add : scaffold plugin structure and install dependency. - Orchestration - Config-driven pythonnative.json: targets, app id/name, icons/splash, permissions, minSDK/iOS version. - Asset pipeline: copy assets to correct platform locations. - Docs - Plugin authoring guide; configuration reference.

Success Criteria - Install a community plugin and use it from Python without touching native code.

Backlog and Stretch (post-0.10) - Cross-platform navigation stack parity (Fragments vs Activities, or single-activity multi-fragment on Android). - Advanced layout (ConstraintLayout/AutoLayout helpers) with declarative constraints. - Gesture/touch handling unification, animations/transitions. - Expo-like over-the-air updates pipeline. - Desktop/web exploration via PyObjC/Qt bridges (research).

Breaking Changes Policy - Pre-1.0: Minor versions may include breaking changes; provide migration notes and deprecation warnings one release ahead when possible.

Tracking and Releases - Each milestone will have a GitHub project board and labeled issues. - Changelogs maintained per release; upgrade guides in docs.