Roadmap Plugin
Bundled with iolanta ⩾ 2.1.12
iolanta iolanta-development-roadmap.yamlld --as https://iolanta.tech/roadmap/datatypes/mermaid
graph LR
B0edf7b956318("⬜ Discovery MCP discovers LD based on free form text")
Bdbc3719a0b3f("⬜ HOWTO Make your own facet")
B804d0b3c994c("⬜ First WASM based facet")
Bbae84bb3037d("⬜ Tractatus Logico-Philosophicus → LD")
B9665037a78d8("⬜ Render a Decision Matrix with Iolanta")
B988d5d3c5240("⬜ Inference depends on alphabetical order of its CONSTRUCT queries")
Bb40f83e8cf24("⬜ Implement YAML-LD Ontology")
Bf21d26c7c614("⬜ <code>mermaid</code> datatype from roadmap plugin does not resolve nor is documented")
https___iolanta_tech_Facet("Generate Facets list")
click https___iolanta_tech_Facet "https://iolanta.tech/Facet/"
B071c9be8f1db("⬜ Generate this roadmap from LD")
B368c01d14192("⬜ Unblock Nanopubs")
Bd89247cea044("⬜ Upper ontology not chosen for <code>roadmap</code>")
Bfff5e8989b4e("⬜ Render LD from IPFS")
B90ca643a0ed2("⬜ Manage ADRs with Iolanta")
Bf9f7a63858f6("⬜ Roadmap <code>Unblocked</code> is a <code>Class</code>")
Bae6299a47bc6("⬜ Implement a 3D view for the roadmap (because should look cool)")
B7b16b4b4b96f("⬜ pyld fails on lexinfo")
Bd75d10abd3fa("⬜ Write nanopublications with Iolanta")
B80f2020766e8("⬜ <code>$type: Bug</code> does not work; maybe use some other syntax even?")
Ba6a5b3b337be("⬜ Start jeeves-nanopublications")
B5d5d954aad6e("⬜ Build roadmaps & plans with Iolanta")
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"
Baa1bc7cbbeb4("⬜ Unable to specify if <code>Event</code> had happened")
B2278567e7da9("⬜ Armenian pronouns nanopub")
B5509ab3b3751("⬜ FOAF Title facet only reacts on foaf:Person class")
B17e2df495f49("⬜ Iolanta starts with a blank console")
Bb5cfa37f5673("⬜ SPARQL inference handled by sparqlspace")
B6151f70f5ab2("⬜ sparqlspace has no integration tests")
B6237e145dbd0("⬜ FOAF Title facet only reacts on foaf:Person class")
B7f6c54146532("⬜ Iolanta starts with a blank console")
Bbe4d7431dc66("⬜ SPARQL inference handled by sparqlspace")
B8cffaa83c000("⬜ sparqlspace has no integration tests")
Bd84618b7f641("⬜ pyld fails on lexinfo")
B0edf7b956318 --> Bd75d10abd3fa
B7b16b4b4b96f --> B2278567e7da9
B368c01d14192 --> B2278567e7da9
B9665037a78d8 --> B90ca643a0ed2
Bd89247cea044 --> B80f2020766e8
Bd89247cea044 --> Baa1bc7cbbeb4
Bd89247cea044 --> Bf9f7a63858f6
B90ca643a0ed2 --> B5d5d954aad6e
B071c9be8f1db --> B5d5d954aad6e
B5d5d954aad6e --> Bae6299a47bc6
B368c01d14192 --> https___github_com_Nanopublication_nanopub_py_pull_180
B368c01d14192 --> Ba6a5b3b337be
B368c01d14192 --> B0edf7b956318
classDef predicate fill:#1f2233,stroke:transparent,color:#f8fafc,stroke-width:0px;
classDef hidden fill:transparent,stroke:transparent,color:transparent,stroke-width:0px;
classDef nanopubdot fill:#0f172a,stroke:#0f172a,color:transparent,stroke-width:2px;
classDef transparent fill:transparent,stroke:transparent,color:transparent,stroke-width:0px;
class Edge_7e8f446d3164,Edge_d0a510126a11,Edge_936d868d41f4,Edge_c8f3391f6f6d,Edge_fad8ff6cfa64,Edge_5cf1b681b750,Edge_df8266c58034,Edge_470d7700efd5,Edge_e258e7290f29,Edge_a15eb121ff9b,Edge_0d453c8f89a8,Edge_3f9119679c2a,Edge_308eb0799615 predicate
classDef unblocked fill:#0a5,stroke:#063,stroke-width:2px,color:#fff;
class Bdbc3719a0b3f unblocked
class B804d0b3c994c unblocked
class Bbae84bb3037d unblocked
class B9665037a78d8 unblocked
class B988d5d3c5240 unblocked
class Bb40f83e8cf24 unblocked
class Bf21d26c7c614 unblocked
class https___iolanta_tech_Facet unblocked
class B071c9be8f1db unblocked
class B368c01d14192 unblocked
class Bd89247cea044 unblocked
class Bfff5e8989b4e unblocked
class B7b16b4b4b96f unblocked
class B5509ab3b3751 unblocked
class B17e2df495f49 unblocked
class Bb5cfa37f5673 unblocked
class B6151f70f5ab2 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.