Leaflet was created 11 years ago by Volodymyr Agafonkin, a Ukrainian citizen living in Kyiv.

Russian bombs are now falling over Volodymyr's hometown. His family, his friends, his neighbours, thousands and thousands of absolutely wonderful people, are either seeking refuge or fighting for their lives.

Russian soldiers have already killed tens of thousands of civilians, including women and children, and are committing mass war crimes like gang rapes, executions, looting, and targeted bombings of civilian shelters and places of cultural significance. The death toll keeps rising, and Ukraine needs your help.

As Volodymyr expressed a few days before the invasion:

If you want to help, educate yourself and others on the Russian threat, follow reputable journalists, demand severe Russian sanctions and Ukrainian support from your leaders, protest the war, reach out to Ukrainian friends, donate to Ukrainian charities. Just don't be silent.

Ukrainians are recommending the Come Back Alive charity. For other options, see StandWithUkraine.

If an appeal to humanity doesn't work for you, I'll appeal to your egoism: the future of Ukrainian citizens is the future of Leaflet.

It is chilling to see Leaflet being used for documenting Russia's war crimes, factual reporting of the war and for coordination of humanitarian efforts across Europe. We commend these uses of Leaflet.

If you support the actions of the Russian government (even after reading all this), do everyone else a favour and carry some seeds in your pocket.

Yours truly,
Leaflet maintainers.


Leaflet

Leaflet is the leading open-source JavaScript library for mobile-friendly interactive maps. Weighing just about 42 KB of gzipped JS plus 4 KB of gzipped CSS code, it has all the mapping features most developers ever need.

Leaflet is designed with simplicity, performance and usability in mind. It works efficiently across all major desktop and mobile platforms out of the box, taking advantage of modern browser features while being accessible on older ones too. It can be extended with a huge amount of plugins, has a beautiful, easy to use and well-documented API and a simple, readable source code that is a joy to contribute to.

For more info, docs and tutorials, check out the official website.
For Leaflet downloads (including the built main version), check out the download page.

We're happy to meet new contributors. If you want to get involved with Leaflet development, check out the contribution guide. Let's make the best mapping library that will ever exist, and push the limits of what's possible with online maps!

CI

Leaflet/Leaflet

{
"props": {
"initialPayload": {
"allShortcutsEnabled": false,
"path": "/",
"repo": {
"id": 931135,
"defaultBranch": "main",
"name": "Leaflet",
"ownerLogin": "Leaflet",
"currentUserCanPush": false,
"isFork": false,
"isEmpty": false,
"createdAt": "2010-09-22T16:57:44.000Z",
"ownerAvatar": "https://avatars.githubusercontent.com/u/2854298?v=4",
"public": true,
"private": false,
"isOrgOwned": true
},
"currentUser": null,
"refInfo": {
"name": "main",
"listCacheKey": "v0:1722016209.0",
"canEdit": false,
"refType": "branch",
"currentOid": "688033d4128c4b2347552d2ee742473c634a6ed0"
},
"tree": {
"items": [
{
"name": ".github",
"path": ".github",
"contentType": "directory"
},
{
"name": ".husky",
"path": ".husky",
"contentType": "directory"
},
{
"name": "build",
"path": "build",
"contentType": "directory"
},
{
"name": "debug",
"path": "debug",
"contentType": "directory"
},
{
"name": "dist",
"path": "dist",
"contentType": "directory"
},
{
"name": "docs",
"path": "docs",
"contentType": "directory"
},
{
"name": "spec",
"path": "spec",
"contentType": "directory"
},
{
"name": "src",
"path": "src",
"contentType": "directory"
},
{
"name": ".bundlemonrc.json",
"path": ".bundlemonrc.json",
"contentType": "file"
},
{
"name": ".eslintrc.js",
"path": ".eslintrc.js",
"contentType": "file"
},
{
"name": ".gitignore",
"path": ".gitignore",
"contentType": "file"
},
{
"name": "CHANGELOG.md",
"path": "CHANGELOG.md",
"contentType": "file"
},
{
"name": "CITATION.cff",
"path": "CITATION.cff",
"contentType": "file"
},
{
"name": "CODE_OF_CONDUCT.md",
"path": "CODE_OF_CONDUCT.md",
"contentType": "file"
},
{
"name": "CONTRIBUTING.md",
"path": "CONTRIBUTING.md",
"contentType": "file"
},
{
"name": "FAQ.md",
"path": "FAQ.md",
"contentType": "file"
},
{
"name": "LICENSE",
"path": "LICENSE",
"contentType": "file"
},
{
"name": "PLUGIN-GUIDE.md",
"path": "PLUGIN-GUIDE.md",
"contentType": "file"
},
{
"name": "README.md",
"path": "README.md",
"contentType": "file"
},
{
"name": "RELEASE.md",
"path": "RELEASE.md",
"contentType": "file"
},
{
"name": "package-lock.json",
"path": "package-lock.json",
"contentType": "file"
},
{
"name": "package.json",
"path": "package.json",
"contentType": "file"
}
],
"templateDirectorySuggestionUrl": null,
"readme": null,
"totalCount": 22,
"showBranchInfobar": false
},
"fileTree": null,
"fileTreeProcessingTime": null,
"foldersToFetch": [],
"treeExpanded": false,
"symbolsExpanded": false,
"isOverview": true,
"overview": {
"banners": {
"shouldRecommendReadme": false,
"isPersonalRepo": false,
"showUseActionBanner": false,
"actionSlug": null,
"actionId": null,
"showProtectBranchBanner": false,
"publishBannersInfo": {
"dismissActionNoticePath": "/settings/dismiss-notice/publish_action_from_repo",
"releasePath": "/Leaflet/Leaflet/releases/new?marketplace=true",
"showPublishActionBanner": false
},
"interactionLimitBanner": null,
"showInvitationBanner": false,
"inviterName": null
},
"codeButton": {
"contactPath": "/contact",
"isEnterprise": false,
"local": {
"protocolInfo": {
"httpAvailable": true,
"sshAvailable": null,
"httpUrl": "https://github.com/Leaflet/Leaflet.git",
"showCloneWarning": null,
"sshUrl": null,
"sshCertificatesRequired": null,
"sshCertificatesAvailable": null,
"ghCliUrl": "gh repo clone Leaflet/Leaflet",
"defaultProtocol": "http",
"newSshKeyUrl": "/settings/ssh/new",
"setProtocolPath": "/users/set_protocol"
},
"platformInfo": {
"cloneUrl": "https://desktop.github.com",
"showVisualStudioCloneButton": false,
"visualStudioCloneUrl": "https://windows.github.com",
"showXcodeCloneButton": false,
"xcodeCloneUrl": "https://developer.apple.com",
"zipballUrl": "/Leaflet/Leaflet/archive/refs/heads/main.zip"
}
},
"newCodespacePath": "/codespaces/new?hide_repo_select=true&repo=931135"
},
"popovers": {
"rename": null,
"renamedParentRepo": null
},
"commitCount": "7,820",
"overviewFiles": [
{
"displayName": "README.md",
"repoName": "Leaflet",
"refName": "main",
"path": "README.md",
"preferredFileType": "readme",
"tabName": "README",
"richText": "<article class=\"markdown-body entry-content container-lg\" itemprop=\"text\"><p dir=\"auto\">Leaflet was created 11 years ago by <a href=\"https://agafonkin.com\" rel=\"nofollow\">Volodymyr Agafonkin</a>, a Ukrainian citizen living in Kyiv.</p>\n<p dir=\"auto\">Russian bombs are now falling over Volodymyr's hometown. His family, his friends, his neighbours, thousands and thousands of absolutely wonderful people, are either seeking refuge or fighting for their lives.</p>\n<p dir=\"auto\">Russian soldiers have already killed tens of thousands of civilians, including women and children, and are committing mass war crimes like gang rapes, executions, looting, and targeted bombings of civilian shelters and places of cultural significance. The death toll keeps rising, and Ukraine needs your help.</p>\n<p dir=\"auto\">As Volodymyr <a href=\"https://twitter.com/LeafletJS/status/1496051256409919489\" rel=\"nofollow\">expressed a few days before the invasion</a>:</p>\n<blockquote>\n<p dir=\"auto\">If you want to help, educate yourself and others on the Russian threat, follow reputable journalists, demand severe Russian sanctions and Ukrainian support from your leaders, protest the war, reach out to Ukrainian friends, donate to Ukrainian charities. Just don't be silent.</p>\n</blockquote>\n<p dir=\"auto\">Ukrainians are recommending the <a href=\"https://savelife.in.ua/en/\" rel=\"nofollow\">Come Back Alive</a> charity. For other options, see <a href=\"https://stand-with-ukraine.pp.ua\" rel=\"nofollow\">StandWithUkraine</a>.</p>\n<p dir=\"auto\">If an appeal to humanity doesn't work for you, I'll appeal to your egoism: the future of Ukrainian citizens is the future of Leaflet.</p>\n<p dir=\"auto\">It is chilling to see Leaflet being used for <a href=\"https://ukraine.bellingcat.com/\" rel=\"nofollow\">documenting Russia's war crimes</a>, <a href=\"https://liveuamap.com/\" rel=\"nofollow\">factual reporting of the war</a> and for coordination of humanitarian efforts across Europe. We commend these uses of Leaflet.</p>\n<p dir=\"auto\">If you support the actions of the Russian government (even after reading all this), do everyone else a favour and <a href=\"https://www.theguardian.com/world/video/2022/feb/25/ukrainian-woman-sunflower-seeds-russian-soldiers-video\" rel=\"nofollow\">carry some seeds in your pocket</a>.</p>\n<p dir=\"auto\">Yours truly,<br>\nLeaflet maintainers.</p>\n<hr>\n<p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/489c571f84155648420dac3460a4dafdd191a9a893548704fccb9a6eb4478be2/68747470733a2f2f7261776769742e636f6d2f4c6561666c65742f4c6561666c65742f6d61696e2f7372632f696d616765732f6c6f676f2e737667\"><img width=\"600\" src=\"https://camo.githubusercontent.com/489c571f84155648420dac3460a4dafdd191a9a893548704fccb9a6eb4478be2/68747470733a2f2f7261776769742e636f6d2f4c6561666c65742f4c6561666c65742f6d61696e2f7372632f696d616765732f6c6f676f2e737667\" alt=\"Leaflet\" data-canonical-src=\"https://rawgit.com/Leaflet/Leaflet/main/src/images/logo.svg\" style=\"max-width: 100%;\"></a></p>\n<p dir=\"auto\">Leaflet is the leading open-source JavaScript library for <strong>mobile-friendly interactive maps</strong>.\nWeighing just about 42 KB of gzipped JS plus 4 KB of gzipped CSS code, it has all the mapping <a href=\"http://leafletjs.com/#features\" rel=\"nofollow\">features</a> most developers ever need.</p>\n<p dir=\"auto\">Leaflet is designed with <em>simplicity</em>, <em>performance</em> and <em>usability</em> in mind.\nIt works efficiently across all major desktop and mobile platforms out of the box,\ntaking advantage of modern browser features while being accessible on older ones too.\nIt can be extended with a huge amount of <a href=\"http://leafletjs.com/plugins.html\" rel=\"nofollow\">plugins</a>,\nhas a beautiful, easy to use and <a href=\"http://leafletjs.com/reference.html\" title=\"Leaflet API reference\" rel=\"nofollow\">well-documented</a> API\nand a simple, readable <a href=\"https://github.com/Leaflet/Leaflet\" title=\"Leaflet GitHub repository\">source code</a> that is a joy to <a href=\"https://github.com/Leaflet/Leaflet/blob/main/CONTRIBUTING.md\" title=\"A guide to contributing to Leaflet\">contribute</a> to.</p>\n<p dir=\"auto\">For more info, docs and tutorials, check out the <a href=\"http://leafletjs.com\" rel=\"nofollow\">official website</a>.<br>\nFor <strong>Leaflet downloads</strong> (including the built main version), check out the <a href=\"http://leafletjs.com/download.html\" rel=\"nofollow\">download page</a>.</p>\n<p dir=\"auto\">We're happy to meet new contributors.\nIf you want to <strong>get involved</strong> with Leaflet development, check out the <a href=\"https://github.com/Leaflet/Leaflet/blob/main/CONTRIBUTING.md\" title=\"A guide to contributing to Leaflet\">contribution guide</a>.\nLet's make the best mapping library that will ever exist,\nand push the limits of what's possible with online maps!</p>\n<p dir=\"auto\"><a href=\"https://github.com/Leaflet/Leaflet/actions/workflows/main.yml\"><img src=\"https://github.com/Leaflet/Leaflet/actions/workflows/main.yml/badge.svg\" alt=\"CI\" style=\"max-width: 100%;\"></a></p>\n</article>",
"loaded": true,
"timedOut": false,
"errorMessage": null,
"headerInfo": {
"toc": null,
"siteNavLoginPath": "/login?return_to=https%3A%2F%2Fgithub.com%2FLeaflet%2FLeaflet"
}
},
{
"displayName": "CODE_OF_CONDUCT.md",
"repoName": "Leaflet",
"refName": "main",
"path": "CODE_OF_CONDUCT.md",
"preferredFileType": "code_of_conduct",
"tabName": "Code of conduct",
"richText": null,
"loaded": false,
"timedOut": false,
"errorMessage": null,
"headerInfo": {
"toc": null,
"siteNavLoginPath": "/login?return_to=https%3A%2F%2Fgithub.com%2FLeaflet%2FLeaflet"
}
},
{
"displayName": "LICENSE",
"repoName": "Leaflet",
"refName": "main",
"path": "LICENSE",
"preferredFileType": "license",
"tabName": "BSD-2-Clause",
"richText": null,
"loaded": false,
"timedOut": false,
"errorMessage": null,
"headerInfo": {
"toc": null,
"siteNavLoginPath": "/login?return_to=https%3A%2F%2Fgithub.com%2FLeaflet%2FLeaflet"
}
}
],
"overviewFilesProcessingTime": 0
}
},
"appPayload": {
"helpUrl": "https://docs.github.com",
"findFileWorkerPath": "/assets-cdn/worker/find-file-worker-1583894afd38.js",
"findInFileWorkerPath": "/assets-cdn/worker/find-in-file-worker-3a63a487027b.js",
"githubDevUrl": null,
"enabled_features": {
"code_nav_ui_events": false,
"overview_shared_code_dropdown_button": false,
"react_blob_overlay": false,
"copilot_conversational_ux_embedding_update": false,
"copilot_smell_icebreaker_ux": true,
"copilot_workspace": false
}
}
}
}
{
"accept-ranges": "bytes",
"cache-control": "max-age=0, private, must-revalidate",
"content-encoding": "gzip",
"content-security-policy": "default-src 'none'; base-uri 'self'; child-src github.com/assets-cdn/worker/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com api.githubcopilot.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com/v1/engines/github-completion/completions proxy.enterprise.githubcopilot.com/v1/engines/github-completion/completions *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.com/assets-cdn/worker/ gist.github.com/assets-cdn/worker/",
"content-type": "text/html; charset=utf-8",
"date": "Sat, 27 Jul 2024 07:29:54 GMT",
"etag": "1fd0df0a3d5fdba17b8c5c73b7547d28",
"referrer-policy": "no-referrer-when-downgrade",
"server": "GitHub.com",
"set-cookie": "logged_in=no; Path=/; Domain=github.com; Expires=Sun, 27 Jul 2025 07:29:54 GMT; HttpOnly; Secure; SameSite=Lax",
"strict-transport-security": "max-age=31536000; includeSubdomains; preload",
"transfer-encoding": "chunked",
"vary": "X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, Accept-Encoding, Accept, X-Requested-With",
"x-content-type-options": "nosniff",
"x-frame-options": "deny",
"x-github-request-id": "BB86:315094:D7A6CD:115266D:66A4A1F2",
"x-xss-protection": "0"
}