# Component lifecycle

Component instances progress through four major lifecycle events: create,
start, stop, and destroy.

Component instances may retain isolated persistent state on a storage medium
while they are not running which helps them maintain the
[illusion of continuity][principle-continuity] across restarts.

## Creating a component instance

When a component instance is created, the component frameworks assigns a
unique identity to the instance, adds it to the
[component topology][doc-topology], and makes its capabilities
available for other components to use.

Once created, a component instance can then be started or destroyed.

### Starting a component instance

Starting a component instance loads and runs the component's program
and provides it access to the capabilities that it requires.

[Every component runs for a reason][principle-accountability]. The
component framework only starts a component instance when it has work to do,
such as when another component requests to use its instance's capabilities.

Once started, a component instance continues to run until it is stopped.

### Stopping a component instance

Stopping a component instance terminates the component's program but preserves
its [persistent state][doc-storage] so that it can continue where it left off
when subsequently restarted.

The component framework may stop a component instance for a variety of
reasons, such as:

- When all of its clients have disconnected.
- When its parent is being stopped.
- When its package needs to be updated.
- When there are insufficient resources to keep running the component.
- When other components need resources more urgently.
- When the component is about to be destroyed.
- When the system is shutting down.

A component can implement a lifecycle handler ([example][handler-example]) to
be notified of its impending termination and other events on a best effort
basis. Note that a component can be terminated involuntarily and without notice
in circumstances such as resource exhaustion, crashes, or power failure.

Components can stop themselves by exiting. The means by which a component exits
depend on the runner that runs the component.

Once stopped, a component instance can then be restarted or destroyed.

### Destroying a component instance

Destroying a component instance permanently deletes all of its associated
state and releases the system resources it consumed.

Once destroyed, a component instance ceases to exist and cannot be restarted.
New instances of the same component can still be created but they will each
have their own identity and state distinct from all prior instances.

[doc-lifecycle]: lifecycle.md
[doc-storage]: capabilities/storage.md
[doc-topology]: topology.md
[handler-example]: /examples/components/basic/src/lifecycle_full.rs
[principle-accountability]: design_principles.md#accountability
[principle-continuity]: design_principles.md#illusion-of-continuity
