Keeping It Minimal: HelloWorld Tutorial

If you just want to get started and make sure everything works, the Keeping It Minimal: HelloWorld Tutorial plugin is a great place to begin. It’s a complete but minimal example that shows how to structure a plugin using Poriscope’s MVC architecture.

You’ll get a new tab in the interface with a basic message and no extra logic — perfect for testing.

This plugin includes:

Once it’s in the right folder, Poriscope will automatically detect it, instantiate it, and display it as a new analysis tab.

Inside the HelloWorld Analysis Tab Plugin

The model handles data and backend logic. In this example, it’s empty — just enough to satisfy the required interface.

import logging
from utils.MetaModel import MetaModel
from utils.LogDecorator import log
from scipy.signal import welch
import numpy as np
from PySide6.QtCore import Signal, Slot, Qt

class HelloWorldModel(MetaModel):

    logger = logging.getLogger(__name__)

    @log(logger=logger)
    def _init(self):
        # No setup needed yet
        pass

Together, these files make up a minimal but complete plugin.

Plugin File Structure

Make sure your plugin is stored in a directory like this:

plugins/analysistabs
├── HelloWorldView.py
├── HelloWorldModel.py
└── HelloWorldController.py

Poriscope will pick it up automatically if your plugin loader is set up properly.

What You’ll See

Hello World Tab appears as an option in the analysis menu

HelloWorld in the Analysis Menu — Once the plugin is loaded, it appears as a selectable tab in the analysis menu.

Once the plugin is loaded, you’ll see a new tab with the message in the control area:

Hello World appears in the control area of the View, under the display area

HelloWorld Tab in Action — The message “Hello, world!” appears in the control area of the view.

Hello, world!

This confirms that your plugin was discovered, initialized, and displayed correctly.

What to Do Next

Now that you’ve got a working template:

  • Add your own controls to _set_control_area

  • Write your own logic in the model

  • Connect everything in _setup_connections

You’ve now built your first plugin. From here, you can grow it into anything you need.