Skip to content

Question

How can I inspect the contents of app-db? Perhaps from figwheel.

Short Answer

If at a REPL, inspect: re-frame.db/app-db.

If at the js console, that's window.re_frame.db.app_db.state.

If you want a visual browser of app-db, along with inspecting subpaths of app-db, and diffing changes, use re-frame-10x.

You are using cljs-devtools, right? If not, stop everything (unless you are using re-natal) and immediately make that happen.

Better Answer

Are you sure you need to?

First, you seldom want to inspect all of app-db. And, second, inspecting via a REPL might be clumsy.

Instead, you probably want to inspect a part of app-db. And you probably want to inspect it directly in the GUI itself, not off in a REPL.

Here is a useful technique from @escherize. Add something like this to the hiccup of your view ...

[:pre (with-out-str (pprint @interesting))] 

This assumes that @interesting is the value (ratom or subscription) you want to observe (note the @ in front).

pprint output is nice to read, but not compact. For a more compact view, do this:

[:pre (pr-str @some-atom)]   ;; NB: using pr-str instead of pprint

If you choose to use pprint then you'll need to require it within the ns of your view.cljs:

[cljs.pprint :refer [pprint]]

Finally, combining the short and long answers, you could even do this:

[:pre (with-out-str (pprint @re-frame.db/app-db))]    ;; see everything!

or

[:pre (with-out-str (pprint (:part @re-frame.db/app-db)))]    ;; see a part of it!

You definitely have clj-devtools installed now, right?

Other Inspection Tools

Another very strong tool is re-Frisk which provides a nice solution for navigating and inspecting your re-frame data structures.

@yogthos' json-html library provides a slick presentation, at the expense of more screen real estate, and the need to include specific CSS.