Release Notes

Release Notes for icpp-pro


Semantic Versioning

We use semantic versioning (semver) for the release numbers:

Given a version number MAJOR.MINOR.PATCH, increment the:

  1. MAJOR version when you make incompatible API changes
  2. MINOR version when you add functionality in a backwards compatible manner
  3. PATCH version when you make backwards compatible bug fixes

Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.

Changelog

Version Changes
4.2.1
Nov 30, '24
Support for dfx 0.14.1 & higher
The http_request behavior changed as described in this forum post dfx-0-24-1-breaks-the-http-request-endpoint
-New smoketest helper function get_canister_url_with_headers
-Depecrated smoketest helper function get_canister_url
Example: canister_http
4.2.0
Sep 7, '24
Hooks into build process
icpp-pro will call your python function at the appropriate time
Allows you to customize/optimize/merge the wasm
Example: canister_hooks
4.1.0
Jul 20, '24
Orthogonal persistence now works for ALL data structures
Fixed issue with STL containers.
4.0.0
Jul 17, '24
- All items listed for 4.0.0rc#
- Upgraded to wasi2ic v0.2.12 and ic-wasi-polyfill v0.5.0
4.0.0rc1
Jul 14, '24
Thanks to the integration of ic-wasi-polyfill & wasi2ic, many new features come available:
- stdio
- file io
- file upload/download
- files persist across upgrades
(files written during an update call are stored in stable memory)

We recommend that you review the new icpp-demos/canister/files demo to check out how awesome it all is 🎉🎉🎉

There are two new commands to install the tool chains, but you don't have to even execute them yourself. The first time you are building something, icpp-pro will check if the tool chain is available, and if not, it will install it in ~/.icpp:
- icpp install-rust
- icpp install-mingw64 (windows only)

As before, the tool chains and the dependencies are residing in the folder ~/.icpp, but the folder structure has been refactored. Everything is completely isolated from your system, and to clean it, just delete that folder/

The build-native command on Windows has been majorly refactored, but again you do not have to worry about it, everything happens automatic.

When running the native debug executable, build-native\mockic.exe, it relies on runtime DLLs that come with the mingw64 compiler. Because we now install our own mingw64 compiler in the ~/.icpp folder, we needed to decide how to make mockic.exe aware of the location of those DLLs. We decided to simply copy the DLLs into the build-native folder. That way, everything stays isolated, without need for clumsy additions to your system's PATH. Again, you do not have to worry about it, it is done for you.

We also added a whole new set of automated testing to cover all these new features, and now the GitHub actions test:
- On Windows / Ubuntu / Mac
- The embedded commands to install the tool chain, including the C++ wasi-sdk compiler, the rust compiler, and on windows the WinGW-w64 compiler
- Static libraries in C++ & Rust
- File open/write/read/upload/download & persistence across upgrades
- Orthogonal persisted memory of many C++ data structures
- Many candid api test
- All tests we reference from the docs
- All tests from icpp-demos repo

Have fun & looking forward to your feedback on this first release candidate.
3.17.0
Jun 18, '24
- All items listed for 3.17.0rc#
- Fixed bug in names of object files on Windows.
3.17.0rc3
Jun 14, '24
- Unique names for *.o across directories
- Reduce output during compile
3.17.0rc2
Jun 14, '24
- Building with -std=c++17 is now supported.
-> Run icpp init to see an example config icpp-c++17.toml
- Add option: icpp build-wasm --config [toml-file]
- Add option: icpp build-native --config [toml-file]
- Add option: icpp build-library --config [toml-file]
- Add option: icpp build-library-native --config [toml-file]
- Bugfix: Remove stubs from unreachable.c that are unrelated to io
- Bugfix: Expand cpp_include_dirs for build-library to full path
3.17.0rc1
Jun 11, '24
- Support static libraries in an icpp-pro project
3.16.1
May 25, '24
- Bug fix for cpp_link_flags of icpp.toml. It was ignored
- Removed -Wl,--strip-all, because this removed symbols from the wasm that are used by other tools. This is a first step towards enabling use of wasi2ic
3.16.0
May 22, '24
- Upgrade to wasi-sdk 22.0
- Upgrade ubuntu install to Clang 18
- Update Windows wsl commands to dfxvm based install
3.15.3
May 15, '24
The metadata dfx.tech_stack is now added to the wasm file according to the standard spec.
Note: it is automatic, you do not need to do anything.
3.15.2
Mar 25, '24
Update greet_0_auth in greet canister to use best practices for forward compatibility. Return a record wrapped in a variant.
No impact on functionality.
3.15.1
Feb 11, '24
Small fix to demo.ps1 in greet canister. No impact on functionality.
3.15.0
Feb 11, '24
- Upgrade to wasi-sdk 21.0 (LLVM 17)
- Windows: Upgrade to MinGW-w64 11.0.1 (UCRT)
=> This fixes build-native !!!
3.14.1
Feb 11, '24
- The Candid File is now embedded in the wasm file, and CandidUI works
- Added custom sections cdk:name & cdk:languages for usage aggregation purposes.
3.13.0
Jan 2, '24
Additional ic_api methods:
- is_controller
- get_canister_self
- get_canister_self_cycle_balance
-> example: canister_1
3.12.0
Dec 29, '23
Turn your C++ canister into a HTTP Webserver
-> http_request & http_request_update
-> example: canister_http
Counter HTML
3.11.0
Dec 19, '23
You can now overwrite default compile & link flags in icpp.toml
-> cpp_compile_flags_defaults
-> cpp_link_flags_defaults
-> c_compile_flags_defaults
-> example: canister_flags
3.10.0
Dec 16, '23
- Fix python 3.8
- Fix bug for CandidTypeRecord short form
- http_request
-> example: canister_http
3.9.0
Dec 8, '23
CandidTypeRecord with VecRecord field
3.8.1
Nov 27, '23
Turn off debug printout.
3.8.0
Nov 25, '23
CandidTypeOptVec
3.7.0
Nov 10, '23
CandidTypeOptVariant
3.6.0
Nov 4, '23
CandidTypeOptRecord
3.5.0
Oct 19, '23
CandidTypeVecRecord
- Updates to Type Tables
3.4.2
Oct 9, '23
add 'native' as a default include directory during 'build-native' command
3.4.1
Oct 9, '23
deprecate cpp_header_paths & c_header_paths in icpp.toml
3.4.0
Oct 9, '23
Add cpp_include_dirs & c_include_dirs to icpp.toml
3.3.0
Sep 27, '23
- Generate Javascript bindings as part of build
- Additional run_test API with candid_out
3.2.0
Sep 6, '23
Wildcard patterns in icpp.toml
3.1.1
Aug 13,'23
Add deprecation warning for Orthogonal Persistence methods. They are not needed based on this study and have a downside that they involve a copy of the data.
3.1.0
Aug 7, '23
Updates enabling running karpathy/llama2.c in a canister for inference.
3.0.2
Aug 1, '23
Better error messages
- Docs for orthogonal persistence
3.0.1
July 16, '23
- Faster compile using concurrency.
- Support for Windows PowerShell.
- Getting started example is fully cross-platform
- BREAKING CHANGE!
from_wire & to_wire use CandidArgs.
See icpp init
2.9.0
July 11, '23
- icpp-candid
2.8.1
July 7, '23
- Upgrade to wasi-sdk-20 & clang++ 16
2.7.0
June 13, '23
- IC_API constructor update to support additional system api calls, like canister_init.
2.6.0
June 8, '23
- Add sha256 to embedded hash library
- IC_API::time as static
- Additional constructor for CandidTypeVariant(label, CandidType) for simpler usage.
- Fix implementation of orthogonal persistence for associative containers (std::map & std::unordered_map)
2.5.0
June 2, '23
- Orthogonal persistence for containers.
- Smoketest can optionally specify a timeout
2.4.0
May 30, '23
- update calls
- automatic to_wire() call
2.3.0
May 19, '23
- api-reference
2.2.0
May 10, '23
- CandidTypeVariant
- Smoketest against MainNet
2.1.0
May 1, '23
- ic_api.get_caller()
2.0.0
Apr 29, '23
Initial BETA release