v0.2.6
July 29, 2026 · View on GitHub
2026-07-27
- NEW: Emmet-style
input:TYPEshorthand —input:time,input:color,input:range, etc. are parsed as<input type="TYPE">at the lexer/parser level. Distinguishes from tim's:text-content syntax by checkingwsno == 0(no whitespace before colon). Only triggers ontagInput. Subsequent attributes (.class,#id) still apply. - NEW:
svgelements now auto-injectxmlns="http://www.w3.org/2000/svg"at parse time. Skips if the user explicitly providesxmlns. - FIX: PHP Linux build — replaced
--passC: staticExec(...)withswitch("passC", ...)intim.nims(staticExec returns literal text at compile-time, not the const value). Usesphp-config --include-diras primary header discovery on Linux (with pkg-config fallback). - FIX: Clue hardcoded macOS pragmas — wrapped
{.passC:}/{.passL:}inphp_api.nim,python_api.nim,lua_api.niminsidewhen defined(macosx):to prevent MacPorts paths and-framework CoreFoundationfrom leaking into Linux builds. - FIX: Docs workflow — added
permissions: contents: writeto allowpeaceiris/actions-gh-pagesto push thegh-pagesbranch (GITHUB_TOKEN defaults to read-only on newer repos). - NEW: Ruby extension CI —
tim-ruby/.github/workflows/build.ymlbuilds the native extension viarepository_dispatch(triggered from tim's release workflow). Builds for x86_64-darwin, arm64-darwin, and x86_64-linux sequentially, commits platform binaries to the tim-ruby repo. - NEW:
@LitElement, ClassName, "tag-name"— define Lit-like custom HTML elements in Tim. Body supports@javascriptblocks (concatenated into the class body) and a single@clientblock (the render template compiled to JS template literals). Generates a JavaScript class extendingLitElementwithconnectedCallback,render(), andcustomElements.define(). Client-side only; server-side rendering emits the class as a<script>block.
2026-07-04
-
NEW: Lexer gains
tkIs/tkIsNottoken kinds; parser recognizes them as infix operators (precedence 5, equal to==). Registered as stdlib foreign procs with Nim implementations that compare values at runtime byTypeId. Related to VanCode v0.2.0 - 2026-07-08 -
CHANGE: Updated stdlib for VanCode v0.1.9 ValueStorage API —
Object.fieldschanged fromseq[Value]toseq[ValueStorage](inline primitive storage). All field reads now use.toValue, all field writes use.toStorage:libarrays.nim—add,insert,join,contains,find,dedup,first,lastupdated forValueStoragelibobjects.nim—add,insert,join,find,keysupdatedlibstrings.nim—splitresult assignment updatedlibsystem.nim— object$dump helper updated No functional changes — the engine continues to work unchanged.
-
NEW: Element multiplication syntax:
tag*Nrepeats an HTML element N times with an injected$iindex variable (0-based). Example:li*3: $items[$i]produces 3<li>elements -
NEW:
@import "std/..."system: populated stdlibs table, fixedlibobjects.nimsyntax errors, switchedbuild.nimtoinitCompilerfor stdlibs pass-through -
FIX: Fixed
addCallableKeyError in vancode whenexportFunctionskey is missing on overloaded function names -
FIX: Exported macros (
macro foo*) now properly cross module boundaries viaexported = trueingenMacro -
FIX:
servecommand no longer hardcodes template paths — readscompilation.source,compilation.output, and subdirectory paths fromtim.config.yml -
NEW: Exposed supranim Request API as foreign functions callable via
$this.getPath(),$this.getMethod(),$this.getQuery("key"),$this.getHeader("key"),$this.getBody(),$this.getIp(),$this.getUrl(),$this.getAgent(),$this.getParam("key") -
NEW:
@staticcompile-time evaluator forforloops andif/elif/elseconditionals. The body is captured as raw text,{$varName}patterns are substituted with literal iteration values, then re-parsed by an inner parser. For loops unroll into the parent AST; conditionals select the matching branch at compile time. Both the lexer and parser were extended (tkStatic,nkStatic,parseStaticStmtrewrite,parseScriptflattening of expanded nodes). Supports both literal arrays andstart..endinteger ranges (e.g.,@static for $x in 1..12:).
2026-07-04
- FIX: fixed
sourceandoutputfields intim.config.yml - FIX:
parseVarIdentnow handles generic type annotations (var abc: array[string]) by callingparseGenericTypeinstead of leaving[string]unconsumed - NEW:
CompilationPolicyis now threaded fromengine.config.compilation.policyinto the codegen viainitCompiler, enabling per-project feature restrictions (imports, stdlib, packages, loops, conditionals, assignments, dynamic libs) - NEW: Ruby gem automation —
release.ymlnow pushes platform-specific binaries (x86_64-darwin, arm64-darwin, x86_64-linux) toopenpeeps/tim-rubyon tag releases - FIX:
tim.nimsRuby build now usespkg-configon both macOS and Linux (was hardcoded to MacPorts paths) - FIX:
tim.nimbleplatvariable now detects Linux (x86_64-linux) in addition to macOS (x86_64-darwin/arm64-darwin) - FIX: Removed hardcoded MacPorts paths from Clue's
ruby_api.nim— uses project-levelpkg-configinstead