Skip to content

datopian/portaljs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3,091 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

PortalJS

PortalJS

The AI-native framework for building data portals.
Describe the portal you want β€” your agent scaffolds it and loads your data in minutes.

Docs Β· Discussions Β· Report a bug

Join our Discord server MIT License


PortalJS is an open-source framework for building data portals and catalogs. It pairs a lightweight, customizable site with a set of agentic skills β€” commands your AI assistant runs to scaffold a portal, add datasets, and wire up a backend, without you writing boilerplate.

Built and maintained in the open by Datopian and the PortalJS community.

Build a portal with your AI assistant

PortalJS ships Claude Code skills that turn a brief into a working portal.

Setup

The skills live in this repo under .claude/commands/. The quickest way to try them is from a clone of the repo:

# 1. Clone the repo and open Claude Code inside it
git clone https://github.com/datopian/portaljs
cd portaljs
claude

Claude Code auto-discovers the slash commands from .claude/commands/ β€” no install step. Type / in the session to see /new-portal, /add-dataset, and the rest.

Install anywhere: the skills and template are also packaged as a Claude Code plugin and can be installed into ~/.claude/commands/ so you can run them from any project. See .claude/INSTALL.md.

Use

In the Claude Code session:

/new-portal  "Auckland Council open data portal"
/add-dataset ./data/air-quality.csv
/add-dataset https://example.com/parks.geojson

That scaffolds the site, copies your data in, generates dataset pages, and registers everything on the catalog home page. Run npm run dev and you have a portal.

Prefer to start from a template? Clone the canonical example and build by hand β€” the skills are a convenience, not a requirement:

npx create-next-app -e https://github.com/datopian/portaljs/tree/main/examples/portaljs-template my-portal

Available skills

Skill What it does
/new-portal Scaffold a new portal from a brief
/add-dataset Add a CSV, TSV, JSON, or GeoJSON dataset and register it
/add-chart Add a chart to a dataset page
/add-map Render GeoJSON on an interactive map
/connect-ckan Wire a portal to a CKAN backend
/deploy Deploy to Vercel or static hosting

More skill families β€” data ingestion/migration, wrangling and transforms, richer visualization, and metadata β€” are on the roadmap. Write your own β€” see .claude/AUTHORING.md.

Why PortalJS

  • 🌱 Open source, MIT licensed β€” no lock-in, fork it, ship it, own it.
  • πŸ€– AI-native β€” agentic skills do the assembly so you focus on the data, not the scaffolding.
  • 🧩 Decoupled, any backend β€” the frontend is independent from your backend and talks to it over an API. Out-of-the-box support for CKAN, DKAN, OpenMetadata, Microsoft Purview, DataHub, GitHub, Frictionless Data Packages, plain JSON/static files β€” or your own custom backend.
  • 🎨 Bring your own stack β€” start from the default template or adapt it to the frontend tooling and design system your team already uses.
  • πŸ‘₯ Community-driven β€” active Discord and discussion forum; contributions welcome.

Examples

Reference implementations live in examples/:

Example Backend
portaljs-template Static / local files β€” the canonical starting point
ckan Β· ckan-ssg CKAN
github-backed-catalog GitHub
dataset-frictionless Frictionless Data Package
fivethirtyeight Β· openspending Β· turing Real-world portals

Community & support

Contributing

PortalJS is built in the open and we welcome contributions of all sizes β€” new skills, examples, docs, and fixes. See CONTRIBUTING.md to get started, and read VISION.md for where the project is headed.

License

MIT Β© Datopian