diff --git a/src/SingletonProvider/TwigEnvironmentProvider.php b/src/SingletonProvider/TwigEnvironmentProvider.php
index 359d265369edcddc5151a9233bba0bca6befc146..848fa197be75ab33ba47c9967058741ca7abc8ff 100644
--- a/src/SingletonProvider/TwigEnvironmentProvider.php
+++ b/src/SingletonProvider/TwigEnvironmentProvider.php
@@ -15,9 +15,12 @@ use Distantmagic\Resonance\SingletonCollection;
 use Distantmagic\Resonance\SingletonContainer;
 use Distantmagic\Resonance\SingletonProvider;
 use Distantmagic\Resonance\TwigChainLoader;
+use Psr\Log\LoggerInterface;
 use Symfony\Component\Filesystem\Filesystem;
+use Symfony\Component\Finder\Finder;
 use Twig\Cache\FilesystemCache;
 use Twig\Environment as TwigEnvironment;
+use Twig\Error\Error;
 use Twig\Extension\ExtensionInterface;
 
 /**
@@ -29,6 +32,7 @@ final readonly class TwigEnvironmentProvider extends SingletonProvider
 {
     public function __construct(
         private ApplicationConfiguration $applicationConfiguration,
+        private LoggerInterface $logger,
         private TwigChainLoader $twigChainLoader,
     ) {}
 
@@ -43,6 +47,8 @@ final readonly class TwigEnvironmentProvider extends SingletonProvider
             $twigEnvironment->addExtension($twigExtensionAttribute->singleton);
         }
 
+        $this->warmupCache($twigEnvironment);
+
         return $twigEnvironment;
     }
 
@@ -71,4 +77,37 @@ final readonly class TwigEnvironmentProvider extends SingletonProvider
 
         return new FilesystemCache($cacheDirectory, FilesystemCache::FORCE_BYTECODE_INVALIDATION);
     }
+
+    private function warmupCache(TwigEnvironment $twigEnvironment): void
+    {
+        $viewsDirectory = DM_APP_ROOT.'/views';
+
+        if (!is_dir($viewsDirectory)) {
+            return;
+        }
+
+        $finder = new Finder();
+        $found = $finder
+            ->files()
+            ->ignoreDotFiles(true)
+            ->ignoreUnreadableDirs()
+            ->ignoreVCS(true)
+            ->in($viewsDirectory)
+        ;
+
+        foreach ($found as $file) {
+            $relativePathname = $file->getRelativePathname();
+
+            try {
+                $twigEnvironment->load($relativePathname);
+            } catch (Error $error) {
+                $this->logger->warning(sprintf(
+                    'twig_cache_warmup_error("%s", %d): %s',
+                    $relativePathname,
+                    $error->getTemplateLine(),
+                    $error->getMessage()
+                ));
+            }
+        }
+    }
 }