Kivy
An open-source Python framework for developing GUI apps that work cross-platform, including desktop, mobile and embedded platforms.
What it is and what it does
Kivy is a production-stable Python GUI framework built on OpenGL ES 2.0 that lets you write desktop and mobile applications once and deploy them to Windows, macOS, Linux, Android, and iOS. It emphasizes rapid prototyping and code reuse through a unified widget library with native multitouch support. The framework is written in Python and Cython and comes with an extensive, extensible widget set.
You use Kivy to design interactive user interfaces declaratively, bind them to event handlers, and package them for multiple platforms. It handles the platform-specific rendering and input abstraction, so your application logic remains portable. The framework depends on system graphics libraries and platform-specific binary packages (SDL2, GLEW, ANGLE), which are managed through companion packages like kivy-deps.sdl2.
Use it for:
- Build a desktop application in Python that runs identically on Windows, macOS, and Linux without code changes.
- Develop a mobile app for Android or iOS using Python, avoiding platform-specific languages while sharing core logic.
- Create a touchscreen interface for embedded systems or kiosks with multitouch gesture support.
- Prototype interactive data visualization or scientific applications with real-time UI updates.
- Build games or multimedia applications that require hardware-accelerated graphics and input handling.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Kivy is a Python framework for building graphical user interfaces that run on desktop, mobile, and embedded platforms from a single codebase, with native support for multitouch input and cross-platform deployment.
Yes, if you need to build cross-platform GUIs in Python and are willing to manage platform-specific dependencies. Kivy is production-stable, actively maintained, and has no known vulnerabilities. The medium install friction is a trade-off for genuine code reuse across desktop and mobile. Not recommended if you need native platform look-and-feel or tight integration with platform-specific APIs—consider platform-specific frameworks for those cases.
Install
kivy on PyPI
pip
pip install kivyuv
uv add kivypoetry
poetry add kivyInstalling Kivy
Before you install
Medium install friction due to compiled dependencies (SDL2, GLEW, ANGLE on Windows) and platform-specific wheels. Actively maintained with recent commits; production-stable status and 18992 repository stars indicate solid community backing.
License in practice
MIT license permits commercial and private use with minimal restrictions. Bundled fonts (Roboto, DejaVuSans) and UI design elements carry separate Apache 2.0 and LGPLv2.1 licenses, which do not restrict your own code.
Quickstart
pip install Kivy
from kivy.app import App
from kivy.uix.label import Label
class HelloApp(App):
def build(self):
return Label(text='Hello Kivy')
if __name__ == '__main__':
HelloApp().run()
Requires system graphics libraries (OpenGL ES 2.0 support); on Windows, kivy-deps.angle, kivy-deps.sdl2, and kivy-deps.glew are installed automatically but may need Visual C++ redistributables.
Verify before relying
- Performance characteristics and memory footprint for complex UIs or large datasets
- Maturity and stability of iOS and Android deployment workflows via companion tools
- Real-world app store submission experience and toolchain reliability
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.8) |
| Install friction | medium — platform-specific wheel |
| Runtime dependencies | 9 — Kivy-Garden, docutils, pygments, requests, filetype, kivy-deps.angle, kivy-deps.sdl2, kivy-deps.glew, pypiwin32 |
| Maintenance | actively maintained — 596 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 279,341/month — #8,122 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: Kivy-2.3.1-cp310-cp310-macosx_10_15_universal2.whl; Kivy-2.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; Kivy-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; Kivy-2.3.1-cp310-cp310-win_amd64.whl; Kivy-2.3.1-cp311-cp311-macosx_10_15_universal2.whl; Kivy-2.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; Kivy-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; Kivy-2.3.1-cp311-cp311-win_amd64.whl; Kivy-2.3.1-cp312-cp312-macosx_10_15_universal2.whl; Kivy-2.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; Kivy-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; Kivy-2.3.1-cp312-cp312-win_amd64.whl; Kivy-2.3.1-cp313-cp313-macosx_10_15_universal2.whl; Kivy-2.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; Kivy-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; Kivy-2.3.1-cp313-cp313-win_amd64.whl; Kivy-2.3.1-cp38-cp38-macosx_10_15_universal2.whl; Kivy-2.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; Kivy-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; Kivy-2.3.1-cp38-cp38-win_amd64.whl
Tags
More Application Frameworks packages
FastAPI is a Python web framework for building…
permissive · top 100 on PyPI
annotated-docProvides a way to document function parameters,…
permissive · top 100 on PyPI
textualTextual is a Python framework for building…
permissive · top 100 on PyPI
typerTyper builds command-line applications from…
permissive · top 1,000 on PyPI
mcpBuild and connect to Model Context Protocol…
permissive · top 1,000 on PyPI
WerkzeugWerkzeug is a WSGI utility library providing…
permissive · top 1,000 on PyPI
buildozerBuildozer turns Python applications into binary…
permissive · top 15,000 on PyPI
PyQt5PyQt5 provides Python bindings for the Qt v5…
copyleft · top 5,000 on PyPI
flet-desktopFlet Desktop provides a Python-only framework…
permissive · top 15,000 on PyPI
fletFlet is a Python framework for building…
permissive · top 15,000 on PyPI
comictaggerComicTagger writes metadata to digital comic…
permissive · top 15,000 on PyPI
PyQt6PyQt6 provides Python bindings for Qt v6,…
copyleft · top 5,000 on PyPI
plyerPlyer provides a platform-independent Python…
permissive · top 15,000 on PyPI
imgui-bundleDear ImGui Bundle provides Python bindings to a…
permissive · top 15,000 on PyPI
moblyMobly is a Python test framework designed to…
permissive · top 15,000 on PyPI
htaghtag is a Python GUI toolkit for building web,…
permissive · top 15,000 on PyPI