Roadmap Plugin
Bundled with iolanta ⩾ 2.1.12
iolanta iolanta-development-roadmap.yamlld --as https://iolanta.tech/roadmap/datatypes/mermaid
graph LR
94a66155d45d1d72d781c8c707b8198d_b19("Implement YAML-LD Ontology")
94a66155d45d1d72d781c8c707b8198d_b26("<code>mermaid</code> datatype from roadmap plugin does not resolve nor is documented")
94a66155d45d1d72d781c8c707b8198d_b8("Unblock Nanopubs")
https___iolanta_tech_Facet("Generate Facets list")
click https___iolanta_tech_Facet "https://iolanta.tech/Facet/"
94a66155d45d1d72d781c8c707b8198d_b7("First WASM based facet")
94a66155d45d1d72d781c8c707b8198d_b25("Inference depends on alphabetical order of its CONSTRUCT queries")
94a66155d45d1d72d781c8c707b8198d_b1("Render LD from IPFS")
94a66155d45d1d72d781c8c707b8198d_b18("Tractatus Logico-Philosophicus → LD")
94a66155d45d1d72d781c8c707b8198d_b20("HOWTO Make your own facet")
94a66155d45d1d72d781c8c707b8198d_b10("Discovery MCP discovers LD based on free form text")
94a66155d45d1d72d781c8c707b8198d_b6("Generate this roadmap from LD")
94a66155d45d1d72d781c8c707b8198d_b2("Render a Decision Matrix with Iolanta")
94a66155d45d1d72d781c8c707b8198d_b21("Upper ontology not chosen for <code>roadmap</code>")
94a66155d45d1d72d781c8c707b8198d_b9("Start jeeves-nanopublications")
94a66155d45d1d72d781c8c707b8198d_b5("Implement a 3D view for the roadmap (because should look cool)")
https___github_com_Nanopublication_nanopub-py_pull_180("PR 180: Nanopublication/nanopub-py is merged")
click https___github_com_Nanopublication_nanopub-py_pull_180 "https://github.com/Nanopublication/nanopub-py/pull/180"
94a66155d45d1d72d781c8c707b8198d_b11("Armenian pronouns nanopub")
94a66155d45d1d72d781c8c707b8198d_b4("Build roadmaps & plans with Iolanta")
94a66155d45d1d72d781c8c707b8198d_b3("Manage ADRs with Iolanta")
94a66155d45d1d72d781c8c707b8198d_b22("<code>$type: Bug</code> does not work; maybe use some other syntax even?")
94a66155d45d1d72d781c8c707b8198d_b24("Roadmap <code>Unblocked</code> is a <code>Class</code>")
94a66155d45d1d72d781c8c707b8198d_b12("Write nanopublications with Iolanta")
94a66155d45d1d72d781c8c707b8198d_b23("Unable to specify if <code>Event</code> had happened")
94a66155d45d1d72d781c8c707b8198d_b17("pyld fails on lexinfo")
94a66155d45d1d72d781c8c707b8198d_b13("FOAF Title facet only reacts on foaf:Person class")
94a66155d45d1d72d781c8c707b8198d_b14("Iolanta starts with a blank console")
94a66155d45d1d72d781c8c707b8198d_b15("SPARQL inference handled by sparqlspace")
94a66155d45d1d72d781c8c707b8198d_b16("sparqlspace has no integration tests")
94a66155d45d1d72d781c8c707b8198d_b10 --> 94a66155d45d1d72d781c8c707b8198d_b12
94a66155d45d1d72d781c8c707b8198d_b17 --> 94a66155d45d1d72d781c8c707b8198d_b11
94a66155d45d1d72d781c8c707b8198d_b8 --> 94a66155d45d1d72d781c8c707b8198d_b11
94a66155d45d1d72d781c8c707b8198d_b2 --> 94a66155d45d1d72d781c8c707b8198d_b3
94a66155d45d1d72d781c8c707b8198d_b21 --> 94a66155d45d1d72d781c8c707b8198d_b22
94a66155d45d1d72d781c8c707b8198d_b21 --> 94a66155d45d1d72d781c8c707b8198d_b23
94a66155d45d1d72d781c8c707b8198d_b21 --> 94a66155d45d1d72d781c8c707b8198d_b24
94a66155d45d1d72d781c8c707b8198d_b3 --> 94a66155d45d1d72d781c8c707b8198d_b4
94a66155d45d1d72d781c8c707b8198d_b6 --> 94a66155d45d1d72d781c8c707b8198d_b4
94a66155d45d1d72d781c8c707b8198d_b4 --> 94a66155d45d1d72d781c8c707b8198d_b5
94a66155d45d1d72d781c8c707b8198d_b8 --> https___github_com_Nanopublication_nanopub-py_pull_180
94a66155d45d1d72d781c8c707b8198d_b8 --> 94a66155d45d1d72d781c8c707b8198d_b9
94a66155d45d1d72d781c8c707b8198d_b8 --> 94a66155d45d1d72d781c8c707b8198d_b10
classDef predicate fill:transparent,stroke:transparent,stroke-width:0px;
classDef unblocked fill:#0a5,stroke:#063,stroke-width:2px,color:#fff;
class 94a66155d45d1d72d781c8c707b8198d_b19 unblocked
class 94a66155d45d1d72d781c8c707b8198d_b26 unblocked
class 94a66155d45d1d72d781c8c707b8198d_b8 unblocked
class https___iolanta_tech_Facet unblocked
class 94a66155d45d1d72d781c8c707b8198d_b7 unblocked
class 94a66155d45d1d72d781c8c707b8198d_b25 unblocked
class 94a66155d45d1d72d781c8c707b8198d_b1 unblocked
class 94a66155d45d1d72d781c8c707b8198d_b18 unblocked
class 94a66155d45d1d72d781c8c707b8198d_b20 unblocked
class 94a66155d45d1d72d781c8c707b8198d_b6 unblocked
class 94a66155d45d1d72d781c8c707b8198d_b2 unblocked
class 94a66155d45d1d72d781c8c707b8198d_b21 unblocked
class 94a66155d45d1d72d781c8c707b8198d_b17 unblocked
class 94a66155d45d1d72d781c8c707b8198d_b13 unblocked
class 94a66155d45d1d72d781c8c707b8198d_b14 unblocked
class 94a66155d45d1d72d781c8c707b8198d_b15 unblocked
class 94a66155d45d1d72d781c8c707b8198d_b16 unblocked
"@context": https://iolanta.tech/roadmap/contexts/v0.1.yamlld
tasks:
# IPFS rendering
- $id: _:ipfs
$: Render LD from IPFS
# Decision Matrix & ADRs workflow
- $id: _:render-decision-matrix
$: Render a Decision Matrix with Iolanta
blocks:
- $id: _:manage-adrs
$: Manage ADRs with Iolanta
blocks:
- $id: _:manage-roadmaps
$: Build roadmaps & plans with Iolanta
blocks:
- $id: _:roadmap3d
$: Implement a 3D view for the roadmap (because should look cool)
# …
Quick Start
To use the Roadmap plugin in your roadmap files, import the context:
"@context": https://iolanta.tech/roadmap/contexts/v0.1.yamlld
This context provides the namespace prefixes and property mappings you need to write roadmap data.
Minimal Example
"@context": https://iolanta.tech/roadmap/contexts/v0.1.yamlld
$included:
- $id: _:complete-docs
$type: roadmap:Task
$: Complete documentation
blocks:
- $: Publish release
$type: roadmap:Task
Nesting Tasks
Tasks can be nested directly under blocks: or is-blocked-by: properties. This creates a more compact and readable structure:
- $type: roadmap:Task
$: Main task
blocks:
- $: Subtask 1
$type: roadmap:Task
- $: Subtask 2
$type: roadmap:Task
blocks:
- $: Nested subtask
$type: roadmap:Task
Identifiers
When you need to reference a roadmap item from another item (using blocks or is-blocked-by), you must give it an identifier using $id. In roadmap files, identifiers should be blank nodes using the _: prefix:
- ✅ Good:
$id: _:implement-auth - ❌ Bad:
$id: roadmap:task-1(full URI not needed for local references)
If an item is not referenced anywhere else in your roadmap, you don't need to provide an $id at all. You only need an identifier when:
- The item is referenced from elsewhere (e.g., blocks: [_:some-task])
- The item needs to be referenced later in the file
Data Model
The Roadmap plugin uses the following classes and properties:
-
A to-do item or feature
Subclass ofprov:Activity -
A known issue
Subclass ofroadmap:Task -
A scheduled event or milestone
Subclass ofprov:Activity -
Indicates that one item blocks another
Inverse ofroadmap:is-blocked-by, subproperty ofprov:wasInformedBy -
Indicates that one item is blocked by another
Inverse ofroadmap:blocks, subproperty ofprov:wasInformedBy
Relationship to PROV Ontology
The roadmap vocabulary builds on the PROV ontology (prov:Activity, prov:wasInformedBy), allowing roadmap items to be integrated with provenance tracking and activity descriptions.
Rendering
Command Line
Render a roadmap file as a Mermaid diagram:
iolanta path/to/roadmap.yamlld --as https://iolanta.tech/roadmap/datatypes/mermaid
In MkDocs
Use the Iolanta template to render roadmaps in your documentation:
{{ (docs / 'path/to/roadmap.yamlld') | as('https://iolanta.tech/roadmap/datatypes/mermaid') }}
Exporting to Images
Generate PNG or SVG images from your roadmap for use in blogs, documentation, or presentations:
# Generate PNG
iolanta path/to/roadmap.yamlld --as https://iolanta.tech/roadmap/datatypes/mermaid | mmdc -i - -o roadmap.png
# Generate SVG
iolanta path/to/roadmap.yamlld --as https://iolanta.tech/roadmap/datatypes/mermaid | mmdc -i - -o roadmap.svg -b transparent
This requires @mermaid-js/mermaid-cli to be installed. Install it with:
npm install -g @mermaid-js/mermaid-cli
Context Versioning
The roadmap context is versioned to ensure stability. Current version:
- v0.1:
https://iolanta.tech/roadmap/contexts/v0.1.yamlld
When referencing the context, pin to a specific version (e.g., v0.1) for stability.
Future versions will be published at https://iolanta.tech/roadmap/contexts/v<version>.yamlld.