# Hello, Melder **Beginner.** A complete first program, including cleanup. Prerequisites: install Melder, save this as `hello.py`, then run `python hello.py`. ```python import melder as md class Greeter: """A plain class — no base class, no metaclass, no decorator.""" def greet(self) -> str: return "hello from a melded instance" book = md.Spellbook() book.bind(spell=Greeter, existence="unique") with book.conjure() as conduit: greeter: Greeter = conduit.meld("Greeter") print(greeter.greet()) assert conduit.meld("Greeter") is greeter # `unique` → same instance # Leaving the block cleans the root conduit and its owned Spellbook. ``` Expected output: `hello from a melded instance`. The assertion checks reuse; the block exit ends the scope. Your classes stay plain Python. Everything lives on `md.*` — a deep import path is not needed for this workflow. Pass the Python class or callable to `bind`; resolve it by its quoted registered name with `meld("Greeter")`. The tutorials use this name-based lookup throughout. Keep opaque machine identities explicit with `meld(spell_id=...)`. --- ## Runnable examples - [Hello Melder](../examples/hello-melder.md) — Beginner 01 [All beginner examples](../examples/beginner/index.md) · [Level contents](index.md) · [Full contents](../contents.md) [Canonical page source](https://github.com/Synaptic724/melder/blob/4b364a338debcb1c010d0f6e9dcbbabb62945ba0/README.md)