<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[NODEWLKR]]></title><description><![CDATA[Obsidian digital garden]]></description><link>http://github.com/dylang/node-rss</link><image><url>site-lib/media/favicon.png</url><title>NODEWLKR</title><link></link></image><generator>Webpage HTML Export plugin for Obsidian</generator><lastBuildDate>Mon, 04 May 2026 16:22:04 GMT</lastBuildDate><atom:link href="site-lib/rss.xml" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 May 2026 16:22:03 GMT</pubDate><ttl>60</ttl><dc:creator></dc:creator><item><title><![CDATA[0. Welcome]]></title><description><![CDATA[<img alt="NODEWLKR" src="assets/nodewlkr.png" referrerpolicy="no-referrer" target="_self" style="max-width: 100%;">A Simple Solution To Creating NoCode FrameworksNODEWLKR is a node-based visual editor that compiles a graph of nodes into a
runnable C# script. The intended workflow: drop nodes from the sidebar onto the
canvas, wire their ports together, hit View Code, and copy the generated
file into your project<br>Created for <a data-tooltip-position="top" aria-label="https://store.steampowered.com/app/4098880/Database_Designer/" rel="noopener nofollow" class="external-link is-unresolved" href="https://store.steampowered.com/app/4098880/Database_Designer/" target="_self">Database Designer</a>, this was created to simplify the development process for C# programmers everywhere! Windows • Linux • macOS • Fully Offline • Auto Save • No BS
<br><img alt="Pasted image 20260504121254.png" src="photos/pasted-image-20260504121254.png" target="_self"><br> <a href="https://github.com/Walker-Industries-RnD/NodeWlkr" target="_self" rel="noopener nofollow" class="is-unresolved"><strong></strong></a>View on GitHub • <a href="https://walkerindustries.xyz" target="_self" rel="noopener nofollow" class="is-unresolved">Walker Industries</a> • <a href="https://discord.gg/H8h8scsxtH" target="_self" rel="noopener nofollow" class="is-unresolved">Discord</a> • <a href="https://www.patreon.com/walkerdev" target="_self" rel="noopener nofollow" class="is-unresolved">Patreon</a>
Graph:
Event Input "Name" → Concat "Hello " → Set Output
Output:public static string DoACoolThing(string Name)
{ var result = string.Concat("Hello ", Name); return result;
}
None required for usage.
Only standard .NET runtime for generated scripts.<br>Code: <a data-tooltip-position="top" aria-label="https://raw.githubusercontent.com/non-ai-licenses/non-ai-licenses/main/NON-AI-MPL-2.0" rel="noopener nofollow" class="external-link is-unresolved" href="https://raw.githubusercontent.com/non-ai-licenses/non-ai-licenses/main/NON-AI-MPL-2.0" target="_self">NON-AI MPL 2.0</a>
Artwork: © Kennaness — NO AI training. NO reproduction. NO exceptions.<br><img style="margin-left: 20px; margin-bottom: 20px;" align="center" src="https://github.com/Walker-Industries-RnD/Malicious-Affiliation-Ban/blob/main/WIBan.png?raw=true" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
Unauthorized use of the artwork — including but not limited to copying, distribution, modification, or inclusion in any machine-learning training dataset — is strictly prohibited and will be prosecuted to the fullest extent of the law.
]]></description><link>0.-welcome.html</link><guid isPermaLink="false">0. Welcome.md</guid><pubDate>Mon, 04 May 2026 16:21:42 GMT</pubDate><enclosure url="assets/nodewlkr.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;assets/nodewlkr.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[2. Introducing The UI]]></title><description><![CDATA[The window is split into three columns:<img alt="Pasted image 20260504115425.png" src="photos/pasted-image-20260504115425.png" target="_self">
The active session lives at %AppData%/NODEWLKR/Session.json by default; it's possible to create a function browser for a more advanced system.
Auto-save fires every 30 seconds when the session is dirty.
On load, the layout is anchored to the top-left of the canvas with 60 px
padding so it's always visible regardless of where it was when you saved.
Use Frame at any point to recentre.
Each port is a coloured dot:
Red - normal data port
Amber - required input (function generation will warn if left unconnected)
Purple - custom (user-defined) type
To connect: press on an output port and drag to release on an input port.
A connection is rejected if the two port
types are incompatible. Compatibility rules:
Identical semantic types match.
object matches anything.
number and int are interchangeable.
custom type "custom" matches when their CustomTypeNames are equal (or one
side is unspecified).
When a required input has no incoming connection, the source node displays a
warning banner and the generated code emits a // WARNING comment above
the offending block.<br><img alt="Pasted image 20260504115555.png" src="photos/pasted-image-20260504115555.png" target="_self">Toolbar "Replace" opens the search dialog. Pick:
Find node title to search for (drawn from the current session).
Get Port port name on that node whose connections you want preserved.
Replace With node from the library.
Replace Port port name on the replacement to remap connections to.
If left blank, the same port name is reused.
Buttons: Go runs the replace, Do To All &amp; Close runs and closes,
Cancel / ESC all dismiss the dialog. The result line shows
how many nodes changed and how many connections were dropped because the
replacement didn't carry a matching port type.<br><img alt="Pasted image 20260504115329.png" src="photos/pasted-image-20260504115329.png" target="_self">
Note right-click empty canvas Add Note. A free-floating yellow
text block. Useful for documenting a region.
Chunk right-click empty canvas Add Group. A coloured rectangle you
can drop nodes into. Right-click the chunk to rename, recolour, or delete.
Notes and chunks are saved with the session.<br><img alt="Pasted image 20260504120013.png" src="photos/pasted-image-20260504120013.png" target="_self">]]></description><link>2.-introducing-the-ui.html</link><guid isPermaLink="false">2. Introducing The UI.md</guid><pubDate>Mon, 04 May 2026 16:06:08 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[3. Understanding Node Logic]]></title><description><![CDATA[NODEWLKR comes with a number of basic logical nodes for creating C#.✦ Flow Event Input → function parameter (becomes method input) Custom Input → explicitly defined typed parameter Set Output → function return value ✦ Variables Get Variable → fetch from variable store Set Variable → write into variable store ✦ Math Add → A + B Subtract → A − B Multiply → A × B Divide → A ÷ B (throws if B = 0) ✦ Logic If → conditional branch (truthy / falsy) And → A &amp;&amp; B Or → A || B Not → !A Run After → enforces execution order Comparisons: Equals → A == B Not Equals → A != B Less Than → A &lt; B Greater Than → A &gt; B Less Or Equal → A ≤ B Greater Or Equal → A ≥ B Lambda → creates anonymous function expression ✦ String Concat → joins strings together Format → string.Format(template, args) ✦ Literals String Literal → constant text value Int Literal → integer constant Float Literal → decimal constant Bool Literal → true / false Null → empty reference JSON Literal → raw JSON object ✦ Objects Expose → read property from object (inspector-defined name) Cast → convert value to type (inspector-defined type) ]]></description><link>3.-understanding-node-logic.html</link><guid isPermaLink="false">3. Understanding Node Logic.md</guid><pubDate>Mon, 04 May 2026 16:05:18 GMT</pubDate></item><item><title><![CDATA[1. Stuff For Nerds (AKA How To Develop)]]></title><description><![CDATA[await NodeWalker.Operations.SaveSession(session, "myproject.json", "C:/Projects");
The session includes:
All nodes and their positions
All connections between nodes
Custom scripts you've created
Viewport state (pan/zoom)
Project-level using directives
Function name and async flag
var session = await NodeWalker.Operations.LoadSession("myproject.json", "C:/Projects");
bool exists = NodeWalker.Operations.CheckIfSessionFileExists("myproject.json", "C:/Projects");
public class Session
{ public string Name { get; set; } public string Description { get; set; } public HashSet&lt;BareNode&gt; Nodes { get; set; } public Dictionary&lt;string, Vector3&gt; NodePositions { get; set; } public HashSet&lt;Node.Connection&gt; Connections { get; set; } public List&lt;Chunk&gt; Chunk { get; set; } // Groups of nodes public List&lt;Note&gt; Notes { get; set; } // Text notes public List&lt;BareNode&gt; CustomScripts { get; set; } public string FunctionName { get; set; } // Generated method name public bool IsAsync { get; set; } // Generate async method public List&lt;string&gt; Usings { get; set; } // Custom using directives public double ViewOffsetX { get; set; } public double ViewOffsetY { get; set; } public double ViewZoom { get; set; }
} Reference NodeWalker - Include NodeWalker.cs in your project Compile a session to C# code: string csharpCode = NodeWalker.Compiler.CompileToScript(session);
Console.WriteLine(csharpCode);
For a graph with Event Input "Name" → Concat "Hello " → Set Output:using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; public static class MyProjectScript
{ public static string DoACoolThing(string Name) { // Event Input // Concat var result = string.Concat("Hello ", Name); // Set Output return result; }
}
Set session.IsAsync = true for async method generation:session.IsAsync = true;
string code = NodeWalker.Compiler.CompileToScript(session);
// Output: public static async Task&lt;T&gt; MethodName(...)
Add custom namespaces:session.Usings.Add("System.IO");
session.Usings.Add("MyNamespace");
// Appears at top of generated file
In the sidebar's CREATE CUSTOM NODE panel, enter a C# method signature:public string MyMethod(int count, string name)
Click Add Node from Script to create a node with:
Inputs: count (int), name (string)
Output: string
public class BareNode
{ public string Title { get; set; } public string Description { get; set; } public HashSet&lt;Input&gt; Inputs { get; set; } public HashSet&lt;Output&gt; Outputs { get; set; } public string Logic { get; set; } // Your C# code public string UUID { get; set; } public string SyncType { get; set; } // "Sync" or "Async"
}
// Required string input
new Input("Name", typeof(string), "string", true) // Optional object input
new Input("Value", typeof(object), "object", false) // String output
new Output("Result", typeof(string), "string") // Custom type output (e.g., HttpClient)
new Output("Client", typeof(object), "custom", "HttpClient")
Write C# code for the node:node.Title = "CalculateTotal";
node.Logic = @"
var total = items.Sum(x =&gt; x.Price);
return total * (1 + taxRate);
";
Generates:public static double CalculateTotal(IEnumerable&lt;Item&gt; items, double taxRate)
{ var total = items.Sum(x =&gt; x.Price); return total * (1 + taxRate);
}
Add custom nodes to session:var customNode = new BareNode
{ Title = "DoubleValue", Inputs = new HashSet&lt;Input&gt; { new Input("Value", typeof(int), "int", true) }, Outputs = new HashSet&lt;Output&gt; { new Output("Result", typeof(int), "int") }, Logic = "return Value * 2;"
};
session.CustomScripts.Add(customNode);
The ParseScript method converts C# signatures to nodes:InputParameter(int value, string name) → Two inputs
ReturnType MyMethod(...) → Output type
Nodes execute in topological order (respecting dependencies). The compiler sorts nodes by dependencies then generates code.
Variables stored in Dictionary&lt;string, object&gt; variables
Get Variable: variables["myVar"]
Set Variable: variables["myVar"] = value
Unconnected inputs use defaults:
string → ""
int → 0
double → 0 (or 1 for division)
bool → false
object → null Required inputs (amber) show warnings if unconnected
Optional inputs use default values when unconnected
]]></description><link>1.-stuff-for-nerds-(aka-how-to-develop).html</link><guid isPermaLink="false">1. Stuff For Nerds (AKA How To Develop).md</guid><pubDate>Mon, 04 May 2026 16:03:55 GMT</pubDate></item><item><title><![CDATA[5. Understanding Types And Custom Nodes]]></title><description><![CDATA[In the sidebar's CREATE CUSTOM NODE panel, paste a C# signature like:public string MyMethod(int a, string b)
Right-click and click Add Node from Script. The parser extracts the name, return
type, and parameters, and creates a node with matching ports plus a method
body with the code. Drop the node onto the canvas and edit its body
via right-click Edit Custom Node if you need to write real logic.The generator turns the node into:The generator currently doesn't understand static functions; this can easily be hand edited into scripts post generation.<img alt="Pasted image 20260504114819.png" src="photos/pasted-image-20260504114819.png" target="_self">The Literals category in the sidebar contains:
String Literal
Int Literal
Float Literal
Bool Literal
Null
Each renders an inline editor on the node to type the literal value directly.
The compiler escapes strings, suffixes floats with d, and emits the value at
the call site so it round-trips through the graph cleanly.You can type literals as JSON or strings; if you do JSON, the first line should be the name.<br><img alt="Pasted image 20260504114621.png" src="photos/pasted-image-20260504114621.png" target="_self">]]></description><link>5.-understanding-types-and-custom-nodes.html</link><guid isPermaLink="false">5. Understanding Types And Custom Nodes.md</guid><pubDate>Mon, 04 May 2026 16:01:41 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[4. Understanding Code Generation]]></title><description><![CDATA[View Code produces a complete, drop-in C# file:// SessionName
// 12 node(s), 17 connection(s) using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using &lt;project-level usings&gt;;
using &lt;usings hoisted out of every custom node&gt;; public static class SessionNameScript
{ /// &lt;summary&gt;Generated from: HandleValidation&lt;/summary&gt; public static string HandleValidation(string Username, string PasswordHash) { // your custom node body, with `using` lines stripped out } public static T DoACoolThing(string username, string password) { // emitted in topological order var HandleValidation_xxxxx_Result = HandleValidation(username, password); ... return result; }
}
Key points:
The output is a whole class, not a bare method body.
All using directives are deduplicated, sorted, and emitted at the top.
Custom-node titles become top-level methods, called from the main entry
point. A node titled MyMethod produces both MyMethod(...) (the function
definition) and a var Result = MyMethod(arg1, arg2); call site.
The main function is named from the fn toolbar field.
Nodes are emitted in topological order so locals are declared before use.
Cycles fall back to insertion order with a comment in the output.
Right-clicking the workspace and clicking Manage Usings opens a text box. One namespace
per line; leading using and trailing ; are tolerated. The compiler unions:
Always-present defaults: System, System.Collections.Generic,
System.Linq, System.Threading.Tasks.
Whatever you add here.
Anything matching using X.Y; inside any custom node's body
are lifted out of the node body and added to the file header.
<img alt="Pasted image 20260504115638.png" src="photos/pasted-image-20260504115638.png" target="_self">
]]></description><link>4.-understanding-code-generation.html</link><guid isPermaLink="false">4. Understanding Code Generation.md</guid><pubDate>Mon, 04 May 2026 16:01:14 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item></channel></rss>