Quick Start using the JavaScript VM

There are 3 type of environments Remix can be plugged to: Javascript VM, Injected provider, or Web3 provider. (for details see Running transactions)

Both Web3 provider and Injected provider require the use of an external tool.

The external tool for Web3 provider is an Ethereum node the tools for Injected provider are Mist or Metamask.

The JavaScript VM mode is convenient because each execution runs in your browser. Thus reloading the page will restart Remix with an empty state.

So for performance purposes, it might also be better to use an external node.

Selecting the VM mode

Make sure the VM mode is selected. All accounts displayed in Accounts should have 100 ether.

Sample contract

pragma solidity ^0.4.16;

contract testContract {

    uint value;
    function testContract(uint _p) {
        value = _p;

    function setP(uint _n) payable {
        value = _n;

    function setNP(uint _n) {
        value = _n;

    function get () constant returns (uint) {
        return value;

This contract is very basic. The goal is to quickly start to create and to interact with a sample contract.

Deploying an instance

The Compile tab displays information related to the current contract (note that there can be more than one) (see ../compile_tab).

Moving on, in the Run tab select, JavaScript VM to specify that you are going to deploy an instance of the contract in the JavaScript VM state.


The constructor of testContract needs a parameter (of type uint). Give any value and click on Create.

The transaction which deploys the instance of testContract is created.

In a “normal” blockchain, it can take several seconds to execute. This is the time for the transaction to be mined. However, because we are using the JavaScript VM, our execution is immediate.

The terminal will inform you about the transaction. You can see details there and start debugging.

The newly created instance is displayed in the run tab.


Interacting with an instance

This new instance contains 3 actions which corresponds to the 3 functions (setP, setPN, get). Clicking on SetP or SetPN will create a new transaction.

Note that SetP is payable (red action) : it is possible to send value (Ether) to the contract.

SetPN is not payable (light red action) : it is not possible to send value (Ether) to the contract.

Clicking on get will not execute a transaction (blue action). It is not necessary to do so because get does not modify the state (variable value) of this instance.

As get is constant you can see the return value just below the action.