1.0.1 (2025-10-30)
If you are migrating from the Algorand TypeScript beta or TEALScript, please check out the migration guides.
⚠ BREAKING CHANGES
- Replace checked boolean on bytes.toFixed method with string enum to make behaviour more explicit
- gtxn.ApplicationTxn renamed to gtxn.ApplicationCallTxn
- itxn.ApplicationInnerTxn renamed to itxn.ApplicationCallInnerTxn
Export gtxn and itxn as sub modules - Incorrect type for transaction oncomplete and transaction type
- Moves OnCompleteAction type out of /arc4 namespace
refactor
- Moves OnCompleteAction type out of /arc4 namespace (c805015)
- Replace checked boolean on bytes.toFixed method with string enum to make behaviour more explicit (3a06892)
Features
- Introduce a logging context which holds logs and source lines which allows for log messages to include a summary of the source code which resulted in the log message (eb48a3a)
- a very simple language server (4043ea5)
- accept abi method reference as a parameter to methodSelector function (#108) (763db73)
- Account now accepts a b32 address string + fix docs to make it clear that bytes value is public key (0c2e8a1)
- add
resourceEncodingproperty to abi method config (27ddabd) - Add arc4EncodedLength helper for getting the fixed encoded size of a type (a9d4ad7)
- Add box.create function for creating a box with zero value (79bd8b1)
- Add convention based abi routing using well-known method names (7ea7d96)
- add dynamic ABI validation (#280) (575635e)
- add dynamic ABI validation (#281) (e820bfe)
- Add DynamicBytes and StaticBytes types (607d15f)
- Add hooks to compile process for consumers to manipulate TS AST and AWST before compilation (7635894)
- Add implicit create methods to contracts which don't have an explicit one (7ab8f02)
- Add interpretAsArc4, decodeArc4, and encodeArc4 functions in place of static member functions which are less versatile (c4e53ab)
- Add length generic to bytes type for declaring statically sized byte sequences (13292cd)
- add log level configuration for language server (546a8f3)
- Add missing puya parameter for outputting source maps (974da25)
- Add new shorthand readonly decorator and rename arc4EncodedLength to sizeOf (06b555f)
- Add support for box maps with composite key types (a73a743)
- add support for storing tuples into boxes, global and local state (1b82fe3)
- add v11 op code
mimc(b50ab7e) - add validate-abi-values and validate-abi-dynamic-severity CLI options (92515d2)
- Allow arc4 contracts to provide their own approvalProgram implementation, but warn if they don't invoke super.approvalProgram as this would result in no arc4 routing (eccd0ce)
- Allow code to be resolved from virtual files (26ee4b2)
- allow construction of bytes from biguint to be orthogonal to biguint being constructed from bytes (ba23c64)
- Allow number and bigint types to be used when declaring consts (fcb36e2)
- Allow replacement tokens in outpath (d332569)
- Allow resource encoding to be specified at a contract level and update typed c2c logic to respect the chosen encoding (e938010)
- allow resourceEncoding to be passed in as a cli argument (d0d77f0)
- Allow stateTotals to be specified statically in contract options (d9e3bfe)
- ARC28 emit function (d0bfed7)
- ARC4 Structs (a9d30f9)
- ARC4 Tuples and UFixedNxM (b13fbd1)
- Array indexing + bug fixes (818f1aa)
- Array push, pop, slice, and at (af98954)
- AVM11 Support (2202dce)
- Better error messages when invalid types are used in ABI and bare methods (5ce0f22)
- BoxRef.resize (4757566)
- capture options from contract decorator as class property (2821fcb)
- changes to support node 20 (b60d4ba)
- Code fix for arc4 clone and replace == with === (7f9a978)
- Code fixes (37e270f)
- Compile logic signatures and template variables (1e06a3a)
- consistent awst serialization (8522b42)
- consume puya binary (b433b11)
- Default to the build command if no other command is present (ee48e34)
- Error when attemping to mutate an immutable tuple type (88b9a10)
- Expand and implement Bytes and BigUint factory methods (d013fa9)
- Expand arc4 type support (41b7726)
- Expand Bytes factory method to support iterable (ie. uint8array) (88bf321)
- Expand constant expression evaluation to allow for basic math operations on two other constant values at the module level (edec71c)
- export compile option types for stub implementation (02bbad0)
- export compile option types for stub implementation (00cd515)
- Export encoding util methods (cdce210)
- export ptypeToArc4EncodedType function needed for stub implementation of encodeArc4, decodeArc4 functions (954d0f0)
- export ptypeToArc4EncodedType function needed for stub implementation of encodeArc4, decodeArc4 functions (056f7ef)
- Handle ARC4 bool and string (ce32257)
- Implement --version command (6b80542)
- implement AppGlobal via context manager (6e34ad2)
- implement AppLocal via context manager (62143f3)
- implement arc4.methodSelector function (5dbb752)
- implement arg, len, appOptedIn op codes via context manager (aeef6dc)
- implement arg, len, appOptedIn op codes via context manager (6cdbd02)
- implement Box via context manager (11c0c15)
- Implement missing box proxy methods (e0a6fae)
- Improve devex of
op.extractby supporting 'extract to end' behaviour by omitting the length param (361f06c) - Include --isolated-files option to compile each individual file matched by cli separately (bea7a46)
- Include a
refproperty on theBoxproxy type which can be used to directly access box bytes (49555da) - Include option for outputting arc56 json files (dfad42c)
- Inline basic const declarations so methods which rely on constant values work when they are indirectly passed a constant value (bdf0084)
- Introduce ItxnCompose type for composing variable length transaction groups (9ab4bec)
- Introduce native mutable arrays and objects (d3ef438)
- Make arc4 structs mutable to simplify usage (7e85bff)
- make BoxRef methods directly accessible on Box class (705c71b)
- Native arrays and MutableArray type (#106) (e04b710)
- Parse jsdoc comments where available and include them in AWST (7845ca1)
- Pre-compiled contracts (757e8a4)
- preview binary puya integration (#149) (ffa2a87)
- Provide struct definitions to puya for arc4 methods (f1af384)
- Refactor typed abiCall helper to support type only imports (c7f6942)
- replace .native property with .as_uint64() and .as_biguint() methods in arc4.Uint (bd4b9be)
- Reserved scratch space (942a109)
- Rework BoxMap API so it is just a function that returns a Box proxy for the given key (92dbb87)
- set minNodeVersion to v20-lts (cc618a6)
- Support
notexpressions onmatchandassertMatch(b645739) - Support as casting (c6670f7)
- Support Boolean() with no args (7df6e95)
- support calling bitwiseAnd, bitwiseOr, and bitwiseXor methods of bytes type (dfa9e76)
- Support empty statements (ef5f820)
- support fromBytes and fromLog methods for ARC4Encoded types (08912a1), closes #45
- Support multi inheritance on contracts (b912bbb)
- Support property checks and spreading of arc4 structs (36a1661)
- Support zero arg constructors on all arc4 types which return a 'zero' value byte array of the appropriate length (798642c)
- type-safe Set.prototype.union polyfill (ab8b4c6)
- Typed contract to contract calls (8a12241)
- update langspec to v4.3.0 (c8ab457)
- update puya to 5.2.0 (6b27f84)
- use
--validate-abi-returnoption when getting an ABI result fromabiCall(edc1c78) - use
--validate-abi-returnoption when getting an ABI result fromabiCall(3f7bf98) - Use transaction field type metadata to generate
itxnandgtxnmodules to improve consistency and flatten the type hierarchy (abd92c5) - Warn users if their installed node version is out of date (f44adf4)
- workspace diagnostics (5b3fb9e)
Bug Fixes
- "Cannot resolve Tuple<Byte,...> to Account" error for
Address.nativeproperty (21615e2) - accept non-literal uint64 parameters to bzero function (01bdc16)
- add
numLogsto txn-fields to fix unsupported member access error (15cb7cd) - Add missing .copy() function on arc4 struct as it is required when the struct contains a mutable field (eg. an array) (2d6b3eb)
- Add missing expression builder for BoxRef.maybe (5901a46)
- Add missing itxn fields and fix compatible type resolution (aa30917)
- Add missing mutable array .copy() (3b73d1e)
- Add missing MutableArray.at builder (389782a)
- Add missing native property on arc4 struct (69abdd7)
- add missing properties and functions box expression builders (0a5682f)
- Add missing slice method to bytes interface (11ffcef)
- Add polyfill for set.union for node < 22 (e11663a)
- add tslib as non dev dependency to puya-ts package (d76b0a5)
- allow @contract decorator to be applied to base contract (4eccea8)
- allow
LocalStateto be assigned to a local variable (1841e04) - allow explicit (checked) construction of Bytes from bytes (e16e7e1)
- allow input path in compiler options to be prefixed with ./ (b5486c0)
- Allow template vars as module constants (5087dd1)
- allow uint64 type as well for Application and Asset parameter types (d84d291)
- Arc4 encode of bytes value to static bytes (636113c)
- Arc4 encode/decode of native arrays (#182) (cf69dd6)
- ARC4 structs should be immutable for now, we can introduce a mutable base type later if required (2ab223b)
- audit vulnerabilities (0dfc12b)
- avoid hardcoding op codes (3c6132d)
- avoid updating op-metadata file directly as it is generated by a script (796995f)
- Better error messages when using unsupported == and != tokens (ee971f7)
- Better errors when dealing with unsupported argument types on itxn.applicationCall (20adca3)
- biguint construction from uint64 and conversion to bytes (1312e9d)
- Boolean function generic param count (ce464b4)
- Bug in assignment logic which was prevent bytes<32> from being assigned to a bytes target (64725cc)
- Bug in calculating bit size of arc4 encoded types (6d6ca8c)
- Bug when creating UintN<128> instance with a literal larger than 64bits (674d6b2)
- Bug when resolving super method via this keyword when base type is polytype's classes (eb28899)
- Bug with path normalization of bundled dependencies (9e49314)
- Bugs in hex decode and b32 encode (af18eb0)
- Builder can be returned as is if ptype is an exact match (a61a2b6)
- Bundle vscode-* dependencies as they are cjs and need to be transpiled (b883984)
- bytes.slice and bytes.at not handling negative or missing values correctly (e6b5ba5)
- Calculation of outDir for compilation output + negate boolean cli options which are enabled by default (3569bf4)
- Checked flag of toFixed was being incorrectly evaluated (cbbe807)
- circular dependency (9e300a1)
- define isArc4 as static propery to remove explicit version dependency by testing module (2e19b22)
- Destructuring into iterator items (dcfccab)
- Don't allow zero arg creation of nested dynamically sized types, and require explicit size argument on box create for dynamically sized types (92a5215)
- Don't attempt to combine source locations for array literal expressions as constant inlining can result in source locations spanning multiple files (4082e89)
- Don't error when looking up arc4 config on contracts which have no arc4 methods (04526bf)
- Don't implicitly load type declarations from the working directory (0c4e0f7)
- Ensure arc4 clone validation runs when reading from dynamically constructed state proxies, and improve source location data on state expressions (64f0ef3)
- ensure bool is returned for all calls to
box_delop code (9f3c50c) - Ensure BoxMap is documented correctly in arc56 spec file (8408a36)
- Ensure nested assignments use correct lvalue logic (df40d08)
- Ensure ops which only support boolean values on the AVM receive only boolean values (4894f42)
- Ensure switch case clauses are only evaluated if they are 'reached' (be5b880)
- Error if a property is declared as static (d43bfde)
- error message was changed in resource encoding test (2d28ebd)
- Error when parsing an unsafe numeric literal (9747254)
- Error when resolving gtxn.Transaction and discriminating by
.typeplus expand docs for group transactions (47ae896) - Expand implicit create method logic to check base contracts and test (7352755)
- Expand supported args for uint64 constructor (df9a59b)
- explicitly set stdio flags for puya service (65f8657)
- export OnCompleteActionStr missed in namespace move (53c7f72)
- Export paths for algorand-typescript package (daf87de)
- False positive error on empty tuples (b8bb042)
- Fix issue with type resolver not being able to resolve aliases for algo-ts types (eg. type X = bytes<32>) (30e1ddb)
- Generate a name for anonymous types used in ABI methods + stabilise output for SingleEval nodes (49f0cd6)
- gtxn.applicationId(Txn.groupId) returning 'no matching overloads' (ef5ec2d)
- Handle additional edge cases when determining the out dir for a given input path (f5f35c4)
- Handle unions of gtxn references and TransactionTypes (e000a01)
- Ignore ClusteredContractClassType when searching for arc4 config (550016e)
- Importing consts from external files (d7f0fd5)
- Include new properties required by puya in awst nodes and wtypes (ccec890)
- Incorrect type for transaction oncomplete and transaction type (c5f9ab7)
- Issue with box value proxy not proxying all members through to proxied builder (59fea44)
- itob for uint64 should return 8 bytes when evaluating to a constant (fadeecc)
- Make all tuples immutable for now to match puya (441eb2d)
- make sure that diagnostic file paths are absolute (13970ca)
- make sure that diagnostic file paths are absolute (59a4b4f)
- Missing args in contract methods awst output (69052e8)
- native property of static bytes in puya-ts was throwing unexpected type error (84da125)
- not node still requires int to be cast to bool (c58728b)
- op codes with no arguments and void return types were throwing
Not Supported: Calling voiderror (6e5a095) - Other usages of incorrect op (d17904c)
- Out dir calculation failing when input path contains * or ** (0bdf39e)
- Parse all modifiers on a method to determine if it is public (and hence exposed as an abi method) (855d18a)
- Patched awst serializer to work with puya's simplified approach to default args. Can be removed once puya has been updated (d9724e0)
- Produce better error message when using unsupported types for storage (e562393)
- Refactor source file paths to be absolute (d29f7ae)
- Remove circular dependencies and ensure build fails in future if one is added (20107d2)
- Remove deprecated cli option and regenerate approvals (6a109f6)
- Remove duplicate property for createdApplication / createdApp (f9f6740)
- Remove optimization for re-interpret cast on integer constants (35d9216)
- Remove superfluous line (eae8da3)
- Remove unnecessary restriction on empty tuples (28d5738)
- rename artifact folders to not have node version as package root for semantic release is set without node version (6f67d58)
- Resolve issue with resolution of algo-ts types from namespace objects (005551a)
- Respect declaration order of object properties and use field expression in place of item indexing (cda490d)
- Restore relative paths in console output (44c5ae9)
- return
0xforbytes()andbzero(n)forbytes<n>()(6d43aaa) - Return a fallback log context if none is set rather than erroring (4440b93)
- Revert unintened change to error messsage for unsupported inequality operator (19cf669)
- Several bugs in the box proxy api (85a25b3)
- Start at col 0, only lines are 1-indexed (d4f58ae)
- Support emit calls which include an explicit signature (8b75e04)
- Template vars not getting passed through to puya in the correct format + add some additional tests around template variables (524ee6d)
- throw error with fixed sized bytes value is passed to op code expecting a different size (bced579)
- TransactionType enum name in PType (ef52014)
- treat fixed sized bytes type as statically sized (e188091)
- Type resolution of singleton types when used in generics such as with assertMatch statements (5a3a5c8)
- typo (88310a4)
- Typo in asset field mapping and add test (c59f287)
- Typo in logic sig visitor and typing of options decorators + increase test coverage (a11c599)
- typo which is setting wrong state value counts in arc32.json (2236742)
- undo change to BytesCompat type as it is incorrect and unnecessary (20b1567)
- Update expected output tests and standardise transient type error messages (63f78fd)
- update generate-op-ptypes script instead of directly editing op-ptypes (8d69152)
- Update methodSelector arg parsing to match updated stub (099eb43)
- Urange two arg overload incorectly used a default step size of 0 instead of 1 (a6e9796)
- Use correct case for copy readme script (2fc15ae)
- Use correct node type for local state expressions (d1db360)
- Use correct op (6f2d9cd)
- Use default name of Anonymous for unnamed object types (94f03bd)
- Use group transaction node instead of re-interpret cast for group transaction values (f61e233)
- Use platform agnostic command name (88a08ee)
- Use source location from concat expression when combining two constant values (4fd234a)
- Use specific lib when parsing typescript (fec7d37)
- use stderr for initial language server output so that it doesn't interfere with stdout (76fa74c)
- Use unique name per temp dir rather than nesting in ./puya-ts dir to avoid permissions issues (b3059f4)
- use valid bytes value as input to mimc op code in approval test (2b456a6)
- vite vunerability (2deb517)
- vite vunerability in algo-ts (0f3aa01)
- Wait for compiler loop to complete before shutting down and ignore change events when stopping (fdf3213)
- wtype for box_resize (f5e0a4c)
Dependencies and Other Build Updates
- Bump algo-ts version to 1 (59fb439)
- Bump version (b2a2a56)
- Bundle patched typescript package with compiler and remove peer dependency on algorand-typescript (4c3010d)
- Configure python version in CI (e8697f3)
- Create patch release for refactor commits (e61c59e)
- Disable PR trigger for now, add publish command for algo-ts (9462dd1)
- Do PR build on PR into alpha branch (3270a3c)
- Don't run commit lint on release and it checks the entire history and old commits don't lint correctly (a8d41e2)
- Drop commitlint type requirement to a warning temporarily to allow old commit messages through (0426857)
- Install puya compiler before testing (8530dfa)
- Override npm version to resolve audit issue (5451cd3)
- Pin typescript to 5.7.2 until 5.8 exits beta (71346c3)
- Remove commit lint warnings (8945391)
- Remove dry-run from package publish (5a777ab)
- Specify python version for pipx install (f444d67)
- Start algokit localnet for testing (095bc50)
- Swap to alpha branch + house keeping (1f17b34)
- Sync algo-ts version to puya-ts and bump node version to 22 (6f82185)
- Sync algo-ts version to puya-ts and bump node version to 22 (a5ebd3b)
- Tag releases in npm based on release channel (b44db85)
- Tag releases in npm based on release channel (9d0540c)
- Test release (312e32a)
- Test release (b721c03)
- Tweak approval tests for ci (eeb49fe)
- Use "./" instead of "." (e971c5b)
- Use latest release version of puyapy for CI (6219201)
- Use latest test-reporting action (6b51ef6)
- Use ts script to install supported puyapy version (daf0bde)
- Validate that the code built for the algo-ts package matches (6600ec3)