Tinderbox Forum

A Tinderbox Zettelkasten starter file

You want to use command-option drag. This drags a link to the reference to Tinderbox; Tinderbox recognizes the link and grabs the rest of the information.


Further quirk in the drag+reference is that when usingCmd+Opt+Drag, ensuring the Cmd+Opt are depressed before the drag starts (otherwise different data is loaded). This is a constraint in the design of Bookends so you just have to act as described.

More on [Bookends & Tinderbox](http://Use a Cmd+Opt+Drag, ensuring the Cmd+Opt are depressed before the drag starts (otherwise different data is loaded).

1 Like

Astonishing! it works perfectly, Many thanks

1 Like

@talazem, I echo the others in complementing you for a job well-done. A very impressive illustration of how TinderBox could be used for a Zettelkasten. I’m new to both Zettelkasten and TinderBox, so trying to unravel what you did has been a helpful way for me to learn more about both. Thank you!

I do have one question for you and anyone else interested (fair warning: I’m a total novice and still have my training wheels on):

You have used an Attribute Browser to display notes by keyword. I thought this was a clever and interesting approach–and that wasn’t where my instincts had taken me. My instincts had taken me down the path of using Agents to ‘filter’ notes by keyword. So, I’m wondering what the advantages/disadvantages to each approach might be?

Regarding Agents:
I’m envisioning…
*Having a container (e.g., “Keyword Register”) with a set of agents for each keyword I’d like to use (#keyword1, #keyword2, #keyword3, etc).
*Then, when I create a note, I could include any relevant keywords (e.g., “#keyword1; #keyword2”) in the text of the note as a ZipLink to the Agent.
*Setting the query for each agent to return any notes that feature the designated keyword.

If I’m thinking clearly and understanding things properly, this would deliver the following benefits:

  1. I could leverage Map view in multiple keywords to organize information visually. (i.e., if NoteZ had a different meaning in the context of “#keyword1” and “#keyword3”, that could be reflected visually in both).

  2. Using the ZipLink feature would enable me to use Hyperbolic view.

  3. Using the ZipLink feature would ensure I don’t mis-type keywords (i.e., by typing “[[#” I would be presented only with a menu of legitimate keywords to use).

  4. I could still view/sort the notes in Outline view if I used a mechanism for automatically numbering them as you have done.

I’m sure I’m missing either some big cons to using Agents or some big “pros” to using the attribute browser approach. Hoping for some crowd wisdom to help me understand it better!

Attribute browser and an agent are simply different visualisations of the underlying metadata (even if the ‘metadata’ is just title and text of a note). A better/worse binary evaluation will not help you as the productive question is the context to which each is suited. Even then personal style, the information being studies and the user’s preferred working view type(s) are all factors.

One context where agents work, but scale poorly visually and functionally, is if you have a lot of keywords. 5-10 agents, fine. But, if you’ve 100s of keywords it all gets a but of a pain, even with prototypes you help with some of the customisation.

By comparison, if an agent searches one (or more) attributes for a particular value match, then Attribute Browser does the same search and returns all matches segmented by value. A close but not exact similarity would be all the agents, expanded to show contents, in an outline. Except Attribute Browser can do more in terms of sorting, counting and other tricks.

The two can live side-by-side. Tinderbox’s support from incremental formalisation means there’s no penalty (bar a little editing work) if you change your approach later.

I would say that if you know you will have more than, say, 20 keywords, I personally would experiment with agents but not build that our as a visualisation route as you’ll need a big screen to make sense of it all, apart from any factors.

For your agent logic, as the AB view is like a meta-agent, it can perform the same task as all the agents but within one tab (albeit some vertical scrolling maybe needed. Indeed, you don’t need to use an agent for this (re hyperbolic view), you could just use action code to link notes to a per-keyword note.

As to your list:

  1. You can do the same in an AB view or multiple discrete agents. You get to the same end point, noting the nuances I described above.
  2. Yes. Be aware Ziplinks are not a type of link but rather a method for making text links. Hyperbolic view omits links with no links, so making links (via the ziplink method or otherwise) would be be needed for the notes to show up.
  3. Not tested, but I believe that holds true.
  4. Yes.

No, you’re simply over-committing before understanding how these things work. Step back, make a small TBX as a deliberate test so you can understand what works best and whether you want one both. Then you can implement better-understood ideas into your actual projects.

At outset, the latter advice will seem like ‘extra work’. But, the upside is you don’t end up with your actual work littered with the cruft or failed/abandoned experiments. Another upside of testing things first outside your main app is it helps practice abstraction - you don’t want to put more into the test than you need (extra work!) so it gets you thinking about structure and metadata in your actual source material and how best to reflect it.

It is absolutely OK to work with a map and notes with nothing by title and text, with a few agents. But that is barely scratching the surface of the app. Don’t worry if you don’t understand it all at outset: Tinderbox is a big toolbox. Plus the forum is here if you get stuck.

1 Like

I’m glad you and others have found it useful, @ashley_wollam.

In an earlier version, I had indeed created a new note for each keyword. This was done automatically by Tinderbox whenever I populated the keyword attribute pane in a note.

In the end, I decided against this for a number of reasons.

  1. The Attribute Browser is built-in, and does what I wanted well — to serve as an index. This returns back to the philosophy of Luhmann’s Zettelkasten that I adopted for this file. In other words, I use keywords for a very limited and specific purpose: not as ‘tags’ per se, but as entry points into the note collection. From there I explore the neighbouring notes and notes connected by links.

  2. Using agents is taxing on the file, increasingly using the processing power of the computer as the number of attributes increase. Again, I’d rather leave this to Attribute Browser.

  3. By putting keywords in the Text, rather than in the user-created key attributes, I lose all of the analytical abilities provided by Tinderbox that are premised on separating them into their own individual attributes.

I personally don’t use Map view for my Zettelkasten, which I see as a long-term, organically-growing collection of reading notes. Map view doesn’t help me here, due to its limitations. Hyperbolic view, on the other hand, is extremely useful, as it transverses collections.

Having said all that: mine is just one way to collect and engage with notes. In a smaller collection of notes (or within a given container), map view is very informative. It all comes down to what purpose you wish to use keywords in navigating your collection. It is worth trying what you propose, and see how it works for the way you think and engage with your notes!


This is very interesting and incredibly helpful in showing some things that can be done with Tinderbox. Thank you for sharing it.

I know that starting from an example like this goes against the TBX philosophy, in that it means the user is led to tackle a problem in a specific way, rather than seeing TBX as a tool that can be used in different ways but starting with this file might be an advantage over anything I have so far come up with myself. I guess it is useful because your way of organizing material is pretty much orthogonal to the way I was trying to organise my notes. So far, I have managed to use TBX to break one logjam in my writing, but I ended up using it merely as a repository of notes on materials between which I created unspecified links, but which got out of control as soon as the quantity of notes became more than I could see on a screen in map view (which was pretty soon).Your example is beginning to show me how I might be able to use it for organising materials more systematically. This file has a much more systematic structure for different types of note.

I have one very specific query. The three windows at the bottom of certain notes, showing inbound and outbound links and suggestions look invaluable, but how are they created? I know about creating links, so long as I am in map view, but where is the code for creating those windows listing this information? Presumably buried in one of the Prototypes or agents but for a newcomer, guidance would be useful. Sorry if it is in the documentation and I have not not found it yet. I have a lot more reading to do before I understand fully how this works.

Also, where in the notes is the code that names the References when they are created? I would like to try to edit it to see whether I can link it to Bookends, without using a BibTex key (I use that field in Bookends for something else) but so far haven’t worked out which expressions I need to change. It does not provide the visual map I like, but it might work better than what I have managed to do on my own.

One possible minor error. Right at the start of the User manual there is a link, https://zettelkasten.de/posts/overview/%23history-of-the-zettelkasten, but when I click on it, I get a broken link error message.

Pleased to hear it is of some help in creating your own solution.

As for the links pane on the bottom right, that is a (very helpful) feature of Tinderbox. You can toggle this view for any note, in any document, by selecting Window > Links in the menu bar (or use the keyboard shortcut cmd-7). As you can see, it shows you any inbound links, outbound links, and suggested links. Tremendously useful, and this particular instantiation of a Zettelkasten would not have been half as useful without it.

As for the code that names the References: in the document’s outline, under Utilities, go to Prototypes>Reference. This ‘Reference’ note is the prototypes for all references that get created. Open up the inspector for that note, and look under it’s Rule. You will see the code for setting the name of the note. Under the Edict of that prototype, you will also see the code that sets the BibTeXKey. So, yes, you can modify it there for your purposes.

You’re right about the broken link! Thank’s for bringing that to my attention. I’ll upload a corrected version of the file soon. In the meantime, the working link is https://zettelkasten.de/posts/overview/#history-of-the-zettelkasten.


I have a further question about the references. In Bookends, I have BibTeX enabled to the there is field called “Key” that has the bibtex keys. When I drag into the ZKN Tbx file, the code does not grab this key as the title. How does the edict in the Reference prototype work? I am confused about this code: if (ReferenceRIS.contains("U1 - (\S+)\s*")) { $BibTeXKey = $1; }
Can I modify this so dragging in from Bookends creates the desired effect?

Hi. welcome to the forum.

A reference dragged from Bookends uses the format you currently have selected for export. For example, I’ve selected a BibTex format in Bookends:

Note how the BibTeX key field is transferred across.

. If uncertain about this, check the Bookends manual or ask in its user forum

1 Like

Hello Amalie.

On my own machine, when I press drag-and-drop a reference from bookends while holding cmd and alt, the reference with all its metadata is imported, along with the BibTeX key. Then, a moment later, Tinderbox updates the title of the note to be the BibTeX key, via the Rule $Name="@"+$BibTeXKey. This rule is found in the Reference prototype, and thus inherited by every new Reference note created when you drag-and-drop.

I hope this helps. If not, could you please explain the steps you are taking?

I should just clarify that – in this Zettelkasten starter file – the format selected as default in Bookends doesn’t impact how a new Reference note is created in the Tinderbox Zettelkasten file. Nor does it affect the setting of the BibTeX key to serve as the title of that note, assuming the reference in Bookends has a BibTeX key.

What your default format does have an impact upon is what will show in the note pane of the Reference note created in Tinderbox. Like Mark pointed out in the image above, if your default format in Bookends is set to BibTeX, the note pane will import the reference in the format of a BibTeX entry. If your default format is set to, say, Turabian, the note pane will show it in that format.

Whatever export format you choose in Bookends, so long as you have a BibTeX key for that reference in Bookends, it will import it into this Tinderbox Zettelkasten file, and the Rule will then set the Title accordingly.

There’s a bit more here on Bookends → Tinderbox reference drags. Note, for technical reasons I don’t fully understand, in Bookends you must press the Cmd+Option (⌘+⌥) before you click to start the drag. Ideally, select the Bookends reference(s) to be dragged, then press ⌘+⌥ before clicking onto and dragging the selection.

Thanks Mark and Talal for your replies. Everything works as you describe except for one thing: when I Cmd+Option drag my reference from Bookends into the Zettelkasten starter file, the ZKN file does not successfully import the BibTex key as described, even though I have one set in Bookends. This seems like a nice feature to have so I was hoping to get it to work. So to summarize: I Cmd+Option drag a reference from Bookends in the ZKN file, Tbx makes a new note with the “Reference” prototype and imports all the metadata one would expect, except for the “Key” field from Bookends, which it does not import. Thus it seems that for me, the edict in the References prototype in the ZKN file is not working. Any thoughts? I’m using Bookends 13.4.2 and Tbx 8.7.1.

And thanks for this ZKN file, it’s really helpful.


Since you defined the Key field, of course, Tinderbox doesn’t know about it. But the full exported RIS data can be found in $ReferenceRIS, and it should be easy enough to use a regular expression to extract the data of interest.

1 Like

I’m using Tinderbox v8.7.1, Bookends v13.4.3, on macOS 10.14.3.

. I only updatedBookends today and both it and the previous version.

For my the key comes in, but as @eastgate notes, only in the $Text. In a test I added a String-type user attributes BibTeXKey and added it as a Key Attributes of the ‘References’ prototype. I then made a stamp called “Extract BibTeX key” (the name isn’t important) with this code:


The ‘if’ test populates a query back-reference with the Key string. Then in the ‘true’ branch of the ‘if’ code we set $BibTeXKey to that back-reference. Another approach is to use String.split(pattern). This shows there’s more than one way to go forward.

after the stamp:

Anyway, there’s one way to get the BibTeX key into an attribute.

If the key is not being imported in the first place, in Bookends open the toolbar at the bottom of the main pane and

  1. select the ‘formatted reference’ view
  2. select the BibTeX.fmt option
  3. check the key is shown

If you are unable to follow the steps above in you Bookends, it may be that your Bookends is not set yup correctly for this task. You can get advice on that in the Bookends user forum.

It was to ‘automate’ this I included the following code, as part of the Reference prototypes Edict:

if ($ReferenceRIS.contains("^U1 - (\S+)\s*$")) { $BibTeXKey = $1; };

What this does (in answer to Amalie’s original question above) is search $ReferenceRIS, and if it finds it a U1 string populated (U1 being Bookends’ default BibTeX field), then it copying it to the $BibTeXKey attribute.

Then, so long as in the reference note’s $Rule or $Edict, there is the aforementioned code $Name="@"+$BibTeXKey, the note’s name will take the value of the $BibTeXKey.

So, in summary, make sure the following is in your Reference prototype’s Edict:

if ($ReferenceRIS.contains("^U1 - (\S+)\s*$")) { $BibTeXKey = $1; };

(And if they are in the Edict, make sure that neither line is in the Rule.)


Apologies, I’d missed this. Nonetheless, it shows what a through job you did with your demo file. :slight_smile: Thanks.

Hi Talal,

Many thanks for providing this template file. I have started using the template and slowly populating my Zettelkasten.

I am very new to using Tinderbox, so what I am going to say might be stupid and I apologize for it. I have checked the Bookends Bibtex format and “u1” is the string that is used for the Key in my version of BE (13.4.3) and my TBX is 8.7.1 and I am on macOS Catalina 10.15.5. But no matter what I change for the Edict or Rule for Reference prototype, the BibTeXKey is not populated. I have to manually copy the key and paste it along with the value for ReferenceShortTitle.

Please let me know if I am making any silly mistake.

Again, many thanks for the starter TBX file.


Hello, Sai. I am glad to hear the template is proving useful!

You need to ensure that the export format that you are using in Bookends is set to export the u1 field. If it is not, just modify it in Bookends’ format manager to include the u1 filed. It is not an issue with Tinderbox or this starter file.

Let us know if this solves it for you.