Config reference

This page is an exhaustive, field-by-field reference for rudof.toml (the file read by --config/-c and the config discovery process). For an introduction to how configuration is loaded and merged, see Configuration; this page only documents what can be set.

Note on how this page is generated: this reference is hand-written from the Rust source of RudofConfig and the per-subsystem config structs it aggregates (see the “Source” line under each section below). rudof doesn’t currently have tooling that extracts doc comments from these structs automatically (no schemars/documented-style derive is used for this purpose — schemars is used elsewhere, for the MCP server’s tool schemas), so if a field is added, renamed, or its default changes, this page needs a matching manual update rather than being regenerated.

rudof config prints the effective configuration (defaults merged with whatever files were discovered) as plain TOML, which is useful as a starting template — but the TOML crate doesn’t carry Rust doc comments into that output, so it isn’t self-documenting. This page is the missing piece.

Top-level keys

Source: rudof_lib/src/config/rudof.rs, rudof_lib/src/config/common.rs

KeyTypeDefaultDescription
versionstring (semver)current rudof versionStamped automatically; a missing version in a loaded file just logs a warning, and a major-version mismatch is a hard error. You normally don’t set this by hand.
base_iriIRI stringunsetDefault base IRI used to resolve relative IRIs, shared across sections that don’t set their own (see Base IRI propagation below).
auto_basebooleanfalseIf true and no base_iri is set anywhere, http://base is used as the base automatically instead of leaving relative IRIs unresolved.

Every other key is a [table] for one subsystem, listed below.

Base IRI propagation

After loading, RudofConfig resolves cross-section values (RudofConfig::resolve()):

  • Any section with its own base_iri unset ([rdf], [shex], [service], [tap2shex]) inherits the top-level base_iri (or http://base if auto_base = true).
  • A handful of fields exist in the Rust structs only because a section embeds another section’s config (e.g. [shex_validator] embeds a copy of [rdf] and [shex], [shacl] embeds a copy of [rdf], [tap2shex] embeds a copy of [tap], [shex2uml]/[shex2html]/[shex2sparql] embed a copy of [shex]). These embedded copies are always overwritten with the real top-level section on resolve, so they aren’t independently configurable — setting them directly in TOML has no effect. They’re omitted from the tables below; only the tables actually worth setting are listed.

There is no [pgschema] table — PGSchema loading is controlled entirely through CLI flags / the rudof_lib API, not through rudof.toml.

[logging] — diagnostic output

Source: rudof_lib/src/config/logging.rs

KeyTypeDefaultDescription
levelstring"" (unset)Filter for rudof’s own diagnostic output (progress, retries, warnings — not command results, which always go to stdout/--output). Unset defers to the RUST_LOG environment variable, and to "info" if that’s unset too.

level accepts either a bare level name — "error", "warn", "info", "debug", or "trace" — or a full tracing_subscriber::EnvFilter directive string such as "rudof_rdf=debug,info".

A bare level is automatically scoped to rudof’s own crates, with everything else — HTTP and TLS libraries, the shell’s line editor, etc. — capped at warn. This is what keeps debug/trace readable: without it, turning up verbosity to see what rudof itself is doing also dumps per-keystroke tracing from the line editor and every dependency’s own internals. Write a filter containing = or , yourself (e.g. "debug,reqwest=trace") to opt back into a dependency’s logs — a filter like that is passed to EnvFilter unscoped, exactly as written.

[logging]
level = "debug"

Inside the shell, this can also be changed for the rest of the session without restarting:

rudof> config set logging.level debug
logging.level = debug

RUST_LOG, when set, takes precedence over a persisted logging.level at startup (both go through the same bare-level scoping above) — but $RUST_LOG can only be read once, at process start, so it’s config set logging.level alone that can change the filter live once the shell is already running.

[rdf] — RDF data

Source: rudof_rdf/src/rdf_core/rdf_data_config.rs

KeyTypeDefaultDescription
base_iriIRI stringunsetBase IRI to resolve relative IRIs in RDF data. If unset (and auto_base is off), relative IRIs are an error.
local_basebooleantrueAutomatically use the local file/URI being read as the base IRI.
pretty_jsonbooleantrueIndent json/jsonld result-format output instead of emitting it as compact single-line JSON.
colorize_jsonbooleanfalseStyle json/jsonld output with ANSI colors (keys, strings, numbers, …). Only takes effect when pretty_json is also true, and only on a real terminal (auto-disabled when output is redirected or piped).
endpointstable of tablesWikidata, DBpedia, UniProt pre-registeredNamed SPARQL endpoints — see [rdf.endpoints.<name>] below.
visualizationtablesee [rdf.visualization]Styling for RDF graph visualizations (svg/png/plantuml output).
qlevertable, optionalunsetQLever Docker backend settings — see [rdf.qlever] below. Only compiled in with the qlever cargo feature, and not available on wasm.

[rdf.endpoints.<name>]

Each key under endpoints names one registered endpoint. The registered name is actually the endpoint’s own name field — the <name> in the table header is just where it lives in the TOML tree, and should match name for a given endpoint to make sense, though nothing enforces that. -e NAME/--endpoint NAME and the shell’s endpoint NAME command match NAME against name case-insensitivelywikidata, Wikidata and WikiData all resolve the same endpoint. rudof pre-registers three by default — Wikidata, DBpedia, UniProt — which you can override or add to.

KeyTypeDefaultDescription
namestring(required)The endpoint’s display name — also what it’s matched against (case-insensitively) by -e/--endpoint/the shell’s endpoint command.
query_urlIRI string(required)URL of the SPARQL query endpoint.
update_urlIRI string, optionalunsetURL for SPARQL update operations, if the endpoint supports them.
prefixmaptable (alias = "iri")emptyPrefixes to abbreviate IRIs in this endpoint’s query results.
[rdf.endpoints.Wikidata]
name = "Wikidata"
query_url = "https://query.wikidata.org/sparql"

[rdf.endpoints.Wikidata.prefixmap]
wd = "http://www.wikidata.org/entity/"
wdt = "http://www.wikidata.org/prop/direct/"

The default endpoints are themselves defined this same way, as standalone files — name, query_url, and [prefixmap], without the [rdf.endpoints.<name>] wrapper — under rudof_rdf/endpoints/, embedded into rudof at compile time. Every *.toml file in that folder is registered automatically, so adding a new default endpoint (or changing an existing one) is just adding or editing a file there and opening a pull request — no Rust code change needed. The same file shape can also be loaded at runtime: RdfDataConfig::load_endpoint_description(path) registers an endpoint from such a file under its own name field, which is what the shell’s endpoint FILE.toml command (see shell) uses.

[rdf.visualization]

Controls the appearance of --result-format svg/png/plantuml graph output.

KeyTypeDefaultDescription
uri_stylenode styleblue outline, white fill, roundedStyle for IRI nodes.
bnode_stylenode styleblue outline, gray fill, roundedStyle for blank nodes.
literal_stylenode styleblack outline, cyan fill, squareStyle for literal nodes.
reifier_stylenode styleblack outline, yellow fill, squareStyle for RDF 1.2 reifier nodes.
asserted_stylenode styleblack outline, white fill, squareStyle for asserted triple nodes.
non_asserted_stylenode styleblue outline, white fill, squareStyle for non-asserted (quoted) triple nodes.
subject_arrow_stylearrow styleblue, dashedStyle for subject-role arrows.
predicate_arrow_stylearrow stylered, dashedStyle for predicate-role arrows.
object_arrow_stylearrow stylegreen, dashedStyle for object-role arrows.
subject_labelstring"subject"Label used for a triple term’s subject role.
predicate_labelstring"predicate"Label used for a triple term’s predicate role.
object_labelstring"object"Label used for a triple term’s object role.
reifies_labelstring"reifies"Label used for the reification relationship.
subject_textstring"subj"Short text on the subject arrow.
predicate_textstring"pred"Short text on the predicate arrow.
object_textstring"obj"Short text on the object arrow.
unasserted_triple_shape"Cloud" | "Rectangle""Cloud"Node shape for non-asserted triples.
asserted_triple_shape"Cloud" | "Rectangle""Rectangle"Node shape for asserted triples.

Note: unasserted_triple_shape/asserted_triple_shape take the values "Cloud" or "Rectangle" capitalized as shown — unlike most other enum-valued settings on this page, this one isn’t lowercased/snake_case.

Node-style fields

Each *_style above (except the arrow ones) is a table with these keys:

KeyTypeDescription
line_colorcolor nameOutline color.
line_thicknessintegerOutline thickness.
background_colorcolor nameFill color.
round_cornerintegerCorner radius (0 = square corners).

Valid color names (snake_case): white, black, cyan, gray, red, green, blue, yellow, light_blue, light_green, light_coral.

Arrow-style fields

KeyTypeDescription
line_colorcolor nameArrow line color (see the color list above).
line_thickness"bold" | "normal" | "dashed" | "dotted"Arrow line style.
text_colorcolor nameColor of the arrow’s label text.
[rdf.visualization.uri_style]
line_color = "blue"
line_thickness = 1
background_color = "white"
round_corner = 25

[rdf.qlever]

Only relevant when running RDF data through a QLever Docker container backend (--backend qlever). Every field is optional; rudof only sets a --flag on the QLever process when you set the corresponding key.

KeyTypeDefaultDescription
image_namestring"adfreiburg/qlever"Docker image to run.
image_tagstring"commit-a307781"Docker image tag.
index_dirpath, optional<cache dir>/rudof/qlever/<hash>Host directory for the QLever index. Also settable per-invocation with --qlever-index-dir <DIR> (which takes precedence over this key), so you don’t need a config file just to pin or share an index location. When left unset, the resolved directory is logged at startup so you can find it, reuse it in later invocations, or copy it to another machine — building the index is idempotent and is skipped whenever the target directory already holds a finished index.
index_namestring"default"Index base name (QLever’s -i).
auto_delete_if_createdbooleanfalseDelete the index directory when the container is dropped, if this run created it.
stxxl_memorystring, optionalunsetSTXXL memory for index building.
parser_buffer_sizestring, optionalunset--parser-buffer-size.
parser_parallelboolean, optionalunset (QLever default: on)--parse-parallel.
container_memorystring, optionalunsetDocker container --memory cap.
container_memory_swapstring, optionalunsetDocker container --memory-swap cap.
host_portinteger, optionalunset (ephemeral port)Pin the host-side port instead of picking one automatically.
container_portinteger7001Container-side port.
access_tokenstring, optionalunsetQLever -a admin access token. Never written back out by rudof config when unset.
num_simultaneous_queriesinteger, optionalunsetQLever -j.
memory_max_sizestring, optional"5G"Server memory limit (QLever -m).
cache_max_sizestring, optional"2G"Cache size (QLever -c).
cache_max_size_single_entrystring, optional"1G"Max cacheable single-entry size (QLever -e).
lazy_result_max_cache_sizestring, optionalunsetQLever -E.
cache_max_num_entriesinteger, optionalunsetQLever -k.
no_patternsbooleanfalseQLever -P.
no_pattern_trickbooleanfalseQLever -T.
textbooleanfalseQLever -t.
only_pso_and_pos_permutationsbooleanfalseQLever -o.
default_query_timeoutstring, optionalunsetQLever -s.
service_max_value_rowsinteger, optionalunsetQLever -S.
throw_on_unbound_variablesbooleanfalseQLever --throw-on-unbound-variables.
run_as_host_userbooleantrueRun the container as the host UID/GID instead of root.
container_labelstring, optionalunsetExtra Docker label on the spawned container.
server_readiness_timeout_secsinteger60How long to wait for the QLever server to become ready.

[shex] — ShEx schema handling

Source: shex_validation/src/shex_config.rs

KeyTypeDefaultDescription
base_iriIRI stringunsetDefault base IRI for resolving relative IRIs in a ShEx schema; falls back to the top-level base_iri if unset.
shex_format"shexc" | "shexj" | an RDF format name"shexc"Format of ShEx schemas read from disk (shexc/shex for ShExC, shexj/json for ShExJ, or any RDF serialization name — e.g. turtle — when the schema is embedded as RDF).
check_well_formedbooleantrueCheck that the schema is well-formed after parsing.
show_extendsbooleantrueInclude EXTENDS relationships when showing a schema (shex command).
show_importsbooleantrueInclude import information when showing a schema.
show_shapesbooleantrueInclude the shape list when showing a schema.
show_dependenciesbooleanfalseInclude shape dependency information when showing a schema.
show_irbooleanfalseShow the compiled Schema Internal Representation instead of the source syntax.

[shex_validator] — ShEx validation

Source: shex_validation/src/validator_config.rs

KeyTypeDefaultDescription
max_stepsinteger, optionalunset (unbounded)Maximum number of validation steps before giving up.
check_negationbooleantrueCheck the ShEx negation requirement during validation.
widthinteger80Line width used when pretty-printing validation output.
shapemaptablesee belowShapeMap display settings.

External-shape resolvers (used to resolve EXTERNAL shape declarations) are configured programmatically (add_external_resolver) or via CLI flags, not through rudof.toml.

[shex_validator.shapemap]

KeyTypeDefaultDescription
nodes_pmtable (alias = "iri")emptyPrefix map used to abbreviate node IRIs in ShapeMap output.
shapes_pmtable (alias = "iri")emptyPrefix map used to abbreviate shape-label IRIs in ShapeMap output.
ok_textstring"OK"Text shown for a passing result.
fail_textstring"FAIL"Text shown for a failing result.

[shacl] — SHACL validation

Source: shacl/src/validator/config.rs

Not compiled in on the wasm target. Besides the keys below, this section also embeds a copy of [rdf], which is always overwritten by the top-level [rdf] on resolve (see Base IRI propagation) — it isn’t independently settable.

KeyTypeDefaultDescription
store_errorsbooleantrueKeep violations in the ValidationReport returned by validation. Turning this off still computes conformance correctly — conforms stays accurate — it just omits the per-violation detail, which is cheaper to carry around when you only need the boolean.
store_evidencesbooleanfalseAlso keep evidence for why each (node, shape) pair conforms, not just why it fails. Off by default since most validation runs only care about violations.
evidence_shapes_onlybooleanfalseWhen store_evidences is on, keep only the per-shape summary evidence (one per conforming (node, shape) pair with its own targets, e.g. “conforms to :PersonShape”) and drop the finer per-constraint-component evidence (sh:datatype, sh:minCount, …). No effect when store_evidences is off.
recursion_semantics"none" | "cautious" | "brave""cautious"Whether a shape that (directly or transitively) references itself is accepted at all, and if so, how a cycle in the data is resolved. none rejects the shapes graph outright — a schema-loading error — the moment it contains such a cycle, regardless of the data. cautious (the default) accepts it and assumes a node caught in a cycle does not conform unless that can be shown without relying on the cycle; brave accepts it and assumes it does conform as long as that assumption is self-consistent. A cycle built only from monotonic constructs (sh:and, sh:or, sh:node, sh:property, sh:minCount, sh:closed, …) is always sound under cautious/brave; one that also carries a negating constraint (sh:not, sh:xone, …) is sound too as long as it’s stratified — every such constraint targets a shape that doesn’t itself depend on any recursion. A cycle where negation instead reaches back into a recursive shape has no safe order to resolve it in and is always rejected, regardless of this setting — see Recursion and negation.

store_errors/store_evidences/evidence_shapes_only only affect what the report contains, never whether the data conforms. recursion_semantics is different: setting it to none turns what would otherwise load and validate successfully back into a hard error (any cyclic shape reference) — and for a shape with no cycles in it, this setting has no effect at all.

[shacl]
store_errors = true
store_evidences = false
evidence_shapes_only = false
recursion_semantics = "cautious"

[shex2uml] — ShEx → UML/PlantUML conversion

Source: shapes_converter/src/shex_to_uml/shex2uml_config.rs

KeyTypeDefaultDescription
plantuml_pathpath$PLANTUML env var, else "plantuml.jar"Path to the PlantUML jar used to render diagrams.
annotation_labellist of IRIs[rdfs:label]IRIs used as annotation labels in the diagram.
replace_iribooleanfalseReplace IRIs with their labels (from annotation_label) in the diagram.
shadowingbooleantrueUse shadowing for shapes in the diagram. Only honored by the PlantUML engine — Graphviz has no equivalent effect and ignores it.
line_type"orthogonal" | "polyline" | "default""default"Connector line style.
direction"left_to_right" | "top_to_bottom""top_to_bottom"Diagram layout direction.
class_skintablesee [shex2uml.class_skin]Border/background/arrow colors for class boxes. Read by both visualization engines (see --viz-engine in convert), so svg/png output looks the same regardless of which one generated it.

[shex2uml.class_skin]

KeyTypeDefaultDescription
border_colorcolor nameblackClass box outline color.
background_colorcolor namelight_blueClass box fill color.
arrow_colorcolor nameblackDefault color for association/generalization arrows.

Same color names as [rdf.visualization] above.

[shex2uml.class_skin]
border_color = "black"
background_color = "light_blue"
arrow_color = "black"

[shex2html] — ShEx → HTML conversion

Source: shapes_converter/src/shex_to_html/shex2html_config.rs

KeyTypeDefaultDescription
titlestring"ShEx schema"Title used in the generated HTML pages.
landing_pagestring"index.html"Filename of the generated landing page.
shape_templatestring"shape.html"Filename of the per-shape page template.
template_folderstring, optionalunset (built-in templates)Folder with custom Tera/HTML templates, if overriding the built-in ones.
css_filestring"shex2html.css"Generated stylesheet filename.
target_folderpath"."Output directory for the generated site.
property_colorstring"blue"Color used for property names in the generated pages.
annotation_labellist of IRIs[rdfs:label]Same as [shex2uml].annotation_label, used for the embedded diagrams.
replace_iri_by_labelbooleantrueReplace IRIs with their labels in the generated pages.
embed_svg_schemabooleantrueEmbed an SVG diagram of the whole schema on the landing page.
embed_svg_shapebooleantrueEmbed an SVG diagram on each shape’s own page.

[shacl2shex] — SHACL → ShEx conversion

Source: shapes_converter/src/shacl_to_shex/shacl2shex_config.rs

KeyTypeDefaultDescription
starting_shapes_mode"non-bnodes""non-bnodes"How to pick the ShEx schema’s starting shapes; currently the only mode is “shapes which aren’t blank nodes”.
embed_bnodesbooleanfalseEmbed blank-node shapes inline instead of giving them their own top-level shape.
add_target_classbooleanfalseAdd an rdf:type/ex:class triple constraint for each SHACL sh:targetClass declaration.

Unlike the other embedded-subsystem fields described in Base IRI propagation, [shacl2shex].shacl (an embedded copy of [shacl]) is not overwritten by resolve() — if you need to point shacl2shex at different SHACL settings than the top-level [shacl], you can set [shacl2shex.shacl] directly.

[tap] — DCTAP (CSV) handling

Source: dctap/src/tap_config.rs

KeyTypeDefaultDescription
delimitersingle character,Column delimiter in the DCTAP CSV.
quotesingle character"Quote character for CSV fields.
flexiblebooleantrueAllow rows to have a varying number of fields instead of erroring on mismatch.
picklist_delimitersingle character|Delimiter between values inside a picklist cell.
value_shape_delimitersingle character' ' (space)Delimiter between values inside a value-shape cell.
property_placeholderstable, optionalemptyExperimental. Per-property-ID value generators — see below.
empty_property_placeholdertable, optionalunsetExperimental. Value generator used for rows with an empty property ID.

Placeholder resolvers are tables of the form { stem = "..." } (currently the only kind is stem, which generates "<stem><row number>"-style values):

[tap.property_placeholders.x]
stem = "pending"

[tap2shex] — DCTAP → ShEx conversion

Source: shapes_converter/src/tap_to_shex/tap2shex_config.rs

KeyTypeDefaultDescription
base_iriIRI stringunset (inherits the top-level base_iri)Base IRI for the generated ShEx schema.
datatype_base_iriIRI string, optionalunsetBase IRI used to resolve bare datatype names from the DCTAP valueDatatype column.
prefixmaptable (alias = "iri")dc, rdf, rdfs, sh, xsd, and an empty-alias prefix for http://example.org/Prefixes used in the generated ShEx schema.

[shex2sparql] — ShEx → SPARQL conversion

Source: shapes_converter/src/shex_to_sparql/shex2sparql_config.rs

KeyTypeDefaultDescription
this_variable_namestring"this"SPARQL variable name used for “the focus node” in generated queries.

[service] — SPARQL service description

Source: sparql_service/src/service_config.rs

KeyTypeDefaultDescription
base_iriIRI stringunset (inherits the top-level base_iri)Base IRI used when resolving relative IRIs in a SPARQL service description.

[comparator] — shape comparison

Source: shapes_comparator/src/comparator_config.rs

KeyTypeDefaultDescription
ignore_value_constraintsbooleanfalseTreat two shapes as equivalent even if their value constraints differ.
prefixes_equivalenceslist of [iri, iri] pairsemptyPairs of IRIs to treat as equivalent prefixes when comparing shapes, e.g. [["http://a/", "http://b/"]].

Full example

Combining several sections above into one file (based on bindings/python/examples/example.toml):

base_iri = "http://example.org/"
auto_base = false

[logging]
level = "info"

[rdf]
base_iri = "http://example.org/"

[rdf.endpoints.Wikidata]
name = "Wikidata"
query_url = "https://query.wikidata.org/sparql"

[rdf.endpoints.Wikidata.prefixmap]
wd = "http://www.wikidata.org/entity/"
wdt = "http://www.wikidata.org/prop/direct/"

[shex]
show_imports = true
show_dependencies = true

[shex_validator]
max_steps = 100
check_negation = true

[tap]
delimiter = ","
flexible = true

[tap2shex]
base_iri = "http://example.org/"

[tap2shex.prefixmap]
dc = "http://purl.org/dc/terms/"

Generate a real starting point for your own project with rudof config -o rudof.toml, then edit in the keys you need from the tables above — you only ever need to set what you want to override.