Skip to content

@thesephist thesephist released this Aug 4, 2019 · 8 commits to master since this release

This release is mostly a minor bugfix update. Since I'll be taking a break from working on Ink for a little bit to tend to other projects. I wanted to get all the accumulated fixes out of the gate and released.


  • read() now returns the correct empty value (empty string) when called with --no-read; before, it was returning ().
  • Tests now check for more cases in isolated execution modes, so there should be less regressions around permissions in filesystem or network operations.
  • Sometimes, builtin functions like read were calling the callback twice with conflicting data when errored. This has been fixed, so all builtins now only callback once.
  • The interpreter now correctly deals with io.EOF in the interactive REPL, rather than showing an error when exiting with Ctrl+D.
  • Sometimes, HTTP APIs listen() and req() would return () on empty response bodies instead of the empty string. This has been standardized around the empty string, and all exceptions to this rule have been fixed to use the empty string to represent empty bodies.
  • Fixed some bugs around mutable strings, and when strings are copied vs. mutated.

Other misc

  • The Go code has been refactored around more blocking APIs, dramatically simplifying the overall API around the parser and interpreter.
  • Updated test runner samples/ to have test descriptions for easier debugging on failing tests.
Assets 7

This release is a major update with some breaking changes, that brings a new interface for builtin system interfaces and comes with an expanded set of standard library capabilities. You can try it at

Go interfaces

  • Simplified Go API with blocking methods -- especially Context.Exec
  • Interpreter core APIs accept io.Reader

Builtin interface overhaul

  • Ink's string type is now just a binary byte array, capable of holding any binary data. like Lua strings.
  • Ink's builtin functions that interface with the network and filesystem now represent binary data and files with Ink strings, which contain the binary data. This makes all operations that interface with these builtins orders of magnitude faster.
  • dir(), stat(), and make() builtins for filesystem operations
  • Much more correct behavior for existing filesystem builtins read() and write()


  • Updated standard library with optimizations
  • Removed the is operator
  • JSON serializer/deserializer in samples
  • Fixed stringification issues with strings that contain escaped characters
  • Refactored internal types to be more consistent / simpler.
Assets 7
Jul 20, 2019
Bump version number -> v0.1.3

@thesephist thesephist released this Jul 14, 2019 · 90 commits to master since this release

This is the third preview release of Ink. The language specification has stayed unchanged, and the interpreter comes with these improvements.

  • The listen(host, handler) builtin function for starting HTTP servers written in Ink
  • Optimizations to composite value accesses and number-to-string conversions
  • A more stable parser, especially when parsing partial input in the -repl
  • Optimized functions in the standard library, specifically work to make std.encode faster and bug fixes to std.readFile and std.writeFile
  • Support for using the ink interpreter in an Ink script's #!/usr/bin/env ink shebang line
  • General other minor bug fixes and optimizations

You can once again go to to try the newest version of the interpreter, minus file read/write operations and the new listen(...) builtin -- those are limited by the -isolate interpreter flag.

Assets 6

@thesephist thesephist released this Jul 5, 2019 · 112 commits to master since this release

The patch release brings a bunch of improvements to many different areas in the language and interpreter.

  • Completely redesigned and reworked concurrency model for running Ink functions asynchronously, in a way that leaves more room for future growth and allows multiple asynchronous tasks to be running side by side.
  • An execution context now locks for better memory safety.
  • Fixes and improvements for old samples, and a bunch of new samples in the repository.
  • Building blocks of a module system, using the load() built in function that loads other Ink programs as module objects.
  • New builtin functions in(), read() and write()
  • In addition, a whole class of bugs around concurrency has been fixed!

You can also go try Ink programs on the web now, at

Assets 5

@thesephist thesephist released this Jun 27, 2019 · 179 commits to master since this release

This is the first release of the Ink interpreter 🚀

echo "out('Hello, World!')" | ink

This is a preview release, because...

  1. although the interpreter core is feature complete, it's missing many builtin functions and features I'd like the basic runtime to have
  2. the language specification may yet change in major ways

That said, this is a fully functional release capable of running all sample programs and tests in the project repository, and implements the full language syntax and semantics including tail recursion optimization.

This release is also designed to be free of crashes and panics. I've been hoping to set up fuzz testing using go-fuzz but haven't had the chance yet -- so if you can make it crash, it's a bug! Please file an issue with a test case 🐞.

Assets 5
You can’t perform that action at this time.