Generate vector tiles for the entire planet on relatively low spec hardware.

Sequentially Generate Planet Mbtiles

Sequentially generate and merge an entire planet.mbtiles vector tileset on low memory/power devices for free.

coming soon:

  • Even less ram as an option (aiming for less than 1gb used while still retaining the current speed)
  • More configuration options (including allowing greater data separation for better storage management and the option to use a custom osm.pbf file)
  • Improved logging and progress management
  • Increased safety with downloads (including allowing for handling of missing/broken links)
  • Vastly better development experience with a more 'effective-go' like codebase.
  • More...
  • This project is currently in active development, any feature requests are very welcome.
  • Note: development is taking place on v3.0.0 branch as some breaking changes are necessary to introduce the above

TL;DR give me planet vector tiles!

  1. Have Docker installed.

  2. git clone --recurse-submodules https://github.com/lambdajack/sequentially-generate-planet-mbtiles

  3. sudo ./release/v2.2.0-sequentially-generate-planet-mbtiles.exe

  4. Rejoice - see acknowledgements below for people to thank.

config.json (defaults shown)

config supplied with the -c flag:

 sudo ./release/v2.2.0-sequentially-generate-planet-mbtiles.exe -c /path/to/config.json
// config.json
{
  "dataDir": "",
  "TilemakerConfig": "",
  "TilemakerProcess": ""
}

dataDir - This will be where the program stores all data downloaded and generated. Need approx 300GB space. If none is provided a 'data' folder will be created in the current working directory.

TilemakerConfig - The config file that will be passed to Tilemaker. See the default used here.

TilemakerProcess - The process file that will be passed to Tilemaker. See the default used here.

Note the files used are slightly adjusted from the examples provided by Tilemaker to give a pleasant default presentation when used with TileServerGL.

Why?

There are some wonderful options out there for generating and serving your own map data and there are many reasons to want to do so. My reason, and the inspiration for this programme was cost. It is expensive to use a paid tile server option after less users using it than you might think. The problem is, when trying to host your own, a lot of research has shown me that almost all solutions for self generating tiles for a map server require hugely expensive hardware to even complete (it's not uncommon to see requirements for 64 cores and 128gb RAM!). Indeed the largest I've seen wanted 150gb of the stuff!. For generating the planet that is. If you want a small section of the world, then it is much easier. But I need the planet - so what to do? Generate smaller sections of the world, then combine them.

That's where sequentially-generate-planet-mbtiles comes in. It downloads the latest osm data, splits it into manageable chunks, generates mbtiles from those chunks and then stitches it all together.

This programme aims to be a simple set and forget, one liner which gives anyone - a way to get a full-featured and bang up to date set of vector tiles for the entire planet on small hardware.

It's also designed (work in progress) to be fail safe - meaning that if your hardware (or our software) does crash mid process, you have not lost all your data, and you are able to start again from a point mid-way through.

This also uses the openmaptiles mbtiles spec, meaning that when accessing the served tiles you can easily use most of the open source styles available. The default is aimed at using the OSM Bright style. More information on styles can be found below.

Considerations

  1. Hardware usage - this will consume effectively 100% CPU for up to a few days and will also do millions of read/writes from ssd/RAM/CPUcache. While modern hardware and vps' are perfectly capable of handling this, if you are using old hardware, beware that its remaining lifespan may be significantly reduced.
  2. Cost - related to the above, while this programme and everything it uses is entirely free and open source - the person's/company's computer you're running it on might charge you electricity/load costs etc. Please check with your provider, how they handle fair use.
  3. Time - your hardware will be unable to do anything much other than run this programme while it is running. This is in order to be efficient and is by design. If your hardware is hosting other production software or will be needed for other things in the next few days, be aware that it will perform suboptimally while this is running.
  4. Bandwidth - this will download the entire planet's worth of openstreetmap data directly from OSM. At the time of writing, this is approx. 64GB. **Please note: ** the programme will look for a planet-latest.osm.pbf file in the data/pbf folder. If this is already present, it will skip the download and use this file. If you already have the data you wish to generate mbtiles for, you can place it there to skip the download. This can be useful if you want historical data, or are generating the mbtiles on multiple computers.
  5. Data generation - in order to remain relatively fast on low spec hardware, this programme systematically breaks up the OSM data into more manegable chunks before processing. Therefore, expect around 300GB of storage to be used up on completion.

Requirements

Hardware

  1. About 300GB clear disk space for the entire planet. Probably an SSD unless you like pain, suffering and the watching the slow creep of old age.
  2. About 4gb of clear RAM (so maybe 6gb if used on a desktop pc). We are working on options in the future for lower RAM requirements.
  3. Time. As above, this has been written to massively streamline the process of getting a planetary vector tile set for the average person who might not have the strongest hardware or the desire to spend £££ on a 64 core 128gb RAM server. Unfortunately, if you cut out the cost, you increase the time. Expect the process to take a couple of days from start to finish on average hardware.

Software

  1. Have Docker installed.

Serving mbtiles

Software

We would recommend something like tileserver-gl. Further reading can be found on the openstreetmap wiki.

You can quickly serve using tileserver-gl:

docker run --rm -it -v $(pwd)/data:/data -p 8080:80 maptiler/tileserver-gl

Styles

The default output of sequentially-generate-planet-mbtiles looks to match with the open source OSM 'Bright' style.

When accessing your tileserver with something like MapLibre from a front end application, a good place to start would be passing it a copy of the above 'Bright' style, making sure to edit the urls to point to the correct places.

You can edit the output of sequentially-generate-planet-mbtiles by providing a customised process or config file through the config file.

Style first considerations

If making your own style or editing an existing one, note that sequentially-generate-planet-mbtiles by default will write text to the name:latin tag. If your maps are displayed, but missing text, check that your style is looking for name:latin and not something else (e.g. simply name).

Pay attention to your fonts. The OSM Bright style makes use of Noto Sans variants (bold, italic & regular). If you are using tileserver-gl to serve your tiles, it only comes with the regular variant of Noto Sans (not the bold or the italic); therefore, it may look like text labels are missing since the style won't be able to find the fonts. You should therefore consider editing the style and changing all mentions of the font to use only the regular variant. Alternatively, you could ensure that all fonts necessary are present.

Further to the above, please find in this repo, a slightly edited OSM Bright style for use with the default tileserver-gl. Feed this to your MapLibre or similar front end for a pleasent map suitable for most use cases.

FAQ

  1. How long will this take? Low spec hardware? Whole planet? A few days. Maybe less than 48 hours for 16 CPUs.
  2. Would I use this if I have powerful hardware? Maybe. Since the programme essentially saves its progress as it goes, even if you have strong hardware, you are reducing the time taken to redo the process in the event of a crash or file corruption. Further, the RAM is what is really saved here so if you have say 32 cores and 64gb RAM, you still would not be able to generate the entire planet by loading it into memory. Additionally, it just saves time configuring everything.
  3. Why do I have to run part of the programme with 'sudo' privileges? Many docker installations require sudo to be executed. You may not have to execute the programme with sudo.
  4. Do I have to download the entire planet? At present, yes. Since if you are not downloading the entire planet, there are other tools out there which do a fine job of getting you mbtiles. We are working on being able to generate mbtiles for smaller areas (such as continents which may still not fit into the average computers RAM)
  5. Does 'low spec' mean I can run it on my toaster? Maybe, but mostly not. But you can happily run it on you 4core CPU/4gb RAM home pc without too much trouble. Just time.
  6. Didn't this used to use GeoFabrik? It did but the plan was always to move away from geofabrik sources for the planet since it felt unnecessary, when the data was already available direct from source. Further, the GeoFabrik data leaves gaps in the ocean and some of their slices require more than 4gb RAM to process in memory. Ultimately, by getting the data from source, we have more control over it.
  7. Why would I use this over Planetiler? Planetiler is a fantastic project, however it still requires minimum 32gb RAM to complete the entire planet (0.5x the size of the planet pbf file).

Acknowledgements

Please take the time to thank the folks over at tilemaker, tippecanoe and osmium. They are the reason any of this is possible in the first place. It goes without saying, our thanks go out to OpenStreetMap.

Attribution

Please attribute openmaptiles, openstreemap contributors and tippecanoe if any data derived from this programme is used in production.

Licenses

Files generated by sequentially-generate-planet-mbtiles are subject to the licenses described by tippecanoe and OpenStreetMap.

sequentially-generate-planet-mbtiles is subject to the MIT license.

Contributions

All welcome! Feature request, pull request, bug reports/fixes etc - go for it.

Comments
  • mbtiles can't be merged

    mbtiles can't be merged

    In the final step of the process (when the mbtiles are being merged) the program tries to use a docker container that doesn't exist locally not on docker hub:

    Unable to find image 'sequential-tippecanoe:latest' locally
    docker: Error response from daemon: pull access denied for sequential-tippecanoe, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
    

    I didn't remove any build docker container locally though.

  • Street names are cut off on higher zoom levels

    Street names are cut off on higher zoom levels

    I was able to successfully build a planet.mbtiles on my machine. When rendering the tiles with tileserver-gl I can see that on higher zoom levels the tiles borders are cutting of the highway numbers. Or at least neigbhoring tiles are not matching the cut off.

    Is this to be expected due slicing that is being done for compartmentalizing the mbtile generation?

    image
  • Some landcover files can not be found

    Some landcover files can not be found

    First of all, thank you for this awesome project, this was exactly what I was looking for the whole time!

    When the shapes are being read to write the .mbtiles the following error occurs. Is this to be expected or did the file locations change?

    Bounding box -85, -85, -84, 85
    Reading .shp ocean
    Reading .shp urban_areas
    Reading .shp ice_shelf
    Reading .shp glacier
    Sorting loaded shapes
    Reading .pbf /pbf/95.osm.pbf
    Unable to open landcover/ne_10m_urban_areas/ne_10m_urban_areas.shp or landcover/ne_10m_urban_areas/ne_10m_urban_areas.SHP.
    Unable to open landcover/ne_10m_antarctic_ice_shelves_polys/ne_10m_antarctic_ice_shelves_polys.shp or landcover/ne_10m_antarctic_ice_shelves_polys/ne_10m_antarctic_ice_shelves_polys.SHP.
    Unable to open landcover/ne_10m_glaciated_areas/ne_10m_glaciated_areas.shp or landcover/ne_10m_glaciated_areas/ne_10m_glaciated_areas.SHP.
    
  •  mbtiles.go:63: exit status 255

    mbtiles.go:63: exit status 255

    Good day,

    I keep getting this on with latest version. It happens after server hours of various processing. Restarting the process gives sdame result.

    root@openmaptiles:/disk1# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.4 LTS Release: 20.04 Codename: focal

    2022/11/14 22:33:20 SLICE: target 3097895965-tmp.osm.pbf requires further slicing 2022/11/14 22:33:20 operating on: /disk1/pbf/3097895965-tmp.osm.pbf 2022/11/14 22:33:21 slicing 3097895965-tmp.osm.pbf >>> 2855357057-tmp.osm.pbf (-0.010000,-90.000000,11.259375,90.000000) 2022/11/14 22:42:57 SLICE: 3097895965-tmp.osm.pbf >>> 2855357057-tmp.osm.pbf (-0.010000,-90.000000,11.259375,90.000000) success 2022/11/14 22:42:57 slicing 3097895965-tmp.osm.pbf >>> 1606289621-tmp.osm.pbf (11.239375,-90.000000,22.508750,90.000000) 2022/11/14 22:50:39 SLICE: 3097895965-tmp.osm.pbf >>> 1606289621-tmp.osm.pbf (11.239375,-90.000000,22.508750,90.000000) success 2022/11/14 22:50:39 SLICE: 2855357057-tmp.osm.pbf has reached target size; moving to safety. 2022/11/14 22:50:39 SLICE: 1606289621-tmp.osm.pbf has reached target size; moving to safety. 2022/11/14 22:50:39 SLICE: 1997111479-tmp.osm.pbf has reached target size; moving to safety. 2022/11/14 22:50:39 SLICE: 239617888-tmp.osm.pbf has reached target size; moving to safety. 2022/11/14 22:50:39 SLICE: 837367546-tmp.osm.pbf has reached target size; moving to safety. 2022/11/14 22:50:39 generating temporary mbtiles: /disk1/mbtiles/9426803175.mbtiles from /disk1/pbf/slices/1606289621-tmp.osm.pbf; directory output: false Invalid JSON file. 2022/11/14 22:50:40 mbtiles.go:63: exit status 255

    any help appreciated

    Thank you

  • Coastline and Rivers broken on planet generation

    Coastline and Rivers broken on planet generation

    I rendered a mbtiles set of the whole planet using sequentially-generate-planet-mbtiles on a virtual cloud server. The process completed after about a day and overall looks good, except for some coastline and river issues, for example in the north-eastern area of span and next for Tarifa (spain as well).

    System

    • Host: Hetzner CPX51
    • OS: Ubuntu 20.04
    • 16 Cores, 32GB RAM
    • Version of Generator: unix-amd64-v3.1.0

    Configuration

    Run command:

    $ ./sequentially-generate-planet-mbtiles--unix-amd64-v3.1.0 -c config.json
    

    config.json:

    {
      "pbfFile": "./planet.osm.pbf",
      "workingDir": "./output/work",
      "outDir": "./output/out",
      "excludeOcean": false,
      "excludeLanduse": false,
      "TilemakerConfig": "",
      "TilemakerProcess": "",
      "maxRamMb": 0,
      "outAsDir": false,
      "skipSlicing": false,
      "mergeOnly": false,
      "skipDownload": true
    }
    

    Results:

    Bildschirmfoto 2022-10-23 um 13 00 05 Bildschirmfoto 2022-10-23 um 13 00 15 Bildschirmfoto 2022-10-23 um 12 59 53 Bildschirmfoto 2022-10-23 um 12 59 36
  • Slicing fails with germany-latest.osm.pbf

    Slicing fails with germany-latest.osm.pbf

    Describe the bug I tried to use this with germany-latest.osm.pbf from Geofabrik, but with fails to slice the file. The extract should work, because I extracted a smaller region from with with osmium. tilemaker successfully creates tiles from that extract, but not from the whole thing, because I don't have enough RAM. I don't know if this also happens with other extracts or the whole planet, I don't have enough storage to try it with the whole thing

    To Reproduce Steps to reproduce the behavior:

    1. Download germany-latest.osm.pbf from Geofabrik
    2. set the file pbfFile parameter in config.json to the downloaded file.
    3. run ./sequentially-generate-planet-mbtiles--unix-amd64-v3.1.0 -c config.json

    Expected behavior The program slices the file and then generates tiles.

    Screenshots

    2022/09/13 16:49:07 attempting to use not more than 13746 MB of ram
    2022/09/13 16:49:07 using tileserver-gl-basic style target
    2022/09/13 16:49:07 #
    2022/09/13 16:49:07 loggers.go:26: #
    2022/09/13 16:49:07 #
    2022/09/13 16:49:07 resumption of a previously stopped execution with different parameters detected
    UNKNOWN THINGS CAN HAPPEN WHEN RESUMING WITH DIFFERENT PARAMETERS. You should only proceed if you are not confident that your changed parameters will have no adverse affect on the end result or are prepared to accept the outcome; otherwise you should clean the working/output directories and start again (you can save and replace downloaded files if requried). DO YOU WISH TO CONTINUE? yes/no
    yes
    2022/09/13 16:49:09 sequentially-generate-planet-mbtiles started: &{srcFileProvided:true PbfFile:/home/hz/Dokumente/osm/planet-sequencial/germany-latest.osm.pbf WorkingDir:/home/hz/Dokumente/osm/planet-sequencial/data OutDir:/home/hz/Dokumente/osm/planet-sequencial/build ExcludeOcean:false ExcludeLanduse:false TilemakerConfig:/home/hz/.cache/sequentially-generate-planet-mbtiles/tilemaker/resources/config-openmaptiles.json TilemakerProcess:/home/hz/.cache/sequentially-generate-planet-mbtiles/tilemaker/resources/process-openmaptiles.lua MaxRamMb:13746 OutAsDir:false SkipSlicing:false MergeOnly:false SkipDownload:false}
    2022/09/13 16:49:09 git repo /home/hz/.cache/sequentially-generate-planet-mbtiles/gdal already exists, skipping clone
    2022/09/13 16:49:09 git repo /home/hz/.cache/sequentially-generate-planet-mbtiles/osmium/osmium-tool already exists, skipping clone
    2022/09/13 16:49:09 git repo /home/hz/.cache/sequentially-generate-planet-mbtiles/osmium/libosmium already exists, skipping clone
    2022/09/13 16:49:09 git repo /home/hz/.cache/sequentially-generate-planet-mbtiles/tilemaker already exists, skipping clone
    2022/09/13 16:49:09 git repo /home/hz/.cache/sequentially-generate-planet-mbtiles/tippecanoe already exists, skipping clone
    2022/09/13 16:49:09 docker image sequential-osmium already built - proceeding without cached rebuild
    2022/09/13 16:49:09 docker image sequential-gdal already built - proceeding without cached rebuild
    2022/09/13 16:49:09 docker image sequential-tilemaker already built - proceeding without cached rebuild
    2022/09/13 16:49:10 docker image sequential-tippecanoe already built - proceeding without cached rebuild
    2022/09/13 16:49:10 source file provided - skipping planet download https://planet.openstreetmap.org/pbf/planet-latest.osm.pbf
    2022/09/13 16:49:10 water-polygons-split-4326.zip already exists; skipping download.
    2022/09/13 16:49:10 ne_10m_urban_areas.zip already exists; skipping download.
    2022/09/13 16:49:10 ne_10m_antarctic_ice_shelves_polys.zip already exists; skipping download.
    2022/09/13 16:49:10 ne_10m_glaciated_areas.zip already exists; skipping download.
    2022/09/13 16:49:10 unzipping /home/hz/Dokumente/osm/planet-sequencial/data/water-polygons-split-4326.zip
    2022/09/13 16:49:10 unzipping /home/hz/Dokumente/osm/planet-sequencial/data/ne_10m_urban_areas.zip
    2022/09/13 16:49:10 unzipping /home/hz/Dokumente/osm/planet-sequencial/data/ne_10m_antarctic_ice_shelves_polys.zip
    2022/09/13 16:49:10 unzipping /home/hz/Dokumente/osm/planet-sequencial/data/ne_10m_glaciated_areas.zip
    2022/09/13 16:49:10 slice generation started; there may be significant gaps between logs
    2022/09/13 16:49:10 target file size: 916 MB
    2022/09/13 16:49:10 operating on: /home/hz/Dokumente/osm/planet-sequencial/germany-latest.osm.pbf
    2022/09/13 16:49:10 tree.go:35: extract.go | Slicer | Failed to get extent: exit status 1
    
    

    It does not change anything if I delete the working and output directories.

    Desktop (please complete the following information):

    • OS: Fedora Workstation 36
    • Docker: podman-docker version 4.2.0
  • Error building osmium in Debian Bullseye

    Error building osmium in Debian Bullseye

    Hi, I'm getting the following error:

    Step 2/10 : RUN apt-get update
     ---> Running in c76f22718bd5
    Get:1 http://deb.debian.org/debian bookworm InRelease [157 kB]
    Get:2 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]
    Get:3 http://deb.debian.org/debian bookworm-updates InRelease [49.6 kB]
    Get:4 http://deb.debian.org/debian bookworm/main amd64 Packages [8470 kB]
    Fetched 8724 kB in 7s (1287 kB/s)
    Reading package lists...
    E: Problem executing scripts APT::Update::Post-Invoke 'rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true'
    E: Sub-process returned an error code
    The command '/bin/sh -c apt-get update' returned a non-zero code: 100
    2022/08/30 15:16:45 containers.go:48: failed to build osmium container: exit status 100
    

    When I run "apt-get update" outside of the container, it exits w/o error.

Changelog management tool, avoid merge conflicts and generate markdown changelogs.

chalog This is chalog, a changelog management tool. With chalog you can manage your project's changelog in a simple markdown format, split across mult

Jul 7, 2022
Parse awesome-go README file and generate a new README file with repo info.

Awesome Go Extra All data are from awesome-go and GitHub API. Audio and Music Libraries for manipulating audio. Name Description Star Open Issues Crea

Aug 11, 2022
Go-generate-cv - Simple CV generator developed in Go

go-generate-cv Simple CV generator developed in Go Milestone Have a form to fill

Jan 10, 2022
Goal is to generate logger and tracer wraps around a certain struct
Goal is to generate logger and tracer wraps around a certain struct

Goal is to generate logger and tracer wraps around a certain struct

Feb 13, 2022
A golang CTF competition platform with high-performance, security and low hardware requirements.
A golang CTF competition platform with high-performance, security and low hardware requirements.

CTFgo - CTF Platform written in Golang A golang CTF competition platform with high-performance, security and low hardware requirements. Live Demo • Di

Oct 20, 2022
Automatically creates & tiles .tmx format maps from a world map interface
Automatically creates & tiles .tmx format maps from a world map interface

Autotile Create tiled maps for an arbitrarily large world space from a simple interface, then add larger objects randomly with simple rules (eg. place

Aug 19, 2022
A project outputs Bluetooth Low Energy (BLE) sensors data in InfluxDB line protocol formatA project outputs Bluetooth Low Energy (BLE) sensors data in InfluxDB line protocol format

Intro This project outputs Bluetooth Low Energy (BLE) sensors data in InfluxDB line protocol format. It integrates nicely with the Telegraf execd inpu

Apr 15, 2022
MatrixOne is a planet scale, cloud-edge native big data engine crafted for heterogeneous workloads.
MatrixOne is a planet scale, cloud-edge native big data engine crafted for heterogeneous workloads.

What is MatrixOne? MatrixOne is a planet scale, cloud-edge native big data engine crafted for heterogeneous workloads. It provides an end-to-end data

Dec 26, 2022
planet is a blockchain built using Cosmos SDK and Tendermint and created with Starport.

planet planet is a blockchain built using Cosmos SDK and Tendermint and created with Starport. Get started starport chain serve serve command install

Oct 31, 2021
Planet Scale Robotics - Offload computation-heavy robotic operations to GPU powered world's first cloud-native robotics platform.

robolaunch ?? Planet Scale Robotics - Offload computation-heavy robotic operations to GPU powered world's first cloud-native robotics platform. robola

Jan 1, 2023
Quickly clone an entire org/users repositories into one directory - Supports GitHub, GitLab, Bitbucket, and more
Quickly clone an entire org/users repositories into one directory - Supports GitHub, GitLab, Bitbucket, and more

ghorg ghorg allows you to quickly clone all of an orgs, or users repos into a single directory. This can be useful in many situations including Search

Jan 1, 2023
⚙️ Convert HTML to Markdown. Even works with entire websites and can be extended through rules.
⚙️ Convert HTML to Markdown. Even works with entire websites and can be extended through rules.

html-to-markdown Convert HTML into Markdown with Go. It is using an HTML Parser to avoid the use of regexp as much as possible. That should prevent so

Jan 6, 2023
A command-line to create a pull request to review the entire content of a Github repository.

Pull Request Me Pull Request Me (PRMe) creates a pull request for the entire content of a Github repository. This is useful to solicit review comments

Nov 2, 2021
erchive is a go program that compresses and encrypts files and entire directories into .zep files (encrypted zip files).

erchive/zep erchive is a go program that compresses and encrypts files and entire directories into .zep files (encrypted zip files). it compresses usi

May 16, 2022
Mattermost is an open source platform for secure collaboration across the entire software development lifecycle.
Mattermost is an open source platform for secure collaboration across the entire software development lifecycle.

Mattermost is an open source platform for secure collaboration across the entire software development lifecycle. This repo is the primary source for c

Jan 2, 2023
Download an entire website with Go

Go Download Web A simple command-line application to download an entire online website, including CSS, JSS, and other assets. Coded with Go. Project s

Nov 23, 2022
DeepCopy a portable app that allows you to copy all forms of specified file types from your entire file system of the computer

DeepCopy a portable app that allows you to copy all forms of specified file types from your entire file system of the computer

Dec 20, 2021
zipspy - a CLI tool to extract files from zip archives in S3 without needing to download the entire archive

Zipspy allows you interact with ZIP archives stored in remote locations without requiring a local copy. For example, you can list the filenames in an S3 ZIP archive, download a subset of files, search and retrieve files with regular expressions, and more!

Feb 19, 2022
Live on-demand transcoding in go using ffmpeg. Also with NVIDIA GPU hardware acceleration.

Go live HTTP on-demand transcoding Transcoding is expensive and resource consuming operation on CPU and GPU. For big companies with thousands of custo

Dec 16, 2022
gRPC to JSON proxy generator following the gRPC HTTP spec
gRPC to JSON proxy generator following the gRPC HTTP spec

The gRPC-Gateway is a plugin of the Google protocol buffers compiler protoc. It reads protobuf service definitions and generates a reverse-proxy server which translates a RESTful HTTP API into gRPC. This server is generated according to the google.api.http annotations in your service definitions.

Jan 3, 2023