<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/are-you-really-expected-to-run-five-type-checkers-now--3ncqbm5pg" -->

---
title: Are you really expected to run five type-checkers now?
description: With five Python type-checkers now in common use (mypy, Pyrefly, Pyright, ty, Zuban), library maintainers are advised to prioritize running as many...
canonical: https://daily.dev/posts/are-you-really-expected-to-run-five-type-checkers-now--3ncqbm5pg
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Are you really expected to run five type-checkers now? | daily.dev
og:description: With five Python type-checkers now in common use (mypy, Pyrefly, Pyright, ty, Zuban), library maintainers are advised to prioritize running as many...
og:url: https://daily.dev/posts/are-you-really-expected-to-run-five-type-checkers-now--3ncqbm5pg
og:image: https://api.daily.dev/og/posts/3ncqBM5PG.png
og:image:alt: Are you really expected to run five type-checkers now?
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Are you really expected to run five type-checkers now?

**[Pyrefly: A Fast Python Type Checker and Language Server \| Pyrefly](https://daily.dev/sources/pyrefly)** · 5 min read · 0 upvotes · 0 comments

## Summary

With five Python type-checkers now in common use (mypy, Pyrefly, Pyright, ty, Zuban), library maintainers are advised to prioritize running as many type-checkers as possible over their test suite rather than their source code, since that verifies the public API works across checkers without polluting internals with type-ignore comments. The reasoning is illustrated through Pyrefly's work adding type-checking to the Polars dataframe library, including a case where satisfying mypy, Pyrefly, and ty on one function required four separate type-ignore comments. At minimum, maintainers should run one type-checker on their source code, choosing based on where they want to sit on the strict-vs-lenient spectrum.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://pyrefly.org/blog/too-many-type-checkers>

## Questions this post answers

### Should I run mypy, Pyrefly, Pyright, ty, and Zuban all on my library's source code?

Running all five type-checkers on source code is not recommended because it often requires polluting the codebase with multiple type-ignore comments for the same line, since checkers disagree on edge cases. A better approach is running as many type-checkers as possible on the test suite to validate the public API, and running just one strict checker, such as Pyrefly, on the source code itself.

_daily.dev surfaces practical takes like this for developers deciding how to structure their type-checking workflow._

### Why does Polars DataType.__eq__ need multiple type-ignore comments across type-checkers?

Because __eq__ must return bool by convention but Polars' implementation returns different types depending on input, requiring overloads, and satisfying mypy, Pyrefly, and ty simultaneously needed four separate type-ignore comments across just seven lines of code. This illustrates why type-checking source code with multiple checkers can quickly clutter a codebase.

_Developers weighing type-checker tradeoffs on real codebases can follow cases like this on daily.dev._

## Similar posts on daily.dev

- [Python Type Checker Comparison: Typing Spec Conformance](https://daily.dev/posts/python-type-checker-comparison-typing-spec-conformance-yvjkxqkwd) · Hacker News · 1 upvotes · 0 comments
- [Pyrefly Now Type Checks PyTorch – PyTorch](https://daily.dev/posts/pyrefly-now-type-checks-pytorch-pytorch-adohlgdfc) · PyTorch · 0 upvotes · 0 comments
- [What's type-coverage, and why should I care?](https://daily.dev/posts/what-s-type-coverage-and-why-should-i-care--br4v8jndh) · Pyrefly: A Fast Python Type Checker and Language Server \| Pyrefly · 0 upvotes · 0 comments
- [Pyrefly 1.0: A fast, forward-looking Python linter](https://daily.dev/posts/pyrefly-1-0-a-fast-forward-looking-python-linter-k4vukcqpr) · InfoWorld · 0 upvotes · 0 comments

---

Tags: [#python](https://daily.dev/tags/python), [#polars](https://daily.dev/tags/polars)

[View this post on daily.dev](https://daily.dev/posts/are-you-really-expected-to-run-five-type-checkers-now--3ncqbm5pg)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Are you really expected to run five type-checkers now?","url":"https://daily.dev/posts/are-you-really-expected-to-run-five-type-checkers-now--3ncqbm5pg","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/are-you-really-expected-to-run-five-type-checkers-now--3ncqbm5pg"},"datePublished":"2026-08-23T12:17:04.862Z","dateModified":"2026-08-23T12:19:58.866Z","description":"With five Python type-checkers now in common use (mypy, Pyrefly, Pyright, ty, Zuban), library maintainers are advised to prioritize running as many...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/ce7cceb523e1bdb0e6d2d6310d2d101d?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/ce7cceb523e1bdb0e6d2d6310d2d101d?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Pyrefly: A Fast Python Type Checker and Language Server | Pyrefly","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Pyrefly: A Fast Python Type Checker and Language Server | Pyrefly","logo":"https://media.daily.dev/image/upload/s--Qzw5NpnF--/c_limit,w_256/f_auto,q_auto/v1787487420/logos/pyrefly?_a=BAMAMicg0","url":"https://daily.dev/sources/pyrefly"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/are-you-really-expected-to-run-five-type-checkers-now--3ncqbm5pg","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"python,polars","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Pyrefly: A Fast Python Type Checker and Language Server | Pyrefly","item":"https://daily.dev/sources/pyrefly"},{"@type":"ListItem","position":3,"name":"Are you really expected to run five type-checkers now?"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/are-you-really-expected-to-run-five-type-checkers-now--3ncqbm5pg#faq","mainEntity":[{"@type":"Question","name":"Should I run mypy, Pyrefly, Pyright, ty, and Zuban all on my library's source code?","acceptedAnswer":{"@type":"Answer","text":"Running all five type-checkers on source code is not recommended because it often requires polluting the codebase with multiple type-ignore comments for the same line, since checkers disagree on edge cases. A better approach is running as many type-checkers as possible on the test suite to validate the public API, and running just one strict checker, such as Pyrefly, on the source code itself. daily.dev surfaces practical takes like this for developers deciding how to structure their type-checking workflow."}},{"@type":"Question","name":"Why does Polars DataType.__eq__ need multiple type-ignore comments across type-checkers?","acceptedAnswer":{"@type":"Answer","text":"Because __eq__ must return bool by convention but Polars' implementation returns different types depending on input, requiring overloads, and satisfying mypy, Pyrefly, and ty simultaneously needed four separate type-ignore comments across just seven lines of code. This illustrates why type-checking source code with multiple checkers can quickly clutter a codebase. Developers weighing type-checker tradeoffs on real codebases can follow cases like this on daily.dev."}}]}
```

