# flutter\_map\_tile\_caching

{% hint style="danger" %}
You're viewing documentation for an older version of FMTC (v8).

For the latest documentation, see [v9](https://app.gitbook.com/o/1aKKbSpe255wyVNDoFYc/s/wSfoTlC2MsQfysSkR14N/ "mention").
{% endhint %}

{% embed url="<https://github.com/stars/JaffaKetchup/lists/fmtc-modules>" %}

<table data-card-size="large" data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><p><mark style="color:blue;">◉</mark> 📲</p><p><strong>Caching × Downloading</strong></p></td><td>Get both <strong>dynamic caching</strong> that works automatically as the user browses the map, and <strong>bulk downloading</strong> to preload regions onto the user's device, all in one convenient package!</td><td><ul><li><a data-footnote-ref href="#user-content-fn-1">Multi-cache ('store') support</a></li><li><a data-footnote-ref href="#user-content-fn-2">Wide variety of 'region' shapes</a></li><li><a data-footnote-ref href="#user-content-fn-3">Automatic sea tile skipping</a></li></ul></td><td></td></tr><tr><td><p><mark style="color:red;">◉</mark> 🏃</p><p><strong>Ultra-fast &#x26; Performant</strong></p></td><td>No need to bore your users to death anymore! Bulk downloading is super-fast, and can even reach speeds of <strong>over 600 tiles per second</strong><a data-footnote-ref href="#user-content-fn-4">*</a>. Existing cached tiles can be displayed on the map <strong>almost instantly</strong>. Don't even mention memory consumption: you won't realise there is any.</td><td><ul><li>Multi-threaded downloads</li><li>Tile buffering to reduce database writes</li><li>Streamlined behind-the-scenes to reduce memory consumption</li></ul></td><td></td></tr><tr><td><p><mark style="color:green;">◉</mark> 🧩</p><p><strong>Import &#x26; Export</strong></p></td><td>Using one of our <a href="https://github.com/stars/JaffaKetchup/lists/fmtc-modules">official extension modules</a>, allow your users to <strong>share</strong><a data-footnote-ref href="#user-content-fn-5">*</a> <strong>and backup</strong> their cached tiles! You could even remote control your organization's devices, by pushing tiles to them, keeping your tile requests (&#x26; costs) low!</td><td></td><td></td></tr><tr><td><p><mark style="color:purple;">◉</mark> 💖</p><p><strong>Quick To Implement (&#x26; Quicker To Love)</strong></p></td><td>A basic caching implementation can be setup in four quick steps, and shouldn't even take 5 minutes to set-up. Check out our <a data-mention href="get-started/quickstart">quickstart</a> instructions.</td><td>When you've done this, you'll realise how great your app is with FMTC <span data-gb-custom-inline data-tag="emoji" data-code="1f604">😄</span></td><td></td></tr></tbody></table>

{% hint style="info" %}
FMTC currently has some stability issues on certain platforms, especially iOS. These stability issues can cause unexpected behaviours.

I am working to resolve these issues in v9, benefiting from the improved stability of Isar v4.

For more information about what this means, see [#isar-stability-issues](https://fmtc.jaffaketchup.dev/v8/known-issues#isar-stability-issues "mention").
{% endhint %}

***

## Supporting Me

I work on all of my projects in my spare time, including maintaining (along with a team) Flutter's № 1 (non-commercially maintained) mapping library 'flutter\_map', bringing it back from the brink of abandonment, as well as my own plugin for it ('flutter\_map\_tile\_caching') that extends it with advanced caching and downloading.\
Additionally, I also own the Dart encoder/decoder for the QOI image format ('dqoi') - and I am slowly working on 'flutter\_osrm', a wrapper for the Open Source Routing Machine.

Sponsorships & donations allow me to continue my projects and upgrade my hardware/setup, as well as allowing me to have some starting amount for further education and such-like.\
And of course, a small amount will find its way into my Jaffa Cakes fund (<https://en.wikipedia.org/wiki/Jaffa_Cakes>) - why do you think my username has "Jaffa" in it?

Many thanks for any amount you can spare, it means a lot to me!

{% embed url="<https://github.com/sponsors/JaffaKetchup>" %}

## (Proprietary) Licensing

*I am not a lawyer, and this information is to the best of my understanding. You are urged to read the license yourself for a thorough understanding.*

This project is released under GPL v3. For detailed information about this license, see <https://www.gnu.org/licenses/gpl-3.0.en.html>. [choosealicense.com](https://choosealicense.com/licenses/gpl-3.0/) summarises the license with the following paragraph:

> Permissions of this strong copyleft license are conditioned on **making available complete source code of licensed works and modifications, which include larger works using a licensed work, under the same license**. Copyright and license notices must be preserved. Contributors provide an express grant of patent rights.

Essentially, whilst you can use this code within commercial projects, they must not be proprietary - they incorporate this 'licensed work' so they must be available under the same license. You must distribute your source code on request (under the same GPL v3 license) to anyone who uses your program.

However, I am willing to sell custom alternative proprietary licenses on a case-by-case basis and on request.

I learnt (and am still learning) to code with free, open-source software due to my age and lack of money, and for that reason, I believe in promoting open-source wherever possible to give equal opportunities to everybody, no matter their age or financial position. I'm not sure it's fair for commercial proprietary applications to use software made by people for free out of generosity. On the other hand, I am also trying to make a small amount of money from my projects, by donations or by selling licenses. And I recognise that commercial businesses may want to use my projects for their own proprietary applications.

Therefore, if you would like a license to use this software within a proprietary, I am willing to sell a (preferably yearly or usage based) license for a reasonable price. If this seems like what you want/need, please do not hesitate to get in touch at <fmtc@jaffaketchup.dev>.

## Get Help

Not quite sure about something? No problem. Please get in touch via any of these methods, and I'll be with you as soon as possible:

* For bug reports & feature requests: [GitHub Issues](https://github.com/JaffaKetchup/flutter_map_tile_caching/issues)
* For implementation/general support: The *#plugin* channel on the [flutter\_map Discord server](https://github.com/fleaflet/flutter_map#discord-server)
* For other inquires: <fmtc@jaffaketchup.dev>

[^1]: Keep your users' tiles organized, and even let them control what goes where!

[^2]: Choose from rectangular, circular, and line-based region shapes to bulk download tiles from. Allow your users to download their travel route without unnecessary tiles!

[^3]: Avoid downloading redundant, waste-of-space tiles that cover oceans, with this unique functionality, and bless your users with the gift of more usable capacity for useful maps!

[^4]: Speed is very dependent on tile server ability.

    Some tile servers will impose limits on bulk downloading (speeds and frequencies). Always read their ToS before using FMTC.

[^5]: Some tile servers forbid sharing of their tiles. Always read their ToS before using FMTC.
