Getting Started

Mophidian provides a cli tool called moph to streamline the creation of your website. To start you will want to create a new mophidian project. If you ever want to know what a command does or to know what is possible, use moph --help or moph {command} --help

For more on the cli tool see the cli section.

Creating a Project

moph new {project name}

This will create the project in a new directory with the same name as the project name. Mophidian has also has a preset with a page, layout, and a component. This is a good option if you want an example of how a project can be structured. To use the preset use;

moph new {project name} -p|--preset

Development

Now that you have a project you can begin creating your website. The file structure is based on the svelte kit file structure. Each page is in it's own directory and each directory only has one layout. These are the only two pages that have limits per directory. You may write as many static and markdown files in these directories as you want.

You may have noticed that markdown was mentioned. Each markdown file in the source directory, src/pages by default, will be rendered to html. Markdown files use the closest layout file as it's base.

Since Mophidian is a route based SSG, each page is an index.html file is in it's own directory. There can be multiple markdown files in one directory, so how does that fit into this? Well each markdown files get their own directory equal to the name of the file. README markdown files are treated as index.html so be careful when placing page and markdown files in the same directory.

You may only have one page.phml and layout.phml file per directory. page.phml files look like this.

<!-- page.phml -->

<>
    {Your content here}
</>

<!--       or       -->

<{html-tag}>
    {Your content here}
</{html-tag}>

while layout.phml pages are similar they will require a <Slot /> tag. They will look like this.

<!-- layout.phml -->

<>
    {Your content here}
    <Slot />
    {Your content here}
</>

<!--       or       -->

<{html-tag}>
    {Your content here}
    <Slot />
    {Your content here}
</{html-tag}>

Markdown files are normal markdown files but you may also have frontmatter/metadata. The frontmatter should be written in yaml. This data is exposed to the layouts on page render.

---
title: Sample Page Title
pubDate: Thu, 23 May 2023 UTC
tags:
    - sample
    - docs
    - getting_started

---

# Sample Page

Some content here

There are also components which are in the src/components directory by default. They are structure just like the page.phml file. After creating a component it's filename and path are used to create the associated element tag which can be used in any page.phml , layout.phml , markdown, and other component files. All sub directories leading to the component are used in the name and are separated with a . . So if you have a component file named Sample.phml you will get a <Sample> tag to use in all other files. If you have a component file nav/Navbar.phml you will get a <Nav.Navbar /> tag to use in all other files. If you want to use the component like a normal element and not just a self closing element you can add a <Slot /> element where you want all the children to be placed in the component. To see more on how components work, it is recommended to read up on the phml docs as phml's default component system is what is used here in Mophidian.

It may be easier to have more of an example. Suppose you have the file structure of

src/
├ components/
│ └ Sample.phml
└ pages/
  ├ page.phml
  ├ layout.phml
  └ Sample.md

With the files containing

<!-- Sample.phml -->

<div>Component</div>

<!-- layout.phml -->

<>
    <h3>Header</h3>
    <Slot />
</>
<!-- page.phml -->

<>
    <h1>Home</h1>
    <Sample />
<>
# Sample markdown page

Page content

With each page inheriting from it's corresponding layout you get a built output that has the structure of

out/
├ index.html
└ Sample
  └ index.html

and file with the contents of

<!-- out/index.html -->

<!DOCTYPE html>
<html>
    <head>
        ... <!-- See rendering section -->
    </head>
    <body>
        <h3>Header</h3>
        <h1>Home</h1>
        <div>Component</div>
    </body>
</html>
<!-- out/Sample/index.html -->

<!DOCTYPE html>
<html>
    <head>
        ... <!-- See rendering section -->
    </head>
    <body>
        <h3>Header</h3>
        <article>
            <h1>Sample markdown page</h1>
            <p>Page content</p>
        </article>
    </body>
</html>

To view your changes in real time use moph serve and if you want to preview your changes you can use moph preview . To automatically open the website in a browser you may use the -o|--open flag.

To find out more about how the file structure works see the File System section.

Building

To build you project you use moph build . This will incrementally build your site. This means if a rendered output of a page is the same as what was generated in the previous call of moph build , the page will be skipped. You may bypass this feature with the --dirty flag.

By default the built/rendered files will be output to the out/ directory. These files are what you upload to your choice of site hosting.

Summary

Use moph new {project name} to create a new project. Fill your newly creating project with page.phml , layout.phml , and markdown files. Then build your site with moph build .

To learn more about the in depth features of mophidian please read the rest of the documentation.