ZPE has changed enormously since its beginnings. This page tells the story of its major release generations: the ideas that defined each one and the ways they changed ZPE and YASS.
For individual release highlights, visit What's new in ZPE. The milestones page follows important ideas across versions, while the complete changelog preserves every recorded change.
Before ZPE: Foghorn and BlackRabbit
ZPE's lineage begins with the project originally codenamed Foghorn. BlackRabbit and its BBMSIL-based scripting system were designed to add readable macros and commands to applications including Painter Pro, Cobweb and Wonderword. The scripts were interpreted into operations carried out through C# and the .NET Framework.
BlackRabbit already had an editor that could create, run and debug scripts. It contained at least 50 commands and address lines by May 2011, and its July 2011 Platform Preview became my first major software milestone. By July 2012 it had reached 100 commands and was being tested by a wider group of users.
BlackRabbit Script was the first programming language I worked on, when I was around 16 or 17. Its focus on readable, application-hosted scripting survived into YASS, even though ZPE would later replace its Windows-centred .NET implementation with a faster Java architecture.
BlackRabbit Script 1.1
First release: 10 January 2011 · Last change: 31 December 2012
BlackRabbit Script 1.1 was the early application-hosted scripting language that established the readable, command-driven ideas later carried into ZPE and YASS.
BlackRabbit Script
A readable scripting language for building macros and commands inside applications.
1.1Application scripting
Scripts were designed to control software such as Painter Pro, Cobweb and Wonderword.
1.1Editor and debugging
BlackRabbit included an editor for creating, running and debugging scripts.
1.1ZPE 1.2
First release: 19 February 2015 · Last change: 18 March 2015
ZPE 1.2 moved BlackRabbit Script onto the first Zenith Engine parser, introducing the early ZPE command-line, function and data foundations before the modern Zenith Parsing Engine arrived in 1.3.
Zenith Engine
BlackRabbit Script was rewritten around a new parser that became the immediate ancestor of ZPE.
1.2.0Command line
CLI execution, file reading, translation and variable assignment made the language practical to run.
1.2.01Language foundations
Functions, conditionals, loops, strings, sets, mathematical functions and comments arrived.
1.2.01Version 1.3
First release: 9 May 2015 · Last change: 27 August 2015
ZPE 1.3 introduced the Zenith Parsing Engine and established the modern compiler, interpreter and language foundations of ZPE.
Zenith Parsing Engine
The core was redesigned around the Zenith Parsing Engine, improving parsing speed and extensibility.
1.3.0Compiler and evaluator
Compilation, nested function calls, function assignment and faster interpretation became core capabilities.
1.3.0Control flow
While, for, do-until and select-when statements expanded the language's control structures.
1.3.0โ1.3.1Lists and sets
Lists, sets, sorting, searching and collection operations became available to everyday programs.
1.3.1Associative arrays
Associative arrays introduced named-value storage and the foundations of later map support.
1.3.31.3.5 family
The 1.3.5 releases and their derivatives expanded numeric handling with exponents, recursion, images, conversions and mathematical evaluation.
1.3.5โ1.3.5.190Real Math Mode
Real Math Mode introduced direct mathematical evaluation, including bracketed expressions, modulo, constants and mathematics in conditions and collections.
1.3.5.63โ1.3.5.90Structures
Structures gained variables, functions, access and assignment, beginning the long path toward YASS OOP.
1.3.6Plugins and lambdas
Java plugins, function handles and lambda functions made ZPE more extensible and functional.
1.3.7Version 1.4
First release: 29 August 2015 · Last change: 14 August 2016
ZPE 1.4 made the core more modular and formal, adding internal documentation, typed values, scopes, chaining and a major evaluator rewrite.
Core restructure
The interpreter core was reorganised around faster hash functions, aliases and reusable internals.
1.4.0Internal manuals
Built-in documentation, parameter requirements and permission requirements became part of the extension system.
1.4.0Function chaining
Values could call chainable methods such as generating a range and immediately reading its length.
1.4.1Typed values
Compiler type checking and explicit string, integer, boolean, structure, lambda, object and image types arrived.
1.4.2New evaluator
The logical and mathematical parsers were rewritten together, with a substantially faster comparison evaluator.
1.4.3LAMP
The LAMP compiler and interpreter unified logical and mathematical evaluation before the later, faster LAME replacement.
1.4.3โ1.7.0Scopes and errors
Private, public and friendly scopes, try-catch handling and clearer compiler errors strengthened the language.
1.4.3.10โ1.4.3.40Version 1.5
First release: 8 December 2016 · Last change: 4 October 2017
ZPE 1.5 expanded data interchange, networking and the object model, while the parser was redesigned into the reusable ZenithParser.
JSON support
GSON integration and JSON-to-map conversion brought structured data into the standard toolkit.
1.5.0Encryption
AES encryption and decryption added a practical security feature for programs and stored data.
1.5.0Client and server
Server and client communication was improved, including server-side script execution.
1.5.0โ1.5.0.1Threaded lambdas
Lambda functions could run in their own threads for asynchronous work.
1.5.0.1Includes and libraries
Non-compiled source could be included before compilation, and the plugin interface became easier to use from Java.
1.5.1Custom keywords
Plugins could define custom keyword parsing, opening the door to language extensions.
1.5.2ZenithParser
The parser was separated from the compiler and JBSON and CSV parsing were redesigned around reusable parsing tools.
1.5.2โ1.5.3Object literals
Objects gained constructor functions, internal methods and a concise object-literal declaration format.
1.5.2โ1.5.4Switch statements
The switch statement arrived as a clearer rewrite of the earlier when-is style of selection.
1.5.4Version 1.6
First release: 1 February 2018 · Last change: 28 December 2018
ZPE 1.6 pushed deeply into objects, inheritance, typing and the โEverything is a Functionโ direction that shaped modern YASS.
Web parser
The -w mode introduced parsing web pages directly through ZPE.
Object rewrite
Objects and structures were substantially rewritten for faster, more efficient runtime behaviour.
1.6.3Inheritance
Objects gained inheritance, built-in methods and stronger public, private and friendly access checks.
1.6.6TYPO
Type checking arrived in ZPE, with typed mode and the first major generation of the TYPO system.
1.6.7Fat-arrow lambdas
Lambda functions gained concise fat-arrow syntax and could be passed through loops and expressions.
1.6.7Image objects
Images moved from a native type into an object with native methods for dimensions, pixels and transformations.
1.6.464-bit values
Long integers replaced 32-bit integers, while binary literals and conversion tools expanded numeric support.
1.6.4โ1.6.6Everything is a Function
Functions, nested functions, retained interpreter definitions and global function handling moved YASS toward a more uniform model.
1.6.8Version 1.7
First release: 29 December 2018 · Last change: 30 December 2019
ZPE 1.7 separated the compiler from the runtime, accelerated parsing and evaluation, and established many of the language and object-model foundations used by later releases.
Compiler and runtime
The compiler and runtime were separated, improving compilation and execution performance.
1.7.1LAME evaluator
LAME replaced LAMP with a faster and more accurate evaluator for logic and mathematics.
1.7.1โ1.7.4References
By-reference variables and assignments made it possible to update the original value through an alias.
1.7.0โ1.7.1Unit testing
Assertion tools were added for checking true and false conditions in programs.
1.7.0ZPE Web Server
The first built-in web server could serve ZPE-HTML pages and index files.
1.7.1Structures and objects
Structures were rewritten and nested structures became available, with stronger access rules.
1.7.4ZPE Online
Munro Top introduced registration, cloud storage and online program features.
1.7.4Built-in objects
Language objects replaced several older generation functions, strengthening the object model.
1.7.5YWP pages
The web parser adopted YWP pages and the <?ywp opening syntax.
Compiler keywords
Features such as count and alternative values gained concise compiler-supported syntax.
Explicit imports
Libraries began loading through the import keyword instead of interpreter startup work.
Version 1.8
First release: 1 January 2020 · Last change: 31 December 2020
ZPE 1.8 grew into a broader platform with the ZEN client-server tools, web support, a public programming interface and stronger runtime protection.
ZEN Client and Server
The client and server tools were redesigned as ZEN Client and ZEN Server with more reliable communication.
1.8.1Secure communication
Encryption, authentication and protected communication improved the ZEN platform.
1.8.1โ1.8.3Remote files
ZEN tools gained file transfer and familiar Unix-like commands for working with remote projects.
1.8.2โ1.8.4Interactive mode
The -i option became the dedicated interactive interpreter.
Ranges and indexes
Indexed ranges and negative indexes made list and string access more flexible.
1.8.3โ1.8.5Velocity Web Server
Velocity Web Server support expanded ZPE's web application capabilities.
1.8.4โ1.8.8ZPEKit
ZPEKit became the supported public interface to the compiler and ZPE internals.
1.8.5โ1.8.10Reference types
Reference support matured, allowing values and functions to be handled more dynamically.
1.8.6โ1.8.10Protected programs
Compiled programs and online resources gained stronger protection and access controls.
1.8.7โ1.8.12Version 1.9
First release: 1 January 2021 · Last change: 31 December 2021
ZPE 1.9 focused on expressive syntax, unbound variables, records and the second generation of TYPO, giving YASS a much stronger type system.
Match statements
YASS gained match expressions with an else branch for concise value-based selection.
1.9.1โ1.9.5Compound operators
The *=, /= and ^= operators simplified repeated arithmetic updates.
Unbound variables
let, var and later direct assignment made non-dollar-bound variables practical.
Record structures
Records provided structured values with named fields and later parameterised construction.
1.9.4TYPO redesign
Strong typing was redesigned from the ground up for variables and structure properties.
1.9.7Maps
The Map data type superseded associative arrays with clearer naming and stronger comparison support.
1.9.9โ1.9.13Value comparison
Lists, maps, strings and other values gained more consistent hashing and comparison behaviour.
1.9.9โ1.9.10Object magic methods
Objects gained additional runtime hooks, including the _beautify method.
Collections
Lists gained copying, removal and containment helpers, while strings could be split into lists.
1.9.10โ1.9.13Formatting and output
String formatting gained rainbow output, improved comparison and more flexible writing hooks.
1.9.9โ1.9.13Version 1.10
First release: 1 January 2022 · Last change: 31 December 2022
ZPE 1.10 modernised the editor and public tooling while adding stronger function typing, records, networking objects and improved online use.
Online includes
Programs could include code from ZPE Online through the new online include feature.
1.10.1New editor
The editor moved from JavaFX to Swing and gained a cleaner, stoppable console.
1.10.2Editor tools
Syntax highlighting, dark mode, code outlines, a function machine and changelog access arrived.
1.10.3By-reference values
References became available with ZPETypes, including assignments such as $x = &$y.
Records
The record structure returned as a supported data type with named fields.
1.10.5Networking objects
MQTT and Socket objects provided accessible publish, subscribe and socket communication features.
1.10.10โ1.10.11Typed functions
Function parameters and return values gained strong typing, including return-value coercion.
1.10.8Downloads
The http_download function made it easier to retrieve remote files from YASS.
System information
System helpers such as hostname, timeout-aware ping and environment support expanded.
1.10.6โ1.10.7AutoGUI
The AutoGUI object added an automation-focused interface to the platform.
1.10.12Version 1.11
First release: 1 January 2023 · Last change: 31 December 2023
ZPE 1.11 refined the type system, accelerated the runtime and introduced YASS Unfold, bringing clearer code analysis and more expressive modern syntax.
Type casting
Values could be explicitly cast between compatible types when assigning to typed variables.
1.11.1Static references
Static underlying methods reduced memory use and improved performance across the runtime.
1.11.1โ1.11.9Inline iteration
Values could be generated and transformed directly with inline range iteration.
1.11.4Union returns
Functions could declare return types such as real | integer.
Better records
Record fields became accessible by name and records could accept values during construction.
1.11.4Unbound assignments
Python-style declarations such as x = 10 became available through configuration.
Empty keyword
The empty keyword checks whether lists, maps, strings or objects contain no values.
Function references
Functions could be assigned as references, including predefined functions, without immediately calling them.
1.11.9โ1.11.10YASS Unfold
YASS Unfold explains program structure and can export the explanation as HTML.
1.11.10Functional lists
List references gained map, filter and reduce operations.
Cleaner manuals
Manual information and function descriptions were tidied and made more useful.
1.11.10โ1.11.12Version 1.12
First release: 1 January 2024 · Last change: 31 December 2024
ZPE 1.12 was a major language and runtime generation, bringing a faster evaluator, stronger debugging, richer syntax and the unified ZPE type model that supports the platform today.
LAME X2
A new expression evaluator improved readability and delivered major performance gains.
1.12.3โ1.12.4Interpreter history
The interactive interpreter gained persistent command history through bundled jLine support.
1.12.4Compiler keywords
Common operations such as is_set and unset became faster compiler keywords.
Richer loops
For-to loops gained expressions, while collection loops gained object-property iteration.
1.12.4โ1.12.5Transpilers
The transpiler system was redesigned around the complete syntax tree and became available in the editor.
1.12.5โ1.12.6Debugging
Breakpoints, runtime halts, source stepping and the Breakpoint Watch window made debugging practical.
1.12.7Libraries and imports
Libraries could be imported with aliases, while the standard library became bundled and easier to use.
1.12.7Namespaces
YASS gained namespaces and static methods, including static calls within namespaced structures.
1.12.8Modern strings
Unescaped strings, escape sequences and improved inline documents made text handling more expressive.
1.12.7โ1.12.8Types and tuples
The type keyword, tuples and stricter tuple safety expanded the built-in type system.
Explicit declarations
Programs could require variables to be explicitly typed and declared before use.
1.12.9Unified ZPE types
Core values, predefined functions, native methods and maps moved onto the unified ZPEType model.
Process support
The Process object and run_process made external process execution easier to control.
Web integration
Apache integration arrived alongside the foundations for running ZPE-powered web applications.
1.12.10Multiple returns
Functions could return several values and assign them directly through destructuring.
1.12.10ZPE performance cache
ZPEC introduced hash-based caching to reduce repeated compilation work.
1.12.12Version 1.13
First release: 1 January 2025 · Last change: 31 December 2025
ZPE 1.13 expanded the language around modules, modern data formats and a faster runtime, while the editor evolved into a more capable native development environment.
AI assistance
ChatGPT support and an editor AI Assistant brought natural-language help into ZPE development.
1.13.1Pipe expressions
The pipe command applies a value through an open-ended chain of function references.
1.13.1INI and TOML
INI and TOML parsing joined ZPE's growing family of structured-data tools.
1.13.1JBML
The JBML parser and decoder added a concise data format with concatenation and property support.
1.13.2โ1.13.3Binary search trees
Functions, variables, properties, objects and parameters gained faster tree-based lookup.
1.13.3Modules
Modules became reusable language boundaries with compiler and runtime support.
1.13.4Scoped constants
Constants and static access became more expressive through module ownership and scope rules.
1.13.5BalfLaf editor
A major interface overhaul added themes, a purple look, improved menus and a new splash screen.
1.13.5โ1.13.8Search and navigation
Search suggestions, dock positions, code outlines and improved macro tools made the editor easier to navigate.
1.13.7โ1.13.8Labels and goto
YASS gained labels and goto for explicit jumps within a program.
Colour and Point
New Colour and Point objects provided useful values for graphics and interface work.
1.13.8Statistics
Statistical functions expanded with histograms, interpolation, percentiles and descriptive measures.
1.13.8Plugin sandboxing
Plugins gained restrictions over which classes they can access, improving runtime safety.
1.13.9Archives and calendars
ICS encoding and file ZIP operations added practical support for common interchange and archive tasks.
1.13.10Version 1.14
First release: 1 January 2026 · Last change: 31 December 2026
ZPE 1.14 was a major platform generation. It improved the compiler, runtime, language, web tooling, native applications and developer experience, while adding many of the objects and modules used by modern ZPE programs.
Performance
Faster parsing, compilation, startup, function calls, loops, object access, caching and runtime execution.
1.14.4โ1.14.11LAMEX3
An improved generation of LAME was introduced experimentally and then received further performance improvements.
1.14.7โ1.14.8Templates and scopes
Expression templates, block scopes, private variables, improved debugging and clearer local-state rules.
1.14.1โ1.14.2Security
Plugin vetting, trusted JAR loading, lockdown improvements, permission checks and stronger native-plugin handling.
1.14.3โ1.14.11Modules
Built-in modules replaced static objects, with module-aware manuals, compilation support and custom plugin modules.
1.14.5Types and TYPO
TYPO 3 and 3.1 brought typed objects, collection types, aliases, fixed-size arrays and stronger runtime checks.
1.14.7โ1.14.10Modern expressions
Arrow expressions, predicates, immediate functions, floor division, indexing results and improved assignments.
1.14.4โ1.14.10Storage and maps
Versioned ZPE storage, ordered maps, compact binary formats and Java-serialization-free persistence.
1.14.8โ1.14.11Databases
SQLite, JDBC database access, Database and DatabaseStatement objects, prepared statements and bundled drivers.
1.14.6โ1.14.9Web applications
Web routing, annotations, YWP pages, PHP blocks, sessions, cookies, request data and richer response bodies.
1.14.4โ1.14.11ZPE-PM and Apache
Process-managed web execution, multipart uploads, automatic startup, Apache installation and compiled-page handlers.
1.14.4โ1.14.11ZenLang and frontends
JSON-defined languages, cached execution, the bytecode builder, ZenTypeScript, ZenC and broader ZPEKit support.
1.14.9โ1.14.10Compilation
Project manifests, bundled resources, native compilation, binary plugins, static methods and recompilable decompilation.
1.14.3โ1.14.10Native UI
ZUI added native windows, controls, layouts, menus, dialogs, tabs, charts, events and standalone native applications.
1.14.10Graphics and media
Graphics windows, sprites, collisions, physics, asynchronous events, video controls, audio improvements and browser controls.
1.14.10Image processing
Image copying, cropping, flipping, colour effects, blending, drawing, pixel access and renderer-neutral RGBA operations.
1.14.11File and sync objects
The File object unified filesystem operations, while ZSync added previews and structured file-change handling.
1.14.10โ1.14.11Mail and URI
SMTP mail delivery and an RFC 3986 URI object with RFC 2396 compatibility, parsing, queries and transformations.
1.14.11Validation
Built-in validation for email, phone, URLs, IP addresses, UUIDs, dates, JSON, lengths, patterns and passwords.
1.14.11Parser and manuals
Custom parser callbacks, nested object-method manuals, expanded native-method documentation and improved diagnostics.
1.14.9โ1.14.11Cryptography
Hashes, HMAC, secure random values, AES-GCM, constant-time comparison and X.509 certificate information.
1.14.5โ1.14.11Components and requirements
Reusable YASS components, {{...}} interpolation, @requires return and permission requirements.

There are no comments on this page.
Comments are welcome and encouraged, including disagreement and critique. However, this is not a space for abuse. Disagreement is welcome; personal attacks, harassment, or hate will be removed instantly. This site reflects personal opinions, not universal truths. If you canโt distinguish between the two, this probably isnโt the place for you. The system temporarily stores IP addresses and browser user agents for the purposes of spam prevention, moderation, and safeguarding. This data is automatically removed after fourteen days. Your email address is stored so that replies can be sent to your email address.
Comments powered by BalfComment