The limit that is almost always there
Some of the best-known WordPress calendar plugins — The Events Calendar and Sugar Calendar among them — keep recurring events for their paid tier, while others include them. It is worth checking before you commit: repetition is the feature that turns a calendar from a list into a schedule, and every venue, gym and course provider needs it. A free tier without it is a demonstration rather than a product.

Other limits to watch for: a cap on how many events you can create, a month view reserved for the paid version, an “upgrade” notice on every admin screen, or a free tier that works for thirty days. None of these are dishonest, but they are worth knowing about before you build a page around the plugin.
What a finished free plugin looks like
It has no counter and no countdown. Its recurring events are complete rather than partial — not just “every week”, but “the second Tuesday”, “the last Friday”, “twelve times”, “until June”, and the ability to cancel or move one occurrence without disturbing the rest. It renders a month view and a list. It lets your visitors subscribe to the calendar in their own app. And it does not follow you around the admin with an upgrade notice on every screen.
That is the standard the free plugin here is built to. A venue with a fortnightly quiz night, or a studio with three classes a week, can use it indefinitely without paying anything, and nothing in it ever counts down, locks or stops working. That is not generosity; it is the belief that a free tier which is not a real product does not earn any trust worth having.
What is not free here
One thing: pulling events in from a calendar you keep somewhere else. If your schedule lives in Google Calendar or Outlook and you want the website to follow it automatically, that is the paid part. The reason is that it is the part with ongoing cost — feed formats change, providers change their exports, and somebody has to keep up with it.
Everything you can do by typing events into WordPress, you can do for nothing, permanently.
Two things to check on any free plugin before you commit
First, its listing on WordPress.org: the last-updated date and the WordPress version it is tested against. A calendar that has not been touched in a year is a calendar whose timezone handling is already a year out of date.
Second, its support forum. Not the star rating — the ratio of threads opened to threads resolved. A free plugin whose author has stopped replying is free in the same way an abandoned building is free.