Motoko 2024 Roadmap
Note: this roadmap is still pending final approval and is subject to change.
Hi everyone. After a wonderful week in Zurich with the Languages team, we are ready to share our 12-month roadmap.
Themes
The work planned for Motoko, Candid, and all surrounding tooling is categorized by three distinct themes. The themes themselves were developed through careful review of user feedback and analysis of various trends within the ICP ecosystem.
DX + Productivity
By far the most important theme we’ve identified, and the one with the most work planned focuses on improvements to developer experience and developer productivity. This is all about ensuring Motoko is a joy to use day after day and that it meets the productivity needs of developers ranging from enthusiasts to professionals.
Base Library 2.0
We plan to rewrite a few common base library methods and provide abstractions around data structures like Set, Map, and List. We will also provide a better templating/blueprint system so the community can develop high-quality base library additions as well. We’d also like to introduce units to Time as requested by this Feedback Board topic.
FFI via Wasm Component Model
This is an exploration to learn how to support multi-language canisters using Wasi 2 and the Wasm component model specification. This can open the door to things like importing and using Rust crates directly in a Motoko program. Note this is already possible (with limitations) through the great work of @rvanasa using the Canpack tool.
VSCode Extension Enhancements
The community has a long wishlist of features they would like to see get added to the Motoko VSCode extension. We would like to address as many as we can.
Candid Type Selector
This feature brings an additional configuration layer to Candid that allows types to be mapped natively to and from host / destination languages, as well as a number of other improvements that will bring greater automation to your Candid-based workflows.
Canister Logging
This feature brings support for logging to Motoko with some additional sugar and capabilities on top.
Canister State Snapshots
This feature brings support for creating a snapshot of a canister’s state as well as rolling a canister back to a previously saved snapshot.
Exposing Best Effort Responses
With the introduction of call timeouts, we need to invent a new idiom that exposes this capability to Motoko developers in an easy-to-use and type-safe fashion. This new idiom will likely be applied to the way Cycles are added to calls as well.
Actor Mixins
This feature would introduce the ability to import an actor into a Motoko program that already has an actor defined.
Explicit Type Imports
This feature would introduce the ability to import a type by name.
Selectively Disabling Compiler Warnings
This feature would introduce a configurable filter that could be used to suppress certain compiler warnings.
Data Visualizer
This exploration would give us an opportunity to learn what is required to build efficient and scalable data visualization capabilities into Motoko programs. Developers could use this to inspect their Motoko state and understand how storage space is being used / allocated.
Scalability + Performance
As the name implies, this theme concentrates on bringing greater speed, storage, and efficiency to Motoko programs.
Enhanced Orthogonal Persistence
This feature introduces a fundamental change to the relationship between heap memory and stable memory. For developers, it means that state will persist indefinitely and across upgrades without needing to use stable memory APIs. The result will be a far simpler and more pleasant experience working with persistent data.
Self-describing Heap
This is a low-level feature that adds additional data to the memory representation of objects. It simplifies debugging, heap snapshot inspection, and data recovery.
Graph Copy
This is a means to enabling Enhanced Orthogonal Persistence. It offers a mechanism for flexibly changing the memory layout of a Motoko program.
Synthesis of Rust Deserialization Code
This is an exploration to determine how we can improve the performance of Candid parsing in a Rust program. We will look at static generation of deserialization code, which can potentially improve the performance of Candid parsing by 10x.
Correctness + Security
This theme is centered around helping developers write Motoko ICP smart contracts that are secure and bug-free through expansive compiler checking.
Try / Finally
This feature introduces a mechanism to define a cleanup block in a try / catch statement.
Asset Certification
We would like to bring an asset certification library to Motoko that has parity with the excellent ic-asset-certification crate developed by @NathanosDev. This would open the door to a asset canisters written in Motoko as well as myriad other community projects.
Conclusion
That sums it up. We hope you are as excited about the upcoming developments as we are. If you have any questions or comments, please discuss below!