Skip to content

Add spikeforge to the framework support table - #196

Merged
Jegp merged 1 commit into
neuromorphs:mainfrom
w4ffl35:add-spikeforge-to-support-table
Sep 18, 2026
Merged

Jegp merged 1 commit into
neuromorphs:mainfrom
w4ffl35:add-spikeforge-to-support-table

Conversation

@w4ffl35

@w4ffl35 w4ffl35 commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

Adds spikeforge (BSD-3-Clause, pip install spikeforge) to the framework support table. It's an SNN toolkit built on snnTorch/PyTorch that reads and writes NIR through spikeforge.nir_bridge.

One thing I'd like your judgement on, rather than quietly ticking the box.

I've marked Read from NIR as ✓, but spikeforge's read path differs from the other rows and you may prefer ⬚. The other frameworks import a NIR graph into their own native model. spikeforge loads the graph and executes it directly through an independent interpreter — it does not reconstruct a native module:

from spikeforge.nir_bridge.ingest import load_external, interpret_file

graph = load_external("model.nir")       # NIRGraph, from any framework
result = interpret_file("model.nir", spikes)   # executed, never touching snnTorch

So a NIR file written by Norse or snnTorch runs in spikeforge and produces outputs, which I think is what the column means to a user — but it is genuinely not "convert to native". Happy to change it to ⬚ if you read the column the other way. Any node kind outside the shared vocabulary raises a typed error naming the node rather than being skipped.

Write is the conventional direction: to_nir(spec, module) emits a graph, verified against the 20-node conv_net preset.

Why the row might be worth having beyond one more entry: spikeforge re-executes every exported graph through that same independent interpreter and reports per-tensor numerical drift against the source model, so an export can be validated rather than assumed. As far as I can tell none of the listed frameworks does this, and it's a NIR-specific capability rather than a general feature:

pip install "spikeforge[nir]"
spikeforge-verify validate --topology conv_net

That exits non-zero outside tolerance. On conv_net today the worst deviation is 1.4e-07 mean-abs on the lif1 membrane.

Examples column: every other row points at a neuroir.org docs page. spikeforge has none, so I've linked the runnable example in-repo (examples/04_nir_export_validate.py, verified end to end on a clean install). If you'd like a proper docs page in the NIR docs tree instead, I'm glad to write one in a follow-up PR — I didn't want to add pages to your docs uninvited in a first contribution.

Docs: https://docs.spikeforge.net/interpreter-spine

w4ffl35 added a commit to Capsize-Games/spikeforge that referenced this pull request Sep 15, 2026
NIR framework support table: neuromorphs/NIR#196
Open Neuromorphic software guide: open-neuromorphic.github.io#504

Both were filed after spikeforge 0.3.5 reached PyPI, so a reviewer clicking
through from either submission lands on the corrected project page rather
than the one with thirty dead links.

The NIR pull request departs from the draft on one cell. The draft assumed a
plain tick for Read from NIR; spikeforge loads a graph and executes it
through the independent interpreter rather than reconstructing a native
module, which is not what the other rows mean. The pull request says so and
invites the maintainers to mark it hollow instead. Overclaiming a cell in
the table this project's positioning rests on would cost more than the row
is worth.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
w4ffl35 added a commit to Capsize-Games/spikeforge that referenced this pull request Sep 16, 2026
NIR framework support table: neuromorphs/NIR#196
Open Neuromorphic software guide: open-neuromorphic.github.io#504

Both were filed after spikeforge 0.3.5 reached PyPI, so a reviewer clicking
through from either submission lands on the corrected project page rather
than the one with thirty dead links.

The NIR pull request departs from the draft on one cell. The draft assumed a
plain tick for Read from NIR; spikeforge loads a graph and executes it
through the independent interpreter rather than reconstructing a native
module, which is not what the other rows mean. The pull request says so and
invites the maintainers to mark it hollow instead. Overclaiming a cell in
the table this project's positioning rests on would cost more than the row
is worth.

@Jegp Jegp left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the addition. I appreciate your question about the interpretation of reading/writing, but we're very loose here: if you can load a graph and run if, I'd tick the box, no matter how you do it. Same for writing.

I see you're using snnTorch behind the scenes, but what I think sets spikeforge apart is that you could use another simulator one day, the API isn't strictly tied to a simulator.

I'm happy to approve and merge as-is. My only suggestion would be to add an example in the example pages so it's clear how your framework is used. Basically, you can just copy in the code you wrote in this PR :-)

@Jegp
Jegp merged commit da0551d into neuromorphs:main Sep 18, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants