ster
_____ ______ ______ ____
/ ___//_ __// ____// __ \
\__ \ / / / __/ / /_/ /
___/ / / / / /___ / _, _/
/____/ /_/ /_____//_/ |_|
[ Breton: "Meaning" or "Sense" ]
[ Semantic Knowledge Editor ]
ster is a terminal editor for semantic knowledge bases. Build and explore SKOS taxonomies and OWL ontologies together in one full-screen TUI — then visualise them as interactive graphs, run SPARQL, and publish HTML documentation, all from your terminal. No database required.
ster is the Breton word for meaning, with homonyms for river and star — keep the flow, and follow your star.
The TUI
The heart of ster is a Textual terminal app that shows your SKOS taxonomy and OWL ontology in a single tree:
- One unified tree — concept schemes, concepts, classes, named individuals, and properties side by side. Create, rename, delete, and edit any entity inline; every field is editable in a detail panel.
- Puns (class ⇔ concept) — an entity can be both an OWL class and a SKOS concept. Promote a concept to a class or demote it back with one action.
- Tag individuals with concepts — link named individuals to SKOS concepts
(
dcterms:subject), one at a time or in bulk from a checklist. - Live quality & coverage — a semanticlint pass colour-codes each tree node by its worst issue (🔴 error · 🟠 warning); hover for a per-entity issue count, and open the node to see the full list and its label/comment/property-fill coverage.
- Markdown notes — attach rich notes to any entity with a full-screen editor and a live rendered preview; markdown links are URL-checked when you open or edit them.
- Ontology overview — editable title/description; opening a pure-OWL file jumps straight to the overview.
- Bundled demo — a mixed SKOS + OWL sandbox you can load from the file list to try everything out (it resets on each load).
Beyond the tree
Every capability below is reachable from the home menu, acting on the file you selected:
| Menu action | What it does |
|---|---|
| TTL Viewer-Editor | The unified SKOS + OWL tree editor described above |
| SPARQL Query | In-TUI query editor with autocomplete and a cache-warmed engine (no cold-start delay); export results to CSV |
| Graph Viewer | Opens an interactive Cytoscape.js VOWL-style graph in the browser — classes as circles, property edges, per-class individual toggle, drag / zoom / detail panel |
| HTML Data Catalog | Generates browsable pyLODE documentation, one page per language |
| Import External Ontology | Fetch and cache external vocabularies, binding their namespaces for reuse |
| Linked Data Publish & Version | Semver-tagged releases served over a local Linked-Data server |
Installation
ster is a CLI app, so the cleanest install is as an isolated
uv tool — no virtualenv to manage, ster goes
straight on your PATH:
uv tool install ster # install
uv tool upgrade ster # update to the latest release
uvx ster # or run once, without installing
Prefer pip? That works too:
pip install ster # install / upgrade with: pip install -U ster
That's everything — TUI editing, graph viewer, SPARQL, HTML export, and the
publish server, no extras required. AI-assisted concept suggestions are
available via the llm library (online models,
local Ollama models, or a no-model copy-paste mode).
Quick start
ster
The home screen lists the ontology and taxonomy files in the current directory (plus a Load demo entry). Pick a file, then choose an action:
Select a file:
☑ my-ontology.ttl
🎒 Load demo ontology / taxonomy
▶ 🖥 TTL Viewer-Editor
🔍 SPARQL Query
📦 Linked Data Publish & Version
🌐 HTML Data Catalog
◈ Load Graph Viewer
📥 Import External Ontology
✕ Quit
Arrow keys navigate; Enter confirms. Inside the tree editor, press ? for
the full keymap — the essentials are + add, d delete, e edit,
Enter expand/open, Esc back.
Supported formats
| Extension | Format |
|---|---|
.ttl |
Turtle (recommended) |
.nt |
N-Triples (fastest for large files) |
.rdf / .xml |
RDF/XML |
.jsonld / .json |
JSON-LD |
.owl |
OWL/XML |
Large Files & Performance
For large ontologies or taxonomies (over 100k triples), ster provides several performance boosts out of the box:
- Fast Rust Parsing:
steruses the high-performance Oxigraph engine automatically for near-instant RDF parsing. - N-Triples Acceleration: Reading
.ntfiles is significantly faster than Turtle for massive datasets. Usester convert large.ttl large.ntto switch. - Binary Caching: After the first successful parse, a secure binary cache is created. Subsequent loads are near-instant (typically under 2s for 150MB+ files).
Key dependencies
| Package | Role |
|---|---|
| rdflib | RDF parsing / serialisation and the SPARQL engine |
| Textual | The terminal UI framework |
| Cytoscape.js | Browser graph rendering (VOWL viewer) |
| pyLODE | HTML documentation export |
Development
See CONTRIBUTING.md for the full workflow.
git clone https://github.com/gbelbe/ster.git
cd ster
uv sync --extra dev
bash scripts/install-hooks.sh # git pre-push hook (once per clone)
bash scripts/ci.sh # full local gate: lint · types · security · tests · coverage
The local gate mirrors GitHub Actions (ruff · mypy · bandit + pip-audit · pytest on Python 3.11 / 3.12 / 3.13), and a pre-push hook blocks any push without a passing run in the last 60 minutes. Coverage is reported to Codecov.
Release notes live in the GitHub releases.
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ster-0.10.0.tar.gz.
File metadata
- Download URL: ster-0.10.0.tar.gz
- Upload date:
- Size: 961.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af9d9efae348cb58e8ba2c33c3122902646769c54a42207e860acecfb25c249f
|
|
| MD5 |
5c5f70b63b27c854f73fc0f839862ee6
|
|
| BLAKE2b-256 |
13bd8f6ee3b82b64009c958e0a49aab5a1e2fef3db29a4a5b22eeee2887762d7
|
Provenance
The following attestation bundles were made for ster-0.10.0.tar.gz:
Publisher:
publish.yml on gbelbe/ster
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ster-0.10.0.tar.gz -
Subject digest:
af9d9efae348cb58e8ba2c33c3122902646769c54a42207e860acecfb25c249f - Sigstore transparency entry: 2501459923
- Sigstore integration time:
-
Permalink:
gbelbe/ster@b44c0602f33e62b102e575b199e544b46ca3e445 -
Branch / Tag:
refs/tags/v0.10.0 - Owner: https://github.com/gbelbe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b44c0602f33e62b102e575b199e544b46ca3e445 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ster-0.10.0-py3-none-any.whl.
File metadata
- Download URL: ster-0.10.0-py3-none-any.whl
- Upload date:
- Size: 410.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c4db546a2a3af3240feac956e360d6aecf6c8b94f44f8e6cb6fe72dece780a49
|
|
| MD5 |
0f3a42fadb7f6cce01475be28d9cc0b7
|
|
| BLAKE2b-256 |
44d69b4370316f770ccdaf7af22332ad565cf9287367cfa3b3e10fb14fc180a1
|
Provenance
The following attestation bundles were made for ster-0.10.0-py3-none-any.whl:
Publisher:
publish.yml on gbelbe/ster
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ster-0.10.0-py3-none-any.whl -
Subject digest:
c4db546a2a3af3240feac956e360d6aecf6c8b94f44f8e6cb6fe72dece780a49 - Sigstore transparency entry: 2501459931
- Sigstore integration time:
-
Permalink:
gbelbe/ster@b44c0602f33e62b102e575b199e544b46ca3e445 -
Branch / Tag:
refs/tags/v0.10.0 - Owner: https://github.com/gbelbe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b44c0602f33e62b102e575b199e544b46ca3e445 -
Trigger Event:
push
-
Statement type: