---
created:
  source_filename: /home/runner/work/mknodes/mknodes/.venv/lib/python3.14t/site-packages/anyenv/async_run.py
  source_function: run_sync.<locals>.wrapper
  source_line_no: 52
hide:
- toc
title: Welcome to MkNodes
---

[![PyPI Latest Version](https://img.shields.io/pypi/v/mknodes.svg)](https://pypi.org/project/mknodes/)
[![Package status](https://img.shields.io/pypi/status/mknodes.svg)](https://pypi.org/project/mknodes/)
[![Package status](https://codecov.io/gh/phil65/mknodes/branch/main/graph/badge.svg)](https://codecov.io/gh/phil65/mknodes/)

!!! quote ""
    !!! example ""
        !!! bug ""
            !!! danger ""
                !!! failure ""
                    !!! warning ""
                        !!! question ""
                            !!! success ""
                                !!! tip ""
                                    !!! info ""
                                        !!! abstract ""
                                            !!! note ""
                                                !!! info ""
                                                    ``` {.py  title='get_started_section.py' linenums='1' hl_lines='14'}
                                                    import typing

                                                    import mknodes as mk
                                                    from mknodes.data import datatypes
                                                    from mknodes.manual.a_quick_tour import a_quick_tour


                                                    nav = mk.MkNav("Get started")


                                                    @nav.route.page("Welcome to MkNodes", hide="toc", is_homepage=True)
                                                    def _(page: mk.MkPage) -> None:
                                                        page += mk.MkShields(["version", "status", "codecov"])
                                                        fn_code = mk.MkCode.for_file(__file__)
                                                        node = mk.MkAdmonition(content=fn_code, title="")
                                                        for i in typing.get_args(datatypes.AdmonitionTypeStr):
                                                            node = mk.MkAdmonition(content=node, typ=i, title="")
                                                        page += node


                                                    @nav.route.page("Installation", hide="toc", icon="grommet-icons:install")
                                                    def _(page: mk.MkPage) -> None:
                                                        page += mk.MkInstallGuide()


                                                    @nav.route.page("Why should I use MkNodes?", hide="toc", icon="ri:question-line")
                                                    def _(page: mk.MkPage) -> None:
                                                        page += mk.MkTemplate("why_mknodes.jinja")


                                                    @nav.route.page("A quick node tour", hide="toc", icon="ic:outline-tour")
                                                    def _(page: mk.MkPage) -> None:
                                                        page.metadata.render_macros = True
                                                        a_quick_tour(page)


                                                    @nav.route.page("Changelog", icon="format-list-group")
                                                    def _(page: mk.MkPage) -> None:
                                                        page += mk.MkChangelog()

                                                    ```












