{"id":353496,"date":"2026-08-26T20:11:43","date_gmt":"2026-08-26T20:11:43","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/nv-oos-graphify\/"},"modified":"2026-08-26T20:22:10","modified_gmt":"2026-08-26T20:22:10","slug":"nvoos-content-graph","status":"publish","type":"plugin","link":"https:\/\/fur.wordpress.org\/plugins\/nvoos-content-graph\/","author":17440330,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.3","stable_tag":"1.0.3","tested":"7.1","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"NV oOS Content Graph","header_author":"NV Digital Solutions","header_description":"Visual knowledge graph for WordPress. Maps your content into an interactive, navigable graph. Zero API keys required.","assets_banners_color":"06102b","last_updated":"2026-08-26 20:22:10","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/nvdigitalsolutions\/nvoos-content-graph","header_author_uri":"https:\/\/nvdigitalsolutions.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":49,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.3":{"tag":"1.0.3","author":"vsamtani","date":"2026-08-26 20:22:10","revision":3667765}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3667805,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3667805,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3667764,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3667764,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"nvoos-content-graph\/graph":{"name":"nvoos-content-graph\/graph","title":"Graph"}},"tagged_versions":["1.0.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3667764,"resolution":"1","location":"assets","locale":"","width":1280,"height":830},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3667764,"resolution":"2","location":"assets","locale":"","width":1238,"height":902},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3667764,"resolution":"3","location":"assets","locale":"","width":1238,"height":835},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3667764,"resolution":"4","location":"assets","locale":"","width":1238,"height":1706},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3667764,"resolution":"5","location":"assets","locale":"","width":1440,"height":1448},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3667764,"resolution":"6","location":"assets","locale":"","width":1238,"height":676}},"screenshots":{"1":"Knowledge Graph \u2014 main explorer view","2":"Settings \u2014 build schedule, auto-rebuild, and display options","3":"Remote Sources \u2014 connect external data (Wikidata, REST APIs, RSS)","4":"Sources \u2014 choose which post types and content types are indexed","5":"Frontend embed \u2014 the [nvoos_graph] shortcode on any page","6":"Graph Explorer \u2014 interactive Cytoscape.js visualization with search and node details"}},"plugin_section":[],"plugin_tags":[43908,252560,277721,12087,11590],"plugin_category":[],"plugin_contributors":[277722],"plugin_business_model":[],"class_list":["post-353496","plugin","type-plugin","status-publish","hentry","plugin_tags-content-strategy","plugin_tags-content-visualization","plugin_tags-cytoscape","plugin_tags-knowledge-graph","plugin_tags-semantic-web","plugin_contributors-vsamtani","plugin_committers-vsamtani"],"banners":{"banner":"https:\/\/ps.w.org\/nvoos-content-graph\/assets\/banner-772x250.png?rev=3667764","banner_2x":"https:\/\/ps.w.org\/nvoos-content-graph\/assets\/banner-1544x500.png?rev=3667764","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/nvoos-content-graph\/assets\/icon-128x128.png?rev=3667805","icon_2x":"https:\/\/ps.w.org\/nvoos-content-graph\/assets\/icon-256x256.png?rev=3667805","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/nvoos-content-graph\/assets\/screenshot-1.png?rev=3667764","caption":"Knowledge Graph \u2014 main explorer view"},{"src":"https:\/\/ps.w.org\/nvoos-content-graph\/assets\/screenshot-2.png?rev=3667764","caption":"Settings \u2014 build schedule, auto-rebuild, and display options"},{"src":"https:\/\/ps.w.org\/nvoos-content-graph\/assets\/screenshot-3.png?rev=3667764","caption":"Remote Sources \u2014 connect external data (Wikidata, REST APIs, RSS)"},{"src":"https:\/\/ps.w.org\/nvoos-content-graph\/assets\/screenshot-4.png?rev=3667764","caption":"Sources \u2014 choose which post types and content types are indexed"},{"src":"https:\/\/ps.w.org\/nvoos-content-graph\/assets\/screenshot-5.png?rev=3667764","caption":"Frontend embed \u2014 the [nvoos_graph] shortcode on any page"},{"src":"https:\/\/ps.w.org\/nvoos-content-graph\/assets\/screenshot-6.png?rev=3667764","caption":"Graph Explorer \u2014 interactive Cytoscape.js visualization with search and node details"}],"raw_content":"<!--section=description-->\n<p>NV oOS Content Graph transforms your WordPress content into a visual knowledge graph \u2014 organized, searchable, and interactive. Every post, page, category, tag, and author becomes a node; every relationship becomes an edge.<\/p>\n\n<p><strong>No API keys. No AI required.<\/strong> The core graph engine runs entirely on your WordPress server using your existing content. Optional remote sources (like Wikidata) are opt-in \u2014 see External services below.<\/p>\n\n<h3>What You Get<\/h3>\n\n<h4>One-Click Graph Builder<\/h4>\n\n<p>Click \"Build Graph\" and ~10-30 seconds later, your entire site becomes a visual graph. Supports incremental rebuilds and scheduled cron updates.<\/p>\n\n<h4>Interactive Graph Explorer<\/h4>\n\n<p>Explore your content visually using Cytoscape.js. Search for nodes by label, click for details, zoom and pan. Color-coded by content type (posts, pages, terms, users).<\/p>\n\n<h4>Content Gap Analysis<\/h4>\n\n<p>Discover orphan content (no internal links), thin topic clusters, and missing link opportunities. Generate actionable content strategy recommendations.<\/p>\n\n<h4>Six Export Formats<\/h4>\n\n<p>Download your graph as JSON (NetworkX), GraphML (Gephi\/yEd), CSV, Neo4j Cypher, Obsidian vault, or standalone HTML page.<\/p>\n\n<h4>Schema.org JSON-LD<\/h4>\n\n<p>Automatic structured data injection for SEO \u2014 taxonomy terms as <code>about<\/code> and internal links as <code>relatedLink<\/code>.<\/p>\n\n<h4>Related Content Widget<\/h4>\n\n<p>Appends graph-neighbor posts to your content based on knowledge graph proximity.<\/p>\n\n<h4>REST API<\/h4>\n\n<p>Full programmatic access with 14 endpoints. Read endpoints require the <code>read<\/code> capability (all logged-in users) or a valid guest token (guest tokens are provided by the NV oOS base plugin when installed); write endpoints require <code>manage_options<\/code>.<\/p>\n\n<h4>Extensible Tool System<\/h4>\n\n<p>14 built-in tools for graph operations: query, search, traverse, analyze, export. Addon plugins can register their own tools.<\/p>\n\n<h3>Addon Ecosystem (all optional)<\/h3>\n\n<ul>\n<li><strong>nvoos-content-graph-ai<\/strong> \u2014 AI chat assistant with 13 AI providers, AI tools, embeddings, RAG, and agent memory<\/li>\n<li><strong>nvoos-content-graph-ai-platform<\/strong> \u2014 agents, skills, slash-commands, professions, A2A, ACP, and federation<\/li>\n<\/ul>\n\n<h3>Privacy Notice<\/h3>\n\n<p>This plugin does not collect, store, or transmit any personal data by default. The core graph engine runs entirely on your WordPress server using your existing content.<\/p>\n\n<p><strong>Remote Sources (opt-in only):<\/strong> When you explicitly configure a remote source driver (e.g. Wikidata, REST API, RSS feed), the plugin sends HTTP requests to the URLs you provide. No data is sent off-site without your explicit setup. Remote source credentials (API keys, tokens, passwords) are stored in the database encrypted with AES-256-GCM via the OpenSSL PHP extension, falling back to base64 encoding with an admin warning when OpenSSL is unavailable.<\/p>\n\n<p><strong>Optional AI Addons:<\/strong> The companion plugin <code>nvoos-content-graph-ai<\/code> (not included in this plugin) sends content to third-party AI providers (OpenAI, Google Gemini, etc.) when configured. Refer to that addon's documentation for its privacy policies.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin does not require any external service for its core functionality. All graph data is computed and stored on your own WordPress server.<\/p>\n\n<p><strong>Wikidata (wikidata.org)<\/strong><\/p>\n\n<p>The optional \"Resolve External Entity\" tool and the Wikidata remote-source driver query the Wikidata API (<code>https:\/\/www.wikidata.org\/w\/api.php<\/code>) \u2014 only when you explicitly request an entity lookup by QID (e.g. Q42) or configure a Wikidata source.<\/p>\n\n<ul>\n<li><strong>What is sent:<\/strong> the QID or entity identifier you provide, plus standard HTTP request metadata (your server's IP address, user agent).<\/li>\n<li><strong>When:<\/strong> only on your explicit request; never automatically or in the background.<\/li>\n<li><strong>What it is used for:<\/strong> fetching the entity's label, description, and sitelinks so it can be ingested as a graph node.<\/li>\n<li><strong>Service provider:<\/strong> Wikimedia Foundation \u2014 Terms of Use: https:\/\/foundation.wikimedia.org\/wiki\/Policy:Terms_of_Use \u2014 Privacy Policy: https:\/\/foundation.wikimedia.org\/wiki\/Policy:Privacy_policy<\/li>\n<\/ul>\n\n<p><strong>User-configured remote sources (opt-in only)<\/strong><\/p>\n\n<p>When you configure a remote source driver (REST API, RSS\/Sitemap feed, SPARQL endpoint, webhook receiver, etc.) in Settings, the plugin sends HTTP requests to the URLs you provide. What is sent depends entirely on the endpoint you configure. These requests happen only when you manually trigger a sync, schedule one, or receive a webhook. Remote source credentials (API keys, tokens, passwords) are stored in the database encrypted with AES-256-GCM via the OpenSSL PHP extension.<\/p>\n\n<h3>Third-Party Libraries<\/h3>\n\n<p>This plugin bundles the following open-source libraries:<\/p>\n\n<ul>\n<li><strong>Cytoscape.js<\/strong> v3.28.1 \u2014 MIT License \u2014 https:\/\/github.com\/cytoscape\/cytoscape.js<\/li>\n<li><strong>cytoscape-fcose<\/strong> v2.2.0 \u2014 MIT License \u2014 https:\/\/github.com\/iVis-at-Bilkent\/cytoscape.js-fcose<\/li>\n<\/ul>\n\n<p>Both libraries are served locally from <code>assets\/vendor\/<\/code> and never loaded from third-party CDNs.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>nvoos-content-graph<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the 'Plugins' menu<\/li>\n<li>Go to <strong>Knowledge Graph \u2192 Settings<\/strong><\/li>\n<li>Click \"Build Graph\"<\/li>\n<\/ol>\n\n<p>That's it. Your content is now a knowledge graph.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20api%20key%3F\"><h3>Do I need an API key?<\/h3><\/dt>\n<dd><p>No. The core graph engine works with zero external dependencies. AI features require their respective addon plugins and API keys.<\/p><\/dd>\n<dt id=\"how%20long%20does%20a%20build%20take%3F\"><h3>How long does a build take?<\/h3><\/dt>\n<dd><p>~10-30 seconds for a typical WordPress site (100-500 posts). Large sites (10,000+ posts) may take 1-2 minutes.<\/p><\/dd>\n<dt id=\"can%20i%20build%20incrementally%3F\"><h3>Can I build incrementally?<\/h3><\/dt>\n<dd><p>Yes. Enable \"Incremental Builds\" in settings to only process content changed since the last build.<\/p><\/dd>\n<dt id=\"is%20this%20compatible%20with%20my%20theme%3F\"><h3>Is this compatible with my theme?<\/h3><\/dt>\n<dd><p>Yes. The graph explorer, shortcode, related content widget, and schema.org injection work with any theme. The shortcode <code>[nvoos_graph]<\/code> embeds wherever you place it.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20custom%20post%20types%3F\"><h3>Does it work with custom post types?<\/h3><\/dt>\n<dd><p>Yes. Any public post type (including JetEngine CPTs) is automatically detected. You can configure which post types to index in Settings.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20connect%20to%20external%20services%3F\"><h3>Does the plugin connect to external services?<\/h3><\/dt>\n<dd><p>The core graph engine runs entirely on your server. The optional \"Resolve External Entity\" tool queries Wikidata (wikidata.org) when you explicitly ask it to look up a QID. Remote source drivers connect to user-configured endpoints (REST APIs, RSS feeds, SPARQL, etc.) only when you set them up in Settings. See the External services section below for full details.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20multisite%3F\"><h3>Does it work on multisite?<\/h3><\/dt>\n<dd><p>Yes. The plugin supports WordPress multisite with per-site configuration.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20deactivate%3F\"><h3>What happens if I deactivate?<\/h3><\/dt>\n<dd><p>Cron schedules are cleared. Your data stays intact \u2014 reactivate at any time.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20uninstall%3F\"><h3>What happens if I uninstall?<\/h3><\/dt>\n<dd><p>All custom tables and options are removed (see <code>uninstall.php<\/code>). Export your graph first if you want to keep it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.3 \u2014 2026-08-20<\/h4>\n\n<ul>\n<li>Encrypt remote-source credentials (AES-256-GCM) before storing them<\/li>\n<li>Fix <code>[nvoos_graph]<\/code> shortcode and block embed (invalid inline script)<\/li>\n<li>Wire the Scheduled Rebuild setting to WP-Cron (new \"Never\" option)<\/li>\n<li>Fix the admin Test button and REST \/test endpoint (now use per-source credentials)<\/li>\n<li>Reject unknown drivers and sanitize config in both source-creation paths<\/li>\n<li>Re-validate redirects against the SSRF guard<\/li>\n<li>Preserve external_id, source_slug, confidence, and expires_at on node updates<\/li>\n<li>Remote Sources modal now renders schema field types correctly<\/li>\n<li>Remove the unregistered Graph Explorer admin page (embedded in Settings)<\/li>\n<li>Ship the Composer autoloader intact in distribution builds<\/li>\n<li>Restrict tool-level auto-ingest to administrators<\/li>\n<li>Add WordPress.org screenshot assets (.wordpress-org\/assets)<\/li>\n<\/ul>\n\n<h4>1.0.2 \u2014 2026-08-18<\/h4>\n\n<ul>\n<li>Renamed from \"NV oOS Graphify\" to \"NV oOS Content Graph\" (new slug <code>nvoos-content-graph<\/code>)<\/li>\n<li>Hardened Schema.org JSON-LD output against script-tag breakout<\/li>\n<li>Restricted REST <code>\/resolve<\/code> auto-ingest to administrators<\/li>\n<li>Replaced inline admin JavaScript with enqueued asset<\/li>\n<li>Added external-services disclosure (Wikidata terms and privacy policy)<\/li>\n<li>Field-map validation is now self-contained (no legacy addon dependency)<\/li>\n<li>Embeddings reindexing bridges to the AI addon's embedding service<\/li>\n<\/ul>\n\n<h4>1.0.0 \u2014 2026-06-05<\/h4>\n\n<ul>\n<li>Initial standalone release<\/li>\n<li>PSR-4 architecture: <code>NvoosContentGraph\\<\/code> namespace<\/li>\n<li>5 custom database tables with dbDelta() migrations<\/li>\n<li>14 built-in tools implementing <code>NvoosContentGraph\\Contracts\\Tool<\/code><\/li>\n<li>14 REST API endpoints at <code>\/wp-json\/nvoos-content-graph\/v1\/<\/code><\/li>\n<li>Cytoscape.js graph explorer (admin + frontend)<\/li>\n<li>Tabbed settings page with per-tab sanitisation<\/li>\n<li>6 export formats (JSON, GraphML, CSV, Neo4j, Obsidian, HTML)<\/li>\n<li>Schema.org JSON-LD injection for SEO<\/li>\n<li>Related content widget based on graph proximity<\/li>\n<li>Louvain community detection + content gap analysis<\/li>\n<li><code>[nvoos_graph]<\/code> shortcode + Gutenberg block<\/li>\n<li>JetEngine Custom Content Type (CCT) support<\/li>\n<li>WordPress multisite compatible<\/li>\n<li>PHP 8.1+, WordPress 6.5+, GPL-3.0-or-later<\/li>\n<\/ul>","raw_excerpt":"Map your WordPress content into an interactive knowledge graph. See relationships between posts, terms, and authors. No API keys required.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/353496","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=353496"}],"author":[{"embeddable":true,"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vsamtani"}],"wp:attachment":[{"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=353496"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=353496"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=353496"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=353496"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=353496"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=353496"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}