Skip to main content

Hyperclass

Subclass the web.

Hyperclass is an experiment in building interactive web applications as Python class hierarchies.

HTML elements are Python base classes. Python subclasses become CSS classes. Styles follow inheritance. Interaction is ordinary HTTP over WSGI, with htmx in the browser.

from hyperclass import css, div, grid, orange, rem


class card(div):
    style = css(
        display=grid,
        gap=1 * rem,
        padding=1.25 * rem,
        border_radius=0.75 * rem,
    )


class warning_card(card):
    style = css(
        border_color=orange,
        background=orange.fade(0.08),
    )

Calling:

warning_card("Something happened")

would produce ordinary, inspectable HTML:

<div class="card warning-card">Something happened</div>

The Python inheritance hierarchy and the CSS cascade cooperate instead of imitating one another.

The model

Hyperclass treats classes and instances differently:

  • An element's first built-in HTML ancestor determines its tag.
  • Each semantic subclass contributes a CSS class.
  • snake_case class names become kebab-case.
  • Styles are inherited and emitted in method-resolution order.
  • Multiple inheritance composes multiple CSS classes.
  • Classes are also usable as selectors and htmx targets.
  • Instances contain attributes, state, and child content.
class compact:
    style = css(padding=0.5 * rem)


class clickable:
    style = css(cursor="pointer")


class result_card(card, compact, clickable):
    pass

A result_card would render as:

<div class="card compact clickable result-card"></div>

Components

Components are element subclasses with ordinary Python behavior:

from hyperclass import (
    button,
    closest,
    form,
    hidden,
    hx,
    input,
    outer_morph,
    output,
)


class counter(card):
    def __init__(self, value):
        self.value = value

    def content(self):
        yield output(str(self.value))
        yield form(
            input(type=hidden, name="value", value=self.value),
            button("+1", type="submit"),
            hx=hx.post(
                "/counter",
                target=closest(counter),
                swap=outer_morph,
            ),
        )

The class counter simultaneously represents:

  • a Python type;
  • an HTML <div>;
  • the CSS selector .counter;
  • a reusable styled component;
  • a valid htmx target.

WSGI and htmx

Routes return elements directly:

from hyperclass import App

app = App()


@app.get("/")
def index(request):
    return counter(0)


@app.post("/counter")
def increment(request):
    return counter(request.form.int("value") + 1)


if __name__ == "__main__":
    app.run()

The application is a normal WSGI callable. The development server can use Python's standard library; production deployment can use any WSGI server.

htmx supplies browser-to-server interaction without introducing a client-side component runtime. Hyperclass should favor native HTML and CSS for local behavior and use htmx when the server needs to participate.

Principles

  • Python is the authoring language. Control flow, composition, inheritance, and reuse are ordinary Python.
  • The browser remains the browser. Hyperclass emits standard HTML and CSS rather than recreating the DOM on the server.
  • Classes mean classes. Python inheritance has a visible, predictable relationship to HTML classes and the CSS cascade.
  • HTTP is the state boundary. There is no hydration protocol or hidden client component lifecycle.
  • Output should be boring. Generated markup remains readable in View Source and DevTools.
  • Small is a feature. Prefer the standard library, WSGI, and a pinned htmx asset over a large framework stack.

Status

Hyperclass is currently a design exploration. The examples above describe the intended direction, not a released API.

Download files

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

Source Distribution

hyperclass-0.0.1.tar.gz (7.5 kB view details)

Uploaded Source

Built Distribution

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

hyperclass-0.0.1-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

Details for the file hyperclass-0.0.1.tar.gz.

File metadata

  • Download URL: hyperclass-0.0.1.tar.gz
  • Upload date:
  • Size: 7.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for hyperclass-0.0.1.tar.gz
Algorithm Hash digest
SHA256 05d01cd9006f82b1f62019eb58a03c6555ddf39cd598363922a2db48fc74dfe6
MD5 8f2f94a310f85269bf421f027c421978
BLAKE2b-256 dab707b7860891aaccb52ea0c29acee6c19f545081cc32c8c35e776e17435ec1

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperclass-0.0.1.tar.gz:

Publisher: release.yml on grantjenks/python-hyperclass

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

File details

Details for the file hyperclass-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: hyperclass-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 7.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for hyperclass-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8382b402eacb023589d39c1ac3bf24ea91aab4c3fe01c753f33ed3678d3ec80f
MD5 b4e2aac91398c5cae89b5436fc3f654f
BLAKE2b-256 527627abe4a80c6c0adc62e0d57aa3378bfb0471fa62bc02dd0398af7e409907

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperclass-0.0.1-py3-none-any.whl:

Publisher: release.yml on grantjenks/python-hyperclass

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

Release history Release notifications | RSS feed

0.2.0

2 files

0.1.1

2 files

0.1.0

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

This release

0.0.1 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page