Scanbot DOI

Functional Overview

Scanbot is a collection of several automated STM and nc-AFM data acquisition commands compatible with Nanonis V5 SPM control software. It can help with:

  • STM
    • Bias dependent imaging with drift correction
    • Automated sample surveying (NxN grid)
  • STS
    • STS grids with drift correction
  • nc-AFM
    • z-dependent nc-AFM
    • nc-AFM registration
  • Automation
    • Tip shaping
    • Full control over the coarse motors
  • Hooks
    • Scanbot has a number of built-in hooks to let you customise key functionality.


There are several ways to install Scanbot:

  1. Quick Start:

    For a quick start on Windows, download and run the .exe file from here. This method automatically sets up and launches the Scanbot web app.

  2. Installing via pip:

    If you prefer using pip, you can install Scanbot directly with:
    pip install scanbot

  3. Building from Source:

    To install Scanbot from its source, particularly if you want the latest version or wish to contribute to its development, follow these steps:

    1. Clone the Scanbot repository
    2. Install node.js from here or if you're using anaconda, run conda install conda-forge::nodejs
    3. Navigate to scanbot/scanbot/App and run npm install
    4. From the same directory, run npm run build
    5. Navigate to the project root directory, and run pip install .
    6. Start Scanbot by running the command scanbot


Scanbot can be run as a web application, in a terminal, or via the open-source messaging platform, Zulip:

  1. Web Application:

    The web app can be launched by running the command: scanbot

    You can test Scanbot with the Nanonis V5 Simulator before integrating it with your STM by following these instructions.

    The general user guide is available here.

  2. Terminal:

    Scanbot can run in a terminal after running: scanbot -c

    For a full list of Scanbot commands, see here. Alternatively run the help command or, for help with a specific command, run help <command_name>.

  3. Zulip:

    Running via Zulip is the most flexible implementation of Scanbot. You can send commands and receive data from anywhere and in real time via chat streams. You must follow a few additional steps first:

    1. Install zulip and zulip_bots

      pip install zulip
      pip install zulip_bots

    2. Create a zulip bot and download the zuliprc file

    3. Add the following lines to scanbot_config.ini:


    4. Launch Scanbot by running: scanbot -z

    For a full list of Scanbot commands, see here. Alternatively run the help command or, for help with a specific command, run help <command_name>.


We welcome contributions from the community to Scanbot. Here's how you can contribute:


Encounter a problem? Please report it by opening a new issue. If you're able to fix the issue yourself, feel free to submit a pull request.

Feature Requests

Have an idea for a new feature? Submit it through our issue tracker. Please provide detailed information about your feature to help us understand your vision.

Develop New Scanbot Commands

Interested in expanding Scanbot's capabilities? Follow these steps:

  1. Open a new issue detailing your proposed command.
  2. If approved, you can either develop your command using the hk_commands hook or by updating Scanbot's source directly.
  3. Submit a pull request for review.

Pull Requests

If you're going to submit a pull request for any of the above please ensure the following:

  1. Changes are compatible with the latest version of the V4 branch
  2. Titles and summaries are clear, concise, and explain the rationale behind the changes, what issues they address, and any other relevant context.
  3. You have an open issue that can be linked to the pull request.
  4. All new code is well-documented and any new features or bug fixes include appropriate tests.
  5. Tag ceds92 for review as they are the main reviewer for this project. Include any other contributors who might be impacted by or interested in the changes.


If your changes to Scanbot require updates to the documentation, please handle this on the mkdocs branch. You can update the documentation there and submit a separate pull request linked to the same issue:

  1. Check out the mkdocs branch from the main repository.
  2. Update or add documentation to reflect the changes made to the software. Ensure that all new features, configurations, or usage instructions are clearly documented.
  3. Use clear, concise language and format the documentation for easy reading. Include examples if applicable.
  4. Submit a pull request for the documentation updates, ensuring it references the same issue as your code changes.
  5. Tag ceds92 in the pull request for the documentation as well, to ensure consistency and accuracy in both code and informational updates.


If you have questions or need assistance that the documentation doesn’t address, please don’t hesitate to open an issue in our issue tracker. We are committed to providing support and will do our best to assist you promptly!


If you use Scanbot in your scientific research, please consider citing it.


Special thanks to FLEET for their contribution through the FLEET Translation Program. FLEETLogo