# Reference > Engines

# Engines

## What is an engine?

An Artillery engine provides actions which may be used in a virtual user scenario. For example, the built-in HTTP engine provides
actions such as `get`, `post`, `put`, and `delete` for working with HTTP-based APIs. The WebSocket engine provides a `send` action for
sending messages over a WebSocket connection. Each scenario is controlled by an engine, for example the following "Hello World" scenario
for sending a message to a WebSocket endpoint:

```yaml
- name: Send hello world
  engine: websocket
  flow:
    - send: 'hello world!'
```

If an engine isn't specified, the `http` engine will be used by default.

## Protocol and application-level logic

Engines are very flexible and aren't limited to implementing protocols only. For example the built-in Playwright engine
allows real headless browsers to be controlled via [Playwright](https://playwright.dev/), and the
[`artillery-engine-kinesis`](https://github.com/artilleryio/artillery-engine-kinesis) engine implements support
for [AWS Kinesis](https://aws.amazon.com/kinesis/)-specific operations.

## Custom engines

Artillery has an engine interface for building custom engines.
