Skip to main content

A stupidly easy way to build Android and desktop apps in Python, on top of Flet.

Project description

Artemis

Artemis is a lightweight, opinionated layer on top of Flet for building Android and desktop apps in Python with less boilerplate. If you are already comfortable writing Python and want to ship native-feeling applications without switching stacks, this project is designed to feel familiar.

The goal is simple: give you a compact API for the parts of app development that tend to repeat in every project—routing, app shell behavior, state updates, dialogs, themed widgets, and navigation—while still letting you drop down to Flet when you need more control.

import artemis as art

app = art.App("Hello", theme="ocean")

@app.page("/")
def home(page):
    return art.Column([
        art.Title("Hello, Artemis"),
        art.Button("Say hi", on_click=lambda e: print("hi!")),
    ], center=True)

app.run()

That same Python file can be run locally and later built for Android or desktop with Flet tooling underneath.

Installation

Install Artemis from PyPI with:

pip install artemis-ui

Once installed, import it in Python as:

import artemis as art

If you are working from a local checkout of the repository instead of the published package, you can install it in editable mode with:

cd artemis
pip install -e .

If you see ModuleNotFoundError: No module named 'artemis', the package is not visible to the interpreter. In practice, that usually means one of these happened:

  • the package was not installed
  • the install was run from the wrong directory
  • you launched the example from inside the examples/ folder instead of the project root

A reliable local workflow is:

cd artemis
pip install -e .
python examples/counter.py

Mental model

Artemis is intentionally small. The core concepts are:

  • One App instance per application.
  • Pages are Python functions decorated with @app.page("/route").
  • State is managed through art.State(...).
  • UI updates are triggered by changing state values rather than manually calling page.update().
  • Text inputs are handled specially so focus and cursor position are preserved.

This makes the library feel more like a Pythonic app framework than a thin wrapper around Flet primitives.

What Artemis adds on top of Flet

Flet gives you low-level controls. Artemis gives you a more productive app-shell experience for the common cases:

  • app.go("/details") pushes a real navigation view with back handling.
  • app.bottom_nav([...]) creates a persistent tab bar for root-level navigation.
  • art.Box(glass=True) and art.Box(gradient=[...]) provide common visual patterns without manually constructing Flet effects.
  • app.toast("Saved!") gives you snackbar-style feedback in one line.

This is especially useful for small-to-medium internal tools, business apps, and prototypes where you want a polished UI without writing a lot of glue code.

Available widgets and helpers

Artemis currently includes wrappers for common UI building blocks such as:

  • Text, Title, Button, Input, Switch, Checkbox, Slider, Dropdown
  • Column, Row, Box, Card, Spacer, Divider, Image
  • BottomNav, ListTile, Avatar, Loader, ProgressBar
  • App, State, toast, alert(), and confirm()

If a control is not yet wrapped, you can still use Flet directly through import flet or art.flet, and Artemis widgets return standard Flet controls so the two can interoperate cleanly.

Themes

Artemis ships with built-in palettes such as indigo, sunset, forest, ocean, grape, amber, slate, and rose. You can also provide your own hex color as theme="#22D3EE".

Theme selection is handled through Material 3-inspired seed colors, so light mode, dark mode, contrast, and hover states are derived automatically. Use App(..., dark_mode=True/False) to override the system preference if needed.

Branding and assets

A new Artemis app will add branding assets to your project’s assets/ directory when you first run it. These include:

  • logo.png for the default branding image
  • icon.png for the installed app icon expected by Flet builds
  • logo.ico for the Windows dev-preview window icon

If you want to override the defaults, place your own logo.png in assets/ or configure the app like this:

app = art.App("My App", logo="brand.png")
app.run(assets_dir="static")

If Pillow is installed, Artemis can also generate a matching .ico automatically from your custom PNG.

Examples

The repository includes a few small reference apps:

  • examples/counter.py — demonstrates simple state handling and auto-redraw behavior
  • examples/todo.py — shows dynamic lists, text input binding, and checkboxes
  • examples/showcase.py — demonstrates navigation, bottom navigation, glass panels, gradients, and toast messages
  • examples/contacts.py — demonstrates lists, avatars, loaders, progress bars, and dialogs

Run one of them with:

python examples/counter.py

Build for Android and desktop

Artemis does not replace Flet’s build pipeline. Once your app is ready, you can use Flet’s own build commands:

flet build apk      # Android
flet build ipa       # iOS
flet build macos      # macOS
flet build windows      # Windows
flet build linux      # Linux

Current limitations

This is still an early release, so the API is intentionally focused. A few things to keep in mind:

  • page redraws happen on state-driven updates, which is simple and effective for typical apps but not ideal for very large data sets
  • routes are currently flat strings such as / and /settings
  • bottom navigation is designed for a single tab level
  • widget coverage is still intentionally narrow and will grow over time

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

artemis_app-0.1.0-py3-none-any.whl (65.6 kB view details)

Uploaded Python 3

File details

Details for the file artemis_app-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: artemis_app-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 65.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.3

File hashes

Hashes for artemis_app-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6d2b1cce22a28ed6c3a6db98a92de5018df58f2580f412ff05959cb9bef206e5
MD5 99e365f408dc289e4647b170b3eab3b1
BLAKE2b-256 b21317c641c95108bffe3d423a31b4ecad79b2afeb0be5779997e03da91e90e6

See more details on using hashes here.

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