# propcache

> Accelerated property cache

- **URL**: https://www.freshcrate.ai/projects/propcache
- **Author**: Andrew Svetlov
- **Category**: Frameworks
- **Latest version**: `v0.5.2` (2026-05-08)
- **License**: Apache-2.0
- **Source**: https://github.com/aio-libs/propcache/actions?query=branch:master
- **Homepage**: https://github.com/aio-libs/propcache
- **Language**: Python
- **GitHub**: 33 stars, 18 forks
- **Registry**: pypi (`propcache`)
- **Tags**: `cext`, `cython`, `propcache`, `pypi`

## Description

propcache
=========

The module provides a fast implementation of cached properties for Python 3.9+.

.. image:: https://github.com/aio-libs/propcache/actions/workflows/ci-cd.yml/badge.svg
  :target: https://github.com/aio-libs/propcache/actions?query=workflow%3ACI
  :align: right

.. image:: https://codecov.io/gh/aio-libs/propcache/branch/master/graph/badge.svg
  :target: https://codecov.io/gh/aio-libs/propcache

.. image:: https://badge.fury.io/py/propcache.svg
    :target: https://badge.fury.io/py/propcache


.. image:: https://readthedocs.org/projects/propcache/badge/?version=latest
    :target: https://propcache.readthedocs.io


.. image:: https://img.shields.io/pypi/pyversions/propcache.svg
    :target: https://pypi.python.org/pypi/propcache

.. image:: https://img.shields.io/matrix/aio-libs:matrix.org?label=Discuss%20on%20Matrix%20at%20%23aio-libs%3Amatrix.org&logo=matrix&server_fqdn=matrix.org&style=flat
   :target: https://matrix.to/#/%23aio-libs:matrix.org
   :alt: Matrix Room — #aio-libs:matrix.org

.. image:: https://img.shields.io/matrix/aio-libs-space:matrix.org?label=Discuss%20on%20Matrix%20at%20%23aio-libs-space%3Amatrix.org&logo=matrix&server_fqdn=matrix.org&style=flat
   :target: https://matrix.to/#/%23aio-libs-space:matrix.org
   :alt: Matrix Space — #aio-libs-space:matrix.org

Introduction
------------

The API is designed to be nearly identical to the built-in ``functools.cached_property`` class,
except for the additional ``under_cached_property`` class which uses ``self._cache``
instead of ``self.__dict__`` to store the cached values and prevents ``__set__`` from being called.

For full documentation please read https://propcache.readthedocs.io.

Installation
------------

::

   $ pip install propcache

The library is Python 3 only!

PyPI contains binary wheels for Linux, Windows and MacOS.  If you want to install
``propcache`` on another operating system where wheels are not provided,
the the tarball will be used to compile the library from
the source code. It requires a C compiler and and Python headers installed.

To skip the compilation you must explicitly opt-in by using a PEP 517
configuration setting ``pure-python``, or setting the ``PROPCACHE_NO_EXTENSIONS``
environment variable to a non-empty value, e.g.:

.. code-block:: console

   $ pip install propcache --config-settings=pure-python=false

Please note that the pure-Python (uncompiled) version is much slower. However,
PyPy always uses a pure-Python implementation, and, as such, it is unaffected
by this variable.


API documentation
------------------

The documentation is located at https://propcache.readthedocs.io.

Source code
-----------

The project is hosted on GitHub_

Please file an issue on the `bug tracker
<https://github.com/aio-libs/propcache/issues>`_ if you have found a bug
or have some suggestion in order to improve the library.

Discussion list
---------------

*aio-libs* google group: https://groups.google.com/forum/#!forum/aio-libs

Feel free to post your questions and ideas here.


Authors and License
-------------------

The ``propcache`` package is derived from ``yarl`` which is written by Andrew Svetlov.

It's *Apache 2* licensed and freely available.


.. _GitHub: https://github.com/aio-libs/propcache

=========
Changelog
=========

..
    You should *NOT* be adding new change log entries to this file, this
    file is managed by towncrier. You *may* edit previous change logs to
    fix problems like typo corrections or such.
    To add a new change log entry, please see
    https://pip.pypa.io/en/latest/development/#adding-a-news-entry
    we named the news folder "changes".

    WARNING: Don't drop the next directive!

.. towncrier release notes start

0.4.1
=====

*(2025-10-08)*


Bug fixes
---------

- Fixed reference leak caused by ``Py_INCREF`` because Cython has its own reference counter systems -- by `@Vizonex <https://github.com/sponsors/Vizonex>`__.

  *Related issues and pull requests on GitHub:*
  `#162 <https://github.com/aio-libs/propcache/issues/162>`__.


Contributor-facing changes
--------------------------

- Fixes the default value for the ``os``
  parameter in ``reusable-build-wheel.yml``
  to be ``ubuntu-latest`` instead of
  ``ubuntu``.

  *Related issues and pull requests on GitHub:*
  `#155 <https://github.com/aio-libs/propcache/issues/155>`__.


----


0.4.0
=====

*(2025-10-04)*


Features
--------

- Optimized propcache by replacing sentinel ``object`` for checking if
  the ``object`` is ``NULL`` and changed ``dict`` API for
  Python C-API -- by `@Vizonex <https://github.com/sponsors/Vizonex>`__.

  *Related issues and pull requests on GitHub:*
  `#121 <https://github.com/aio-libs/propcache/issues/121>`__.


Contributor-facing changes
--------------------------

- Builds have been added for arm64 Windows
  wheels and the ``reusable-build-wheel.yml``
  workflow has been modified to allow for
  an OS value (``windows-11-arm``) which
  does not include the ``-latest`` postfix

## Recent releases

| Version | Date | Urgency | Changes |
| --- | --- | --- | --- |
| `v0.5.2` | 2026-05-08 | High | 0.5.0 and 0.5.1 were tagged earlier today but never reached PyPI: 0.5.0's deploy failed at cibuildwheel's post-build pytest on free-threaded armv7l musllinux (SIGBUS under QEMU emulation while importing the C extension), and 0.5.1's deploy hit a transient sigstore Rekor 502 during the attestation step. 0.5.2 is the first of the three to actually publish.  Features --------  - Added support for newer type hints and remove ``Optional`` and ``Union`` from all annotations   -- by :user:`Vizonex` |
| `0.4.1` | 2026-04-21 | Low | Imported from PyPI (0.4.1) |
| `v0.4.1` | 2025-10-08 | Low | Bug fixes ---------  - Fixed reference leak caused by ``Py_INCREF`` because Cython has its own reference counter systems -- by :user:`Vizonex`.    *Related issues and pull requests on GitHub:*   #162.   Contributor-facing changes --------------------------  - Fixes the default value for the ``os``   parameter in ``reusable-build-wheel.yml``   to be ``ubuntu-latest`` instead of   ``ubuntu``.    *Related issues and pull requests on GitHub:*   #155.   ---- |
| `v0.4.1` | 2025-10-08 | Low | Bug fixes ---------  - Fixed reference leak caused by ``Py_INCREF`` because Cython has its own reference counter systems -- by :user:`Vizonex`.    *Related issues and pull requests on GitHub:*   #162.   Contributor-facing changes --------------------------  - Fixes the default value for the ``os``   parameter in ``reusable-build-wheel.yml``   to be ``ubuntu-latest`` instead of   ``ubuntu``.    *Related issues and pull requests on GitHub:*   #155.   ---- |
| `v0.4.1` | 2025-10-08 | Low | Bug fixes ---------  - Fixed reference leak caused by ``Py_INCREF`` because Cython has its own reference counter systems -- by :user:`Vizonex`.    *Related issues and pull requests on GitHub:*   #162.   Contributor-facing changes --------------------------  - Fixes the default value for the ``os``   parameter in ``reusable-build-wheel.yml``   to be ``ubuntu-latest`` instead of   ``ubuntu``.    *Related issues and pull requests on GitHub:*   #155.   ---- |
| `v0.4.1` | 2025-10-08 | Low | Bug fixes ---------  - Fixed reference leak caused by ``Py_INCREF`` because Cython has its own reference counter systems -- by :user:`Vizonex`.    *Related issues and pull requests on GitHub:*   #162.   Contributor-facing changes --------------------------  - Fixes the default value for the ``os``   parameter in ``reusable-build-wheel.yml``   to be ``ubuntu-latest`` instead of   ``ubuntu``.    *Related issues and pull requests on GitHub:*   #155.   ---- |
| `v0.4.1` | 2025-10-08 | Low | Bug fixes ---------  - Fixed reference leak caused by ``Py_INCREF`` because Cython has its own reference counter systems -- by :user:`Vizonex`.    *Related issues and pull requests on GitHub:*   #162.   Contributor-facing changes --------------------------  - Fixes the default value for the ``os``   parameter in ``reusable-build-wheel.yml``   to be ``ubuntu-latest`` instead of   ``ubuntu``.    *Related issues and pull requests on GitHub:*   #155.   ---- |
| `v0.4.1` | 2025-10-08 | Low | Bug fixes ---------  - Fixed reference leak caused by ``Py_INCREF`` because Cython has its own reference counter systems -- by :user:`Vizonex`.    *Related issues and pull requests on GitHub:*   #162.   Contributor-facing changes --------------------------  - Fixes the default value for the ``os``   parameter in ``reusable-build-wheel.yml``   to be ``ubuntu-latest`` instead of   ``ubuntu``.    *Related issues and pull requests on GitHub:*   #155.   ---- |
| `v0.4.1` | 2025-10-08 | Low | Bug fixes ---------  - Fixed reference leak caused by ``Py_INCREF`` because Cython has its own reference counter systems -- by :user:`Vizonex`.    *Related issues and pull requests on GitHub:*   #162.   Contributor-facing changes --------------------------  - Fixes the default value for the ``os``   parameter in ``reusable-build-wheel.yml``   to be ``ubuntu-latest`` instead of   ``ubuntu``.    *Related issues and pull requests on GitHub:*   #155.   ---- |
| `v0.4.1` | 2025-10-08 | Low | Bug fixes ---------  - Fixed reference leak caused by ``Py_INCREF`` because Cython has its own reference counter systems -- by :user:`Vizonex`.    *Related issues and pull requests on GitHub:*   #162.   Contributor-facing changes --------------------------  - Fixes the default value for the ``os``   parameter in ``reusable-build-wheel.yml``   to be ``ubuntu-latest`` instead of   ``ubuntu``.    *Related issues and pull requests on GitHub:*   #155.   ---- |

## Citation

- HTML: https://www.freshcrate.ai/projects/propcache
- Markdown: https://www.freshcrate.ai/projects/propcache.md
- Dependencies JSON: https://www.freshcrate.ai/api/projects/propcache/deps

_Generated by freshcrate.ai. Indexes pypi releases for AI-agent ecosystem packages._
