Core and integrations
Python, core, and the integration platform. Everything you need to build and improve integrations, and to work on Home Assistant Core itself.
Home Assistant Core is the Python application at the heart of every Home Assistant installation. It runs the state machine, the event bus, automations, and the thousands of integrations that connect Home Assistant to devices and services. All of it lives in one repository: home-assistant/core.
Most contributions to core are about integrations: adding support for a new device, fixing a bug in an existing one, or bringing an integration up to a higher level of quality. Some contributions go deeper, into the helpers and APIs that every integration builds on.
This area is for you if you write Python, or want to. You do not need to know the whole codebase. Most people start with one integration they use at home, and grow from there.
- Fix a bug: pick up an issue in an integration you use, reproduce it, and fix it.
- Improve an integration: add tests, add type hints, or work toward the next tier of the integration quality scale.
- Add an integration: connect Home Assistant to a device or service it does not support yet.
- Review: test and review pull requests from others. It is one of the most valuable things you can do.
Pick the path that matches what you want to do:
- Fix something first. Never contributed to core? Start with your first contribution: set up your environment, fix a small bug, and open your first pull request. A small fix teaches you the whole process, also if you want to build an integration later.
- Build a new integration. Read how an integration fits in, then follow the tutorial. It builds a small integration from the scaffold to a pull request that meets the Bronze tier. For your own device or service, the project recommends starting in the Marketplace: see does it belong in core.
Then use the rest of this area as your reference: the development workflow for the tools and the pull request process, and the guides below for everything else.
- Building integrations: the files of an integration, config flows, fetching data, and everything else an integration is made of.
- Entities and platforms: sensors, lights, climate devices, and every other entity type, with the properties and features each one supports.
- Integration quality scale: the tiers and rules that describe how good an integration is, and what reviewers look for.
- How core works: asyncio, the
hassobject, events, states, authentication, the APIs, intents, and LLM support.
- Translations: how to write strings in
strings.jsonthat translators can work with. - Writing documentation: every integration has a page on home-assistant.io, and you write it together with your code.
- Frontend: when your change needs something new in the interface.
- Architecture: the decisions behind how Home Assistant is built.
- Marketplace: publish a custom integration, so others can install it from the Marketplace.
- The #core channel on the Home Assistant Discord is the place for questions about Core and integrations. General development questions fit #developers. For a longer question, start a thread in #support. Can't see the channels? Under Channels & Roles, choose I want to contribute dev skills to Home Assistant.
- Bugs and pull requests live in the core repository. Feature ideas go to GitHub discussions.
- Bigger changes to how core works are discussed in the architecture repository first.
When you ask for help, push your work to a branch and share the link. People can help you much faster when they can see the code, and a link keeps the channel readable.