Meow Programming Language v0.21.4: The Documentation Says What the Language Does
Released 2026-08-20. No compiler behaviour changed in this one. What changed is that the documentation now describes the language that v0.17.0 through v0.21.3 actually built, and a test keeps it that way.
What the reference did not say
The reference had never learned about nab go at all — its import section
ended at the list of Meow’s own packages. Reaching a Go package by import
path, naming it with tag, and pinning a version with @ are all documented
now, and every example was run rather than written from memory:
nab go "github.com/Masterminds/semver/v3@v3.3.1"
nyan v = semver.must_parse("v1.4.2")
nya(v.string()) # 1.4.2
Its member-access section still described a dot that reaches fields, groom
methods and package functions — which is what a dot did before v0.19.1. A
keyword used as a member name, a member or a named function taken as a value,
and a binding taking a name over are all described now:
kitty Cat {
name: string
age: int
}
groom Cat {
meow show() string {
bring self.name + " (age " + to_string(self.age) + ")"
}
}
meow double(n int) int { bring n * 2 }
nyan nyantyu = Cat("Nyantyu", 3)
nyan tell = nyantyu.show # not called: the method, bound to nyantyu
nya(tell()) # Nyantyu (age 3)
nya(lick([1, 2, 3], double)) # [2, 4, 6]
What both documents said that was no longer true
The trill rules were stated without the qualifier
v0.21.3 gave them:
Calling … a non-
trilluser function is a compile error
That holds only when the name reaches that function. A pure body may hold a pure local of its own where an impure function happens to share the name. Both the specification and the reference now say so, with the example.
The website copies had drifted seventeen commits
The four documents on this site — specification, reference, standard library
and internals — are copies kept by hand, and the specification had been
drifting for seventeen commits. The site was describing a language with no
scram, no basket, no json package, no conditional purr, no bolt or
slink and no way to reach a Go package, while still carrying a “known
limitation” that had been fixed.
All four copies are now what the documents say, keeping the front matter Hugo needs and the opening line each was given for a search engine — the two differences that are deliberate.
Nothing had said when a copy fell behind: the site builds, the tests pass, and
only a reader finds out. docs/docs_test.go now checks each pair line by line
and names the file and line where they part, verified by breaking it on
purpose:
docs/spec.md and its website copy differ at line 509:
docs: "### Return Statement"
website: "### Return Statement (drifted)"
Upgrading
Nothing to change — the binary is unchanged apart from its version. Reading the specification and the reference again is the point of this one.
brew upgrade meow
# or
go install github.com/135yshr/meow/cmd/meow@v0.21.4