The graph
Explore how the companies, sessions, people, places and fields of Web Summit Lisbon 2026 connect: start from one, expand, filter, rank, and ask how one company is connected to another.
The newsroom's graph, to explore: 1,441 nodes and 2,510 edges in four worlds (the summit's programme, the people, the industry, the evidence), joined by named verbs, each with its inverse. It starts from a question, never from the whole: a company, a session, a person, or the most important nodes by a ranking you choose.
How to use it
- Find a node by name, then expand it one hop at a time, or set the depth of the walk around it (the explore stepper of graphs.sgit.ai's reader).
- Anchor the nodes you start from: anchors are pinned to the edges of the canvas and held through every layout, so a path between two anchors reads left to right.
- How is A connected to B? Name two nodes and the explorer finds up to three shortest paths, each read as a sentence with its verbs (
Replit is filed under Developer tools; Developer tools classifies LaunchDarkly). - Top: keep the N most important nodes, by PageRank, betweenness or degree over the whole graph, or the N edges that carry the most shortest paths (edge betweenness): the bridges.
- Filters, at four levels: worlds, types, verbs, and facets (day, organiser Web Summit or other, field, country).
- Layouts: force, the map (the whole graph laid out once at build, so a large view draws at once), radial (rings by hops from the anchors), layered by world, tree, grid, and a list. A view of more than 200 nodes uses the map's positions.
- The panel shows the selected node's record, every connection read as a sentence with its source and the date it was read, and a link to its page.
- The URL holds the state, so a view can be shared.
Its address
| Parameter | Example | Meaning |
|---|---|---|
view | whole, industry, summit, people, companies/replit, events/<slug>, people/<slug> | the universe: a view of the whole graph from /api/v1/graph/ |
focus, depth | company:replit, 2 | the node to explore from and how many hops (max for all) |
anchors | company:replit,company:cloudflare | pinned start nodes |
expand | person:michele-catasta | nodes expanded by one hop |
path | company:replit~company:cloudflare | the paths between two nodes |
top, by, what | 60, betweenness, edges | the top N nodes (or edges) by a ranking |
worlds, types, verbs | industry,people, company,person, speaks_at | what to show (default: all) |
facets | date:2026-11-10;organiser:web-summit;category:security;country:Portugal | facet filters |
layout, sel | radial, company:replit | the layout and the selected node |
For a chat or an agent
The graph answers commands through the page's tool API (window.__tool, registered through window.__toolQueue), from this page or any other: off this page, the view commands return the explorer's address with the state they ask for (or open it, with open: true); graph.query, graph.search, graph.select and graph.path answer anywhere.
graph.load({view}): show a view: whole, industry, summit, people, or companies/<slug>, events/<slug>, people/<slug>graph.focus({id, depth?}): explore from one node (an id such as company:replit, or a name), depth hops (default 1, "max" for all)graph.expand({id}): add a node's neighbours, one hop, without moving what is already drawngraph.filter({types?, verbs?, worlds?, facets?, reset?}): what to show; facets: {date, organiser, kind, category, country, track}graph.anchors({ids, mode?}): pin start nodes (mode set, add or clear); a two-anchor view reads left to rightgraph.top({n, by?, what?}): keep the top n nodes (or edges) by pagerank, betweenness or degree; n 0 clears; returns the rankinggraph.layout({name}): force, map (the whole graph's layout, computed at build), radial, layered, tree, grid or listgraph.path({from, to, max?, avoid?}): up to three shortest paths between two nodes, each with its verbs and as a sentencegraph.select({id}): select a node; returns its record, its connections with their sources, and its pagegraph.state({}): what is on screen: view, filters, anchors, focus, counts, the selection, the URLgraph.snapshot({full?}): the canvas as a PNG data URL, for the chat to attach as an imagegraph.query({type?, verb?, from?, to?, text?, limit?}): read: edges (with verb) or nodes (without) matching, over the whole graphgraph.search({text, type?, limit?}): read: nodes whose name matches, with their idsgraph.reset({}): back to the start view
The data
The explorer loads graph/explorer.json: the whole graph compact, with each node's degree, betweenness and PageRank and each edge's betweenness, computed at build. The views it starts from are the API's own: graph/whole.json, industry, summit, people, and one per company, event and person. The grammar: ontology.json (13 types, 20 verbs).
Where it comes from
The engine is ported from the universe reader on graphs.sgit.ai (code Apache-2.0): the explore walk and its degree stepper, the stable-add layout (a node already on the canvas does not move when others arrive), pinned slots for anchors, the focus ring, the path query, preset views and the snapshot a chat attaches. It draws with Cytoscape.js 3.30.2 (MIT, copyright the Cytoscape Consortium), vendored as graphs.sgit.ai vendors it: its licence.