Skip to content

Releases: ideumi/chippy

V-1.1.1

V-1.1.1 Pre-release
Pre-release

Choose a tag to compare

@ideumi ideumi released this 14 Aug 14:28

Released on Aug 14, 2026

What's New:

- corelib:
	- added libquery.chh

	- libstrings.chh: moved Reverse(value) to libquery.chh and improved it
	- libstrings.chh: Format and TrimLeft no longer walk the string one character at a time

	- libbytes.chh: BytesToHex no longer builds its result by concatenation

	- libhttp.chh: the plain and TLS servers now share one connection worker and accept loop
	- libhttp.chh: bug: a Content-Length that is not a number raised RTError
	- libhttp.chh: HttpServeTLS now returns err on an empty cert or key path

- values:
	- strings now store their rune count, so len(value), indexing, slicing and copying are much faster

- builtins:
	- indexof(value, search) no longer walks the string when it is all ASCII
	- charat(value, index) no longer allocates a new string for the character
	- list(value) on a string no longer allocates a string per character
	- slice(value, start, end) now shares one bounds check between strings, lists and bytes

- orchestrator:
	- deadlock: let blocking primitives supply their own liveness test instead of the detector knowing each one
	- an actor now releases its engine as soon as it finishes rather than when something waits on it

- repl:
	- adjusted the prompt color to match other cli tools

- bytecode:
	- compiled files no longer store source positions

- parser:
	- rename ifExprC to elseExpr

- disassembler:
	- bug: a chunk whose code ended mid instruction printed a bad operand

- other:
	- various cleanups in the codebase
	- go.mod bumped to 1.26.5

FYI Breaking:

- Reverse(value) has moved from libstrings.chh to libquery.chh, the functions produce the same results, so load("libquery.chh"); should fix it for you

- the bytecode format is now version 2 due to the source position change. Anything compiled with 1.1.0 no longer runs and should be recompiled.

- a runtime error from a compiled program no longer names a file or a line. You should run your program from source when you need a position.

- compiling the same code under a different file name now gives the same binary, see 'chippy doc bytecode'

256774e0453506adae6ad75d647812527186faba2d4877f72093ba388ae0ac24 chippy-1.1.1-linux-aarch64.tar.xz
9948f293190a63327a55a7d0fb4c4a0681238d8f1d17cfac1f5add12f8542b28 chippy-1.1.1-linux-x86_64.tar.xz

V-1.1.0

V-1.1.0 Pre-release
Pre-release

Choose a tag to compare

@ideumi ideumi released this 04 Aug 14:25

Released on Aug 1, 2026

What's New:

- New code name for the 1.1.x series:
	- 'rixosa' (after Machetornis rixosa)
		- CHIPCN has been updated

- rr2:
	- the RoadRunner2 tree walking interpreter has been removed

- modena:
	- added the Modena engine
		- Modena is a new execution engine consisting of a bytecode compiler, disassembler, bytecode virtual machine as well as a serializer for the bytecode file format
			- the engine executes code now much faster than RR2
			- the engine now uses significantly less memory than RR2
			- the engine now has a much cleaner scoping model

	- load(filename) now accepts compiled bytecode files as well as source files
	- exceeding the maximum recursion depth now raises RTError instead of crashing
	- builtin argument count errors now point at the call itself rather than at the first argument
	- indexing a map with a key that is not set now raises RTError

- parser:
	- exponentials are now right associative

- builtins:
	- updated builtins for modena
	- several cleanups and streamlining

- optionals:
	- updated optionals for modena

- chippy:
	- added "chippy disasm <file>" command
	- added "chippy compile <source>", "chippy compile <source> <out>" commands

- combine:
	- updated for modena
	- Added "Compile" option to the combine configuration
		- Updated the "chippy combine new" default template

- orchestrator:
	- updated for modena
	- bug: do not report a deadlock when the wait(handle) target is already done

- misc:
	- various cleanups, streamlining and improvements across the entire codebase

FYI Breaking:

- Alongside the new engine comes a new scoping model. Chippy now uses a new model that features a Global, Function as well as a Block Scope which may break your existing applications if you relied on the previous scoping model for functionality. I presume most well written code will work just fine. See "chippy doc scoping".

- "chippy combine new" now produces a configuration that produces compiled bundles by default. Regenerate your combine.chp files.

- "chippy combine" now produces compiled bundles by default, to disable this, declare "var Compile = false;" in your combine.chp.

- Indexing a map with a key that is not set now raises RTError instead of returning err. If your code accesses maps without checking if the key is contained via has(container, needle), your code will need to be updated.

- Exponentiation aka (x^y) is now right associative.

- Since Modena is a new engine and the changes were rather ambitious, while I have conducted extensive testing of the language features, there is a possibility that bugs and issues may have snuck their way in that I have not found yet. If you find such an issue, I would appreciate it if you could file a bug report on the issues page: https://codeberg.org/ideumi/chippy/issues

ce159e2eb55369c3e99b1055e12d3d73760be74254c307fd1866b5937a7c2561 chippy-1.1.0-linux-aarch64.tar.xz
06da9192de104ec8d1511df2db3efdf569e350171df92fc911a2bfb4715ca328 chippy-1.1.0-linux-x86_64.tar.xz

V-1.0.24

V-1.0.24 Pre-release
Pre-release

Choose a tag to compare

@ideumi ideumi released this 04 Aug 14:25

Released on Jul 5, 2026

What's New:

- doc:
	- bug: documentation for list(value1, value2, ...) was inaccessible due to "list" special keyword
		- "chippy doc" now gives the list of all available documentation topics
		- Removed special index case
			- index.chpdoc was removed

FYI Breaking:

- "chippy doc list" now gives documentation for the list(value1, value2, ...) builtin
- "chippy doc" now gives the list of all available documentation topics

786ccb0aa821a34b6ac94375758806e7bd2540ce8b915999d649603ea8823f38 chippy-1.0.24-linux-aarch64.tar.xz
96601a93743b489295933fe6ac832ec0643d4f1e0cb552a294fe1ca7a333349c chippy-1.0.24-linux-x86_64.tar.xz

V-1.0.23

V-1.0.23 Pre-release
Pre-release

Choose a tag to compare

@ideumi ideumi released this 04 Aug 14:24

Released on Jul 4, 2026

What's New:

- combine:
	- trailing newlines now get trimmed
	- readable output now gets formatted via chippy format

- rr2:
	- interpreter panics are now properly intercepted and displayed

- corelib:
	libhttp.chh: support for IPv6

- builtins:
	- has(container, needle): treat out of range as not found in bytes instead of throwing RTError
	- indexof(haystack, needle): treat out of range as not found in bytes instead of throwing RTError
	- int(value): now returns err instead of throwing RTError on inconvertible values
	- sopen(address, port, mode): support for IPv6

- optional
	- http:
		- bug: dechunk, parseresponse: fixed some under/overflow cases
	- tls:
		- tlsopen: support for IPv6

- other:
	- various code cleanups and consistency fixes

FYI Breaking:

- has(container, needle): treat out of range as not found in bytes instead of throwing RTError.
- indexof(haystack, needle): treat out of range as not found in bytes instead of throwing RTError
- int(value): now returns err instead of throwing RTError on inconvertible values.

- combine now produces slightly different output (see above changes) compared to the previous version, meaning if you combine a program with 1.0.22 and then with 1.0.23, you will get different hashes, this is expected.

007912a39cc993caac50850f3e8a6a44ce1ce0814e29b0744d22e2a68af841e4 chippy-1.0.23-linux-aarch64.tar.xz
54b20903a5485af48fbef9d401d24e1406f92aa42b7e1b974c86bd0ff47f9e75 chippy-1.0.23-linux-x86_64.tar.xz

V-1.0.22

V-1.0.22 Pre-release
Pre-release

Choose a tag to compare

@ideumi ideumi released this 04 Aug 14:23

Released on Jun 27, 2026

What's New:

- rr2:
	- lexer: bytes and maps are now separate lexer token types and no longer just keywords
	- removed platform checks for unsupported platforms

- builtins:
	- added timezone(timestamp)

- corelib:
	- libtime.chh:
		- added EquationOfTime(timestamp)
		- added SolarOffset(longitude, timestamp)

	- libgregorian.chh: add SetLocalTimezoneOffset() + some formatting

	- libavantjien.chh:
		- decoupled from libgregorian
		- apparent-solar time calculation
		- realign cycles

	- libavantjien.chh:
		- added AVANTLONGITUDE
		- added AvantjienSolarOffset(timestamp)
		- added AvantjienHour(timestamp)
		- added AvantjienMinute(timestamp)
		- added FormatAvantjienClock(timestamp)
		- added FormatAvantjienTimePeriod(timestamp)

- doc:
	- chippy doc <file> <symbol> now allows searching for symbol names in files by using <symbol> as a search query

- installer:
	- removed legacy uninstallation path for old project name

- misc:
	- go.mod bumped to 1.26.4
	- avant:
		- updated to new libavantjien.chh
		- add config file logic for longitude configuration
		- drop timezone.chh

da6d24009f0615ce3689004c6a124ca4023ac79f7380198e6cabf5b8efbc3cbf chippy-1.0.22-linux-aarch64.tar.xz
f18caefca5f8f5cd5170b435ef6465a0cccc68acf4b1f0b97337d694db63f89d chippy-1.0.22-linux-x86_64.tar.xz

V-1.0.21

V-1.0.21 Pre-release
Pre-release

Choose a tag to compare

@ideumi ideumi released this 04 Aug 14:23

Released on Jun 21, 2026

What's New:

- cmd:
	- refactored the formatter engine
		- reverted the formatter from K&R to the tried and true Chippy style
		- increased robustness
		- separated concerns

- corelib:
	- formatted code with chippy format all

- combine:
	- reverted the "chippy combine new" template to the Chippy style

- installer:
	- formatted code with chippy format all

- misc:
	- formatted code with chippy format all

df98396a7cbd5227827a27f1df4060a6d131923cf4c3c55ca26b3ebf46cf1d3a chippy-1.0.21-linux-aarch64.tar.xz
7bcefbaf2543051d0fa6c07c3215450c23ee00810707e675b6bdc8ca092020dd chippy-1.0.21-linux-x86_64.tar.xz

V-1.0.20

V-1.0.20 Pre-release
Pre-release

Choose a tag to compare

@ideumi ideumi released this 04 Aug 14:22

Released on Jun 20, 2026

What's New:

- project:
	- dropped the ChipLang/chiplang name for Chippy/chippy

- cmd:
	- added chippy format and chippy format check commands, see chippy -h
	- added a new formatter engine

- corelib:
	- updated to the new style

- combine:
	- updated the "chippy combine new" template to the new style

- installer:
	- updated to the new installation paths
	- now cleans up the old /usr/lib/chiplang path on install and uninstall

- misc:
	- updated combine.chp files to the new paths
	- updated to the new style

- scripts:
	- updated net-install.sh and make-release.sh to the new name, paths and project url

- other stuff:
	- make now also runs chippy format check all on installer, lib and misc

FYI Breaking:

- The installer now installs to the following paths:
	FHS:
		corelib: /usr/lib/chippy
		docs: /usr/share/doc/chippy
	Termux:
		corelib: /data/data/com.termux/files/usr/lib/chippy
		docs: /data/data/com.termux/files/usr/share/doc/chippy

	Your combine.chp files will need to be updated to these new paths

- The REPL history file moved from ~/.ChipLangHistory to ~/.ChippyHistory:
	- If you want to keep your history, just rename ~/.ChipLangHistory to ~/.ChippyHistory
	- Your existing REPL history will not be automatically carried over

- Editor integrations were renamed from chiplang.* to chippy.*:
	- Reinstall your editor integration from ide/

- The project url has changed to https://codeberg.org/ideumi/chippy, update your deployment scripts, though codeberg should redirect the old url for some time, so no rush

de434544c4e692f10eeaf50f605cf52ab6bd4a95d4ebba687dabcd73520b0093 chippy-1.0.20-linux-aarch64.tar.xz
b5dd9744cd4a9b8ff183eee339a9cca83c27110c66e0adf8cf75e3193a83d2e5 chippy-1.0.20-linux-x86_64.tar.xz

V-1.0.19

V-1.0.19 Pre-release
Pre-release

Choose a tag to compare

@ideumi ideumi released this 04 Aug 14:21

Released on Jun 14, 2026

What's New:

- rr2:
	- lists, maps and bytes are now mutable reference types
		- index assignment mutates the container in place
		- operators +, - and * now return shallow copies
		- strings are now immutable, string index assignment removed
		- building up lists, maps and bytes in place (append, index assignment) no longer degrades performance quadratically

	- assignment is now a statement, it can no longer be nested or chained

	- a self referential value now prints as [...], or m[...] for maps
		- copying or comparing a self referential value raises RTError

	- statement sequences are now a distinct block node
		- a block evaluates to the value of its last statement
		- loop and function bodies no longer allocate a throwaway list each iteration
		- while and for loops should now be generally ~5% faster per iteration

	- comments and doc comments are now captured as tokens
	- various parser and interpreter cleanups

- builtins:
	- added copy(value) for fully independent copies
	- append(container, value) and sort(list) now mutate in place and return the container
	- num(value) and list(value) now return err on a failed conversion instead of raising RTError
	- slice(container, start, end) now returns shallow copies

- optionals:
	- json: guard against self referential values

- corelib:
	- libstrings.chh: added ReplaceCharAt(value, idx, char)
	- libterm.chh: MakeRaw(state) now returns a copy and leaves state untouched
	- libraries updated for mutable collections

- misc:
	- added misc/doc2html
	- misc/snake updated for mutable collections

FYI Breaking:

- Lists, maps and bytes are now mutable reference types, your code will likely need to be updated:
	- See chippy doc mutability

- Index assignment now mutates the container in place, append(container, value) and sort(list) mutate in place and return the same object:
	- The old x = append(x, v) and x = sort(x) still work but are redundant

- Assignment is now a statement, not an expression, it can no longer be nested or chained:
	- x = x[i] = v, a = b = c and var y = (a[i] = v) no longer parse, write x[i] = v

- The operators +, - and * and slice(container, start, end) now return shallow copies:
	- Mutating a nested list, map or bytes affects both
		- Use copy(value) for a fully independent copy

- String index assignment (s[i] = v) now raises RTError since strings are immutable:
	- See the new ReplaceCharAt(value, idx, char) in libstrings.chh

- num(value) and list(value) now return err when a value cannot be converted:
	- Check with iserr(value)

72408d139782994f03cba59f721d0722eb5d1d8d818d3b96546c5e59a9bdb0e2 chiplang-1.0.19-linux-aarch64.tar.xz
cae4f568cd6dfa774b9f15ec085c631bced85cc3a14a98c89b6b8ee8e7197ce9 chiplang-1.0.19-linux-x86_64.tar.xz

V-1.0.18

V-1.0.18 Pre-release
Pre-release

Choose a tag to compare

@ideumi ideumi released this 04 Aug 14:20

Released on May 23, 2026

What's New:

- combine:
	- chippy combine new created combine.chp with spaces instead of tabs

- builtins:
	- added sinfo(handle)
	- made error messages of some builtins more consistent

- optionals:
	- removed _tls_accept_(socketHandle, certPath, keyPath)
	- added _tls_upgrade_(socketHandle, certPath, keyPath) and _tls_info_(handle)
	- made error message in _tls_close_(handle) more consistent

- corelib:
	- libhttp.chh: HttpServe(port, handler, state) and HttpServeTLS(port, certPath, keyPath, handler, state) are now multi actor and no longer single threaded
	- libtls.chh: added TlsUpgrade(socketHandle, certPath, keyPath) and TlsInfo(handle)
	- libtls.chh: simplified TlsAccept to use TlsUpgrade

- misc:
	- removed server/mp example
	- ported server/tls and server/sockets to multi actor HttpServe(TLS)
	- added peer information to server/tls and server/sockets examples
	- added TLS SNI information to server/tls example

- scripts:
	- added net-install.sh script

FYI Breaking:

- libhttp.chh: HttpServe(port, handler, state) and HttpServeTLS(port, certPath, keyPath, handler, state) are now multi actor and no longer single threaded, your code will need to be updated:
	- HttpServe(port, handler, state) and HttpServeTLS(port, certPath, keyPath, handler, state) have gained a state parameter
	- The handlers signature is now handler(state, request):
		- See:
			chippy doc /usr/lib/chiplang/libhttp.chh "HttpServe(port, handler, state)"
			chippy doc /usr/lib/chiplang/libhttp.chh "HttpServeTLS(port, certPath, keyPath, handler, state)"

c95b2079669baeb9a13bc54a83e6ed13f8eef0ebfdcca1ebd032fd206f5da4b6 chiplang-1.0.18-linux-aarch64.tar.xz
820fc86410eebe2d62894ddecc69a4b88941ef44b5d77fcdabd51889c35fbd61 chiplang-1.0.18-linux-x86_64.tar.xz

V-1.0.17

V-1.0.17 Pre-release
Pre-release

Choose a tag to compare

@ideumi ideumi released this 04 Aug 14:19

Released on May 17, 2026

What's New:

- corelib:
	- bug: libmath: Pow(base, exp) could produce NaN
	- bug: librandom: RandomInt(min, max) hangs for ranges >256
	- libstat.chh: constants STATSIZE to STATTYPE have been removed
	- libinput.chh: InputPw() updated to getterm(), setterm(state) map usage
	- libterm.chh: Termios field byte offsets removed (TIFLAG to TVTIME)
	- libterm.chh: MakeRaw(state) updated to getterm(), setterm(state) map usage
	- libmath.chh: INTMAX and INTMIN added
	- libmath.chh: PI and E trimmed by one decimal digit
	- libpaths.chh: Basename(path) and Dirname(path) now strip trailing slashes

- rr2:
	- major engine cleanups
		- generic context
	- number system refactor
		- integer arithmetic over 2^53
		- overflow promotes to float
		- NaN and +-Infinity are rejected
		- for loops preserve precision above 2^53

- builtins:
	- updated for new number system
	- signal(): implementation polished
	- lstat(path), stat(path): now return a map instead of a list
	- winsize(): now returns a map instead of a list
	- getterm(): now returns a map instead of a list
	- setterm(state): the state argument now only accepts complete state map

- optionals:
	- updated for new number system

- misc:
	- go.mod bumped to 1.24.4
	- added misc/snake

FYI Breaking:

lstat(path), stat(path), winsize(), getterm() and setterm(state) have been ported to the map type, your projects will have to be updated, consult chippy doc [topic] for relevant map keys.

libstat.chh constants STATSIZE to STATTYPE have been removed, use the relevant map keys.

libterm.chh Termios field byte offsets removed: TIFLAG to TVTIME, use the relevant map keys.

libmath.chh PI and E were trimmed by one decimal digit.

Integer arithmetic above 2⁵³ used to lose precision silently. It no longer does. Check your code.

7c8a6dd0e6944355c280ebd7fd38ca5643b316368e3e1889575c16a5309d2151 chiplang-1.0.17-linux-aarch64.tar.xz
7bf162802e29f943e4b9e196fdfdaed8109afb043095a82a9f6a69ba13fc5332 chiplang-1.0.17-linux-x86_64.tar.xz