-
-
Notifications
You must be signed in to change notification settings - Fork 671
Add Chrome extension for opening webpage datasets #1932
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 4 commits
Commits
Show all changes
11 commits
Select commit
Hold shift + click to select a range
0ec0af0
feat: add GeoLibre Chrome data opener
giswqs a5e0e6e
style: auto-format (ruff + oxfmt) [pre-commit.ci]
pre-commit-ci[bot] 9ec5a5a
fix: address Chrome extension review feedback
giswqs 0f8f127
ci: attach Chrome extension to releases
giswqs bf42e91
docs: install Chrome extension from release
giswqs 0b70373
refactor: rename Chrome extension package
giswqs 7314af7
feat: link Chrome extension to GeoLibre
giswqs e4c2473
style: auto-format (ruff + oxfmt) [pre-commit.ci]
pre-commit-ci[bot] 3bc7b41
ci: disable caching in release builds
giswqs 67b9788
fix: address final Chrome extension reviews
giswqs 9fc3646
style: auto-format (ruff + oxfmt) [pre-commit.ci]
pre-commit-ci[bot] File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| # Chrome Extension | ||
|
|
||
| The **Open data in GeoLibre** Chrome extension finds supported geospatial data links on the current webpage and opens the datasets you select together on one GeoLibre map. | ||
|
|
||
|  | ||
|
|
||
| ## Install the extension | ||
|
|
||
| Until the extension is available from the Chrome Web Store, install it from the GeoLibre source tree: | ||
|
|
||
| 1. Download or clone the [GeoLibre repository](https://github.com/opengeos/GeoLibre). | ||
| 2. Open `chrome://extensions` in Chrome. | ||
| 3. Turn on **Developer mode**. | ||
| 4. Select **Load unpacked** and choose `extensions/geolibre-data-opener` from the repository. | ||
| 5. Pin **Open data in GeoLibre** to the Chrome toolbar for convenient access. | ||
|
|
||
| ## Open datasets from a webpage | ||
|
|
||
| 1. Visit a webpage or data catalog containing geospatial file links. | ||
| 2. Select the GeoLibre icon in the Chrome toolbar. | ||
| 3. Use **All**, **Vector**, or **Raster** to filter the discovered datasets. | ||
| 4. Check one or more datasets. Nothing is selected by default. | ||
| 5. Select **Open in GeoLibre** to load the selected datasets on the same map. | ||
|
|
||
| The extension recognizes GeoJSON and spatial JSON, GeoParquet and Parquet, PMTiles, GeoTIFF and Cloud-Optimized GeoTIFF, ZIP archives containing GeoJSON, JSON-LD download metadata, and existing GeoLibre data links. On Source Cooperative repository pages, it also reads the embedded inventory so datasets outside the currently visible list can be selected. | ||
|
|
||
| ## Access and privacy | ||
|
|
||
| GeoLibre fetches selected links directly, so the source server must allow cross-origin requests (CORS). Links that depend on a website login, browser session, or temporary `blob:` URL might not load in GeoLibre. | ||
|
|
||
| The extension requests access only to the active tab when you open it. It does not store browsing history, send analytics, or run continuously in the background. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| # Privacy policy — Open data in GeoLibre | ||
|
|
||
| Last updated: August 15, 2026 | ||
|
|
||
| Open data in GeoLibre does not collect, retain, sell, or transmit personal | ||
| information, browsing history, page contents, or usage analytics. | ||
|
|
||
| The extension uses Chrome's `activeTab` permission to inspect links and | ||
| structured metadata on the current page only after the user clicks the | ||
| extension's toolbar icon. Inspection happens locally in the browser. Results | ||
| are held in memory only while the popup is open. | ||
|
|
||
| When the user chooses **Open in GeoLibre**, the selected public dataset and | ||
| style URLs are placed in the query string of a new `https://web.geolibre.app/` | ||
| tab. The extension does not fetch or upload the datasets itself. GeoLibre then | ||
| requests the selected URLs directly from their original servers, subject to | ||
| those servers' privacy policies and CORS configuration. | ||
|
|
||
| The extension uses no remote code, advertising, analytics, tracking pixels, | ||
| cookies, accounts, or extension storage. | ||
|
|
||
| Questions may be submitted through the GeoLibre repository: | ||
| <https://github.com/opengeos/GeoLibre/issues>. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,46 @@ | ||
| # Open data in GeoLibre | ||
|
|
||
| A Manifest V3 Chrome extension that finds supported geospatial dataset links on | ||
| the current page and opens selected files together in GeoLibre using repeated | ||
| `data` query parameters. | ||
|
|
||
| ## Install locally | ||
|
|
||
| 1. Open `chrome://extensions`. | ||
| 2. Enable **Developer mode**. | ||
| 3. Choose **Load unpacked**. | ||
| 4. Select this `extensions/geolibre-data-opener` directory. | ||
|
|
||
| The extension requests `activeTab` and `scripting` only. It scans a page after | ||
| you click its toolbar icon and does not retain page contents or browsing data. | ||
|
|
||
| ## Package for the Chrome Web Store | ||
|
|
||
| From the repository root, run: | ||
|
|
||
| ```bash | ||
| npm run build:chrome-extension | ||
| ``` | ||
|
|
||
| The versioned upload ZIP is written to `dist/`. Store listing copy and | ||
| permission explanations are in `STORE_LISTING.md`; the publishable privacy | ||
| policy source is in `PRIVACY.md`. The policy must be hosted at a public URL | ||
| before submitting the listing. | ||
|
|
||
| ## Discovery | ||
|
|
||
| The scanner recognizes GeoJSON/JSON, GeoParquet/Parquet, PMTiles, GeoTIFF/COG, | ||
| and ZIP links in anchors, linked resources, selected data attributes, and | ||
| schema.org JSON-LD `contentUrl`/`downloadUrl` fields. Existing GeoLibre deep | ||
| links are unpacked, and a neighboring `name.style.json` or | ||
| `name.geolibre.style.json` link is paired with the matching dataset. | ||
|
|
||
| Source Cooperative repository pages receive additional handling: the extension | ||
| reads the complete embedded file inventory even when the visible table is | ||
| virtualized, canonicalizes links to `data.source.coop`, and removes duplicate | ||
| page/download links. The popup can filter discovered files by vector or raster | ||
| type without changing the current selection. | ||
|
|
||
| Remote servers must allow GeoLibre to fetch the selected URLs through CORS. | ||
| Authenticated, `blob:`, browser-internal, and session-bound links cannot be | ||
| transferred to the GeoLibre tab. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| # Chrome Web Store listing | ||
|
|
||
| ## Name | ||
|
|
||
| Open data in GeoLibre | ||
|
|
||
| ## Summary | ||
|
|
||
| Find geospatial datasets on a webpage and open selected files together in GeoLibre. | ||
|
|
||
| ## Detailed description | ||
|
|
||
| Open data in GeoLibre turns dataset catalogs, documentation pages, and project | ||
| websites into launch points for an interactive map. | ||
|
|
||
| Click the extension icon to find supported data links on the current page, | ||
| filter them by vector or raster type, choose the files you need, and open them | ||
| together in GeoLibre. Supported links include GeoJSON, GeoParquet, PMTiles, | ||
| Cloud-Optimized GeoTIFF, and ZIP archives containing GeoJSON. | ||
|
|
||
| The extension also reads schema.org download metadata, understands existing | ||
| GeoLibre links, pairs matching GeoLibre style files, and discovers the complete | ||
| file inventory on virtualized Source Cooperative repository pages. | ||
|
|
||
| Privacy is deliberately narrow: the extension scans only the active page after | ||
| you click it. It stores no browsing data, runs no analytics, and requests no | ||
| permanent access to websites. | ||
|
|
||
| Dataset servers must allow browser access through CORS. Authenticated, | ||
| session-bound, and `blob:` links cannot be transferred to the GeoLibre tab. | ||
|
|
||
| ## Category | ||
|
|
||
| Developer Tools | ||
|
|
||
| ## Language | ||
|
|
||
| English | ||
|
|
||
| ## Permission justification | ||
|
|
||
| - `activeTab`: grants temporary access to the page only after the user invokes | ||
| the extension, so its dataset links can be inspected. | ||
| - `scripting`: injects the local, packaged dataset scanner into that active tab. | ||
|
|
||
| The extension does not request host permissions, storage, browsing history, | ||
| downloads, cookies, or remote code. |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| { | ||
| "manifest_version": 3, | ||
| "name": "Open data in GeoLibre", | ||
| "description": "Find geospatial datasets on the current page and open the selected files together in GeoLibre.", | ||
| "version": "0.1.0", | ||
| "minimum_chrome_version": "105", | ||
| "permissions": ["activeTab", "scripting"], | ||
| "action": { | ||
| "default_title": "Open data in GeoLibre", | ||
| "default_popup": "popup.html", | ||
| "default_icon": { | ||
| "16": "icons/geolibre-16.png", | ||
| "32": "icons/geolibre-32.png" | ||
| } | ||
| }, | ||
| "icons": { | ||
| "16": "icons/geolibre-16.png", | ||
| "32": "icons/geolibre-32.png", | ||
| "48": "icons/geolibre-48.png", | ||
| "128": "icons/geolibre-128.png" | ||
| }, | ||
| "content_security_policy": { | ||
| "extension_pages": "script-src 'self'; object-src 'self'" | ||
| } | ||
| } |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.