{"id":13426003,"url":"https://github.com/consbio/mbgl-renderer","last_synced_at":"2025-03-15T20:31:49.143Z","repository":{"id":33262933,"uuid":"141508064","full_name":"consbio/mbgl-renderer","owner":"consbio","description":"Static renderer for Mapbox GL","archived":false,"fork":false,"pushed_at":"2023-07-19T06:14:44.000Z","size":3545,"stargazers_count":224,"open_issues_count":18,"forks_count":63,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-02-28T18:45:28.566Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/consbio.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-07-19T01:23:38.000Z","updated_at":"2025-02-28T07:28:01.000Z","dependencies_parsed_at":"2023-02-18T08:40:21.214Z","dependency_job_id":"3d4d4224-78a5-43de-b33b-dda38638356f","html_url":"https://github.com/consbio/mbgl-renderer","commit_stats":{"total_commits":107,"total_committers":11,"mean_commits":9.727272727272727,"dds":0.6074766355140186,"last_synced_commit":"938a46c183459e85fef2f981197f9eea09ff028d"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/consbio%2Fmbgl-renderer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/consbio%2Fmbgl-renderer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/consbio%2Fmbgl-renderer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/consbio%2Fmbgl-renderer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/consbio","download_url":"https://codeload.github.com/consbio/mbgl-renderer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243790939,"owners_count":20348378,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T00:01:24.016Z","updated_at":"2025-03-15T20:31:44.135Z","avatar_url":"https://github.com/consbio.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# Static Map Renderer using Mapbox GL\n\n[![Coverage Status](https://coveralls.io/repos/github/consbio/mbgl-renderer/badge.svg?branch=main)](https://coveralls.io/github/consbio/mbgl-renderer?branch=main)\n\nCreate static map images using MapLibre GL with a command-line interface, an HTTP interface, and a NodeJS API.\n\n## Features:\n\n- Render static maps using NodeJS with [maplibre-gl-native](https://github.com/maplibre/maplibre-gl-native)\n- Supports raster and vector tiles\n- Compatible with Mapbox tiles (don't forget attribution) and other hosted tile providers\n- Use locally hosted mbtiles\n- Add GeoJSON overlays to your maps\n- Supports high DPI rendering\n- Also available for use in Docker\n\n[Blog post](https://medium.com/@brendan_ward/creating-a-static-map-renderer-using-the-mapbox-gl-native-nodejs-api-23db560b219e) describing the background and goals in a bit more detail.\n\nOne of the nifty features of this package is that you can use locally hosted mbtiles files\nwith your raster or vector tiles. This saves considerable time during rendering compared\nto using map services over the web.\n\nThis package is intended to help with generating static maps for download or use in reports,\nespecially when combined with your own styles or overlays.\n\nIf you are only using hosted Mapbox styles and vector tiles, please use the [Mapbox Static API](https://www.mapbox.com/api-documentation/#static) instead; it is more full featured and more\nappropriate for static Mapbox maps.\n\n### Attribution\n\nPlease make sure to give appropriate attribution to the data sources and styles used in your maps,\nin the manner that those providers specify.\n\nIf you use Mapbox styles or hosted tiles, make sure to include appropriate [attribution](https://www.mapbox.com/help/how-attribution-works/) in your output maps.\n\n## Installation\n\n`npm add mbgl-renderer`\nor\n`npm install mbgl-renderer`\n\n### Supported versions of NodeJS:\n\n- 16\n- 18\n\nOnly NodeJS versions with `@maplibre/maplibre-gl-native` binaries built by MapLibre are supported via `npm install`, otherwise you need to build `@maplibre/maplibre-gl-native` from source yourself. See [build instructions](https://github.com/maplibre/maplibre-gl-native/tree/main/platform/node) for more information.\n\nOn a server, in addition to build tools, you need to install a GL environment. See the `Dockerfile` and `entrypoint.sh` for an example setup.\n\n## Usage\n\n### Style JSON:\n\nThe primary input to every map rendering method below is a Mapbox GL Style JSON file.\nFor full reference on this format, please see the [Mapbox documentation](https://docs.mapbox.com/mapbox-gl-js/style-spec/).\n\n### Labels\n\nIn order to use text labels, you need to include `glyphs` in your Style JSON (sibling of `sources`)\n\nTo use Mapbox hosted glyphs (a Mapbox token is required):\n\n```json\n\"glyphs\": \"mapbox://fonts/mapbox/{fontstack}/{range}.pbf\"\n```\n\nYou can also use [OpenMapTiles hosted glyphs](https://github.com/openmaptiles/fonts):\n\n```json\n\"glyphs\": \"http://fonts.openmaptiles.org/{fontstack}/{range}.pbf\",\n```\n\nIn either case, you must make sure that the font you specify is available from that provider.\nSee `tests/fixtures/example-style-geojson-label.json` for an example of adding labels based on coordinates specified in\nGeoJSON.\n\n### NodeJS API:\n\nThe following examples assume that you are using `babel` to provide ES6 features.\n\n```\nimport render from 'mbgl-renderer'\n\nimport style from `tests/fixtures/example-style.json`\n// style JSON file with MapBox style.  Can also be opened and read instead of imported.\n\nconst width = 512\nconst height = 256\nconst center = [-79.86, 32.68]\nconst zoom = 10\n\nrender(style, width, height, { zoom, center })\n    .then((data) =\u003e {\n        fs.writeFileSync('test.png', data)\n    }))\n```\n\nYou can also provide `bounds` instead of `center` and `zoom`:\n\n```\nconst width = 512\nconst height = 256\nconst bounds = [-80.23, 32.678, -79.73, 32.891]\n\nrender(style, width, height, { bounds })\n    .then((data) =\u003e {\n        fs.writeFileSync('test.png', data)\n    }))\n```\n\nIf you provide `bounds` you can also provide `padding` to add\nthat many pixels to each side of the rendered image. These pixels\nare padded to the inside of the image, meaning that the resulting\nimage matches the `width` and `height` you provide, but is zoomed\nout to allow padding around the edges.\n\n```\nconst width = 512\nconst height = 256\nconst bounds = [-80.23, 32.678, -79.73, 32.891]\nconst padding = 25\n\nrender(style, width, height, { bounds, padding })\n    .then((data) =\u003e {\n        fs.writeFileSync('test.png', data)\n    }))\n```\n\n`padding` must be integers and not be greater than 1/2 of `width`\nor `height`, whichever is smaller. You can provide a negative\npadding to over-zoom the image.\n\nYou can also supply a pixel ratio for High DPI screens, typically \u003e 1 (max of 31 has been tested):\n\n```\nconst width = 512\nconst height = 256\nconst center = [-79.86, 32.68]\nconst zoom = 10\nconst ratio = 2\n\nrender(style, width, height, { zoom, center, ratio })\n    .then((data) =\u003e {\n        fs.writeFileSync('test.png', data)\n    }))\n```\n\nYou can also provide an alternative bearing (0-360) or pitch (0-60):\n\n```\nconst width = 512\nconst height = 256\nconst center = [-79.86, 32.68]\nconst zoom = 10\nconst bearing = 90\nconst pitch = 30\n\nrender(style, width, height, { zoom, center, bearing, pitch })\n    .then((data) =\u003e {\n        fs.writeFileSync('test.png', data)\n    }))\n\n```\n\nIf your style includes a Mapbox hosted source (e.g., `\"url\": \"mapbox://mapbox.mapbox-streets-v7\"`),\nyou need to pass in your Mapbox access token as well:\n\n```\nrender(style, width, height, { bounds, token: '\u003cyour access token\u003e' })\n    .then((data) =\u003e {\n        fs.writeFileSync('test.png', data)\n    }))\n```\n\nYou can also provide icon images that will be available for `icon-image`, `line-pattern`, and `fill-pattern` style properties.\nThe `images` property is an object with keys for at least `url` and optional keys `pixelRatio` and `sdf`.\n\n`url` must point to a valid remote URL that is accessible from `mbgl-renderer`. It may include base64 encoded image data (example below).\n\nSet `sdf` to `true` to enable the image to be converted into an SDF icon. [Read more](https://docs.mapbox.com/help/troubleshooting/using-recolorable-images-in-mapbox-maps/).\n\n`pixelRatio` is only used for `symbols`; due to a bug in Mapbox GL Native, it does not work properly for `line-pattern` and `fill-pattern` icon images.\n\n```\nconst images = {\n    \"exampleImageID\": {\n        \"url\": \"data:image/png;base64,iVBORw0KGg....truncated...\",\n        \"sdf\": true / false (default),\n        \"pixelRatio\": 1 (default)\n    }\n}\n```\n\nThen refer to `exampleImageID` in your style:\n\n```\n...\nlayers:[\n    {\n        \"id\": \"...\",\n        \"type\": \"symbol\",\n        \"source\": \"...\",\n        \"layout\": {\n            \"icon-image\": \"exampleImageID\",\n            ...\n        },\n        \"paint\": {\n            ...\n        }\n    }\n]\n```\n\n### Command line interface:\n\n```\n  Usage: mbgl-render \u003cstyle.json\u003e \u003cimg_filename\u003e \u003cwidth\u003e \u003cheight\u003e [options]\n\n  Export a Mapbox GL map to image.  You must provide either center and zoom, or bounds.\n\n  Options:\n\n    -V, --version                         output the version number\n    -c, --center \u003clongitude,latitude\u003e     center of map (NO SPACES)\n    -z, --zoom \u003cn\u003e                        Zoom level\n    -r, --ratio \u003cn\u003e                       Pixel ratio\n    -b, --bounds \u003cwest,south,east,north\u003e  Bounds (NO SPACES)\n    --padding \u003cpadding\u003e                   Number of pixels to add to the inside of each edge of the image.  Can only be used with bounds option.\n    --bearing \u003cdegrees\u003e                   Bearing in degrees (0-360)\n    --pitch \u003cdegrees\u003e                     Pitch in degrees (0-60)\n    -t, --tiles \u003cmbtiles_path\u003e            Directory containing local mbtiles files to render\n    --token \u003cmapbox access token\u003e         Mapbox access token (required for using Mapbox styles and sources)\n    --images \u003cimages.json                 JSON file containing image config\n    -h, --help                            output usage information\n```\n\nTo render an image using center (NO spaces or brackets) and zoom:\n\n```\nmbgl-render tests/fixtures/example-style.json test.png 512 256 -c -79.86,32.68 -z 10\n```\n\nTo render an image using bounds (NO spaces or brackets):\n\n```\nmbgl-render tests/fixtures/example-style.json test.png 512 256 -b -80.23,32.678,-79.73,32.891\n```\n\nTo render an image using bounds and padding:\n\n```\nmbgl-render tests/fixtures/example-style.json test.png 512 256 -b -80.23,32.678,-79.73,32.891 --padding 25\n```\n\nTo use local mbtiles tilesets:\n\n```\nmbgl-render tests/fixtures/example-style-mbtiles-source-vector.json test.png 1024 1024 -z 0 -c 0,0 -t tests/fixtures\n```\n\nTo use a Mapbox hosted style (see attribution above!):\n\n```\nmbgl-render mapbox://styles/mapbox/outdoors-v10 test.png 1024 1024 -c 0,0 -z 0 --token \u003cyour mapbox token\u003e\n```\n\nNote: support for Mapbox hosted styles is still considered experimental.\n\n### Static image server\n\nYou start this from the command line:\n\n```\n  Usage: mbgl-server [options]\n\n  Start a server to render Mapbox GL map requests to images.\n\n  Options:\n\n    -V, --version               output the version number\n    -p, --port \u003cn\u003e              Server port\n    -t, --tiles \u003cmbtiles_path\u003e  Directory containing local mbtiles files to render\n    -v, --verbose               Enable request logging\n    -h, --help                  output usage information\n```\n\nTo start this on port 8080 with local tiles in `tests/fixtures`:\n\n```\nmbgl-static-server -p 8080 -t tests/fixtures\n```\n\nYou can also start this via `npm start` but you must use the `--` spacer before passing argmuents:\n\n```\nnpm start -- --port 8080 --tiles tests/fixtures\n```\n\n#### Making requests\n\nIn your client of choice, you can make either HTTP GET or POST requests to\n\n```\nhttp://localhost:8080/render\n```\n\n##### GET requests:\n\nInclude the following query parameters:\n\n- `height` and `width` are integer values (required).\n- `zoom` is a floating point value.\n- `ratio` is an integer value.\n- `center` if provided must be a `longitude,latitude` with floating point values (NO spaces or brackets).\n- `bounds` if provided must be `west,south,east,north` with floating point values (NO spaces or brackets).\n- `padding` if provided must be an integer value that is less than 1/2 of width or height, whichever is smaller. Can only be used with bounds.\n- `bearing is a floating point value (0-360)`pitch`is a floating point value (0-60).\n- `token` if provided must a string.\n- `images` if provided must be URL encoded JSON object (see `images` property above).\n\nYour style JSON needs to be URL encoded:\n\n```\nhttp://localhost:8080/render?height=1024\u0026width=1024\u0026center=-80,-20\u0026zoom=3\u0026style=%7B%22version%22%3A8%2C%22sources%22%3A%7B%22land%22%3A%7B%22type%22%3A%22vector%22%2C%22url%22%3A%22mbtiles%3A%2F%2Fland%22%2C%22tileSize%22%3A256%7D%7D%2C%22layers%22%3A%5B%7B%22id%22%3A%22land%22%2C%22type%22%3A%22fill%22%2C%22source%22%3A%22land%22%2C%22source-layer%22%3A%22land%22%2C%22paint%22%3A%7B%22fill-color%22%3A%22%23AAAAAA%22%2C%22fill-opacity%22%3A1%7D%7D%5D%7D\n```\n\nIf your style JSON points to local tilesets, you must have started the server up using those local tilesets.\n\nTo test the server from the command line, for example with the excellent tool [`httpie`](https://httpie.org/) with the style file `tests/fixtures/example-style-mbtiles-source.json`:\n\n```\nhttp :8080/render width=400 height=400 zoom=0 center=0,0 style:=@tests/fixtures/example-style.json \u003e /tmp/test.png\n```\n\n##### POST requests:\n\nYou can do a POST request with all of the above parameters in the body of the request, and the style can be passed directly as JSON instead of URL encoded.\n\nPOST may be necessary where your style JSON file exceeds the maximum number of characters allowed in a GET request URL.\n\n## Development\n\nUse `npm run watch` to start up a file watcher to recompile ES6 files in `src/` to ES5 files that are executable in Node in `dist/`. These are compiled using `babel`.\n\n## Testing\n\nTests are run using `jest`. Right now, our coverage is not great and tests only exercise the core functionality of the render function.\n\nTests require a valid Mapbox API token. Set this in `.env.test` file in the root of the repository:\n\n```\nMAPBOX_API_TOKEN=\u003cyour token\u003e\n```\n\nTo run tests:\n\n```\nnpm run test\n```\n\nThis uses the `pixelmatch` package to determine if output images match those that are expected. This may fail when rendered on different machines for reasons we have not completely sorted out, so don't necessarily be alarmed that tests are failing for you - check the outputs.\n\n## Docker\n\nPull the latest image from [Github Container Registry](https://github.com/consbio/mbgl-renderer/pkgs/container/mbgl-renderer):\n\n```\ndocker pull ghcr.io/consbio/mbgl-renderer:latest\n```\n\nTo run `mbgl-server` in the docker container on port 8080:\n\n```\ndocker run --rm -p 8080:80 consbio/mbgl-renderer\n```\n\nMount your local tiles directory to `/app/tiles` in the container to use these in the server or CLI:\n\n```\ndocker run --rm -p 8080:80 -v $(pwd)/tests/fixtures:/app/tiles consbio/mbgl-renderer\n```\n\n### Build your own image:\n\nBuild your own docker container with name `\u003cimage_name\u003e`:\n\n```\ndocker build -t \u003cimage_name\u003e -f docker/Dockerfile .\n```\n\n## Headless servers\n\nIn order to use this package on a headless server, you need to use `xvfb`. See `docker/Dockerfile` and `docker/entrypoint.sh` for the basic configuration.\n\n## Credits\n\nThis project was made possible based on support from the\n[South Atlantic Landscape Conservation Cooperative](http://www.southatlanticlcc.org/),\nthe [Paulson Institute](http://www.paulsoninstitute.org/), and the\n[California Department of Food and Agriculture - Office of Environmental Farming \u0026 Innovation](https://www.cdfa.ca.gov/oefi/).\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://astutespruce.com\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/3375604?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBrendan Ward\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/consbio/mbgl-renderer/commits?author=brendan-ward\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/consbio/mbgl-renderer/commits?author=brendan-ward\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/consbio/mbgl-renderer/issues?q=author%3Abrendan-ward\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"#blog-brendan-ward\" title=\"Blogposts\"\u003e📝\u003c/a\u003e \u003ca href=\"https://github.com/consbio/mbgl-renderer/pulls?q=is%3Apr+reviewed-by%3Abrendan-ward\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"#ideas-brendan-ward\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/nikmolnar\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/2422416?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNik Molnar\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/consbio/mbgl-renderer/commits?author=nikmolnar\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/consbio/mbgl-renderer/issues?q=author%3Anikmolnar\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"#ideas-nikmolnar\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/ka7eh\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/4112646?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKaveh\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/consbio/mbgl-renderer/issues?q=author%3Aka7eh\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"#ideas-ka7eh\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/bertrandmd\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/9257198?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ebertrandmd\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/consbio/mbgl-renderer/commits?author=bertrandmd\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/korpd\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/44464673?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDaniel Korp\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/consbio/mbgl-renderer/commits?author=korpd\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/kjkurtz\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/6036168?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKyle Kurtz\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/consbio/mbgl-renderer/commits?author=kjkurtz\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://normanrz.com/\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/335438?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNorman Rzepka\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/consbio/mbgl-renderer/commits?author=normanrz\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/submarcos\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/7448208?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJ-E Castagnede\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/consbio/mbgl-renderer/issues?q=author%3Asubmarcos\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://itsallinthega.me/\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/83251?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJez Nicholson\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/consbio/mbgl-renderer/issues?q=author%3Ajnicho02\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"#ideas-jnicho02\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/bob-gray\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/814812?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBob Gray\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/consbio/mbgl-renderer/issues?q=author%3Abob-gray\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/abraztsov\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/19175580?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNikita Abraztsov\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/consbio/mbgl-renderer/issues?q=author%3Aabraztsov\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/LePetitTim\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/26329336?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTimothée Monty\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/consbio/mbgl-renderer/issues?q=author%3ALePetitTim\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://stunkymonkey.de\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/1315818?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003efelix\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/consbio/mbgl-renderer/commits?author=Stunkymonkey\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/rstcruzo\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/18235687?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRodrigo Santa Cruz Ortega\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/consbio/mbgl-renderer/commits?author=rstcruzo\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconsbio%2Fmbgl-renderer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconsbio%2Fmbgl-renderer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconsbio%2Fmbgl-renderer/lists"}