Spatial
duckdb/duckdb-skills
Answer questions about spatial data using DuckDB. An agent skill from duckdb/duckdb-skills.
Auto-ingest a geospatial file (GeoJSON, Shapefile, GeoPackage, KML/KMZ, FlatGeobuf, CSV-with-geometry) into a PortalJS portal on the user's own machine, with no server.
$ npx skills add datopian/portaljs --skill portaljs-add-geo -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install datopian/portaljs portaljs-add-geo --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/datopian/portaljs.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/portaljs-add-geo .claude/skills/portaljs-add-geo && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "portaljs-add-geo" agent skill from https://github.com/datopian/portaljs/tree/main/skills/portaljs-add-geo into .claude/skills/portaljs-add-geo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "portaljs-add-geo", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/datopian/portaljs/tree/main/skills/portaljs-add-geoType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add datopian/portaljs --skill portaljs-add-geo -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install datopian/portaljs portaljs-add-geo --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/datopian/portaljs.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/portaljs-add-geo .agents/skills/portaljs-add-geo && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "portaljs-add-geo" agent skill from https://github.com/datopian/portaljs/tree/main/skills/portaljs-add-geo into .agents/skills/portaljs-add-geo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "portaljs-add-geo", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add datopian/portaljs --skill portaljs-add-geo -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install datopian/portaljs portaljs-add-geo --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/datopian/portaljs.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/portaljs-add-geo .cursor/skills/portaljs-add-geo && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "portaljs-add-geo" agent skill from https://github.com/datopian/portaljs/tree/main/skills/portaljs-add-geo into .cursor/skills/portaljs-add-geo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "portaljs-add-geo", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/datopian/portaljs.git --path skills/portaljs-add-geo--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add datopian/portaljs --skill portaljs-add-geo -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install datopian/portaljs portaljs-add-geo --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/datopian/portaljs.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/portaljs-add-geo .gemini/skills/portaljs-add-geo && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "portaljs-add-geo" agent skill from https://github.com/datopian/portaljs/tree/main/skills/portaljs-add-geo into .gemini/skills/portaljs-add-geo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "portaljs-add-geo", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install datopian/portaljs portaljs-add-geoInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add datopian/portaljs --skill portaljs-add-geo -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/datopian/portaljs.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/portaljs-add-geo .github/skills/portaljs-add-geo && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "portaljs-add-geo" agent skill from https://github.com/datopian/portaljs/tree/main/skills/portaljs-add-geo into .github/skills/portaljs-add-geo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "portaljs-add-geo", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add datopian/portaljs --skill portaljs-add-geo -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install datopian/portaljs portaljs-add-geo --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/datopian/portaljs.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/portaljs-add-geo .opencode/skills/portaljs-add-geo && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "portaljs-add-geo" agent skill from https://github.com/datopian/portaljs/tree/main/skills/portaljs-add-geo into .opencode/skills/portaljs-add-geo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "portaljs-add-geo", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
portaljs-add-geoAuto-ingest a geospatial file (GeoJSON, Shapefile, GeoPackage, KML/KMZ, FlatGeobuf, CSV-with-geometry) into a PortalJS portal on the user's own machine, with no server.
Portaljs Add Geo is an agent skill from datopian/portaljs. Auto-ingest a geospatial file (GeoJSON, Shapefile, GeoPackage, KML/KMZ, FlatGeobuf, CSV-with-geometry) into a PortalJS portal on the user's own machine, with no server. Normalizes CRS to EPSG:4326, derives a PMTiles render tier and a GeoParquet query tier, pushes all three artifacts to Cloudflare R2 via Git LFS, and appends one dual-tier datasets.json entry the showcase auto-renders. Use when the source is a vector geo format that needs a map or spatial-query view.
Its SKILL.md is about 1.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/reference.md`). Compatibility notes: Claude Code with PortalJS portals (Next.js 14, React 18/19, Node 18+). Requires native GDAL, tippecanoe, and duckdb on the user's machine (macOS or…
It sits in Data & Analytics, covering Geospatial analysis. It works with Git, Cloudflare R2 and DuckDB. The repository describes itself as: 🌀 AI-native framework for building data portals. Scaffold a full portal from a brief and load datasets in minutes with agentic skills — any backend (CKAN, GitHub, Frictionless). The licence is MIT.
12 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d5c096a. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadWriteEditBash(ogr2ogr:*)Bash(ogrinfo:*)Bash(tippecanoe:*)Bash(duckdb:*)Bash(git:*)Bash(curl:*)Bash(npx:*)…and 6 more on the same allowed-tools line.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npxbrewapt-getgitFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comduckdb.orgFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Claude Code with PortalJS portals (Next.js 14, React 18/19, Node 18+). Requires native GDAL, tippecanoe, and duckdb on the user's machine (macOS or Linux/WSL). Runs from any project via the plugin, a personal ~/.claude/commands install, or a portaljs clone.
From compatibility in the SKILL.md frontmatter.
Portaljs Add Geo loads about 1.7k tokens when it runs, and up to ~3k if it reads all its reference files. Until then it costs about 122 tokens; SKILL.md has 644 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from datopian/portaljs at commit d5c096a, republished under its MIT licence (© datopian). 644 words, ~1,723 tokens.
.claude/skills/portaljs-add-geo/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Turn one geospatial upload into a dual-tier PortalJS dataset entirely on the user's machine — no server-side container compute, keeping the zero-backend bet end-to-end. From a single source the skill derives two serverless tiers plus the preserved original:
<MapPreview> renders with MapLibre GL
over HTTP range requests; any dataset size pans and zooms with no tile server.bbox column, Hilbert-sorted)
<GeoQuery> runs spatial SQL over in place via DuckDB-Wasm.All three land on Cloudflare R2 (Git LFS → Giftless), and the skill appends one
datasets.json entry whose resources[] match the shape the showcase auto-renders (the
@reference/world-boundaries demo, PR #1647): pmtiles → <MapPreview>, geoparquet →
<GeoQuery>, original → download. No page edits are needed. It automates the manual
tippecanoe/duckdb recipes in the template README.
portaljs-catalog portal whose template ships components/MapPreview.tsx and
components/GeoQuery.tsx (PR #1647 or later).ogr2ogr, ogrinfo), tippecanoe, and
duckdb (with the spatial extension). macOS: brew install gdal tippecanoe duckdb;
Debian/Ubuntu: apt-get install gdal-bin duckdb + tippecanoe (apt or build from source);
Windows: use WSL. The skill hard-stops with the install hint if any is missing.portaljs-deploy resolves), or
an OSS self-hosted Giftless.The canonical, full step-by-step workflow is
.claude/commands/portaljs-add-geo.md
— the single source of truth. Read and follow it when executing. Summary:
ogr2ogr, tippecanoe, duckdb + spatial). Any missing →
print the per-OS install and stop..shp.ogr2ogr -t_srs EPSG:4326.tippecanoe -zg --drop-densest-as-needed.duckdb — covering bbox STRUCT + ST_Hilbert order; verify a
range read.data.portaljs.com URLs.datasets.json entry (pmtiles + geoparquet + original resources).npx tsc --noEmit and a Range: 206 check on the R2 URL.data/<slug>.pmtiles, data/<slug>.parquet, data/<slug>.<origext> (all
LFS-tracked → R2); data/<slug>.4326.geojson (intermediate; can be pruned).datasets.json (one dual-tier entry appended); .gitattributes (LFS tracking).npx tsc --noEmit passes; the R2 URLs answer HTTP 206 range reads./@<namespace>/<slug> renders the PMTiles map and the GeoParquet spatial-query
panel together, with no page edits.| Symptom | Cause | Fix |
|---|---|---|
MISSING_TOOLS | ogr2ogr/tippecanoe/duckdb (or duckdb spatial) absent | Print the per-OS install line and stop; re-run after installing. |
UNSUPPORTED_FORMAT | Raster .tif/.tiff (COG tier, later phase) | Use portaljs-add-dataset for tabular; await the COG phase. |
SHAPEFILE_NOT_ZIPPED | Bare .shp with no siblings | Zip the whole .shp/.dbf/.shx/.prj set and pass the .zip. |
MULTI_LAYER | GPKG/KML with more than one layer | List layers and ask which to ingest; pass the layer name. |
REPROJECTION_FAILED | ogr2ogr error, often a missing .prj | Show stderr; re-run with -s_srs EPSG:<code>. |
EMPTY_OUTPUT | Normalized GeoJSON has 0 features | Check the geometry column / CRS of the source. |
TILING_FAILED / GEOPARQUET_FAILED | tippecanoe or duckdb non-zero | Show stderr; for very large inputs see the size escape hatch. |
LFS_PUSH_FAILED | Missing/expired Arc token or unset lfs.url | Re-mint the JWT (see portaljs-deploy); confirm git config lfs.url. |
/portaljs-add-geo source=./data/rivers.geojson name="World Rivers" namespace=reference/portaljs-add-geo source=https://example.com/admin-boundaries.zip slug=admin-boundaries/portaljs-add-geo source=./data/census.gpkg slug=census-tracts namespace=statistics.claude/commands/portaljs-add-geo.mdreferences/reference.mdportaljs-add-dataset, portaljs-add-map, portaljs-add-resource, portaljs-deploy© datopian, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in skills/portaljs-add-geo of datopian/portaljs.
Open the folder on GitHubat commit d5c096a
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in datopian/portaljs, which our catalogue first saw on October 7, 2026.
Portaljs Add Geo next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Portaljs Add Geo this skilldatopian/portaljs | 2.4k | 1 repos | ~1.7k | Automated safety check: Pass | MIT | |
| Spatialduckdb/duckdb-skills | 603 | 1 repos | ~1k | Automated safety check: Notes | MIT | |
| Excel and CSV Data Analysisbytedance/deer-flow | 84k | 4 repos | ~2.2k | Automated safety check: Pass | MIT | |
| Antv L7antvis/L7 | 4.1k | — | ~1.4k | Automated safety check: Pass | MIT | |
| GitHub Skill ForgeYuJunZhiXue/github-skill-forge | 819 | — | ~2k | Automated safety check: Notes | None | |
| Dbt Databricks PR Readydatabricks/dbt-databricks | 380 | — | ~2.8k | Automated safety check: Pass | Apache-2.0 |
duckdb/duckdb-skills
Answer questions about spatial data using DuckDB. An agent skill from duckdb/duckdb-skills.
bytedance/deer-flow
Analyzes uploaded Excel and CSV files with SQL through DuckDB, producing schema inspections, statistical summaries and exports to CSV, JSON or Markdown.
antvis/L7
Comprehensive guide for AntV L7 geospatial visualization library.
YuJunZhiXue/github-skill-forge
一个"制造技能的技能"。这个工具自动化了将任意 GitHub 仓库转换为标准化 Trae 技能的全过程,是扩展 AI Agent 能力的核心工具。
databricks/dbt-databricks
A skill your agent uses for an open dbt-databricks pull request, including your own PR or a fork PR, to assess merge readiness and optionally repair selected gaps on the PR head branch.
duckdb/duckdb-skills
Explore and query data on S3, Cloudflare R2, GCS, MinIO, or any S3-compatible storage.
datopian/portaljs
Migrate a whole ArcGIS Hub site into a PortalJS Arc portal end-to-end.
datopian/portaljs
Add a chart (line, bar, area, pie, or scatter) to a dataset's showcase in a PortalJS portal.
datopian/portaljs
Add a dataset (CSV, TSV, JSON, or GeoJSON) to an existing PortalJS portal.
datopian/portaljs
Make a PortalJS portal harvestable by national/EU/US open-data portals — emit standards-compliant DCAT catalog feeds (DCAT 2/3, DCAT-AP, DCAT-US, national profiles) in JSON-LD, Turtle, and RDF/XML…
datopian/portaljs
Render a GeoJSON dataset on an interactive Leaflet map in the Views section of a dataset's showcase.
datopian/portaljs
Add another file (resource) to an EXISTING dataset in a PortalJS portal — a data dictionary, methodology, or an additional data file.
Works with
Categories
Auto-ingest a geospatial file (GeoJSON, Shapefile, GeoPackage, KML/KMZ, FlatGeobuf, CSV-with-geometry) into a PortalJS portal on the user's own machine, with no server. Portaljs Add Geo is an agent skill from datopian/portaljs. Auto-ingest a geospatial file (GeoJSON, Shapefile, GeoPackage, KML/KMZ, FlatGeobuf, CSV-with-geometry) into a PortalJS portal on the user's own machine, with no server.
Portaljs Add Geo fits situations like: the source is a vector geo format that needs a map; spatial-query view.
Run `npx skills add datopian/portaljs --skill portaljs-add-geo -a claude-code`. Or copy the skill folder (skills/portaljs-add-geo in datopian/portaljs) into .claude/skills/portaljs-add-geo in your project. Claude Code loads it when a task matches its description.
Run `npx skills add datopian/portaljs --skill portaljs-add-geo -a codex`. Or copy the skill folder (skills/portaljs-add-geo in datopian/portaljs) into .agents/skills/portaljs-add-geo in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add datopian/portaljs --skill portaljs-add-geo -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/portaljs-add-geo, .gemini/skills/portaljs-add-geo, .github/skills/portaljs-add-geo and .opencode/skills/portaljs-add-geo in your project.
Going by SKILL.md and its folder, Portaljs Add Geo needs the command-line tools its instructions call (npx, brew, apt-get and git). Our summary lists: Node.js. Its frontmatter pre-approves these tools: Read, Write, Edit, Bash(ogr2ogr:*), Bash(ogrinfo:*), Bash(tippecanoe:*), Bash(duckdb:*), Bash(git:*), Bash(curl:*), Bash(npx:*), Bash(node:*), Bash(mkdir:*), Bash(cp:*), Bash(wc:*), Bash(command:*), WebFetch. Compatibility (from SKILL.md): Claude Code with PortalJS portals (Next.js 14, React 18/19, Node 18+). Requires native GDAL, tippecanoe, and duckdb on the user's machine (macOS or Linux/WSL). Runs from any project via the plugin, a personal ~/.claude/commands install, or a portaljs clone..
SKILL.md names 2 domains. As links in the text: github.com and duckdb.org. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Portaljs Add Geo is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.7k tokens (SKILL.md is roughly 6.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.3k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Portaljs Add Geo: Spatial (duckdb/duckdb-skills, 603 stars), Excel and CSV Data Analysis (bytedance/deer-flow, 84k stars), Antv L7 (antvis/L7, 4.1k stars) and GitHub Skill Forge (YuJunZhiXue/github-skill-forge, 819 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
datopian (a GitHub organization) maintains it in datopian/portaljs, which has 2,358 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 8, 2026.
Source: datopian/portaljs on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.