Self-Hosting & Development/Platform Internals/Extending AxonOS

Extending AxonOS

AxonOS ships a comprehensive extensibility system so researchers can add their own applications without forking the project. You can use the GUI template builder or write plugin files by hand.

How it works

🧱Template builder

Pick a template, fill a short form, preview the generated Dockerfile commands, and save.

📄Plugin files

Drop YAML/JSON definitions into axonos_plugins/; they're hot-loaded by the launcher.

🤝Community sharing

Plugins are plain files — share and discover application definitions easily.

Prerequisites

bash
# Install YAML support for plugins
pip install -r axonos_launcher/requirements.txt

Method 1 — GUI template builder

  1. Open the AxonOS Launcher.
  2. Go to the 🧩 Custom Apps tab.
  3. Choose a template from the dropdown.
  4. Fill in the form fields.
  5. Preview the generated Dockerfile.
  6. Save your application.

For example, adding a Python package: select Python Package, set App ID scikit_learn, name Scikit-learn, package scikit-learn, and save.

Method 2 — plugin files

Create a YAML file in axonos_plugins/:

yaml
# my_tools.yaml
tensorflow:
  name: "TensorFlow"
  description: "Deep learning framework"
  dockerfile_section: "RUN pip install --no-cache-dir tensorflow"
  enabled: false

blast_plus:
  name: "NCBI BLAST+"
  description: "Sequence similarity search tool"
  dockerfile_section: |
    RUN apt update && apt install -y ncbi-blast+ && \
        echo '[Desktop Entry]\nName=BLAST+\nExec=gnome-terminal -- blastn -help\nIcon=applications-science\nType=Application\nCategories=Science;' \
        > /usr/share/applications/blast.desktop
  enabled: false

Plugins are loaded automatically from the axonos_plugins/ directory.

Installation templates

🐍Python Package

pip install for Python libraries — set the package field.

📦APT Package

apt install for system packages — set space-separated packages.

🐙GitHub Release

Download and install from a release tarball, then register a desktop entry.

🌐Web Application

Create a desktop shortcut that opens a web tool.

Python package template

yaml
app_id:
  name: "Package Name"
  description: "Brief description"
  dockerfile_section: "RUN pip install --no-cache-dir {package}"
  enabled: false

APT package template

yaml
app_id:
  name: "Package Name"
  description: "Brief description"
  dockerfile_section: "RUN apt update && apt install -y {packages}"
  enabled: false

GitHub release template

yaml
app_id:
  name: "Tool Name"
  description: "Brief description"
  dockerfile_section: |
    RUN wget {download_url} && \
        tar -xzf {archive_name} -C /opt && \
        rm {archive_name} && \
        ln -s /opt/{app_dir}/{executable} /usr/local/bin/{app_name} && \
        echo '[Desktop Entry]\nName={name}\nExec={app_name}\nIcon=applications-science\nType=Application\nCategories=Science;' \
        > /usr/share/applications/{app_id}.desktop
  enabled: false

Organizing plugins

text
axonos_plugins/
├── my_research_tools.yaml
├── bioinformatics_extras.yaml
└── python_data_science.yaml
Keep custom apps disabled by default

Set enabled: false in your definitions so apps are opt-in at build time. Toggle them on per build via the launcher or your config file.

The repo's axonos_plugins/ directory includes example plugins and the full EXTENSIBILITY_GUIDE.md.