FlowTracker, a Java agent that tracks data flowing through Java programs.
It helps you understand where any program got its output from, what it means, and why it wrote it.<p>Watch the video or explore the live demo yourself, and read how it works at <a href="https://github.com/coekie/flowtracker">https://github.com/coekie/flowtracker</a>
Cool! I wrote something on the same spirit but for Clojure, called FlowStorm <a href="http://www.flow-storm.org/" rel="nofollow">http://www.flow-storm.org/</a><p>For instrumentation, instead of an instrumenting agent it uses a fork of the official Clojure compiler (in Clojure you can easily swap compilers at dev) that adds extra bytecode. What is interesting about recording Clojure programs execution is that most values are immutable, so you can snapshot them by just retaining the pointers.<p>Edit: Since the OP demo is about exploring a web app for people interested in this topics I'm leaving a demo of FlowStorm debugging a web app also <a href="https://www.youtube.com/watch?v=h8AFpZkAwPo" rel="nofollow">https://www.youtube.com/watch?v=h8AFpZkAwPo</a>
This is incredibly cool.<p>I love how good the tooling is in the java/jvm ecosystem.
Last time I was this blown away was with jitwatch ( <a href="https://github.com/AdoptOpenJDK/jitwatch">https://github.com/AdoptOpenJDK/jitwatch</a> )<p>FlowTracker reminds me a little of taint analysis, which is used for tracking unvalidated user inputs or secrets through a program, making sure it is not leaked or used without validation.<p>search keywords are "dynamic taint tracking/analysis"<p><a href="https://github.com/gmu-swe/phosphor">https://github.com/gmu-swe/phosphor</a><p><a href="https://github.com/soot-oss/SootUp">https://github.com/soot-oss/SootUp</a><p><a href="https://github.com/feliam/klee-taint">https://github.com/feliam/klee-taint</a>
Blown away by the demo tracking an HTML element back to the <i>SQL statement that added that value to the database</i>.<p>I can totally see a future where tools like this are the first line of defense when troubleshooting bugs.
I am not really sure if I get the full picture and how it might be used - but it somehow reminds me of a Smalltalk environment where I can also inspect everything (all are objects and messages and you can trace back and interact with it those).
Years ago I experimented[1] with a similar concept (wanting something like JavaScript source maps, but for HTML). I didn't manage to find the time to expand on it, but I think web developer tooling would really benefit from this sort of full-stack attribution.<p>Integration of any solution like this into existing frameworks feels like a big challenge.<p>[1] HTML Source Maps - <a href="https://github.com/connorjclark/html-source-maps">https://github.com/connorjclark/html-source-maps</a> <a href="https://docs.google.com/document/d/19XYWiPL9h9vA6QcOrGV9NfkrPZ8r_irDb2C1mI1lqIQ/edit" rel="nofollow">https://docs.google.com/document/d/19XYWiPL9h9vA6QcOrGV9Nfkr...</a>
This reminds me (in the best way possible) of the Eve-lang demos of debugging a program by simply asking "why is <the UI element> <i>not</i> here?" Fantastic work!<p><a href="https://www.youtube.com/watch?v=TWAMr72VaaU&t=164s" rel="nofollow">https://www.youtube.com/watch?v=TWAMr72VaaU&t=164s</a> and <a href="https://witheve.com/" rel="nofollow">https://witheve.com/</a>
Once I had the vision to track data over the internet, like where came the image from, on which cdn was it.
Or "what did this string have seen from creation till it reached my screen".
This is a step into this direction.
Thanks for this!<p>Been trying to get this work with VSCode with a project I'm trying to make sense of. Having to take a pause on it right now, but looking forward to getting it working and playing with it.