# Creating Your Tooltip
## Step 1. Add The Library
With npm, you can install it as
```bash
npm install vega-tooltip
```
The tooltip library has the compiled tooltip library in the `build` directory:
```
vega-tooltip/build/vega-tooltip.js
```
If you want to manually include the library and its dependencies, you can add the following lines to your HTML script tag. Vega Tooltip works with [`vega`](https://vega.github.io/vega/) and [`vega-lite`](https://vega.github.io/vega-lite/).
```html
```
> **Note that if you use [Vega-Embed](https://github.com/vega/vega-embed/) to deploy your visualization, you already have Vega Tooltip and don't need to do anything.**
Instead of including Vega Tooltip as a script, you can import it in your bundle.
```js
import vegaTooltip from 'vega-tooltip';
```
## Step 2. Create A Visualization
In your HTML `
`, create a placeholder for your visualization. Give the placeholder a unique `id`, to which you can later refer in your JavaScript. For example:
```html
```
Alternatively, you can create a runtime dataflow of the visualization using [`vega.parse`](https://vega.github.io/vega/docs/api/parser/), then pass this runtime dataflow to create a [`View`](https://vega.github.io/vega/docs/api/view/). Note that the following JavaScript code refers to the visualization placeholder by id selector (`#vis`).
```js
var runtime = vega.parse(spec);
var view = new vega.View(runtime)
.initialize(document.getElementById("vis"))
.run();
```
## Step 3. Set up the tooltip library
For [Vega-Lite](https://vega.github.io/vega-lite/) and [Vega](http://vega.github.io/vega/). First, create the [tooltip handler](https://vega.github.io/vega/docs/api/view/#view_tooltip).
```js
var handler = new vegaTooltip.Handler();
```
Then register it when you initialize the view.
```js
var runtime = vega.parse(spec);
var view = new vega.View(runtime)
.tooltip(handler.call) // note that you have to use `handler.call`!
.initialize(document.getElementById("vis"))
.run();
```
You can create your tooltip using [`vegaTooltip`](APIs.md#tooltip) if you don't have access to the initialization. This function requires the [`Vega View`](https://vega.github.io/vega/docs/api/view/) as input.
If you get an error `vegaTooltip is not a function`, try to replace `vegaTooltip` with `vegaTooltip.default`. This is not necessary when you bundle your code with webpack, browserify, or rollup.
```js
var runtime = vega.parse(spec);
var view = new vega.View(runtime)
.initialize(document.getElementById("vis"))
.run();
vegaTooltip(view);
```
## Step 4. Define your tooltip in Vega or Vega-Lite
**You will not see a tooltip if you skip this step.**
You have to define the tooltip property in Vega or Vega-Lite. Note that if you don't use `vega-tooltip`, Vega will use native tooltips instead. Vega Tooltip automatically formats the data. Literal values are coerced to strings. Arrays will be shown in line. For object values, each key-value pair is displayed in its own row in a table.
Vega tooltip handles some keys in object valued tooltips differently. For example, a field called `title` automatically becomes the title of the tooltip. A field called `image` automatically adds an embedded image that uses the field value as the URL.
### In Vega
In a Vega spec, you need to set the `tooltip` property on the mark for which you want to set a tooltip. If the value is on object, Vega Tooltip renders a table with one row for each key. The value with key `title` will not be shown as a row but instead is rendered as a heading in the tooltip.
For example, in your spec you might define a tooltip like this:
```json
...
"tooltip": {"signal": "{'Unemployment Rate': format(datum.unemp.rate, '0.1%')}"}
...
```
See [examples/specs/choropleth.json](https://github.com/vega/vega-tooltip/blob/master/examples/specs/choropleth.json) for an example.
### In Vega-Lite
See https://vega.github.io/vega-lite/docs/tooltip.html#using-tooltip-channel for details on how to use the tooltip channel.
## Congratulations!
Now you should be able to see a tooltip working with your visualization.
__Next step:__ [Customizing Your Tooltip](customizing_your_tooltip.md)