Release Notes
A summary of features and changes by release, organized from newest to oldest.
Kitty (Struct) Types — PR #26
User-defined composite types with typed fields.
kitty Cat {
name: string
age: int
}
nyan nyantyu = Cat("Nyantyu", 3)
nya(nyantyu.name) # => Nyantyu
What’s new:
kittykeyword for struct definitions- Field definitions with
name: typesyntax - Constructor functions (call type name with positional args)
- Field access with
.notation - Structural equality for kitty instances
KittyStmtandKittyFieldAST nodes- Runtime
Kittyvalue type withGetFieldmethod
Go-style Grouped Parameter Types — PR #25
Parameters can share type annotations using Go-style grouping:
meow add(a, b int) int {
bring a + b
}
# a and b are both int
What’s new:
- Right-to-left type propagation in parameter lists
(a, b int, c, d string)groupsa,basintandc,dasstring
Immutable Variables and Range-based Purr — PR #23
Variables are now immutable by default. The purr loop gains range-based forms.
purr i (10) { nya(i) } # count: 0 to 9
purr i (1..20) { nya(i) } # range: 1 to 20 (inclusive)
What’s new:
purr i (n)— count form (0 to n-1)purr i (a..b)— range form (a to b inclusive)RangeStmtAST node withStart,End,Inclusivefields- Loop variable automatically bound in each iteration
Formatter and Linter — PR #21, #22
New CLI subcommands for code quality.
meow fmt my_file.nyan # Auto-format
meow lint my_file.nyan # Check style
What’s new:
meow fmt— auto-formats.nyanfiles (indentation, spacing, alignment)meow lint— checks for style issuessnake-caserule: identifiers must use snake_case
- Recursive file discovery with
./...pattern
Static Type System (Gradual Typing) — PR #20
Optional type annotations for compile-time checking and faster code generation.
meow add(a int, b int) int {
bring a + b
}
nyan x int = 42
What’s new:
- Type keywords:
int,float,string,bool,furball,litter - Variable type annotations:
nyan x int = 42 - Function parameter types:
meow f(a int, b int) - Return type annotations:
meow f(a int) int - Type checker (
pkg/checker/) with two-pass analysis - Typed code generation — fully typed functions emit native Go types (
int64,float64, etc.) - Gradual typing — typed and untyped code coexist
Mutation Testing — PR #18, #19
Automated mutation testing to verify test suite strength.
meow test -mutate my_test.nyan
What’s new:
meow test -mutate— mutation testing mode- Auto-discovery of test files
- Schemata-based mutation (arithmetic, comparison, boolean operators)
- Kill/survive report
- Unified snake_case naming convention
Statement Coverage — PR #17
Statement-level coverage tracking for .nyan programs.
meow test -cover my_test.nyan
What’s new:
meow test -cover— coverage instrumentation- Coverage report output
- Coverage profile export (
MEOW_COVERPROFILE)
Catwalk Output Tests — PR #16
Output verification tests inspired by Go’s Example tests.
meow catwalk_hello() {
nya("Hello!")
}
# Output:
# Hello!
What’s new:
catwalk_prefix for output verification functions# Output:comment blocks to specify expected outputCatwalk()runtime function — captures stdout and compares- Recursive test file discovery with
./...pattern
Comprehensive Test Suite — PR #15
Added extensive sample tests covering all language features.
What’s new:
- Test samples for arithmetic, strings, lists, conditionals, loops, lambdas, pipes, pattern matching, error handling
- Tests moved to
testdata/for CI
Help Subcommand — PR #13, #14
meow help
meow help run
meow help build
What’s new:
meow help [command]— shows help text for each CLI command- Updated CLI usage documentation
Testing Framework — PR #12
Full-featured testing framework with fuzz support.
nab "testing"
meow test_basic() {
expect(1 + 1, 2, "addition")
judge(yarn)
refuse(hairball)
}
What’s new:
testingstandard library packagejudge(condition)— assert truthyexpect(actual, expected)— assert equalrefuse(condition)— assert falsyrun(name, fn)— execute named testreport()— print summary, exit on failuretest_prefix for auto-discovered test functionsmeow testCLI subcommand- Fuzz testing with
seed()and random inputs
Standard Library: HTTP Client — PR #11
nab "http"
http.pounce("https://example.com") |=| nya
What’s new:
httppackage (nab "http")pounce(url)— HTTP GETtoss(url, body)— HTTP POSTknead(url, body)— HTTP PUTswat(url)— HTTP DELETEprowl(url)— HTTP OPTIONS- Options map for headers and max body size
- Auto-JSON serialization for Map bodies
- 10-second timeout, 1 MiB body limit
Standard Library: File I/O — PR #10
nab "file"
nyan content = file.snoop("data.txt")
nyan lines = file.stalk("data.txt")
What’s new:
filepackage (nab "file")snoop(path)— read entire file as stringstalk(path)— read file line by line, return listnabstatement for importing standard library packages- Member access syntax:
package.function()
Pipe Operator and Error Recovery — PR #3
[1, 2, 3] |=| lick(paw(x) { x * 2 }) |=| nya
nyan safe = divide(10, 0) ~> 0
What’s new:
|=|pipe operator — chains operations left-to-right~>error recovery operator — catch with fallback value or handlergag(fn)— explicit error catchingis_furball(v)— check for error valuesFurballerror value typeGagOrfunction for catch-with-fallback
CLI: GoReleaser and Homebrew — PR #4, #5
brew install 135yshr/homebrew-tap/meow
What’s new:
- GoReleaser configuration for automated binary releases
- Homebrew tap for macOS installation
meow versionsubcommand with ldflags injection- Semantic release integration
- GitHub Actions CI workflow
Initial Release — PR #1
The first release of the Meow programming language.
Core features:
- Cat-themed syntax with 19 keywords
.nyanfile extension- Transpiles to Go source code
- Compiles to native binaries via
go build - Dynamic typing with boxed
meow.Valueruntime
Language features:
- Variables (
nyan), functions (meow), return (bring) - Conditionals (
sniff/scratch) - While loops (
purr) - Lambdas (
paw) - Lists with index access
- Pattern matching (
peek) with literals, ranges, wildcards lick(map),picky(filter),curl(reduce)- Error handling:
hiss(raise),Hiss! ...error messages - Comments:
#line,-~ ... ~-block nyaprint function- Built-in type conversions:
to_int,to_float,to_string len,head,tail,appendfor lists
Compiler pipeline:
- Lexer with
iter.Seq[Token] - Pratt parser with
iter.Pull - AST with expression, statement, and pattern nodes
- Codegen to Go source
- CLI:
meow run,meow build,meow transpile
Infrastructure:
- GitHub Actions CI
- Go 1.26 requirement
- MIT License