Prose

Prose is a small language for describing systems as a field guide.

It names what exists, describes it in plain language, and shows how things relate. It does not execute or enforce behavior. It simply makes a world visible.

Below is a complete universe. You can read it top to bottom.

A universe

universe ClockworkVillage {
  describe {
    A quiet village where time passes only when you act.
  }

  dimension timeOfDay {
    describe {
      A day is separated by distinct times.
    }

    relationship follows and isFollowedBy {
      describe {
        Times of day move forward in sequence.
      }
    }
  }

  timeOfDay Morning { }
  timeOfDay Afternoon { }
  timeOfDay Evening { }
  timeOfDay Night { }

  concept Chicken {
    describe {
      Chickens wander the village and lay eggs.
    }
  }

  concept ChickenCoop {
    describe {
      A small wooden structure where chickens sleep at night.
    }
  }

  concept Fox {
    describe {
      Foxes are quiet predators that hunt when the village is dark.
    }
  }

  relationship canOccurDuring and canBeWhile { }
  relationship canOccurWhere and canBeWhere { }
  relationship canOccurWith and canParticipateIn { }

  concept ChickenRaid {
    describe {
      A fox enters a chicken coop and eats the chickens inside.
    }

    relationships {
      canOccurDuring {
        timeOfDay.Evening
        timeOfDay.Night
      }

      canOccurWhere { ChickenCoop }
      canOccurWith  { Fox }
    }
  }
}

A universe describes a world.

It names things. It describes them. It shows how they relate.


Describe

describe {
  A small wooden structure where chickens sleep at night.
}

Everything can be described.

Descriptions are the meaning of the world.


Concept

concept Chicken { }

A concept names something that exists.

Concepts can be nested.

concept Well {
  concept Rope { }
}

Dimension

dimension timeOfDay { }

timeOfDay Evening { }
timeOfDay Night   { }

A dimension groups related concepts.

Dimensions are lowercase. Concepts are named.


Relationship

relationship follows and isFollowedBy { }

A relationship can be used to describe how things connect.


Relationships

relationships {
  occursAt   { Well }
  occursWith { Fox }
}

Relationships describe how something connects to others.

You only need to declare one side. The other is always available.


Scope

relationships {
  occursAt { Well }
}

Names resolve locally first.

If not found, prose looks upward.

You can always be explicit:

occursAt { ClockworkVillage.Well }

Relates

relates Fox and ChickenCoop {
  relationships {
    avoids { ChickenCoop }
  }
}

A relates block describes how two concepts connect.


What prose is

Prose is a field guide.

It describes a world. It does not run it.


Continue

  • Read sprig to see how systems participate
  • Read docs to see the documentation home

Prose describes a world. Sprig shows how systems respond to it.