---
layout: page
title: "Creating components"
description: "Guidelines to get you create your first component for Home Assistant."
date: 2014-12-21 13:32
sidebar: false
comments: false
sharing: true
footer: true
---
Home Assistant offers [built-in components]({{site_root}}/components/) but it
is easy to built your own.
## Loading components
A component will be loaded on start if a section (ie. `[light]`) for it exists in the config file. A component can also be loaded if another component is loaded that depends on it. When loading a component Home Assistant will check the following paths:
* <config directory>/custom_components/<component name>
* homeassistant/components/<component name>
(built-in components)
Once loaded, a component will only be setup if all dependencies can be loaded and are able to setup. Keep an eye on the logs to see if your component could be loaded and initialized.
You can override a built-in component by having a component with the same name in your config/custom_components
folder. This is not recommended and will probably break things!
Home Assistant will use the directory that contains your config file as the directory that holds your customizations. By default this is the config
folder in your current work directory. You can use a different folder by running Home Assistant with the --config argument: python3 homeassistant --config /YOUR/CONFIG/PATH/
.
hass
| The Home Assistant object. Call its methods to track time, register services, listen for events or track states: [Overview of available methods.](https://github.com/balloob/home-assistant/blob/master/homeassistant/__init__.py#L38) |
| config
| A dict containing the configuration. The keys of the config-dict are component names and the value is another dict with the component configuration. |
### Guidance on using the Home Assistant object
The Home Assistant object contains three objects to help you interact with the system.
| Object | Description |
| ------ | ----------- |
| hass.states
| This is the StateMachine. It allows you to set states and trach when they are changed. [See available methods](https://github.com/balloob/home-assistant/blob/master/homeassistant/__init__.py#L473). |
| hass.events
| This is the EventBus. It allows you to trigger and listen for events.hass.services
| This is the ServiceRegistry. It allows you to register services.