ByBrian Tallerico,
a film critic with over 20 years of experience covering movies and TV.He is the president of the Chicago Film Critics Association, the co-producer of the Chicago Critics Film Festival, and managing editor of RogerEbert.com.
Waitress.Photo: Fox Searchlight/Everett Collection
This post is updated frequently as movies leave and enter Hulu. *New additions are indicated with an asterisk.
Everyone needs a good laugh every now and then, probably more than ever in the 2020s. Hulu’s catalog is packed with television and arthouse critical darlings, so it can be hard to leaf through it when you just want something to take the edge off the day. That’s why we’re here. This regularly updated blend of comedy classics, indie films you may not have seen, and newer laugh generators is all you need when it’s time to escape.
How We Pick Our Films
Critic Brian Tallerico watches and writes about movies and TV every day. To curate this list, he dives into Hulu’s comedy catalogue every month to surface laugh-out-loud funny titles — using his taste and a lifetime of cinema study as his guide, instead of whatever the algorithm happens to be pushing. After triple-checking to make sure they’re still available, he watches each and writes his recommendation. We highlight more than just the crowdpleasers: Comedy can be a venue to present interesting ideas, make an impact on cinema, and change our culture. Read on to find something to watch.
Another Round
Year: 2020 Runtime: 1 hour, 57 minutes Director: Thomas Vinterberg
The Oscar winner for Best International Film in 2021 features one of the best performances ever from the great Mads Mikkelsen. The Hannibal star plays a teacher who decides, with a group of three friends, to be a little drunk all the time. Bored and unmotivated by life, they try an experiment wherein they have a small blood alcohol content at all times. At first, it goes well. It doesn’t end well. Not everything here works but it’s a likable film that features a killer ending.
Ilana Glazer of Broad City is hysterical in this pregnancy comedy about a single woman who gets knocked up on a one-night stand, only for her baby daddy to drop dead. After deciding to have the baby, she turns to a best friend, played by Michelle Buteau, for comfort, but she’s busy with her own family and work. The great Pam Adlon directs this fearless examination of friendship and fertility.
Year: 2022 Runtime: 1h 54m Director: Martin McDonagh
One of the best films of 2022 and a multiple Oscar nominee last year, this dark comedy is already on streaming services, less than a year after its release. Colin Farrell does career-best work as a hapless Irishman who discovers that his best friend, played by Brendan Gleeson, doesn’t want to talk to him anymore. A film about how neighbors become enemies feels particularly timely in the currently fractured world, and this one is brilliant, funny, and moving.
Adam Sandler’s feature comedy debut is over a quarter-century old! Now that everyone feels ancient, take the nostalgic pick-me-up and watch this goofy comedy that announced the SNL star as a major movie talent. It really defined his man-child persona, one that he’s still working to this day.
Netflix may have all those new Adam Sandler comedies, but let’s not forget the classics. Go back to the beginning, watching what is still Sandler’s funniest movie overall. Forever quotable and still funny twenty-five years later, Happy Gilmore now seems to be the comedy landmark of this phase of the Sandman’s career.
Margot Robbie should have won the Oscar for playing Tonya Harding in this tonal highwire act. More than just a biopic or the true crime story of the 1994 attack on Nancy Kerrigan, Gillespie’s film is an interrogation of sports and celebrity culture. Centering it all is Robbie’s performance, one of the most challenging and impressive of the 2010s.
The fact that Searchlight is now a part of Disney, who also owns Hulu, has been paying off for subscribers. Just take the fact that one of the most acclaimed films of Cannes 2024 hit the streaming services less than four months after its premiere. A trilogy of stories that all star Jesse Plemons, Emma Stone, and Willem Dafoe (among others), this is Yorgos back in dark comedy mode. In other words, for fans of The Lobster.
Year: 2019 Runtime: 2h 5m Director: Jonathan Levine
Seth Rogen and Charlize Theron have great comedic chemistry in this rom-com about a journalist who ends up working for the Secretary of State, who happens to be his former babysitter. Theron can quite simply do anything, and she works well with Rogen and a smart script by Dan Sterling and Liz Hannah.
Year: 1993 Runtime: 2h 5m Director: Chris Columbus
Remember when Robin Williams was one of the biggest stars in the world? Relive those days with one of his biggest flicks, this comedy about a man who dresses up like a housekeeper to spend more time with his children. The script is pretty mediocre, but Williams throws himself into every scene in a way that made it an instant hit. He always gave his all.
Year: 1992 Runtime: 1h 59m Director: Jonathan Lynn
Joe Pesci may be the titular character in this hit 1992 comedy, but it’s Marisa Tomei who walked away with it to such a degree that she won an Oscar. After two New Yorkers are tried for a murder that they didn’t commit deep in the heartland, Pesci’s Vinny has to go to the country to get them off. The city vs. country dynamic gets fresh life thanks to the film’s big heart and perfect coming timing of its entire cast.
Andy Samberg and Cristin Milioti are wonderful in this charming sci-fi rom-com about a pair of people caught up in a time loop and forced to live the same wedding day they’re attending over and over again. This is the kind of comedy gem that got a little screwed by the pandemic, forced to premiere on Hulu when it should have played to packed, laughing crowds in theaters first.
Emma Stone took home a second Oscar for her fearless portrayal of Bella Baxter in the latest mind-bender from the director of The Lobster and The Favourite. Bella is the Frankenstein-esque creation of a mad scientist (Willem Dafoe), who teaches her the way of the world, until she discovers sex and her own identity. Visually stunning, it’s like nothing else on Hulu. Or anywhere really.
Year: 2023 Runtime: 1h 22m Director: Raine Allen Miller
The best romantic comedy in years premiered at Sundance in January 2023 and is already on Hulu. David Jonsson and Vivian Oparah star in a film that’s reminiscent of Before Sunrise in the way it captures two people meeting and walking through a city as they slowly fall in love. Heartbroken, creative people, these characters are so incredibly likable in a film that has a sharp, brilliant screenplay, and stunning use of setting. The world around these people comes so vibrantly to life that it almost feels like a character.
Some would call this a thriller instead but it’s really close to being a romantic comedy at the same time. Whatever you call it, just watch it. It’s one of the best films of 2023, a two-hander between a future CEO (Christopher Abbott) and the longtime dominatrix (Margaret Qualley) that he’s trying to fire. Abbott and Qualley do some of the best work of their already notable careers in a film that’s unpredictable, twisted, and, yes, funny.
Year: 2004 Runtime: 2h 7m Director: Alexander Payne
An adaptation of the novel of the same name by Rex Pickett, this comedy is the most successful project of Alexander Payne’s career. One of the reasons for that is the perfect casting of Paul Giamatti as Miles Raymond, a depressed teacher who goes on a wine trip with his buddy Jack (Thomas Haden Church) as they try to find actual happiness. It’s a clever film that’s deeply relatable.
Year: 2002 Runtime: 1h 40m Director: Jay Chandrasekhar
A lot of the other Broken Lizard movies push their way through the revolving door of streaming services, but the cult comedy classic that really broke the troupe is actually kind of rare. So take the opportunity to watch a stoner comedy that has held up remarkably well in the two-decades-plus since its release.
Year: 2023 Runtime: 1h 35m Director: Molly Gordon, Nick Lieberman
Something like a modern Waiting for Guffman, this Sundance hit lovingly parodies life at theater camps with a bunch of cast members who know a few things about how to stage a musical performance. Ben Platt, Noah Galvin, Molly Gordon, Jimmy Tatro, Ayo Edebiri, and more star in one of those comedies that feels destined to produce future stars. In particular, Galvin and Tatro are hysterical here in a movie that will work better for anyone who used to be a theater kid.
A Best Picture nominee and Palme d’Or winner, Triangle of Sadness is the one of the biggest international critical darlings of 2022. From the writer/director of Force Majeure, this is the story of a model couple on a boat trip from Hell, a journey that goes so disastrously wrong that social lines are blurred forever. It’s a sharp commentary on the haves and have-nots with fun performances from Harris Dickinson, Dolly de Leon, Woody Harrelson, and more.
Waitress is the best comedy on Hulu that you probably haven’t seen, the kind of character-driven and sweet piece of storytelling that they just don’t make much anymore. Keri Russell is wonderful as a woman dealing with an unwanted pregnancy while in an awful marriage. It’s such a charmer that it was adapted into a Tony-nominated musical.
The partnership between Neon and Hulu continues to pay off for subscribers as the streamer is the exclusive home of one of the most acclaimed films of 2021 in this Best Original Screenplay and Best Foreign Language Film Oscar nominee. Renate Reinsve is stunning as a young woman named Julie who navigates career, love, and life in a film that’s funny, moving, and true.
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(4),auth=require(12),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(1),appendLandingPageParams=require(135),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),auth.isSubscriber()&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"1":1,"4":4,"12":12,"124":124,"135":135}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(406),Fingerprint2=require(408),DS=require(407),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(406),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"406":406,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]