Show HN: OpenFreeMap – Open-Source Map Hosting (openfreemap.org)

848 points by hyperknot ↗ HN
Hi HN,

After 9 years of running my own OpenStreetMap tile server infra for MapHub (https://news.ycombinator.com/item?id=11389989), I've open-sourced it and launched OpenFreeMap.

You can either self-host or use our public instance. Everything is open-source, including the full production setup — there’s no 'open-core' model here. Check out the repo (https://github.com/hyperknot/openfreemap). The map data comes from OpenStreetMap.

I also provide weekly full planet downloads both in Btrfs and MBTiles formats.

I aim to cover the running costs of the public instance through donations.

Looking forwards for your feedback.

242 comments

[ 4.4 ms ] story [ 341 ms ] thread
This is neat! After the huge price increase a couple years ago with GMaps, it looks like you’ve come up with a creative way to offer much of the same functionality for most users. It’s unfortunate to still see small business sites to this day with error messages on their map widgets because of the API change from Google.

I know nothing about mapping, but I’ve always had a dream of making a private neighborhood map which labels each house with people, sort of like a visual Rolodex. It would be great to have property boundaries, too. Do you have any suggestions for places to start? I don’t even know what file formats would hold this sort of data.

this might be helpful?: https://github.com/martynafford/natural-earth-geojson/blob/m...

public domain map data in GeoJSON format.

also, for google maps I know you can respond to interactions with the supplied points of interest like buildings, including homes, and from that point you can obtain an address via reverse geocoding or some other technique. I expect other mapping tools may have similar abilities but I don't have any experience with anything other than Google.

Thanks! I don't know where you'd be able to get property boundaries, I guess it's usually not open-source / public data? Probably depends on the country / city.
In the USA, parcel outlines are commonly handled at the county level. You can often do a search for “[your county] GIS maps” and find their ArcGIS map of the county property lines with metadata about who owns what. Who knows if any of them are willing to share the data, but that’s where it lives.
If you live in the US, you can get parcel information from your local tax assessor's website, usually. Sometimes it's devoid of owner information. Such cases usually require going to a company like ReGrid or Corelogic to purchase the data.

I work for a company (onXmaps) which produces user-friendly maps of such information. You could use our app to create such a "rolodex" of your neighborhood, by annotating individual parcels with your neighbors' information.

https://onxmaps.com

Thanks, Tony! I’m actually an Elite member of the off-road flavor! Is your recommendation to essentially use waypoints for the info?

In my mind I’d really like to host my own map which neighbors could share, just starting from a baseline of parcel boundaries and a way to drop info on each plot (onX does this wonderfully already).

Back in the day, my mom would make a little neighborhood diagram using MS Publisher and drawing boxes at the approximate locations of houses, and include names & phone numbers of each house. She would then distribute copies to the neighbors to hang on fridges. I loved that idea and basically want an online version of that, in a perfect world!

nice! yes, that's what I was suggesting for sure. You could put waypoints with contact info in a folder, and share that? Wouldn't obviously be useful for people without the apps.
I'm relatively new to mapping, can you explain the difference between running Leaflet and a free map tiling provider compared to your product?
As far as I know, there are no "Free Map Tiling provider"-s. This project aims to be exactly one. You can use it with Leaflet using the https://github.com/maplibre/maplibre-gl-leaflet plugin.
Interesting thanks, I've used map tilers in the past without paying, maybe I just never came up against any rate limiting
I asked the question as a top level comment but also duplicating here. Isn't Apache Baremaps a "free map tiling provider"? Or do I misunderstand what a tiling provider is?

https://baremaps.apache.org/

They are providing the building blocks for making a self-hosted vector tiles server, they don't actually host the tiles.
(comment deleted)
Looks great love the free tiles and no limits or API keys.

Question, why use btrfs?

Afaik btrfs supports incremental send / sync very efficiently, so if you just want an update it saves bandwidth
So a full planet OSM extract is about 300 million binary files, in total about 90 GB. The most popular ways to store it:

- MBTiles - an SQLite file, each file is a row in a table, you need a server to serve it.

- PMTiles - a single file, optimised for serverless usage.

- Extract them into a directory, which in practice should be on a partition image. This is the approach I choose.

I tested ext4 and Btrfs and I choose Btrfs. The reason is how ext4 and Btrfs handles inodes. Btrfs handles inodes so much better compared to ext4, it doesn't allocate them at start and also allows putting tiny files right with the metadata.

Because here the average tile size is only 405 bytes, most of the tiles can actually stored with the Btrfs metadata block. From the latest run:

Btrfs data is 51.57GiB

Btrfs metadata is 84.37GiB

I apologize if this is something stupid, or answered elsewhere, but is there a good way to trim Planet down to a smaller area?

I've been making some custom map stuff for mountain bike trails and I'd really like to move to self-hosted vector tiles for all layers, but too much of what I find says to start with Planet.osm when all I really need is a State (in the US) or even a few-miles-wide area.

(My goal is to basically snapshot OSM data, generate tiles, and use that until I decide to do another snapshot down the line, so the underlying data doesn't change. And limit it to a small area because that's all I need.)

Examples of maps I've done this way, and want to improve, are: https://trailmaps.app/ramba/ and https://trailmaps.app/dte/

If you know the tile numbers, you can just copy them out of the Btrfs image.
Look into Planetiler [1] (which OP uses for tile generation). It supports downloading regions that are listed on Geofabrik [2] and converting them to mbtiles or pmtiles. Geofabrik has separate extracts for all US states, for example. If you need to extract an even smaller area from that result, GDAL has support for mbtiles so you could use gdalwarp [3] to extract a new mbtiles file out of it using bounds.

Another option is to use the extract functionality in pmtiles [4] to extract your area of interest from their daily full-planet pmtiles builds. You can then statically host that file and use that in your client with one of their client libraries.

[1] https://github.com/onthegomap/planetiler

[2] https://download.geofabrik.de/

[3] https://gdal.org/en/latest/programs/gdalwarp.html

[4] https://docs.protomaps.com/pmtiles/cli#extract

This sounds like a perfect application for EROFS[1]. While it comes from an embedded systems background, it has seen some usage in container use cases and is moving towards a general "mountable tar" application. It would also avoid the tedium you have to go through in shrink_btrfs.py because you can just generate the image out of a tree.

I wanted to give repackaging the btrfs image a shot but the download was pretty slow - I assume your server is getting HN-hugged a bit so I didn't want to make it worse and stopped the download.

[1] https://erofs.docs.kernel.org/en/latest/index.html

Thanks a lot, I didn't know about it! I also liked the fact that Btrfs is probably super well tested in the Linux kernel by now.

btrfs.openfreemap.com just a public Cloudflare bucket, no idea why it might be slow.

> I also liked the fact that Btrfs is probably super well tested in the Linux kernel by now.

btrfs has certainly been around for longer, but in my (embedded systems only) experience, EROFS has been pretty solid - it's slowly being picked up by Android, so it is definitely seeing a lot of use in the wild (probably surpassing btrfs by the number of installations already).

> btrfs.openfreemap.com just a public Cloudflare bucket, no idea why it might be slow.

I'm getting 30 MiB/s (on a gigabit uplink) - not great, not terrible. A .torrent would be nice but I guess outside of being on the HN front page full-planet downloads by different people won't synchronize enough for this to be useful (and using web seeds is problamtic in its own right with small-ish chunks).

Would be interested in seeing a cost bar vs donations bar on the website.
Currently I'm paying for 3 dedicated servers at Hetzner and getting total donations of $11 USD per month.

Making this automatic might not be easy, but I might do it one day, it might help with the donations.

>getting total donations of $11

That total has gone up. :-)

Not currently having any plans of using openfreemap, but I like the cut of your jib. I'm currently in the process of generating aerial tiles for Colorado, and updating 2 of our map tile sets (bitmap tiles, Here and OpenStreetMap), but at some point we should switch to vector tiles. When we do I'll try to get a business sponsorship going, but it is nearly impossible for me to get the company to pay for sponsorship. :-(

Thank you so much for your donation, it's appreciated!
Always on the lookout for self-hosted map servers, so I'll definitely try this one out.

Slightly off-topic, one thing I'm having a hard time finding is satellite imagery. I need to self-host an offline web application using CesiumJS, and while I can spin up a map server, I can't find satellite imagery for free or cheap. I've used MapTiler[0], their server works great and they offer low-res satellite imagery for free/testing, but their high-res images are out of my price range.

Anyone know of resources for downloading offline images of satellite imagery, compatible with OpenFreeMap or other server for use with CesiumJS? Doesn't have to be super recent images but would be nice.

[0]: https://www.maptiler.com/

Satellite images are definitely expensive, they are by far the biggest cost for MapHub. I spend more on satellite images per month than on servers. I couldn't find a high quality satellite images from free sources.
Currently researching this myself? Have you explored the satellite images from ESA/NASA? They are painful to discover but they're available to download for free and fairly (3-6 months) up to date.
I have, though admittedly not deeply enough. Agreed about the discoverability though, I never could quite find what I'm looking for (and perhaps I don't know exactly what I'm looking for)
I would be interested in the differences between this and protomaps
I'll write a detailed blog post for that, definitely.

Basically Protomaps / PMTiles allows you to do this serverless, but it has it's downsides.

There are two ways to use PMTiles with Cloudflare:

- Putting the file in a public bucket and use HTTP range requests.

- Deploy a worker to access it.

For the range request version, you can test PMTiles here: https://pmtiles.io/?url=https%3A%2F%2Fdata.source.coop%2Fpro....

It loads in 8-10 sec for me on a cold start. Of course it gets faster if many of us try to request it at the same time, but if you check it once per day for example, it'll be really slow, up to 10 sec.

Compare that with OpenFreeMap here: https://openfreemap.org/quick_start

It's near instant for me. (I know it's not full screen but you can make the app and then see how it's in full screen).

For the Cloudflare Workers version, I didn't find any publicly available full planet test, so I don't know the performance, but Workers are not free. It might not matter for a small project, but the $0.30/million requests per month can easily add up if your project gets popular.

In terms of OpenFreeMap, hosting it on a Cloudflare Worker would be prohibitively expensive.

I'm the developer of Protomaps, to summarize:

The latency you see on https://pmtiles.io/?url=https%3A%2F%2Fdata.source.coop%2Fpro... is representative of how PMTiles works on AWS S3, coming from the us-west-2 region. It will be reasonable to load for those in the western US and likely quite slow from Europe or Oceania.

If you want to make a direct comparison of Protomaps to OpenFreeMap, you need to compare serving OpenFreemap with NGINX from btrfs on disk, to running `pmtiles serve` on a `.pmtiles` file on disk, as described here: https://docs.protomaps.com/deploy/server

The OpenFreeMap page for me (in Taiwan) takes 1-2 seconds per tile, which is more than double the load tile for the PMTiles in us-west-2 example linked above.

The best solution to get latency competitive with commercial providers, for a global audience, is to cache tiles at CDN edge locations. I describe automated ways to do that with Cloudflare Workers and AWS Lambda + Cloudfront here:

https://docs.protomaps.com/deploy/cloudflare https://docs.protomaps.com/deploy/aws

I'm also experimenting with http://tigrisdata.com which lets you geo-distribute a static storage bucket like in this example: https://pmtiles.io/?url=https%3A%2F%2Fdemo-bucket.protomaps....

No, the ping is 150 ms to us-west-2, and the tiles load in like 5 seconds on a cold start. Of course we cannot test cold start on HN comments because HN is the definition of hot :-)

I can imagine workers to be fast, it's the range requests which are super slow. It's also outside of your control, it depends on how Cloudflare and S3 handles range requests to 90 GB files.

I think if you could make PMTiles split into files <10 MB, it'd be perfect with range requests.

I agree, there are tradeoffs to using static storage - the intended audience for PMTiles is those that prefer using static sites instead of administering a Linux server.

I would be interested to see a comparison of Btrfs + nginx serving latency, vs `pmtiles serve` from https://github.com/protomaps/go-pmtiles on a PMTiles archive on disk. That would be a more direct comparison.

I think there's potentially some interesting use case for tiles in Btrfs volumes and incremental updates, which I haven't tackled in PMTiles yet!

I think both solutions could easily saturate a 1 Gbps line. I benchmarked Btrfs + nginx and it could do 30 Gbps, which doesn't really make a difference if your server is 1 Gbps only.

The fact that there is no service running was the more important for me. Mostly for security and bugs. I had so many problems with various tile servers in production, they needed daily restarting, they had memory leaks, etc.

Basically I wanted to go nginx-only for security and to avoid tile server bugs.

I see, I think that's a good approach to enable serving with stock nginx as well as for companies that are built on Nginx or a plain HTTP serving stack already.

For PMTiles the module is loadable directly as a Caddy plugin (https://docs.protomaps.com/deploy/server#caddyfile) which I prefer to nginx for security and bugs (and automatic SSL), and also enables serving PMTiles from disk or a remote storage bucket without a separate service running.

Yes, PMTiles with the Caddy plugin is very similar to nginx + Btrfs.

At that point, the difference between the two projects is mostly which schema is being used.

You both specify the filesystem to be Btrfs. Is there any advantage in this case against ZFS, ext4, XFS... or is it just a practical choice?
Yes, small files can fit in the metadata, which makes a super big difference when you have 300 million files of 405 bytes each. Also, inode handling is way better compared to ext4.
Oh neat! Thanks! I'm checking the docs and I guess you're referring to "Inline files". I don't have much knowledge about btrfs, so I didn't know...

The nearest thing (and it's not really really similar, just related) that ZFS has is special VDEVs.

When you have an array of disks (usually "slow", like regular HDDs) you can attach to it another array of disks (usually very fast, like NVMe) where you can store metadata (file information) and optionally small files up to a size that you can define.

So for example you have a 50TB (or 500, who knows) array of SATA disks, and a small but superfast array of NVMe drives. Lets say 128GB. Or 512, or 1TB depending on you want to do.

File metadata is saved there, so doing a find, ls, tree... operation is now very fast. And if you save, for example, all files smaller than 32KB there (it will depend on your needs, also) all the small file operations will be way faster.

Yes, the key thing about Btrfs is how it handles inodes and how it can store data with the metadata. In the OpenFreeMap image, 60% of the files are stored with the metadata, essentially taking up no space.
I would also like to see this comparison. And for good measure it’d be great to also include Versatiles in this comparison.
If you would like to run this comparison for tileservers reading from disk, I wrote a small tool to simulate traffic based on access logs of OpenStreetMap tiles:

https://github.com/bdon/TileSiege

Thanks for this free service Zsolt. I hope it's not abused (too much traffic) and that donations from real users fund this very good initiative ;-)

On a related subject, I remember seeing MapHub sometime ago and I have it in my bookmarks for one of my (forgotten?) projects. Whenever I find some free time I need to sit down and try the free tier to see if it will do what I have in mind.

Thanks a lot for your words! I'm also curious whether the donations will be able to cover the bandwidth costs. Currently I'm paying for 3 dedicated servers at Hetzner and getting a total of $11 per month from donations.
FYI if you need a CDN you can get bulk pricing from fastly with a monthly commitment.

I'm not sure if their hosting works for you because you might be serving byte ranges. I think we're paying 2k/month usd for like 300TB/month. Backblaze-to-fastly is free, so no egress.

Love your project, more power to you. I'll be using this for a few side projects for sure.

At Hetzner, the bandwidth is unlimited in theory. In practice, there are stories of terminating accounts of those who used too much.

I don't think this project will ever make $2k per month. TBH, I'd be happy it it ever reaches $200 per month. I have to be very careful about what hosting providers to use and CDNs are out of the question.

I don't think it's still offered anywhere in the web interface, but Hetzner offers servers with 10Gbit uplink, with traffic charged at 1€/TB. Depending on resource usage this can be more cost effective than renting multiple servers, and paying for your traffic should prevent account termination for excessive traffic use.

https://docs.hetzner.com/robot/dedicated-server/network/10g-...

If I were running fastly, I'd donate bandwidth so that you would implement turn-key, bring-your-api-key fastly support to your open source setup!

As for other cdns - I remember https://neocities.org/ built their own cdn - but I couldn't immediately find a blog post about the cdn, or something related in their GitHub (unless every node runs part of it, which would make sense, I guess).

That's true: they do sponsor projects, as does cloudflare.

They could use you as a PoC/demo for their serverless stuff. Same with cloudflare.

It's worth it to ask. I can send you the contact for our fastly rep if you'd like.

The problem with hetzner, or any point solution, is that at some point you will saturate your bandwidth - either on the network or storage side.

Maybe it's worth front-ending it with cloudflare free, just to see/measure cache hits/requests/bandwidth?

Cloudflare Free is a good idea, but I'm afraid they'd be the one who limit me before. There is a comment in this thread who did 150 TB+ on Hetzner. I don't believe Cloudflare Free would allow 150 TB, not alone 300 TB in a month (I use two servers currently).
I wonder if other CDNs can help.

In addition to Cloudflare, bunny was on the radar too.

Bunny is also $10-$60/TB/month.

I believe Hetzner should not have any problem with using 100 mbps out of the 1 Gbps on their servers. That's 30 TB/month for free, per server. It'd be $300-$1800 per month on Bunny.

For this use case i would use the bunny volume tier which is $5/TB
That's still an order of magnitude more than what you can get with rented servers. I pay between 0.2 and 0.4 per TB doing nearly 2000TB a month.
Agreed. Getting a dedicated fibre link colocated is a great way to backfill and push the free tiers of CDNS.

Just like the cloud becoming easier to run on your own environments, tons of bandwidth is accessible too.

Hey, just curious. If you have no Cloud/LB/CDN how are you routing requests to datacenters? Anycast? DNS? Something else?
Round Robin DNS. The browser selects the best server, based on ping or some other internal metric.

Also thanks for the donation!

Very curious to know more about this, regarding PMTiles:

> Unfortunately, making range requests in 80 GB files just doesn't work in production. It is fine for files smaller than 500 MB, but it has terrible latency and caching issues for full planet datasets.

Wondering which part incurs the latency here.

I explained a bit about PMTiles in this comment: https://news.ycombinator.com/item?id=41636376

In summary, on a cold start (so now when it's on HN it might be totally meaningless), the following page loads in like 8-10 sec for me: https://pmtiles.io/?url=https%3A%2F%2Fdata.source.coop%2Fpro...

Technically why it's slow is entirely on CloudFlare, so I can only guess. But probably they are not mirroring files of this size across their datacenters / servers. I don't know how their public buckets hosting is done, but it's definitely very slow.

OpenFreeMap on the other hand seems almost instant for me.

(comment deleted)
I understand you don't plan to make money, only to cover costs. Nevertheless, I believe you would benefit from a more explicit "business plan". Your Gold support plan kind of fulfills that purpose (email support and an invoice), but right now it's kind of hidden in the middle of a donation request, and flavored as a donation. You might convince a lot more mba-type people to support you if you also extend the same offer under a heading like "business plan" (where you make it clear that commercial use is free, but you can subscribe to this totally-not-a-donation plan for email support)
I second making a very generous free tier, and then charging reasonably for more requests in wide buckets.

As a user, free or paid, it'd give me a lot more faith in this living past tomorrow.

I definitely not want to charge for requests, that's the founding principle of this project.

And the risk of this project is largely mitigated by offering the full repo as open-source, so you can always self host this if needed.

If you don't want to charge per request, you could also offer two pools of backend servers: free servers that are provided on a best-effort basis with fair-use-policy, and paid servers that are exclusive to people in the $150/month plan.

The latter should be easier to manage with more predictable traffic, while giving you more leeway to deal with abuse on the free servers if it ever becomes an issue.

Yes, I was thinking about that, it might actually be a good idea. Provide a premium service with SLAs, while providing the SLA-less service for free, with two pool of servers.
Do you think it'd be more clear to only accept donations on GitHub Sponsors and only offer actual support plans on the website? I mean actual email support, helping companies migrate their existing map stack to OpenFreeMap.
Would be super cool if you have a bitcoin and/or monero option. Even if just address for donations and not as payment for support.
100% keep sponsorship separate from paid support.
(comment deleted)
Thanks, I've thought about it and rewritten the whole donations / sponsorships / support plan section. What do you think?
The problem with putting different options in different places is that a lot of people will only ever see one of the options.
If you aren't doing this for a living and getting paid for it, or having someone else do it, you should reconsider either A) providing the support or B) how you make money.

You may think it noble to "only take donations" just to pay the hosting cost, etc. but providing people support is a completely different thing. People are stupid, needy and inconsiderate of your time, feelings and experience.

If you don't want to run ads, great! But your time should be compensated fairly as well. You should be charging businesses for things, with a substantial cost for substantial work. Charging a business is not the same as charging an end user and you should not be averse to doing so.

(comment deleted)
To be honest I don't see the problem with making commercial use non-free.

(a) They're making millions, you deserve a cut of that.

(b) If making money makes you more likely to be around in 10 years, that's attractive to businesses. Nobody knows when your donations might suddenly dry up.

The thing is that hosting this really isn't that expensive. My first GitHub Sponsors goal is to reach $175 per month, which would cover the hosting on Hetzner. Of course this cost can grow if the project gets more popular, but it's a good start!

I honestly believe this project can cover $175 per month eventually.

Of course there is the countless hours which went and which can possibly go into this, but to cover the hosting is still meaningful.

I mean, sure, but

Let's say 1 year from now your day job gets toxic and you have to work 18 hours a day just to pay your rent and expenses. Are you still going to maintain this?

What if the economy goes to shit and you have trouble scraping that $175/month? How long are you going to pay $175/month for something that isn't making money?

What if, instead, this became a part-time job of yours?

If I was a commercial user of your product, some assurance that your random personal situations aren't going to affect the product stability for a long time would be a good thing.

Yeah it is way easier for someone at a company to get approval for a paid service than for a "donation" of any kind, which raises lots of red flags.
I really like the idea.

Why OMT instead of protomaps? The latter is clearly where the community is moving towards (albeit very slowly).

I'm somewhat sceptical about the "free with no API keys" idea. I guess your service is not guaranteed to be up so no one too big will rely on it. But what if you start getting abuse or someone using them on some humongous site (e.g. one of those cheap restaurant email builders that always embed a map), and you start getting way too much traffic from random sources and websites. What would you do?

From the FAQs on GitHub [1]

> What about PMTiles?

> I would have loved to use PMTiles; they are a brilliant idea!

> Unfortunately, making range requests in 80 GB files just doesn't work in production. It is fine for files smaller than 500 MB, but it has terrible latency and caching issues for full planet datasets.

> If PMTiles implements splitting to <10 MB files, it can be a valid alternative to running servers.

[1] https://github.com/hyperknot/openfreemap

(comment deleted)
ok except "full planet datasets" make little sense for terrestrial features. Splitting .. aka sharding the files into basic continents would make SO much sense. Asia is big, but no requests for Africa mixed in.. Australia would be manageable?
PMTiles could come up with a version in the future where instead of one 90 GB file, they have 9 thousand 10 MB files. That would work well I believe.
The latency for small files and ranges of large files is pretty similar on most storage platforms, but there are some exceptions like Cloudflare R2.

The main reason PMTiles is one file and not two or more files is that it enables atomic updates in-place (which every mature storage platform supports) as well as ETag content change detection in downstream caches. All of the server and serverless implementations at http://github.com/protomaps support this now for AWS, S3-compatible storage, Google Cloud, and Azure.

Now I'm curious, what causes the latency for range requests with R2?
Range requests means work and logic. Getting a file requires no logic.

Also, I'm pretty sure range requests are going to be difficult to cache. That implies going to origin every request which is bad.

That's an interesting claim. I make range requests to 100GB+ files (genomics) all the time for work and it works great. I've never considered total file size as directly related to latency in this respect, assuming you have some sort of an index of course.
Here the requests are really really small, on average 405 bytes each. I guess in your genomics work you are making larger requests, so probably it's not so much of an issue.

BTW, we are discussing latency with bdon in this issue, it seems to be specific to Cloudflare: https://github.com/hyperknot/openfreemap/issues/16

I just tried @bmon's curl examples above with 100 byte requests. Similar results. I think the Cloudflare explanation is more likely.
If you store the PMTiles in S3 or any other object store that supports HTTP Range Requests, that's a no-brainer... In a normal disk on you own server, this might become interesting, yes.
So Protomaps is a really full stack map platform, they are competing with kind of like 3-4 projects at once:

- There is the Protomaps schema. It's competing with OpenMapTiles and Shortbread (https://shortbread-tiles.org/)

- There is the Protomaps file format. It's competing with MBTiles and say Btrfs images in OpenFreeMap.

- There is the Protomaps styles. It's competing with OSM Liberty and OSM Bright styles (https://github.com/maputnik/osm-liberty)

- There is the way to host the tiles, on CloudFlare workers, range requests, etc. It's competing with MBTiles servers or OpenFreeMap's nginx servers.

About getting abuse, how do you imagine it gets abuse? It's a static file showing OpenStreetMap data.

I mean traffic is the only thing what can be a problem, but I think Hetzner should be good till 30-100 TB per server.

I did 150TB+ on a 40 Euro Hetzner server for years without any issue and also did the same amount in a similar price range on multiple different providers. The cloud and CDNs charge a huge markup.
That's great to know! I know of one story where someone got terminated on Hetzner because of the bandwidth but it turned out he was also running a Tor node.
1) The Protomaps schema is mostly a re-implementation of the Tilezen project https://tilezen.readthedocs.io/en/latest/ which is a linux foundation project. OpenMapTiles, which OpenFreeMap uses, while open source, does not have a license that encourages derivative works or enables distributing styles under a standard FOSS software license (https://www.npmjs.com/package/protomaps-themes-base). That's also one motivation for developing Shortbread which is at this point less developed than Tilezen.

2) The file format (PMTiles) addresses a different audience than either MBTiles or Btrfs images. Both of those require administering a server for tiles, while PMTiles requires static blob storage and nothing else. You do have the option of using a server like MBTiles/btrfs which ought to be comparable in latency, and that's documented here: https://docs.protomaps.com/deploy/ as well as Lambda, Cloudflare Workers, Google Cloud Run and Azure Serverless functions.

3) There are no existing styles for MapLibre GL that work off the Tilezen layer, generalization and tagging scheme, so we need to develop one style, with multiple themes.

> OpenMapTiles, which OpenFreeMap uses, while open source, does not have a license that encourages derivative works

Can you elaborate on this ? I'm derivating OMT and am quite worried now ^^

OMT use a CC-BY license: https://creativecommons.org/faq/#can-i-apply-a-creative-comm... (edit: link)

This means that software that implements OMT, even if written from scratch, cannot be re-used by other FOSS projects (Apache, BSD, GPL, AGPL, other software in the OpenStreetMap ecosystem, etc) without affecting the license.

Ideally for Protomaps it should be possible to re-use just one portion - like only the label layer with your own layers from other sources, or even bundle it as a JS dependency in another open source project - without affecting the license of downstream projects.

Are you talking about just the OpenMapTiles spec, or some adjacent software? I'm certain that you can build software to some specification without ever agreeing to the spec text's licence, and that a CC-BY licenced spec doesn't limit any implementing system's licence.

Even so, CC-BY is permissive and you could include CC-BY content in a, say, GPL project. You just need to include both licences.

> I'm certain that you can build software to some specification without ever agreeing to the spec text's licence

That is exactly the opposite of OMT's copyright interpretation: https://github.com/openmaptiles/openmaptiles?tab=readme-ov-f...

> You just need to include both licences.

That is the definition of license incompatibility as described in the Creative Commons documentation above. The license is open source and a good fit for if you are running a paid map SaaS or free service as an end product, but is not compatible with the open source ecosystem as a building block.

> That is exactly the opposite of OMT's copyright interpretation.

They are entitled to their opinion, but I don't consider a database to be a derivative work of a schema (this should be clear, since databases of facts aren't copyrightable anyway), same for software (it's at least fair use in the US, see Google v. Oracle). This goes back to the debate on copyrightability of APIs, where a decision for copyrightability would ruin swathes of the software industry and much of free software.

Though I understand if you'd rather avoid using projects by people with weird legal opinions.

> That is the definition of license incompatibility as described in the Creative Commons documentation above.

Where do you see that? All I found was a statement that the CC share-alike licences can be converted to GPL, but no word on non-SA licences:

> Version 4.0 of CC’s Attribution-ShareAlike (BY-SA) license is one-way compatible with the GNU General Public License version 3.0 (GPLv3).

The FSF says that CC-BY is compatible with the GPL, and I believe this extends to all reasonable FLOSS licences: https://www.gnu.org/licenses/license-list.html#ccby

It's not uncommon for a piece of code to have multiple licences in a big project. One for licencing to that project, and another for sublicencing to the end user. Proprietary apps that include FLOSS code do this all the time.

> Where do you see that?

"Additionally, our licenses are currently not compatible with the major software licenses, so it would be difficult to integrate CC-licensed work with other free software. Existing software licenses were designed specifically for use with software and offer a similar set of rights to the Creative Commons licenses." https://creativecommons.org/faq/

> Though I understand if you'd rather avoid using projects by people with weird legal opinions.

The scale of the Protomaps project is small (I'm the only full-time developer) and I don't have the resources to interpret novel copyright situations. I think it's best for the ecosystem to abide by the license terms stated by the open source developer, instead of challenging their validity.

Seems like a great service! We could definitely consider this as an viable option for our startup's application. I am not an expert regarding the OSM data and maps in general, but how customizable is your library, can I somehow relatively easy add housenumbers of the addresses from OSM data on the buildings in the map?
I absolutely love this project and had a similar idea on my todo list for a while because I agree there should be at least one free open map provider with a developer friendly stack.

If you want free servers/bandwidth around the world, hit me up. My email is in my profile.

Thanks a lot for the offer, I'll definitely reach out!
Just want to say thank you for making this project. I think there's a good chance I will use it for a (very low bandwidth) personal project.
I know the github says docker free.... What would it take to dockerize so people can self host, say on kubernetes.
Someone making a Docker image from this. Instead of using Fabric's commands like c.sudo('git clone ...') it'd use the RUN commands.

I think it would be quite a straightforward task to transform it into a Docker file. I'd be happy to link to it on GitHub.

Hard links are to deduplicate identical tiles, right? How much does that save and how close is the tile with most links (empty one(s)?) to the filesystem limits? Inquiring minds want to know...
Yes, exactly, it's to save space. For example there is one such tile for "ocean", which covers 70% of earth.

In total, there are 271 million hard links. So out of 300 million files 271 are hard links!

The file system limit is 64k hard-links for the same file, so I have to handle the case when it's reached and then start a new file for the next 64k.

> The file system limit is 64k hard-links for the same file

I had never heard that, so I went sniffing around and it seems to be ext4 specific[1] but I wasn't able to easily get the limits for ZFS (or xfs, etc), so depending on how much glucose one wished to spend it may be better to use a different FS than all that renaming work around

1: https://en.wikipedia.org/wiki/Hard_link#Limitations

The whole extract_mbtiles.py file is 97 lines of code. This contains parsing MBTiles, writing metadata and some CLI specific lines. It's actually quite a concise script for doing this while taking care of the hard-link limits.
Just out of curiosity, is there no clever way to solve this within nginx with rules instead?
In nutiteq mobile maps SDK (later Carto, now abandonware) we used specifically compressed bitmap to represent 'water' and 'empty land' tilemasks to cover these two special cases. We provided planet-scale mobile embedded mbtiles package in 30GB if I remember well. This tile mask (quite instant bitmap index) concept should work well for server case also.
The Linux kernel's filesystem cache is actually really efficient at doing this. I doubt we could come up with a nginx scripting solution which could be equally efficient.
I miss some libre client for Google's Street View. On 3D maps, adapting Marble for OSGEarth should be a piece of cake.

If not, declaring one with IMGui+layers can be done in a week from any experienced C++ programmer. The included demos for OSGEarth already depict a minimal client with impressive 3D maps for a nearly non-supported demo.

I think KDE/Plasma lost a great oportunity there by not adopting OSGEarth.

What would be the aim of a libre client for Google's SW ? Street View API is quite expensive.

Do you know about https://panoramax.fr ?

This is amazing!

Last year I made a website for my gf where I had to build a custom map of Paris, and I struggled a lot trying to figure out how to actually make a map from scratch while avoiding paid services like mapbox.

I finally managed to hack something up using openstreetmap data, then some manual work in QGIS to customize the look, and voila - I had a bunch of folders filled with raster tiles.

This site is deployed for free on Netlify and is basically just a React SPA, a public folder with tiles, and I give the tile URL template to the OpenLayers lib to display it all nicely on the screen. Simple and it works!

I always wanted to improve the map a bit by using vector tiles as I think it looks nicer, but I thought you need a dedicated server for that? (unless I'm mistaken, correct me if I'm wrong)

Yes, you need a dedicated server with 128 GB RAM to generate the tiles. For hosting the tiles, you can use anything with 300 GB disk space, CPU is not important.
Very interesting, I might try this at $WORK.