Skip to content

News

SocNetV v3.7 Released

SocNetV v3.7 released! 🎉

We are happy to announce the release of SocNetV v3.7!

This release adds two new centrality measures (Katz and Bonacich Power Centrality), Node and Graph Connectivity analysis, a geodesic distance distribution report, shortest-path reconstruction and canvas highlighting, automatic viewport auto-fit, and CSV export for nearly every analysis report. It also fixes a major responsiveness problem — layouts and analyses on large networks used to freeze the whole app solid. Read on for details.

🔍 What’s New in SocNetV v3.7?

🧮 Katz Centrality (KC)

A new Analyze → Centrality → Katz Centrality measure gives each actor credit for indirect connections, not just direct ones — a friend-of-a-friend still counts, just discounted the further away they are, controlled by an attenuation factor alpha that you choose. It’s especially useful when ordinary Eigenvector Centrality collapses to zero on directed or disconnected networks. SocNetV estimates the valid range for alpha before showing the dialog and rejects values that wouldn’t converge — no guessing required. Full parity with every other prominence index: HTML/CSV reports, all four Layout → By Prominence Index variants, Filter Nodes by Centrality, Find Node by index score, and the prominence distribution chart.

⚖️ Bonacich Power Centrality (BPC)

A new Analyze → Centrality → Bonacich Power Centrality measure extends Katz with a second parameter, beta, that — unlike alpha — is allowed to be negative. This captures Bonacich’s signature idea: being tied to well-connected others doesn’t always help. In a bargaining or exchange network, being connected to powerful partners can actually reduce your own power, and BPC scores can come out negative to reflect that — a first among SocNetV’s centrality measures. Same full parity as Katz across reports, layouts, filtering, and charting.

🔗 Node and Graph Connectivity

Two new analyses under Analyze → Cohesion. Node Connectivity computes the minimum number of other nodes that must be removed to disconnect two chosen actors — a low number flags a structural vulnerability, a high number means many independent routes exist between them. Graph Connectivity answers the same question network-wide: the fewest nodes that would need to be removed to disconnect the network at its single weakest point. On directed networks, both let you choose whether to respect edge direction (strong) or ignore it (weak), matching the same choice already offered by Connectedness.

📊 Geodesic Distance Distribution

A new Analyze → Cohesion → Geodesic Distribution report answers “how many pairs of nodes are exactly d hops apart?” with a full distance-by-distance breakdown across the network. It reuses the all-pairs shortest-path cache from any prior distance or centrality computation, so it’s fast when that cache is already warm.

🧭 Shortest Path Reconstruction and Canvas Highlighting

Analyze → Cohesion → Distance no longer just reports a number — it now shows the full sequence of intermediate nodes along the shortest path (e.g. Alice → Carol → Bob), using BFS for unweighted networks and Dijkstra for weighted ones. The path’s edges are simultaneously selected on the canvas, exactly as if you’d Shift-clicked each one — letting you immediately move, inspect, or right-click the whole path without hunting for it visually.

🖼️ Viewport Auto-Fit

The canvas now automatically scales and centers to show the full network after every layout algorithm, after opening a file, and after generating a random network — and re-fits when the window is resized. No more “where did my network go?” after a layout or a window drag. Zoom buttons, Ctrl+scroll, and Reset (Ctrl+0) are reliable at any zoom level, and small networks are never scaled beyond 100%.

📤 CSV Export for Analysis Reports

A new Settings → Reports → Output format option (HTML/CSV) covers nearly every report in the Analyze menu — all matrix reports, every centrality and prestige index, reciprocity, eccentricity, clustering coefficient, and triad census. CSV is a lean, table-only alternative that opens directly in your spreadsheet app instead of the built-in report viewer. Clique Census and Hierarchical Clustering remain HTML-only, since both combine several heterogeneous sub-tables that don’t reduce to one flat table.

⌨️ Expanded CLI Scripting

The command-line interface gained a new --encoding flag (load a file with a specific text codec, bypassing the encoding-picker dialog) and --interactive-script mode, which drives SocNetV from a plain-text script — one command per line. Over twenty new script commands were added, covering relation switching, network generation, incremental graph building (add-node, add-edge, add-relation), and a headless report command for every centrality and prestige measure — letting the whole Analyze menu be scripted and benchmarked without clicking through the UI.

🌳 Faster Clique Census

The Bron–Kerbosch maximal-clique algorithm now uses Tomita et al.’s pivot-selection strategy, which can reduce the number of branches explored per recursive step to a single candidate on dense graphs — a dramatic speedup on real-world networks, with no change to the set of cliques reported.


⚡ The app no longer freezes during layouts and analysis

This is the headline fix of the release. Running a force-directed or prominence-index layout, or almost any weighted-centrality/distance report (Closeness, Betweenness, Stress, Power, Eccentricity, the distance and geodesics matrices, similarity/Pearson reports, and more), used to make the entire application completely unresponsive for the whole computation — no repainting, no input, not even a response to window-manager requests — on large networks or slower indices like Betweenness or Information Centrality.

The app now stays fully responsive throughout: a “please wait” status-bar message and busy cursor, plus a progress dialog with a Cancel button. Information Centrality, Eigenvector Centrality, and Walks Total — which sit outside the shared distance engine — got the same treatment separately.

Clearing a large network (loading a new file over one already open, or File → New) is also fixed: what used to take 30+ seconds on a 2,000-node/40,000-edge network now completes quickly, thanks to a bulk-teardown path and a fix for an accidental full-canvas repaint triggered by a combo-box state sync.


🛠 Other Improvements

  • An eight-commit cleanup pass on the canvas rendering internals (GraphicsWidget) improved both performance (single-probe hash lookups, merged selection queries, allocation-free edge keys) and correctness (fixed a double-free in guide-item cleanup, a dangling-pointer bug, Select All using the wrong coordinate space, and the rotation slider double-applying its transform).
  • Canvas zoom now anchors to wherever you last panned, instead of jumping back to the network’s center.
  • Auto-fit no longer over-shrinks networks that are only marginally larger than the canvas — it now matches the same tight, margin-free fit as Reset (Ctrl+0) in that case.
  • Custom node images (Edit → Node → Change shape → Custom) with a non-square aspect ratio are now scaled proportionally and centered, instead of being stretched to fill the node.
  • Misleading “session only” labels were removed from several preferences that were actually persisted between sessions.

🐛 Notable Bug Fixes

  • Bezier curve edges are now correctly applied on startup — they previously always rendered as straight lines until toggled once in Settings.
  • Removing one direction of a reciprocated edge no longer deletes both directions — it now always correctly downgrades to a single directed arc.
  • Hierarchical Clustering Analysis now uses BFS on unweighted networks instead of always running Dijkstra, matching every other distance-based analysis.
  • Erdős–Rényi random network generation now respects low edge probabilities (e.g. 0.01) instead of always producing zero edges.
  • Singular (non-invertible) matrices are now correctly reported as such in the Inverse Adjacency Matrix report, instead of showing meaningless huge numbers.
  • The canvas no longer silently falls back to slow software rendering — OpenGL is now enabled automatically, with a manual override still available in Settings → Canvas.
  • The Statistics Panel edge count is now correct while a node filter is active, and stays correct after the filter is cleared.
  • “Focus on Node” (Ego Network) now works correctly when applied to the very first node in a network.
  • Several rare crashes on app quit were fixed, including a dangling-pointer double-free found via AddressSanitizer.

Download SocNetV v3.7 from our Downloads page and let us know what you think!

Happy analyzing!
— The SocNetV Team

SocNetV v3.6 Released

SocNetV v3.6 released! 🎉

We are happy to announce the release of SocNetV v3.6!

This release adds a multi-condition Query Builder filter, subgraph extraction, four new export formats (UCINET DL, GraphViz DOT, weighted and simple edge lists), connected-component colouring, Clustering Coefficient node colouring, and working Bezier curve edges. Analysis of large networks is also noticeably faster — read on for details.

🔍 What’s New in SocNetV v3.6?

🔎 Query Builder — multi-condition filtering

A new Filter → Filter by Query… action opens the Query Builder dialog. You can add as many conditions as you like (pick an attribute, an operator, and a value), and only nodes or edges matching all of them will be shown. It works alongside the existing Filter Bar — the result appears as a removable chip, just like any other filter.

✂️ Subgraph Extraction

A new Edit → Subgraphs submenu lets you save a piece of your network as a separate file:

  • Save visible nodes as subgraph… — saves whatever is currently visible on the canvas (after filters) as an independent network file.
  • Save selected nodes as subgraph… — same, but only for selected nodes.

Your original network is never modified.

📤 Four New Export Formats

You can now export your network to four additional formats:

  • UCINET DL — compatible with UCINET and other tools that read the DL format. Multi-relation networks are fully supported.
  • GraphViz DOT — exports node positions, colours, shapes, and custom attributes. You can reload the exported file back into SocNetV and get exactly the same network.
  • Weighted Edge List — a simple text file with one source target weight per line.
  • Simple Edge List — same, without the weights.

The Save Subgraph As… dialog now also offers all these formats (previously it was limited to GraphML, Pajek, and Adjacency).

🎨 Connected-Component Colouring

A new Layout → Node Color by Connected Component action colours each node according to its connected component — nodes in the same component share the same colour. This makes it immediately obvious when your network is split into disconnected parts. The Analyze → Cohesion → Connectedness report now also tells you how many components the network has.

📐 Clustering Coefficient Node Colouring

Layout → Node Color → Clustering Coefficient colours nodes by their local clustering coefficient using the same blue-to-red gradient used by all other centrality measures. It is also available in the Filter Nodes by Centrality dialog and the distribution chart.

〰️ Bezier Curve Edges — now actually working

The Options → Edges → Bezier Curves toggle has been in the menu since v3.4 but never did anything. It is now fully working: edges draw as smooth curves, arrowheads point in the right direction even on reciprocated pairs, and the setting is remembered across sessions.

⚙️ Zero-weight Edge Settings

  • A new Settings → Edges → Show zero-weight edges checkbox (on by default) lets you hide zero-weight edges on load — useful when your data file contains them but you don’t want them cluttering the canvas.
  • The zero-weight edge colour picker in Settings now actually works (it was wired up in the UI but had no effect before).

↔️ Configurable Arrow Size

A new Settings → Edges → Arrow size control lets you make arrowheads bigger or smaller. The change applies immediately to all edges and is remembered for future sessions.


⚡ Faster analysis on large networks

All centrality and distance computations (betweenness, closeness, eccentricity, and others) now use all available CPU cores instead of just one. The numbers below are from our tests on a 12-core Linux machine:

NetworkCentralities computedBeforeAfter
Directed, 500 nodes, 1 219 edgesyes679 ms255 ms
1 000 nodes, 10 000 edgesno28 423 ms3 431 ms
1 000 nodes, 10 000 edgesyes47 020 ms5 949 ms

Large networks (2 000+ nodes, 40 000+ edges) are also smoother to navigate — selecting, dragging, and rubber-band selection no longer slow to a crawl.


🛠 Other Improvements

  • The Layout section of the Control Panel no longer has “Apply” buttons — layout changes take effect as soon as you make a selection.
  • The Statistics Panel on the right is now divided into collapsible sections, so you can hide the parts you don’t need.
  • Node and edge toolbar actions now behave sensibly when multiple items are selected: one item selected opens its properties dialog, multiple selected opens a bulk-edit dialog.
  • The left Control Panel now scrolls when vertical space is tight (e.g. when the Data Table dock is open) instead of overlapping its own widgets.
  • The status bar now shows a “Computing… please wait” message whenever the app is doing something that takes a moment, so you always know it is working.

🐛 Notable Bug Fixes

  • UCINET DL two-mode networks now load correctly (node counts, node numbers, and labels were all wrong before).
  • Galaskiewicz famous network now loads correctly — a missing data file in the app bundle was causing it to silently fail.
  • Edge mode (directed/undirected) now correctly switches back when you change relation — each relation remembers its own setting.
  • Zero-weight edges were being counted in several analyses where they shouldn’t have been (density, reciprocity, clustering coefficient, shortest paths). All fixed.
  • Shift+click on a node now adds it to the current selection instead of replacing it.
  • GraphViz DOT files exported by SocNetV could silently drop the first node when reloaded, producing wrong edges. Fixed.
  • Multi-relation networks where the first relation had no weights but a later one did were incorrectly reported as unweighted throughout the app. Fixed.
  • Several keyboard shortcut conflicts between actions were resolved.

Download SocNetV v3.6 from our Downloads page and let us know what you think!

Happy analyzing!
— The SocNetV Team

SocNetV v3.5 Released

SocNetV v3.5 released! 🎉

We are excited to announce the release of SocNetV v3.5, the most feature-rich release in the project’s history!

This release introduces graph exploration filters, a new ego-centered radial layout, a complete node/edge attribute system, a live data table dock with inline editing, and structured CSV/JSON export and import — unlocking a full roundtrip workflow between SocNetV and external spreadsheet tools.

🔍 What’s New in SocNetV v3.5?

🔎 Graph Exploration Filters

A new set of non-destructive, snapshot/restore filters lets you focus on the parts of the network that matter:

  • Focus on Node (Ego Network): hides all nodes except the selected node and its direct neighbors, and all non-incident edges. Available in the Filter menu and node right-click context menu.
  • Focus on Selection: hides all nodes not in the current selection and all edges whose endpoints are not both selected (Ctrl+X, Ctrl+S).
  • Restore All Nodes: restores all nodes hidden by any filter (ego network, selection, or centrality). Available in Filter menu and right-click context menu.
  • Restore All Edges: re-enables all edges hidden by the weight filter (Ctrl+E, Ctrl+R).
  • All node-visibility filters share a unified non-destructive snapshot/restore history stack — Restore All works across all filter types.

🌐 Ego-centered Radial Layout

A new layout places a selected node at the canvas center, its 1-hop out-neighbors on an inner ring, and all remaining nodes on an outer ring. Available via the Layout menu (Ctrl+Alt+E) and node right-click context menu.

🏷 Node/Edge Attribute System

SocNetV now supports arbitrary custom attributes on both nodes and edges:

  • Set and remove custom key/value pairs on any node or edge via the Properties dialogs.
  • Edge Properties dialog: edit label, weight, color, and arbitrary custom key/value pairs — accessible from the toolbar and edge right-click context menu.
  • GraphML roundtrip: custom node and edge attributes are fully saved and reloaded when working with GraphML files.
  • Filter Nodes By Attribute: a non-destructive filter available in the Filter menu (Ctrl+X, Ctrl+A) lets you show only nodes matching a key/value condition.

⚙️ Attribute-based Filtering

  • Filter conditions support scope (Nodes, Edges, or Both), key, operator (= > < contains), and value.
  • A dedicated dialog lets you select a scope, pick from existing attribute keys, choose an operator, and enter a value.
  • Edges can also be filtered by attribute, using the same snapshot/restore stack as node filters. Numeric values are compared numerically; text values are compared lexicographically.
  • A filter combo in the Control Panel and a dedicated toolbar filter group give one-click access to all filter actions.

🏷 Filter Bar with Chips

  • A persistent Filter Bar strip sits between the toolbar and canvas; it is hidden when no filter is active and appears automatically when any filter is applied.
  • Each active filter condition is shown as a labelled chip (e.g. Nodes: ego network, Edges: weight filter, Nodes: type = investor).
  • Clicking × on the most recently applied chip removes it and reverts that one filter step.
  • The “Clear all” button removes all active filters in one click.
  • All five filter actions produce chips: centrality, ego network, selection, attribute, and edge weight.

📋 Node/Edge Data Table Dock

  • A new dockable Data Table panel (Ctrl+T, also in Options and Edit menus) with two tabs — Nodes and Edges.
  • Nodes tab: columns for number, label, visibility, shape, size, and color — plus one column per custom attribute key. Label, size, color, and custom attribute cells are inline-editable (double-click).
  • Edges tab: columns for source, target, relation, weight, label, and color — plus custom attributes. Weight, label, color, and custom attribute cells are editable.
  • All edits write back to the graph immediately.
  • Live search bar filters all columns (case-insensitive); column headers are sortable; a Refresh button reloads data from the current graph.
  • The panel auto-refreshes on file load and graph reset when it is open.

📤 Structured CSV/JSON Export

  • Each tab in the Data Table dock has Export CSV and Export JSON buttons — they export the currently visible (search-filtered) rows.
  • Network → Export to other... gains four new actions: Nodes as CSV, Edges as CSV, Nodes as JSON, Edges as JSON — these always export all rows.

📥 Structured CSV/JSON Attribute Import

  • Import node or edge attributes from a CSV or JSON file via the Import buttons in the Data Table dock.
  • A preview dialog shows the first rows of the file and lets you map columns: choose which column holds the node ID (or the source/target for edges).
  • Standard columns (Label, Size, Color for nodes; Weight, Label, Color for edges) are routed to their proper fields; all other columns become custom attributes.
  • The table auto-refreshes after import.
  • Supports a full lossless export→import roundtrip: re-importing an exported file produces no duplicate columns and no data loss.

📊 Spreadsheet-based Bulk Attribute Editing

Export the data table to CSV or JSON, edit it freely in any spreadsheet tool (Excel, LibreOffice, Google Sheets), and re-import to update attributes in bulk. Each node or edge can carry different values — unlike in-app bulk operations which assign one value to many.

⚡ Improvements

  • Fruchterman-Reingold layout: significantly faster on large graphs thanks to pre-cached adjacency lookups, better initial placement, and early convergence detection.
  • Kamada-Kawai layout: particles that drift out of bounds are now clamped to the canvas instead of being teleported randomly.

🐛 Bug Fixes

  • Fixed Kamada-Kawai crash when node filters are active.
  • Fixed crash on graph reset when an edge had already been removed.
  • Fixed filter history stack not being cleared on graph clear / application reset.
  • Fixed custom node attribute key/id mismatch in GraphML export.
  • Fixed Pajek parser: use default node shape as fallback when no Pajek shape keyword is present.
  • Fixed hierarchical clustering dialog signal/slot mismatch.
  • Fixed Node Properties dialog UX issues for custom attributes.
  • Fixed triad census appending stale zeros on repeated runs.

We’d like to thank our contributors and users for reporting issues, testing fixes, and helping SocNetV improve with every release. 🙏

Download SocNetV v3.5 from our Download page and let us know what you think!

Happy analyzing!
— The SocNetV Team

SocNetV v3.4 Released

SocNetV v3.4 Screenshot

SocNetV v3.4 released! 🎉

We are happy to announce the release of SocNetV v3.4, the latest version of our cross-platform social network analysis and visualization software.

This release focuses on stability and correctness, with a comprehensive overhaul of progress/cancel handling across all computation paths, significant parser and layout fixes, and the completion of the IO/Parser architectural refactor started in v3.3.

🔍 What’s New in SocNetV v3.4?

⏹ Comprehensive Cancel support in progress dialogs (#52)

This has been one of the longest-standing issues in SocNetV. In v3.4, the Cancel button in progress dialogs now works correctly and consistently across all computation paths:

  • Centrality and prestige computations
  • Reachability and walks
  • Matrix and report generation
  • Layout algorithms (including Kamada-Kawai)
  • Clique census and subgraph construction
  • All random network generators (Erdős–Rényi, Small-World, Scale-Free, Regular, Lattice, Ring-Lattice)

📐 Force-directed layout fixes

  • Fixed division-by-zero, NaN/Inf, and logic errors in the Kamada-Kawai layout (#198)
  • Fixed Fruchterman-Reingold simmering temperature derivation from canvas size (#199)
  • Faithful reimplementation of the Eades (1984) Spring Embedder (#207)
  • Batched node position emissions in all force-directed layouts for smoother rendering (#205, #206)

📥 Parser and IO fixes

Many import/export edge cases resolved:

  • Pajek *Matrix header parsing for relation labels (#188)
  • Pajek multirelational export as *Matrix blocks (#184)
  • Normalized quoted relation names in Pajek headers (#185)
  • Inline GML node/edge block parsing (#186)
  • Arc doubling when loading undirected DOT graphs (#187)
  • Platform-dependent weighted=true from uninitialized variable in DOT parser (#189)
  • Two-mode sociomatrix import now correctly handled in the parser (#15)

📊 Centrality fixes

  • Fixed eigenvector centrality isolate reset and N==0 handling (#202)
  • Fixed Information Centrality isolate handling and degenerate cases (#201)
  • Fixed clustering coefficient computation for directed networks (#58)
  • Fixed wrong weighted flag when switching relations (#82)

🏗 Completed IO/Parser refactor (WS4)

The architectural refactor of the IO/Parser layer, started in v3.3, is now complete:

  • The monolithic parser.cpp (~5500 LOC) has been split into focused per-format modules: edgelist, adjacency, UCINET DL, DOT, GML, Pajek, GraphML
  • An explicit IGraphParseSink mutation surface replaces the old Qt signal fan-out
  • GUI and headless (socnetv-cli) loading paths now share an identical, deterministic mutation pipeline

🧪 Expanded regression harness

  • New io_roundtrip kernel (schema v5) for IO/parser regression protection
  • Many new golden comparison cases and small deterministic test networks
  • New helper scripts: run_io_roundtrip_shipped_datasets.sh, run_golden_io_roundtrip.sh

🌐 i18n

  • Added update_translations.sh script for maintainers
  • Updated DE and ES translation files

🛠 Build and packaging

  • Debian packaging switched to CMake build system
  • RPM spec updated for CMake (Fedora, openSUSE, Mageia)
  • CMake now generates .qm translation files via qt_add_lrelease

We’d like to thank our contributors and users for reporting issues, testing fixes, and helping SocNetV improve with every release. 🙏

Download SocNetV v3.4 from our Download page and let us know what you think!

Happy analyzing!
— The SocNetV Team

SocNetV v3.3 Released

SocNetV v3.3 Screenshot

SocNetV v3.3 released! 🎉

We are excited to announce the release of SocNetV v3.3, the latest version of our cross-platform social network analysis and visualization software.

This release focuses on robustness and long-term maintainability, with major improvements under the hood — while also adding a useful new feature for researchers working with centrality and prestige.

🔍 What’s New in SocNetV v3.3?

🧱 Major internal refactor: Graph is now a façade SocNetV’s Graph has been refactored into a façade/coordinator, with functionality split into focused modules under src/graph/*.
This makes the codebase easier to extend and safer to evolve without breaking behavior.

📏 DistanceEngine stabilized + deterministic regression guardrails We extracted and stabilized DistanceEngine, and added:

  • deterministic “golden” regression outputs
  • performance benchmark guardrails to help keep refactors honest over time

🧪 New headless regression harness: SocNetV v3.3 introduces socnetv-cli, a modular regression harness designed to protect algorithmic correctness during refactors. It supports schema-versioned JSON outputs and committed baselines, with kernels for:

  • distance (v1)
  • reachability (v2)
  • walks matrix (v3)
  • prominence (v4)

🎯 New feature: filter vertices by centrality & prestige indices You can now filter vertices based on their centrality and prestige scores — a great way to focus analysis on the most important actors in your networks.

filter vertices by centrality

📥 Import / parsing fixes A lot of edge cases were fixed to make importing more reliable:

  • Pajek mixed files with overlapping *Arcs/*Edges blocks
  • UCINET/DL edge cases (line wrapping, diagonal handling)

🧮 Walks computation fixes Fixes in walksBetween() and walks-matrix parameters improve correctness and consistency of walk-based measures.

🛠 Build, packaging, and UI polish

  • cross-platform build & packaging fixes (Qt6/CMake, Debian packaging updates, openSUSE spec fixes, macOS arm64 linker fix)
  • UI polish for disabled widgets and checkbox/radio styling

We’d like to thank our contributors and users for reporting issues, suggesting features, and helping SocNetV improve with every release. 🙏

Download SocNetV v3.3 from our Download page and let us know what you think!

Happy analyzing!
— The SocNetV Team