What is GoMeta? โ
GoMeta.jl is an interpretable-metadata engine, written in Julia, designed to work between, behind and within your data: in any programming language and any file format. A file carries its ordinary content plus #~ metaLines โ comment lines with machine-interpretable metadata (labels, visibility actions, conditions) sitting right beside the content they describe.
GoMeta absorbs the metaLines, evaluates which alterants apply to each piece of content, and a renderer applies the result:
parse (BLS) โ absorb (read metaLines) โ evaluate (which alterants apply) โ render (apply Visib)GoMeta evaluates โ it never executes
Conditions run in GoMeta's own closed interpreter, never through Julia's eval. A metaLine can describe, label, and select; it cannot run anything. (One deliberate, explicitly opt-in extension mode exists โ see the SECURITY notes in the repository.)
Why metadata โ and why in comments? โ
One source file, many output formats. A file never has to be forked per audience: in this release, one marked Julia source file derives four notebook editions (full ยท student ยท report ยท slides) plus one executed twin, a pair of Documenter manual pages generated as views of the same source โ and, as for every file GoMeta processes, the share-view render of the file itself.
Webs instead of hierarchies. A folder tree or a chapter outline forces each item into a single position โ a stringent limitation. Labels weave webs of meaning instead: the same piece of content carries as many labels as apply, and one query brings it back (the shipped
find_by_label.jldemo answers "which cells carry:label5?" over the committed corpus).Language-agnostic, because comments. The metadata hides inside ordinary comments, so the host language never sees it โ and the same idea travels beyond Julia:
0.3.0ships three content flavors,:julia(the#comment lead, the default),:c(the//line-comment family), and:latex(%) โ selected explicitly, never inferred.
The idea โ
Embed formalized meaning [metadata] into comments โ brief, simple, expressive, extendable metadata riding where every language already has room.
Absorb & evaluate โ GoMeta absorbs that metadata (parses and interprets it) and evaluates which alterants apply to each piece of content, producing the evaluated values: the evals (evaluated metadata โ unrelated to Julia's
eval).Pass the evaluations on โ the evals are the deliverable. Extensions โ scripts, downstream tools, consumer packages โ read them and act; GoMeta's own renderer, which applies Visib to produce the share-view, is simply the act built in.
What it is for โ
Everything in GoMeta serves four concrete uses of your accumulated files:
Find it again โ name and tag a file where it lives, and retrieve it by meaning later.
Link and swap โ files reference each other by meaning, not by path.
One source, many outputs โ render the same file into different views without forking it.
Share on your terms โ strip what is private and publish the rest, by applying one simple function to GoMeta's output.
The pieces โ
Before GoMeta can absorb and evaluate anything, BLS parses the file into a tree of Components: File โ Block โ Line โ Segment. Every Component carries one of three flavors โ Meta, Text, or Code: a line is Meta if it starts with a delimited
#~head (#~followed by whitespace, a depth marker, or end of line), Code if it is executable source, Text otherwise.Every flavor can carry comments. A
##opens a human comment whether the line is meta, text, or code โ the comment rides its own Segment, and on a metaLine the meta-parser ignores it.A metaBlock โ one or more contiguous metaLines โ is the unit that carries metadata scope for the content attached below it.
An alterant is a directive GoMeta applies to a Component. The Visib (visibility) alterant decides each Component's fate when rendered: show, hide, or discard.
State-refs are built-in predicates (
isCode,isText,isMeta,containsMeta) used inside{ โฆ }conditions to decide whether an alterant applies.
Continue with metaLines for the syntax, or jump straight to Getting started.
Status โ
GoMeta.jl 0.3.2 is alpha: a working, tested engine for the v0 subset of the GoMeta language. The committed example corpus โ seven input/output pairs โ renders byte-identically under the shipped 1140-test suite, and malformed or extreme input on the witnessed metaLine action surface receives a stable, documented refusal (the few remaining edges โ including one documented crash edge โ are catalogued honestly in the repository's API reference). The language grows by design; the v0 subset forecloses none of it.
GoMeta is Fair Source โ licensed under the Functional Source License, Version 1.1, MIT Future License (FSL-1.1-MIT; source-available, not OSI-approved open source): free for everyone's own use โ at work, at university, in the public sector โ including internal use and access, non-commercial education and research, and professional services provided to other licensees. Not licensed: offering GoMeta to others in a commercial product or service that competes with it or with the Licensor's own GoMeta-based offerings (for that, contact hello@gometa.dev). Each release automatically becomes MIT-licensed on its second anniversary. See the repository for the LICENSE file and details.