Skip to main content

Publishing Guide

Step-by-step guide to publishing your neuromorphic models to the registry.

Before You Begin

To publish a model to Synfire, you'll need:

  • An Synfire account and organization
  • A NIR model file (model.nir)
  • A metadata card (nir-card.json)

Creating a NIR Card

Every release requires a nir-card.json file with metadata about your model:

{
  "license": "MIT",
  "capabilities": ["Classification", "Image Recognition"],
  "tested_platforms": [
    { "name": "Pulsar", "framework": "nengo-edge", "version": "2.1.0" },
    { "name": "Generic", "type": "simulation" }
  ],
  "description": "A spiking neural network classifier for MNIST digits",
  "tags": ["classification", "mnist", "snn"],
  "authors": [
    {
      "name": "Jane Doe",
      "email": "[email protected]"
    }
  ],
  "links": {
    "paper": "https://arxiv.org/abs/...",
    "code": "https://github.com/..."
  }
}

Required Fields

  • license - SPDX license identifier (e.g., MIT, Apache-2.0)

Optional Fields

  • capabilities - Array of model capabilities (e.g., Classification, Object Detection, Anomaly Detection)
  • tested_platforms - Array of platforms where the model has been tested
  • tags - Array of tags for categorization
  • description - Brief description of the model

Auto-Extracted Fields

The following fields are automatically extracted from your model.nir file:

  • neuron_types - Detected neuron primitives (e.g., LIF, IF, CuBa)
  • linear_ops - Linear operations in the model
  • node_count - Total number of nodes
  • parameter_count - Total model parameters
  • model_size_category - Computed from parameter count (tiny/small/medium/large)

Publishing with the CLI

The easiest way to publish is with the CLI:

# First, authenticate
synfire login

# Publish your model
synfire push nrg-lab/snn-classifier --version 1.0.0 \
  --model ./model.nir \
  --card ./nir-card.json

You can also include release notes:

synfire push nrg-lab/snn-classifier --version 1.0.0 \
  --model ./model.nir \
  --card ./nir-card.json \
  --notes ./RELEASE_NOTES.md

Publishing with the SDK

from synfire import Client

client = Client()

client.push(
    repository="nrg-lab/snn-classifier",
    version="1.0.0",
    model_path="./model.nir",
    card_path="./nir-card.json",
    release_notes="Initial release with MNIST-trained model",
)

Versioning

Synfire uses Semantic Versioning. Version numbers follow the format MAJOR.MINOR.PATCH:

  • MAJOR - Breaking changes to model interface
  • MINOR - New features, backward compatible
  • PATCH - Bug fixes, backward compatible

Pre-release versions are also supported:

  • 1.0.0-alpha
  • 1.0.0-beta.1
  • 1.0.0-rc.1

Important Notes

  • Releases are immutable - Once published, a version cannot be modified or re-uploaded
  • Maximum file size - 2GB per file
  • License required - The license field in your NIR card is required for validation
  • SHA256 checksums - Computed automatically for all artifacts