Introducing the Internet Computer Interface Specification

DFINITY
The Internet Computer Review
4 min readMar 18, 2021

It details how services and users communicate through the Internet Computer, and enables the community to create new development tools.

Today marks an important milestone on the Internet Computer’s imminent path to Genesis. The DFINITY Foundation is excited to announce the publication of the Internet Computer Interface Specification — one of the biggest technical documents that we’ve released to date. Detailing the highly technical properties of the Internet Computer blockchain is among the requirements for Genesis that we announced in December. The release of this document signals a major step forward in the network’s progressive decentralization, and there’s much more to come.

The Interface Specification explains how external services and users as well as canister smart contracts communicate through the Internet Computer, and gives our developer community the ability to create new developer tools that target different subsets of actions and interactions on the network. Though it is a highly technical document that is not for the faint of heart, it enables those who work through it to not only write compatible software inside and outside of the Internet Computer, but also write the libraries that enable other people to write that software.

Want to dive right in? Read the Internet Computer Interface Specification here! Be sure to also join our Developer Forum, where you can discuss the document with DFINITY team members and the broader community. Following below, we’ll detail what the Interface Specification is and how the developers can utilize it.

What is the Internet Computer Interface Specification?

The Interface Spec is a deeply technical document that provides an overview of the lower-level external interfaces of the Internet Computer. It explains in detail which HTTPS endpoints are exposed to handle incoming requests, and lays out how the bindings between the canister code that you’ve written in WebAssembly (or in a language that compiles to WebAssembly) interact with the system. It also describes the behavior that you can expect from making these transactions with the Internet Computer. The DFINITY team regularly uses this document internally, and will release updated versions as it evolves.

Interacting with a canister as an application developer or as an end user typically involves interacting with the underlying HTTPS handler interface and the system application programming interface. If you use existing tools like the DFINITY Canister SDK or the Rust Canister Development Kit to work with canisters, the tools interact with these lower-level interfaces on your behalf and you don’t need to know these details. But if you want to create your own tooling for working with canisters, you need to know more about the canister format, how to use the HTTPS interface to interact with canisters, and the operations that the system API supports. That’s where the Interface Spec comes into play.

The DFINITY Developer Experience (DX) team has created libraries called agents for Rust and JavaScript that allow you to interact with canisters from outside of the Internet Computer. By describing the external interfaces that the Internet Computer provides and the behavior to expect when using these interfaces, the Interface Spec equips knowledgeable developers to also create specialized agents that support canister development or that allow existing services written in a wide variety of other languages to connect to the Internet Computer. Creating better developer tools that other community members can use to build software is a core idea of decentralization. The best of these new agents and tools will eventually rise to become de facto community standards.

Developers can also refer to the Interface Spec in order to better understand the system’s APIs and build more integrated systems that encompass more than just native canisters, zooming out and interacting with other services and canisters on the Internet Computer.

We encourage our technical community to read the document closely and provide feedback and comments on our Developer Forum. With this document, we’re opening the door for members of our community to begin growing the ecosystem of development tools for the Internet Computer by:

  • Building front-end DFINITY agents that can be written in any language. We hope to see agents emerge for popular programming languages such as Python, Golang, C, Java, Haskell, and many, many more.
  • Building back-end Canister Development Kits (CDKs). Any language that can compile down to WebAssembly bytecode is a candidate for a CDK. The more CDKs that are available means the more programming languages that can be natively supported by the Internet Computer.
  • Building local development tools such as command line interfaces or Internet Computer emulators and debuggers.

Depending on your objectives and interests, you should also consult the information in the Interface Spec if you want to:

  • Implement features that are described by the specification but not yet implemented in existing tooling — for example, as a developer working on the Internet Computer project.
  • Analyze the intricacies of the Internet Computer’s behavior in great detail — for example, as part of a security review or audit.

What the Internet Computer Interface Specification is NOT

The Internet Computer is a massive project with many different moving components. In the spirit of not flooding the community with an information overload, you will NOT find the following details in the Interface Spec:

  • Details about ICP tokens.
  • Details about governance and the Network Nervous System.
  • Details about network consensus, networking, and other implementation internals of the internet computer.

Stay tuned for more info about these topics that we are preparing to share with you very soon.

--

--

DFINITY
The Internet Computer Review

The Internet Computer is a revolutionary blockchain that hosts unlimited data and computation on-chain. Build scalable Web3 dapps, DeFi, games, and more.