As presented in a [talk at FOSS4G][1] Mapbox Studio allows to create Mapbox vector tiles and export them as a `.mbtiles` file.

The [mapbox-gl.js][2] library can be used to dynamically style and render Mapbox vector tiles on client (browser) side.

The missing part: How can I self-host Mapbox vector tiles (`.mbtiles`) so that I can consume them with mapbox-gl.js?

Note: I know that Mapbox Studio can upload the vector tiles to the Mapbox server and let it host the tiles. But that's no option for me, I want to host the vector tiles on my own server.

Edit:

I tried [TileStream][3] which can serve image tiles out of `.mbtiles` files:

My webpage uses mapbox-gl v0.4.0:

    <link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.4.0/mapbox-gl.css' rel='stylesheet' />
    <script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.4.0/mapbox-gl.js'></script>

and it creates a mapboxgl.Map in a JavaScript script:

      var map = new mapboxgl.Map({
        container: 'map',
        center: [46.8104, 8.2452],
        zoom: 9,
        style: 'c.json'
      });

The `c.json` style file configures the vector tile source:

    {
      "version": 6,
      "sprite": "https://www.mapbox.com/mapbox-gl-styles/sprites/bright",
      "glyphs": "mapbox://fontstack/{fontstack}/{range}.pbf",
      "constants": {
        "@land": "#808080",
        "@earth": "#805040",
        "@water": "#a0c8f0",
        "@road": "#000000"
      },
      "sources": {
        "osm_roads": {
          "type": "vector",
          "url": "tile.json"
        }
      },
      "layers": [{
        "id": "background",
        "type": "background",
        "paint": {
          "background-color": "@land"
        }
      }, {
        "id": "roads",
        "type": "line",
        "source": "osm_roads",
        "source-layer": "roads",
        "paint": {
          "line-color": "@road"
        }
      }]
    }

... with the following TileJSON specification in `tile.json`:

    {
      "tilejson": "2.1.0",
      "tiles": [
        "http://localhost:8888/v2/osm_roads/{z}/{x}/{y}.png"
      ],
      "minzoom": 0,
      "maxzoom": 12
    }

... which points to my TileStream server running at `localhost:8888`.
TileStream has been started with:

    node index.js start --tiles="..\tiles"

... where the `..\tiles` folder contains my `osm_roads.mbtiles` file.

With this setup, I can open my webpage but only see the background layer. In the browser network trace I can see that tiles are indeed loaded when I zoom in, but the browser JavaScript error console contains several errors of the form

    Error: Invalid UTF-8 codepoint: 160      in mapbox-gl.js:7

Since vector tiles are not `.png` images but rather ProtoBuf files, the tiles URL `http://localhost:8888/v2/osm_roads/{z}/{x}/{y}.pbf` would actually make more sense, but that doesn't work.

Any ideas?

Edit 2: Added link to TileStream

  [1]: http://vimeo.com/106228141
  [2]: https://www.mapbox.com/mapbox-gl/
  [3]: https://github.com/mapbox/tilestream