Quantum-CLI: A powerful CLI to build, run, and test Quantum Machines.

Execute Your Workflow in a Loop with QuantumDataLytica

QuantumLoop is a powerful enhancement to our no-code data automation platform.

QuantumDataLytica vs Traditional ETL Tools: Accelerate Your Data Integration Without Coding

Traditional Extract, Transform, Load (ETL) tools have long been at the core of data integration practices.

QuantumDataLytica: The No-Code Alternative to Traditional ETL

For years, ETL (Extract, Transform, Load) solutions have been the cornerstone of data integration.

Collapseleft Icon

Documentation

What is QuantumDatalytica?

Unifying developers, engineers, and users to build, orchestrate, and automate intelligent workflows with Quantum Machines.

Overview

QuantumDatalytica empowers Developers to build modular Quantum Machines, enables Workflow Engineers to design powerful data workflows, and allows Workflow Users to execute and automate tasks seamlessly, all within a secure, scalable, and cloud-native platform.

Workflows are created using DAG-based design, with parent-child machine dependencies and conditional execution logic.

QuantumDatalytica as a unified platform for workflow automation, data processing, and task orchestration using modular, containerized units called Quantum Machines.

Marketplace, the central repository where machines are published, versioned, and reused across workflows and teams, reducing duplication of logic.

Provide a short onboarding path for each role:
  • Developers: Setup CLI, create machine, submit for review, publish
  • Engineers: Use Data factory and Workflow Designer Screen to design workflows
  • Users: Run workflows, track results, view logged usage of infrastructure

Next Topic: Machine Developer

Machine Developer

Design, build, and publish Quantum Machines to power scalable, reusable, and intelligent automation workflows.

Overview

A Machine Developer is a core contributor to the QuantumDatalytica platform, responsible for building, testing, and publishing self-contained units of logic called Quantum Machines. These machines are the foundational building blocks of automated data workflows. They are designed to perform a specific task, such as transforming data, calling APIs, running analytics, or generating documents  and are built with consistency, reusability, and scalability in mind.

Machine Developers primarily work in Python, structure their logic around a standardized interface (CoreEngine), and package everything into lightweight Quantum Blocks. Each Quantum Machine must adhere to a defined project.json, input/output schema and is validated through rigorous testing before publication. These machines are then made available to Workflow Engineers and Users, who can plug them into larger Quantum workflows or trigger them as standalone automation tasks.

The role is both creative and technical. Developers have the freedom to innovate, turning domain expertise or unique algorithms into shareable, monetizable machines, while working within a well-structured ecosystem. With Quantum-Machine CLI tools, testing environments, and version control built into the platform, developers can confidently deploy machines that scale across environments.

Whether you're solving a data challenge, building a PDF generator, or integrating external APIs, as a Machine Developer, your work directly empowers automated decision-making and workflow efficiency at scale.

Next Topic: Prerequisites

Prerequisites

Set up your local tools and environment to begin building, testing, and publishing Quantum Machines efficiently.

Before you begin building a Quantum Machine, it's essential to set up a local development environment that mirrors the runtime environment of the QuantumDatalytica platform. This ensures compatibility, smooth testing, and predictable deployment behavior.

Required Tools and Software

Tool Purpose Recommended Version
Python Core language for writing machine logic 3.9 or higher
Docker Core language for writing machine logic Latest stable
Git Source control and version management Latest
Quantum CLI Create, test, validate, and publish machines Latest from PyPI
VS Code (or similar IDE) Code editing and project navigation Latest
Quantum-Core-Engine This package provides the base class CoreEngine, which every machine's main.py must inherit from. It handles the standard execution flow, structured logging, and ensures compatibility with the QuantumDatalytica runtime engine. Latest

Once these tools are installed, you're fully equipped to create and run your first Quantum Machine.

Install Quantum-Machine CLI

Install the Quantum CLI to scaffold, test, and publish Quantum Machines directly from your local environment.

Overview

Quantum-Machine CLI is a command-line interface developed by QuantumDatalytica LLC to help developers build, run, test, log, and manage modular analytics components called Quantum Machines. These machines are the foundation of scalable, distributed data workflows within the QuantumDatalytica ecosystem. The CLI streamlines local development and ensures consistent behavior across environments.

Installation

pip install quantum-machine
Copy IconCopy

Usage

quantum --help
Copy IconCopy

Commands

Command Description
init machine Initialize a new Quantum Machine project with boilerplate files
run machine Run a machine and observe its behavior locally
build machine Build a Docker image for the specified machine
test machine Run unit tests defined for the machine
lint machine Check the machine's code for linting/style issues
validate machine Validate the machine's Project.json and required structure
init workflow Initialize a new workflow YAML file with DAG structure
add machine Add a machine as a task to a workflow and define its dependencies
run workflow Run a workflow DAG by executing machines in topological order
logs machine View logs from the last execution of a specified machine

Example Commands

Initialize a machine
quantum init machine HelloWorld
Copy IconCopy
Creates
  • HelloWorld/main.py
  • HelloWorld/Project.json
  • HelloWorld/requirements.txt
  • HelloWorld/Dockerfile
  • HelloWorld/input.json
  • HelloWorld/output.json

Run the machine

quantum run machine HelloWorld
Copy IconCopy

Build the machine as Docker Image

quantum build machine HelloWorld
Copy IconCopy

Builds a Docker image with dependencies for the machine.

Test your machine

quantum test machine HelloWorld
Copy IconCopy

Runs the test suite defined under the machine's directory.

Lint your machine

quantum lint machine HelloWorld
Copy IconCopy

Applies flake8 or equivalent linting tools to maintain code standards.

Validate machine structure

quantum validate machine HelloWorld\<file_name>
Copy IconCopy

Ensures the machine has the correct Project.json, required fields, and structure.

Create a Workflow

quantum init workflow my_workflow
Copy IconCopy

Creates a workflow.yaml file to define machine dependencies.

Add DAG Machine to Workflow

quantum add machine HelloWord -w my_workflow
quantum add machine 2nd_Machine -w my_workflow
quantum add machine 3rd_Machine -p HelloWorld --workflow  my_workflow
quantum add machine 4th_Machine -parent 2nd_Machine -w my_workflow
quantum add machine 5th_Machine -p 3rd_Machine 4th_Machine -w my_workflow
Copy IconCopy

Run a Workflow

quantum run workflow my_workflow
Copy IconCopy

Executes machines in the correct DAG order as defined in workflow.yaml.

View machine logs

quantum logs machine HelloWord
Copy IconCopy

Displays the logs from the most recent execution of the HelloWorld machine.

Install quantum-core-engine

Install the core SDK that powers every Quantum Machine and ensures standardized execution, logging, and output handling.

Overview

The quantum-core-engine is a required Python package that provides the foundational structure for all Quantum Machines. It must be installed in your development environment before writing or testing any machine logic

pip install

https://github.com/QuantumDatalytica-LLC/quantum-core-engine.git@<latest_version>
Copy IconCopy

Run this command inside your virtual environment or project directory to keep dependencies clean and isolated. Replace <latest_version> with the latest version available on the Quantum-Core-Engine Releases page.

Objective

The Quantum-Core-Engine is more than just a library, it defines how every Quantum Machine behaves. Its goals include:

Objective Description
Standardized Execution Provides a CoreEngine base class that ensures all machines follow a common execution pattern.
Input Handling Accepts structured JSON inputs and injects them into your custom logic.
Output Validation Ensures outputs are clean, structured, and aligned with the declared schema.
Logging Support Built-in logging methods (self.machine_logger.info(), self.machine_logger.error(), self.machine_logger.warning())for easy debugging and traceability.
Security Hooks Enforces safe execution policies (e.g., blocking unsafe file paths or unvalidated data access).
Sandbox Integration Seamlessly connects to the Quantum CLI and sandbox environment for local testing and validation.

By using CoreEngine, developers don’t have to reinvent basic execution logic or worry about input/output parsing. They can focus purely on building business logic, while the framework handles the rest, making machines easier to validate, test, and integrate into Quantum Workflows.

How to use Quantum-Core-Engine

from quantum.CoreEngine import CoreEngine

class MyMachine(CoreEngine):
"""
Inherit from CoreEngine to define your machine's logic.
Implement the required methods such as 'receiving', ‘pre_processing’ 
and many more to handle input and produce output.
"""

if __name__ == "__main__":
# Initialize and execute machine
machine = MyMachine()
machine.start()
                                                    
Copy IconCopy

Breakdown of Key Elements

  • from quantum.CoreEngine import CoreEngine:
    Imports the base class required for all Quantum Machines.
  • class MyMachine(CoreEngine):
    Subclasses CoreEngine to inherit standardized structure, input/output flow, error handling, and lifecycle of execution flow.
  • if __name__ == "__main__":
    Ensures the script can be run directly during local testing or inside Quantum Cluster.
    machine.start() initializes the engine and runs it in Quantum Workflow.

Build Your First Machine

Learn how to create, structure, and run your first Quantum Machine using the Quantum CLI toolkit.

Before writing any code, it's important to understand what a Quantum Machine really is: a self-contained, containerized Python base code that takes structured input, performs a task, and returns structured output. Each machine follows a common design pattern, making it predictable, testable, and reusable.

Development starts by using the Quantum Machine CLI to scaffold a new machine with a predefined structure. You'll write your logic in main.py, prepare project.json which defines key parameters of the Quantum Machine, and input.json specifies the expected input parameters for the Quantum Machine, while output.json defines the structure and content of the machine's resulting output.

Use CLI commands to test your machine locally, simulating its execution within the actual Quantum Datalytica runtime environment.

Machine Scaffold

HelloWord/
  • main.py # Core logic of quantum-machine
  • Project.json# Machine metadata
  • input.json# Example input for testing
  • output.json# Expected output structure
  • Dockerfile# Cluster container definition
  • requirements.txt# Python dependencies
  • README.md# Documentation

Sample Machine (main.py)

from quantum.CoreEngine import CoreEngine

class MyMachine(CoreEngine):

    input_data = {}
    dependent_machine_data = {}

    def receiving(self, input_data, dependent_machine_data, callback):
        """Receiving
        :param input_data: Configure parameter values
        :param dependent_machine_data: Dependant/Previous machine data values
        :return: callback method to pass data and error into next step
        """
        data = {}
        error_list = []
        try:
            # Review Final data and Error list
            data = self.get_final_data()
            error_list = self.get_error_list()

            self.input_data = input_data
            self.dependent_machine_data = dependent_machine_data

        except Exception as e:
            err_msg = f"Error : {str(e)}"
            error_list.append(err_msg)

        finally:
            callback(data, error_list)

    def pre_processing(self, callback):
        """Pre-Processing
        :return: callback method to pass data and error into next step
        """
        data = {}
        error_list = []
        try:
            # Updated Final data and Error list
            data = self.get_final_data()
            error_list = self.get_error_list()

        except Exception as e:
            err_msg = f"Error : {str(e)}"
            error_list.append(err_msg)

        finally:
            callback(data, error_list)

    def processing(self, callback):
        """Processing
        :return: callback method to pass data and error into next step
        """
        data = {}
        error_list = []
        try:
            # Updated Final data and Error list
            data = self.get_final_data()
            error_list = self.get_error_list()

        except Exception as e:
            err_msg = f"Error : {str(e)}"
            error_list.append(err_msg)

        finally:
            callback(data, error_list)

    def post_processing(self, callback):
        """Post-Processing
        :return: callback method to pass data and error into next step
        """
        data = {}
        error_list = []
        try:
            # Updated Final data and Error list
            data = self.get_final_data()
            error_list = self.get_error_list()

        except Exception as e:
            err_msg = f"Error : {str(e)}"
            error_list.append(err_msg)

        finally:
            callback(data, error_list)

    def packaging_shipping(self, callback):
        """Packaging & Shipping
        :return: callback method to pass data and error into next step, This is 
        final data to use into next machine
        """
        data = {}
        error_list = []
        try:
            # Updated Final data and Error list
            data = self.get_final_data()
            error_list = self.get_error_list()

        except Exception as e:
            err_msg = f"Error : {str(e)}"
            error_list.append(err_msg)

        finally:
            callback(data, error_list)

if __name__ == '__main__':
    # Create a machine instance and start the process
    machine = MyMachine()
    machine.start()
Copy IconCopy

Breakdown of key component

from quantum.CoreEngine import CoreEngine
Copy IconCopy

This imports the CoreEngine base class from the Quantum-Core-Engine SDK. Inheriting from CoreEngine standardizes the structure, input/output flow, error handling, and lifecycle of your Quantum Machine.

input_data = {}Dependent_machine_data = {}
Copy IconCopy

input_data: Holds the raw input parameters passed into the machine. These typically come from input.json or are set by the workflow engine.

dependent_machine_data: Captures output from any parent/previous machines in the workflow. Useful when a machine depends on upstream results.

receiving(self, input_data, dependent_machine_data, callback)

This method acts as the initial handshake for the machine’s execution. It captures the raw input and any output from parent machines, setting the stage for downstream logic.

Developer Responsibilities:
  • Store and validate input_data and dependent_machine_data
  • Merge or reshape inputs as needed
  • Initialize flags or internal state for conditional flows
  • Log or audit incoming data
  • Plan routing logic based on inputs (e.g., skip logic, branching)
pre_processing(self, callback)

Pre-processing prepares and transforms the initial inputs into a shape more suitable for the main computation. This stage is often used for validation, enrichment, and staging.

Developer Responsibilities:
  • Validate input formats and required fields>
  • Apply data cleanup or normalization
  • Set up temporary variables or decision points
  • Fetch external data if needed (e.g., lookup tables)
  • Plan conditional logic paths for the main processing phase
processing(self, callback)

This is the core execution phase where the machine performs its primary logic or task.

Developer Responsibilities:
  • Implement the main logic (e.g., transformation, calculation, file parsing, API interaction)
  • Use input and pre-processed data to produce meaningful output
  • Manage iteration, aggregation, or ML inference steps
  • Track intermediate errors or skipped items
  • Store computed results in a structured format
post_processing(self, callback)

In this phase, the machine performs final adjustments or logging after processing is complete, preparing the output for final packaging.

Developer Responsibilities:
  • Format or finalize data structures
  • Remove temporary or redundant fields
  • Apply business rules or filters to results
  • Prepare summaries, logs, or indicators
  • Set result flags or post-execution status fields
packaging_shipping(self, callback)

This is the last phase in the lifecycle — it prepares and packages the machine’s output into a structure compatible with QuantumDatalytica’s output schema and downstream machines.

Developer Responsibilities:
  • Wrap data into the correct output format
  • Ensure output matches output.json expectations
  • Remove internal flags or non-exportable items
  • Document any errors or warnings
  • Optionally tag or version the output for traceability
if __name__ == '__main__':
    machine = MyMachine()
    machine.start()
Copy IconCopy
This allows the machine to run when executed directly (locally or in a Quantum Cluster).
  • start() method that initiates the lifecycle: receiving → pre-processing → processing → post-processing → packaging.
Quantum Logo

Join the Developer Community

Connect with peers, join our Slack/Discord community, attend monthly AMAs, and get featured through the Machine Spotlight Program.

Work seamlessly with a creative team that's built to match your pace and exceed your expectations. Questions? Need Help?