typeshed VS pyright

Compare typeshed vs pyright and see what are their differences.

typeshed

Collection of library stubs for Python, with static types (by python)

pyright

Static Type Checker for Python (by microsoft)
Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
typeshed pyright
24 135
4,053 12,006
1.9% 2.2%
9.9 9.8
5 days ago 5 days ago
Python Python
GNU General Public License v3.0 or later GNU General Public License v3.0 or later
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

typeshed

Posts with mentions or reviews of typeshed. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-02-26.
  • What's the point of using `Any` in Union, such as `str | Any`
    1 project | /r/learnpython | 17 Aug 2023
    "csv.pyi is from VS Code Pylance extension" is misleading. Yes, it's included in the code base of the extension, but it's likely originally from python/typeshed. I diffed csv.pyi in the extension and the repository, and they're exactly the same.
  • Importing python libraries "Cannot find implementation or library stub for module named ..."
    1 project | /r/neovim | 5 Jul 2023
    You can check the typeshed library that offers stubs for many packages.
  • Ask HN: Will we see a TypeScript for Python?
    2 projects | news.ycombinator.com | 26 Feb 2023
    https://github.com/python/typeshed is Python's equivalent of DefinitelyTyped. I'm not 100% sure why it's not more of a popular thing the way DefinitelyTyped is; I think there might, to some extent, be different attitudes around the appropriateness of having third-party typings for packages, when the actual maintainer of the package isn't interested in providing first-party ones.
  • Why Type Hinting Sucks!
    7 projects | /r/Python | 10 Feb 2023
    https://github.com/python/mypy same with typeshed https://github.com/python/typeshed
  • When the client's management is happy but their dev team is a pain
    8 projects | /r/ProgrammerHumor | 31 Jan 2023
    Here's the tensorflow type stubs on typeshed. https://github.com/python/typeshed/tree/main/stubs/tensorflow
  • Offer to Type Hint API's, or Start a Statically Typed Python?
    1 project | /r/Python | 25 Jan 2023
    Also, be aware that there is already a central place for stubs files. If you are going to take the time to write one, contributing it there will help everyone if the package owners aren't already including some type hints.
  • Ruby 3.2’s YJIT is Production-Ready
    8 projects | news.ycombinator.com | 17 Jan 2023
    Python's type hints are definitely an improvement and they're getting better all the time, but they're still frustrating to use at anything approaching the edge. I long for something as elegant and functional as TypeScript.

    One hurdle I've stumbled over recently is the question "what is a type?", the answer can be surprising. Unions, for example, are types but not `Type`s. A function that takes an argument of type `Type` will not accept a Union. So if you want to write a function that effectively "casts" a parameter to a specified type, you can't. The best you can do is have an overload that accepts `Type` and does an actual cast, and then another that just turns it into `Any`. This is, in fact, how the standard library types its `cast` function [1]. The argument I've seen for the current behavior is that `Type` describes anything that can be passed to isinstance, but that's not a satisfying answer. Even then, `Union` can be passed to isinstance and still does not work with `Type`. Talk currently is to introduce a new kind of type called `TypeForm` or something to address this, which is certainly an improvement over nothing, but still feels like technical debt.

    [1]: https://github.com/python/typeshed/blob/main/stdlib/typing.p...

  • GitHub stars won't pay your rent
    5 projects | news.ycombinator.com | 9 Nov 2022
    >Ultimately if you care enough about Fody to spend over a hundred dollars worth of your time contributing to it, you probably care enough about Fody to drop them three dollars.

    No, I really don't.

    https://github.com/keepassxreboot/keepassxc/pull/8500 - I was randomly reading keepassxc's manpage and spotted a curious option, spent some time spelunking through the code and history to discover that it was an outdated option, sent a PR.

    https://github.com/python/typeshed/pull/8617 - I converted one of the scripts I use in my DE from shell to Python, saw that VSCode has this new fancy typing support for Python, quickly found a basic bug in the type definitions for the os module, tested a fix locally, sent a PR.

    https://gitlab.gnome.org/GNOME/gtk/-/issues/5250 - I found an issue with copy-paste on my phone, investigated it all the way through to the GTK stack, found the commits that introduced the issue, created a distro patch for it while discussing it with GTK upstream.

    https://gitlab.alpinelinux.org/alpine/aports/-/merge_request... - I noticed that gnome-passwordsafe crashes some times, debugged it to discover that it was missing a dependency, sent a PR to the distro package to update the dependencies.

    etc etc. I've made lots of fixes like these. I have no interest in paying for each and every one of them. The projects are all better off for fixes like mine and gatekeeping them on payment would've been nothing but their loss.

  • Wrapping my head around type hinting
    1 project | /r/learnpython | 19 Oct 2022
    The csv module is one of those standard library modules that doesn't provide its own type hints, but instead gets them through the external typeshed project, and (for compatibility/implementation reasons, I surmise) the name of these types sometimes don't quite align with the objects they correspond to. So, for all intents and purposes, _csv._reader is the correct name of the type that csv.reader() returns, as ugly as it is.
  • Using Mypy in Production
    11 projects | news.ycombinator.com | 22 Aug 2022
    You have to do handling like that in other languages like TypeScript anyway.

    Painpoint with type annotations:

    - not being able to reuse "shapes" of data: TypedDict, NamedTuple, dataclasses.dataclass, and soon kwargs (PEP 692 [1]) all have named, typed fields now. You have to

    - Since there's no generic "shape" structure that works across data types, there isn't a way to load up a JSON / YAML / TOML into a dictionary, upcast it via a `TypedGuard`, and pass it into a TypedDict / NamedTuple / Dataclass. dataclasses.asdict() or dataclasses.astuple() return naive / untyped tuples and dicts. Also the factory functions will not work with TypedDict or NamedTuple, respectively, even if you duplicate the fields by hand. See my post here: https://github.com/python/typeshed/issues/8580

    - Standard library doesn't have runtime validation (e.g. pydantic / https://github.com/pydantic/pydantic).

    - pytest fixtures are hard.

    - Django is hard. PEP 681 may not be a saving grace either. [3]

    [1] https://peps.python.org/pep-0692/

pyright

Posts with mentions or reviews of pyright. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-03-18.
  • Enhance Your Project Quality with These Top Python Libraries
    16 projects | dev.to | 18 Mar 2024
    Pyright is a fast type checker meant for large Python source bases. It can run in a “watch” mode and performs fast incremental updates when files are modified.
  • How to speed up Pyright + eglot.
    1 project | /r/emacs | 11 Nov 2023
    However, I made it faster for my use-case by changing some settings. Neovim allows to have these settings in the setup function for LSP. I was trying to figure out how do I change these settings with doom emacs. Pyright docs suggest to have these settings in pyrightconfig.json.
  • Mypy 1.6 Released
    5 projects | news.ycombinator.com | 17 Oct 2023
    Not exactly what you are looking for but maybe useful to others.

    https://github.com/microsoft/pyright/blob/main/docs/mypy-com...

  • VSCodium – Libre Open Source Software Binaries of VS Code
    10 projects | news.ycombinator.com | 4 Sep 2023
    You can use pyright instead[0]. It is the FOSS version of pyright, but having some features missing.

    [0]: https://github.com/microsoft/pyright

  • How do you enable semantic highlighting for Python?
    4 projects | /r/neovim | 7 Jul 2023
    Unfortunately, pyright explicitly stated that they are not interested in inlay hints or other language server features, that those will only be added to pylance. That's why I added it myself instead of submitting a pull request to pyright. See https://github.com/microsoft/pyright/issues/4325
  • How do I enable an LSP for json files?
    2 projects | /r/neovim | 7 Jul 2023
    return { -- add pyright to lspconfig { "neovim/nvim-lspconfig", ---@class PluginLspOpts opts = { ---@type lspconfig.options servers = { -- Listed servers will be automatically loaded to buffers jsonls = { settings = { json = { format = { enable = true, }, }, validate = { enable = true }, }, }, pyright = { settings = { python = { analysis = { -- https://github.com/microsoft/pyright/blob/main/docs/settings.md autoSearchPaths = false, useLibraryCodeForTypes = true, diagnosticMode = "openFilesOnly", }, }, }, }, }, -- Add folding capability to use LSP for ufo plugin capabilities = { textDocument = { foldingRange = { dynamicRegistration = false, lineFoldingOnly = true, }, }, }, }, }, }
  • VSCode isn't Recognizing installed Python Modules?
    1 project | /r/learnprogramming | 4 Jul 2023
    [{ "resource": "/Documents/Coding/VSCode/Projects/Photoeditor/PhotoEditor.py", "owner": "_generated_diagnostic_collection_name_#0", "code": { "value": "reportMissingModuleSource", "target": { "$mid": 1, "external": "https://github.com/microsoft/pyright/blob/main/docs/configuration.md#reportMissingModuleSource", "path": "/microsoft/pyright/blob/main/docs/configuration.md", "scheme": "https", "authority": "github.com", "fragment": "reportMissingModuleSource" } }, "severity": 4, "message": "Import \"requests\" could not be resolved from source", "source": "Pylance", "startLineNumber": 2, "startColumn": 8, "endLineNumber": 2, "endColumn": 16 }]
  • Pyright does not respect virtualenv (astronvim)
    3 projects | /r/neovim | 24 Jun 2023
    I don't use astro, but you can configure pyright by using a pyrightconfig.json or directly in the LSP configuration.
  • Eglot + pyright can not get completion on django.db.models
    6 projects | /r/emacs | 16 Jun 2023
  • Remote Development, Python IDE.
    1 project | /r/emacs | 17 May 2023
    I prefer jedi over pyright as pyright has crippled documentation support outside of VSCode. I also found jedi is make correct suggestions based on inferred type in some situations where pyright would need type annotation to provide completions, pyright is significantly faster though. Jedi with mypy and flake8 is comparable to pyright I think, but unfortunately mypy wasn't working over tramp. Also isort wasn't working over tramp, but jedi, black, importmagic and flake8 all worked.

What are some alternatives?

When comparing typeshed and pyright you can also consider the following projects:

pyre-check - Performant type-checking for python.

jedi-language-server - A Python language server exclusively for Jedi. If Jedi supports it well, this language server should too.

mypy - Optional static typing for Python

NumPy - The fundamental package for scientific computing with Python.

python-lsp-server - Fork of the python-language-server project, maintained by the Spyder IDE team and the community

flask-parameter-validation - Get and validate all Flask input parameters with ease.

python-language-server - Microsoft Language Server for Python

dactyl-keyboard - Web generator for dactyl keyboards.

coc-jedi - coc.nvim wrapper for https://github.com/pappasam/jedi-language-server

Nuitka - Nuitka is a Python compiler written in Python. It's fully compatible with Python 2.6, 2.7, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, and 3.11. You feed it your Python app, it does a lot of clever things, and spits out an executable or extension module.

pylance-release - Documentation and issues for Pylance