Templates are .cvr files compiled to PHP. {{ }} escapes, {! !} does not, and the directives are @layout, @section, @yield, @if, @each, @empty, @notempty, @include, @php, @hook, @csrf and @asset.
@layout('theme::layouts/main')

@section('title'){{ $thing['name'] }}@endsection

@section('content')
  @if($mayEdit)
    <a href="/edit">Edit</a>
  @endif

  @empty($rows)
    <p>Nothing here yet.</p>
  @endempty

  @each ($rows as $row)
    @include('example::front/partials/row', ['row' => $row])
  @endeach

  @hook('example.index.bottom')
@endsection

🚨 {{ $x }} escapes and {! $x !} does not. Use the second only for markup your own code produced — a rendered post body, never anything that came from a form.

@notempty is the opposite of @empty; @php ... @endphp runs PHP; {# ... #} is a comment that does not reach the browser. @csrf goes in every POST form and @asset('/assets/...') emits a cache-busting URL.

Templates are addressed as module::path/name — the Templates/ directory and the .cvr are implied.

Sign in to say whether this helped.