---
description: Installation and basic usage
---
# 🚀 Getting Started
`solid-map-gl` requires `mapbox-gl` or `maplibre-gl` as peer dependency
{% tabs %}
{% tab title="Existing project" %}
```shell
pnpm add mapbox-gl solid-map-gl
yarn add mapbox-gl solid-map-gl
npm i mapbox-gl solid-map-gl
```
{% endtab %}
{% tab title="Solid Start" %}
```shell
pnpm create solid && pnpm i
pnpm add mapbox-gl solid-map-gl
pnpm dev
```
{% endtab %}
{% tab title="With MapLibre project" %}
```shell
pnpm create solid && pnpm i
# Install MapLibre package and placeholder Mapbox package
pnpm add solid-map-gl maplibre-gl mapbox-gl@npm:empty-npm-package@1.0.0
pnpm dev
```
{% endtab %}
{% endtabs %}
{% hint style="danger" %}
If you use `vite` and get the following error:
'mapbox-gl.js' does not provide an export named 'default'
add this to your `vite.config.ts` file:
`optimizeDeps: {include: ['mapbox-gl']}`
{% endhint %}
## Usage
To use any of Mapbox’s tools, APIs, or SDKs, you’ll need a Mapbox [access token](https://www.mapbox.com/help/define-access-token/). Mapbox uses access tokens to associate requests to API resources with your account. You can find all your access tokens, create new ones, or delete existing ones on your [API access tokens page](https://www.mapbox.com/studio/account/tokens/). Then pass the *Mapbox access token* via ` options` or `.env` file as `VITE_MAPBOX_ACCESS_TOKEN`
### **Static Map**
By default, `MapGL` component renders in a static mode. That means that the user cannot interact with the map.
```jsx
import { Component } from "solid-js";
import MapGL from "solid-map-gl";
const App: Component = () => (
);
```
### **Interactive Map**
In most cases, you will want the user to interact with the map. To do this, you need to provide `onViewportChange` handler, that will update the map's viewport state.
```jsx
import { Component, createSignal } from "solid-js";
import MapGL, { Viewport } from "solid-map-gl";
const App: Component = () => {
const [viewport, setViewport] = createSignal({
center: [-122.41, 37.78],
zoom: 11,
} as Viewport);
return (
setViewport(evt)}
>
);
};
```