ADVERTISEMENT

'Hamnet' delivers a haunting period drama

Published Feb 21, 2026 10:57 am
First off, if you imagine the movie as a biopic akin to Deliver Me From Nowhere, where Shakespeare spends the movie dealing with his pain as he writes and rewrites his masterwork, Hamlet, you are in for a surprise.
Hamnet isn’t for everyone. The first two-thirds of the movie play out powerfully but somewhat slowly, and for some, it may be difficult to wait for the payoff in the last third, where everything comes together.
A scene from 'Hamnet' (Images courtey Focus Features)
A scene from 'Hamnet' (Images courtey Focus Features)
Based on the bestselling 2020 novel of the same name by Maggie O’Farrell, Hamnet is the highly fictionalized account of William Shakespeare’s loss of his son Hamnet, and how it eventually led to the creation of one of his most enduring tragedies, Hamlet.
Directed by Oscar Winner Chloé Zhao, we follow Will (Paul Mescal) from the point where he meets his future wife, Agnes (Jessie Buckley) while working as a Latin tutor for her little brothers. He is bewitched by her, and not long after, they consummate their mutual affection, leading to their first child, Susana.
Bewitched being the operative word, as Agnes isn’t the simple country lass that the world expects her to be. Said to be the daughter of a forest witch, she has an uncanny connection to nature and knowledge about things that make her a bit of an outsider.
It doesn’t take long before you realize that this is more a movie about her than it is about William Shakespeare. Not that Paul Mescal drops the ball, but Agnes is such a fierce and commanding persona, carried by a solid, riveting performance from Buckley, that Agnes simply dominates whenever she is onscreen. She is the emotional core of the film, far from a secondary figure, but a lead in her own right, at the very least equal to The Bard himself.
As time passes, the couple is blessed with a set of twins, and while this is an occasion to celebrate, it also casts a shadow on their lives. Agnes had foreseen two children with her on her deathbed, so having three obvious points to tragedy.
Hamnet is ultimately a story about loss, grief, and memory. Agnes retreats into anger, her feelings of guilt and abandonment overwhelming her. Not knowing how else to process his feelings of hopelessness and guilt, Will wrestles with it the only way he knows how, with his words.
At first, the idea of a play horrifies Agnes. Upon watching from the crowd, she screams with indignation at the gall of strangers speaking her son’s name. But as the play continues, she begins to see things through Will’s eyes, and it helps her confront her own anger and loss. Up there in front of her is her son, at least the idealized memory of him, in name and in spirit, participating in one of his father’s plays as he had always wanted to do. Slowly, she sees that the play is not a cheap exploitation of her son but a memorial to him.
And as a play that is to be performed and shared repeatedly, Hamnet’s memory will continue. His absence is less painful now that, for Agnes, he will never be completely forgotten. His memory will persist, and their grief, hers and Will’s, is now easier to bear because it is shared.
"Hamnet" is showing exclusively at Ayala Cinemas.
ADVERTISEMENT
.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1561_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1562_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1563_widget.title }}

{{ articles_filter_1564_widget.title }}

.mb-article-details { position: relative; } .mb-article-details .article-body-preview, .mb-article-details .article-body-summary{ font-size: 17px; line-height: 30px; font-family: "Libre Caslon Text", serif; color: #000; } .mb-article-details .article-body-preview iframe , .mb-article-details .article-body-summary iframe{ width: 100%; margin: auto; } .read-more-background { background: linear-gradient(180deg, color(display-p3 1.000 1.000 1.000 / 0) 13.75%, color(display-p3 1.000 1.000 1.000 / 0.8) 30.79%, color(display-p3 1.000 1.000 1.000) 72.5%); position: absolute; height: 200px; width: 100%; bottom: 0; display: flex; justify-content: center; align-items: center; padding: 0; } .read-more-background a{ color: #000; } .read-more-btn { padding: 17px 45px; font-family: Inter; font-weight: 700; font-size: 18px; line-height: 16px; text-align: center; vertical-align: middle; border: 1px solid black; background-color: white; } .hidden { display: none; }
function initializeAllSwipers() { // Get all hidden inputs with cms_article_id document.querySelectorAll('[id^="cms_article_id_"]').forEach(function (input) { const cmsArticleId = input.value; const articleSelector = '#article-' + cmsArticleId + ' .body_images'; const swiperElement = document.querySelector(articleSelector); if (swiperElement && !swiperElement.classList.contains('swiper-initialized')) { new Swiper(articleSelector, { loop: true, pagination: false, navigation: { nextEl: '#article-' + cmsArticleId + ' .swiper-button-next', prevEl: '#article-' + cmsArticleId + ' .swiper-button-prev', }, }); } }); } setTimeout(initializeAllSwipers, 3000); const intersectionObserver = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const newUrl = entry.target.getAttribute("data-url"); if (newUrl) { history.pushState(null, null, newUrl); let article = entry.target; // Extract metadata const author = article.querySelector('.author-section').textContent.replace('By', '').trim(); const section = article.querySelector('.section-info ').textContent.replace(' ', ' '); const title = article.querySelector('.article-title h1').textContent; // Parse URL for Chartbeat path format const parsedUrl = new URL(newUrl, window.location.origin); const cleanUrl = parsedUrl.host + parsedUrl.pathname; // Update Chartbeat configuration if (typeof window._sf_async_config !== 'undefined') { window._sf_async_config.path = cleanUrl; window._sf_async_config.sections = section; window._sf_async_config.authors = author; } // Track virtual page view with Chartbeat if (typeof pSUPERFLY !== 'undefined' && typeof pSUPERFLY.virtualPage === 'function') { try { pSUPERFLY.virtualPage({ path: cleanUrl, title: title, sections: section, authors: author }); } catch (error) { console.error('ping error', error); } } // Optional: Update document title if (title && title !== document.title) { document.title = title; } } } }); }, { threshold: 0.1 } ); function showArticleBody(button) { const article = button.closest("article"); const summary = article.querySelector(".article-body-summary"); const body = article.querySelector(".article-body-preview"); const readMoreSection = article.querySelector(".read-more-background"); // Hide summary and read-more section summary.style.display = "none"; readMoreSection.style.display = "none"; // Show the full article body body.classList.remove("hidden"); } document.addEventListener("DOMContentLoaded", () => { let loadCount = 0; // Track how many times articles are loaded const offset = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Offset values const currentUrl = window.location.pathname.substring(1); let isLoading = false; // Prevent multiple calls if (!currentUrl) { console.log("Current URL is invalid."); return; } const sentinel = document.getElementById("load-more-sentinel"); if (!sentinel) { console.log("Sentinel element not found."); return; } function isSentinelVisible() { const rect = sentinel.getBoundingClientRect(); return ( rect.top < window.innerHeight && rect.bottom >= 0 ); } function onScroll() { if (isLoading) return; if (isSentinelVisible()) { if (loadCount >= offset.length) { console.log("Maximum load attempts reached."); window.removeEventListener("scroll", onScroll); return; } isLoading = true; const currentOffset = offset[loadCount]; window.loadMoreItems().then(() => { let article = document.querySelector('#widget_1690 > div:nth-last-of-type(2) article'); intersectionObserver.observe(article) loadCount++; }).catch(error => { console.error("Error loading more items:", error); }).finally(() => { isLoading = false; }); } } window.addEventListener("scroll", onScroll); });

Sign up by email to receive news.