<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/the-mypy-blog-mypy-1-17-released-kfp0hnzf4" -->

---
title: The Mypy Blog: Mypy 1.17 Released | daily.dev
description: Mypy 1.17 has been released, adding an optional exhaustiveness check for match statements (--enable-error-code exhaustive-match), numerous fixes to attribute...
canonical: https://daily.dev/posts/the-mypy-blog-mypy-1-17-released-kfp0hnzf4
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: The Mypy Blog: Mypy 1.17 Released | daily.dev
og:description: Mypy 1.17 has been released, adding an optional exhaustiveness check for match statements (--enable-error-code exhaustive-match), numerous fixes to attribute...
og:url: https://daily.dev/posts/the-mypy-blog-mypy-1-17-released-kfp0hnzf4
og:image: https://api.daily.dev/og/posts/kFp0Hnzf4.png
og:image:alt: The Mypy Blog: Mypy 1.17 Released
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.

# The Mypy Blog: Mypy 1.17 Released

**[mypy - Optional Static Typing for Python](https://daily.dev/sources/mypy-lang)** · 7 min read · 0 upvotes · 0 comments

## Summary

Mypy 1.17 has been released, adding an optional exhaustiveness check for match statements (--enable-error-code exhaustive-match), numerous fixes to attribute resolution and nondeterministic type inference, and mypyc improvements to generators and async functions along with early, unsafe support for free-threaded Python 3.14 builds. The release drops support for targeting Python 3.8 (now requires 3.9+, since typeshed dropped 3.8 after its EOL in October 2024), deprecates the now-unnecessary --force-uppercase-builtins flag, and adds initial testing support for Python 3.14. Stubgen and numerous miscellaneous bug fixes round out the release.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://mypy-lang.blogspot.com/2025/07/mypy-117-released.html>

## Questions this post answers

### How do I make mypy error when a match statement isn't exhaustive?

Enable the exhaustive-match error code with --enable-error-code exhaustive-match, added in mypy 1.17. This generates an error for unhandled cases in a match statement without needing to add an explicit assert_never(...) call, for example flagging an unhandled enum member like Color.BLUE in a match over Color values.

_Track new mypy error codes like this on daily.dev as your type-checking setup evolves._

### Does mypy 1.17 still support checking code targeting Python 3.8?

No, mypy 1.17 removes support for targeting Python 3.8 entirely and now requires --python-version 3.9 or greater. If 3.8 is still specified, mypy defaults to the oldest supported version instead. This change was made because typeshed stopped supporting Python 3.8 after its end of life in October 2024.

_daily.dev helps developers stay ahead of dependency EOL changes like this before upgrades break CI._

### Is mypyc's free-threaded Python 3.14 support production ready?

No, mypyc has only partial, memory-unsafe, and lightly tested support for free-threaded 3.14 builds as of mypy 1.17. Limitations include free threading only working when compiling a single module at a time, no efficient native thread synchronization primitives beyond the threading module, and some workloads not scaling well across threads.

_Developers evaluating free-threaded Python can follow tooling maturity updates like this on daily.dev._

## Similar posts on daily.dev

- [The Mypy Blog: Mypy 2.4 Released](https://daily.dev/posts/the-mypy-blog-mypy-2-4-released-frfrx4bzr) · mypy - Optional Static Typing for Python · 1 upvotes · 0 comments
- [PyCoder’s Weekly](https://daily.dev/posts/pycoder-s-weekly-zx7icnueg) · Planet Python · 2 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: [#general-programming](https://daily.dev/tags/general-programming), [#python](https://daily.dev/tags/python)

[View this post on daily.dev](https://daily.dev/posts/the-mypy-blog-mypy-1-17-released-kfp0hnzf4)

```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":"The Mypy Blog: Mypy 1.17 Released","url":"https://daily.dev/posts/the-mypy-blog-mypy-1-17-released-kfp0hnzf4","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/the-mypy-blog-mypy-1-17-released-kfp0hnzf4"},"datePublished":"2026-08-23T12:17:25.557Z","dateModified":"2026-08-23T12:20:15.598Z","description":"Mypy 1.17 has been released, adding an optional exhaustiveness check for match statements (--enable-error-code exhaustive-match), numerous fixes to attribute...","image":"https://media.daily.dev/image/upload/s--VDukGCjf--/f_auto/v1722860399/public/Placeholder%2002","thumbnailUrl":"https://media.daily.dev/image/upload/s--VDukGCjf--/f_auto/v1722860399/public/Placeholder%2002","isAccessibleForFree":true,"articleSection":"mypy - Optional Static Typing for Python","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":"mypy - Optional Static Typing for Python","logo":"https://media.daily.dev/image/upload/logos/placeholder.jpg","url":"https://daily.dev/sources/mypy-lang"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/the-mypy-blog-mypy-1-17-released-kfp0hnzf4","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"general-programming,python","timeRequired":"PT7M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"mypy - Optional Static Typing for Python","item":"https://daily.dev/sources/mypy-lang"},{"@type":"ListItem","position":3,"name":"The Mypy Blog: Mypy 1.17 Released"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/the-mypy-blog-mypy-1-17-released-kfp0hnzf4#faq","mainEntity":[{"@type":"Question","name":"How do I make mypy error when a match statement isn't exhaustive?","acceptedAnswer":{"@type":"Answer","text":"Enable the exhaustive-match error code with --enable-error-code exhaustive-match, added in mypy 1.17. This generates an error for unhandled cases in a match statement without needing to add an explicit assert_never(...) call, for example flagging an unhandled enum member like Color.BLUE in a match over Color values. Track new mypy error codes like this on daily.dev as your type-checking setup evolves."}},{"@type":"Question","name":"Does mypy 1.17 still support checking code targeting Python 3.8?","acceptedAnswer":{"@type":"Answer","text":"No, mypy 1.17 removes support for targeting Python 3.8 entirely and now requires --python-version 3.9 or greater. If 3.8 is still specified, mypy defaults to the oldest supported version instead. This change was made because typeshed stopped supporting Python 3.8 after its end of life in October 2024. daily.dev helps developers stay ahead of dependency EOL changes like this before upgrades break CI."}},{"@type":"Question","name":"Is mypyc's free-threaded Python 3.14 support production ready?","acceptedAnswer":{"@type":"Answer","text":"No, mypyc has only partial, memory-unsafe, and lightly tested support for free-threaded 3.14 builds as of mypy 1.17. Limitations include free threading only working when compiling a single module at a time, no efficient native thread synchronization primitives beyond the threading module, and some workloads not scaling well across threads. Developers evaluating free-threaded Python can follow tooling maturity updates like this on daily.dev."}}]}
```

