1. Objective
Our SDK mission is to make IC smart contract tooling intuitive to use and flexible enough for any use case. For beginners, we want to cut down on the mental overhead. For intermediate developers, we want to add improved debugging tools and profiling. And for advanced developers, we want to offer rigorous tooling that will offer greater visibility to the low-level operations and memory management of a canister.
2. Background
Currently, the SDK team oversees several tools that allow developers to develop and interact with Internet Computer canisters. Those tools include the main SDK repo, the Rust Canister Development Kit (CDK), the Rust agent, and the JavaScript agent.
3. Why this is important
The IC has a great deal of complexity, and engineers from Web2 and other blockchain contexts have high expectations for the quality of their developer experience. For the IC to become the “world computer”, and attract talented developers at all levels of experience, we need to provide world-class tooling.
4. Topics under this project
- Documentation
- Improvements to debugging & profiling
- Safe Upgrades and Backups
5. Key milestones (and technical solution if known)
Beginner-friendly features
Someone getting started on the platform has a lot of mental overhead, and we want to accommodate them by reducing the amount of Internet Computer context that someone needs to understand to get started. To that end, we have:
- Expand the number of project templates we offer to include popular frontend frameworks and options that come with things like CRUD, authentication, and asset management
- Simplify DFX, particularly around the Cycles Wallet and cache management
- Provide tutorials for common use-cases
- NFT’s
- Tokens / ledgers
- DeFi and payments
Intermediate Developer Features
For intermediate developers, we want to improve the quality of the development workflow, with a particular focus on developer tooling and safe, reproducible upgrades to live canisters. That will include:
- Cycles cost estimation for Rust and Motoko
- Debugging in the local canister execution environment
- Logging in live canisters
- Better IDE integration - code completion in Motoko, inline cycles cost insights
- Ability to download state from a production canister
- testing upgrades locally
- Support for easy backups and restoration in DFX
- Safe upgrades
Advanced Features
- Profiling and scaling tools
- Improve dfx for working with remote canisters with ambiguous interfaces
- Tooling for automatic horizontal scaling
And finally, some features that everyone will enjoy:
- React Native support
- Improved asset / web functionality
- Support for app push notifications
- WebDAV or FS-UI support for asset canisters
- Asset streaming through the serviceworker
- New asset upload npm package
- Overall improvements to managing large amounts of data on the IC
6. Discussion leads
Kyle Peacock
7. Why the DFINITY Foundation should make this a long-running R&D project
Tools under the SDK mandate are critical both to the internal and external stakeholders. Improved tooling makes it easier to discover and patch security issues on Canisters, to improve performance, and allow for safe upgrades and migration of data.
8. Skills and Expertise necessary to accomplish this (maybe teams?)
We have openings for experienced engineers with backgrounds in tooling, distributed systems, and anyone with solid experience in Rust.
9. Open Research questions
We have not settled on the best approach to run a local execution environment that supports multiple OS’s, debugging, and canister profiling.
10. Examples where community can integrate into project
All of our SDK codebases are open-source. Anyone can create issues, open pull requests, and collaborate with the SDK team. Get started at:
11. What we are asking the community
This will be the same for all:
-
Review comments, ask questions, give feedback
-
Vote accept or reject on NNS Motion