The new project manager for HTMW apps
Aug. 26, 2025I'm excited to announce that over the past 3-4 days I've been working on a side project designed to simplify Web development with HTMW!
To create a new project, run wmgr new <name>. The program will generate a folder with the given name and the following file structure:
Each folder serves a specific purpose:
The out folder can be zipped and uploaded directly to your web server if your project is a complete website.
Finally, the make.txt file stores project information. By running wmgr make inside your project folder, WMGR will generate a build script (build.sh or build.bat, depending on your platform).
Enhanced arguments and native tag notation added
Aug. 15, 2025This release introduces two big improvements: enhanced argument handling and native tag notation.
You can now pass strings with escape sequences and evaluated, multi-type Lua expressions as arguments.
New argument notations (only for HTMW-defined tags):
In the first example, the value is wrapped with backticks (`) and supports escape sequences (e.g. \n → newline). In the second, the argument is evaluated as a Lua expression. The result is a number (4), but you can also pass arrays, tables, and any Lua type.
Another new feature is the native tag notation. By prefixing a tag name with # (e.g. <#div>), the compiler will force the use of the native HTML element, even if a template with the same name exists.
Example:
Added no text and no inner
Aug. 9, 2025Previously, if you created an HTMW library file with multiple template definitions, then included it in a webpage file and compiled, the output would contain unnecessary whitespace and new lines (often at the top).
This happened because we typically add new lines between template directives. A common workaround was to remove all spacing between definitions, but that made the code less readable.
Starting from version vT.4, we can keep our code readable while fixing the spacing issue using the new <@ntxt> directive. This feature also allows writing text or notes without any special notation and without rendering them, while keeping all directives functional.
Usage example:
Another new feature is the ability to tell the compiler that a widget has no inner elements without using the "slash at the end" notation, by adding the ninner keyword.
Usage example:
I also fixed a bug that caused symbols inside default template argument strings to have unexpected behaviors
Added support for nullable and default template arguments
Aug. 7, 2025Previously, all templates and widgets required explicitly specifying input arguments every single time. This added unnecessary complexity and forced developers to provide parameters that were neither important nor meant to be required.
Starting from version vT.3, arguments can be nullable and have a default value. This means developers no longer need to specify them every time, and no error will be thrown if they're omitted.
To mark an argument as nullable in the template definition directive, add a ? next to the argument name.
To assign a default value to a template argument, place an = followed by the value string after the argument name (after the ? if it's marked as nullable).
Usage example
Test version 0.2
Jul. 30, 2025Added local and global includes with <@include ...> and <@include_once ...> directives
Test version 0.1
Jul. 25, 2025You can create and use templates.