Admittance Of Ignorance on Tid Fundamentals

Could someone give me a Venn Diagram of the Intersections of …

  • Tiddler
  • Shadow
  • System

And answer the important question of whether a non-System (no " $: prefix ") can be a Shadow?

TT

(idk why but…)
i think shadow means
user copy of system ?

in the case that definition is correct
non system(.tid) cannot hide in the …

  • A “shadow” tiddler is any tiddler that is “unpacked” at startup from an installed plugin. Each plugin contains one or more shadow tiddlers. Note that the TWCore system is actually contained in a plugin named $:/core that includes several thousand individual shadow tiddlers.

    • If you modify a shadow tiddler, it becomes a “real” tiddler that overrides the corresponding shadow tiddler. The original shadow definition still exists but is effectively ignored in favor of the real tiddler with the same name.

    • If you subsequently delete the modified tiddler, the original definition “emerges from the shadows” (hence the name!).

    • Shadow tiddlers cannot be deleted. This ensures that the essential tiddlers needed by the TWCore system are always available, so you can’t accidentally “brick” your running TiddlyWiki.

  • A “real” tiddler is any tiddler that you create using the TiddlyWiki interface.

    • Note that if you start with the default empty TiddlyWiki, it does not have any real tiddlers. You can confirm this by viewing the “Recent” or “More>All” tabs in the sidebar.
  • A “system” tiddler is any tiddler (real or shadow) whose title begins with $:/.

    • Tiddlers with this prefix are omitted from the tabbed lists in the sidebar (except for the “More>System” and “More>Shadows” tabs). They are also omitted from the sidebar search results.

    • You can use the “$:/AdvancedSearch>Shadows” tab to search for shadow tiddlers. You can also use the “$:/AdvancedSearch>Filter” tab by starting your filter syntax with [all[shadows]...] or [all[tiddlers+shadows]...]

    • Most shadow tiddlers begin with $:/, but there are some exceptions. For example, in the default empty TiddlyWiki, the default “GettingStarted” tiddler is a shadow, but does not begin with $:/. You can confirm this by attempting to edit it. You will get the “You are about to edit a ShadowTiddler.” warning message.

-e

3 Likes

Right! That was where I first realized I must be confused.

So a “shadow” is a “startup hard-code, created primary Tiddler?” that can be changed in the post-booting?

Something like that?

tiddlers inside a plugin are also shadow tiddlers, and are usually but not always need to be system tiddlers.

shadow tiddlers are in fact tiddlers stored in another tiddler in json format with a plugin-type field set. tiddlywiki makes them appear to be seperate tiddlers when you edit a shadow tiddlers it becomes a seperate real tiddler, see the is and all operators for the details.

          TidShadowSystemVenn

Everything is either a plain tiddler or a shadow tiddler. Nothing is both. Some plain tiddlers are system tiddlers, some are not. Some shadow tiddlers are system tiddlers, some are not.

That’s an odd perspective on it, I think. Think of a shadow tiddler as one that it embedded in a plugin. Although there are additional subtleties, you can think of a plugin as simply a bundled set of tiddlers. Any tiddler in there is a shadow. These shadows – the ones inside the plugin/bundle – are not editable from within the wiki. But if you create a plain tiddler with the same title, you hide the one from the plugin. The minute you delete that one, the plugin one is used instead.

2 Likes

Thank you @EricShulman, that’s a really helpful explanation… I’ve been wanting to ask the question to which this is a great answer for a while now!

1 Like

That is great!

Can you include that One Plain Tiddler (Getting Started) is a Shadow Tiddler in that Venn?

My suggested tweak to the venn, which really only alters the shapes a bit - hopefully making it visually clearer that some shadows are replaced by plain tids, and that the majority of the system is shadow

I’ve made the plain be largest, not because it is (it’s obv not for most people), but because it has the potential to be. The number of shadows and system tids only grow slowly (installation of new plugins, or new TW releases), whilst the number of plain can grow easily at any time

2025-10-22T23:12:28_0da36750

4 Likes

Oh, that’s much nicer than mine! I don’t create many Venn diagrams, and I couldn’t think of a way to make it work with circles, because I always assumed I’d have to include the intersection. This feels simpler to me. And I didn’t like my initial Tiddler/Shadow/System and replaced them with Plain Tiddler/Shadow Tiddler/System Tiddler rather than your much simpler Plain/Shadow/System.

I think you made the right call about the sizes. Plain is what we generally deal with most. Although I swear I spend more time in Plain/System tweaks than in just Plain. Maybe that’s just me. (And @CodaCoder :slight_smile: .)

1 Like

:astonished: Are you spying on me again? Either that or you’re extraordinarily perceptive… :male_detective:

I have open, not in the Story River, 3 Plain tiddlers. In the Story River, 17 System tiddlers (home-grown).

Your name above was a link to When the joys become pitfalls, which somehow this morning came back to my attention.

That sounds like an entirely reasonable ratio.

Really, who needs content when infrastructure is so much fun? :stuck_out_tongue_closed_eyes:

Shadow tiddlers come entirely from plugins. If you disable a plugin, they are gone from the shadow-store.

The GettingStarted tiddler is part of the $:/core, which is a plugin as Eric mentioned already.
See: The GettingStarted code at Github

Plugins can contain any tiddler titles → So shadows can have any title.

But as a convention we try to avoid to use unprefixed shadow tiddlers, because they are impossible to “kill” for users.

There is one exception in the $:/core … That’s the GettingStarted tiddler. Since it does not have a modified or created field, it does not show up in the Recent tab. … That’s intentional.

1 Like

I have a vague memory of learning once that proper/formal venn diagrams - the sort you’d submit to a scientific paper, follow some reasonably well defined guidelines and that what most of the internet call ‘venn diagrams’ are in fact not (and probably have some other name). But “Venn” works :smiley:

I did consider ways to show the intersection of plain+shadow, but decided it made it all too messy and ultimately it would either be obvious enough by the overlap look, or it wouldn’t matter if it wasn’t.

My motivation to simplify the labels was honestly mostly driven by my distaste of “tiddler” as a word - if not for that I probably would have just copied the same labels! lol.

Got it. It is clever! It (GettingStarted) did confuse me.
Now I know.

Tx, TT

Could you explain what you mean by that? The only thing that seems to be odd about GettingStarted is that there is no warning if you try to override it; it just lets you. But your new one is still shadowing the core version, and if you delete yours the core one is again available.

I mean that there is no way to delete GettingStarted other than overwriting it. But it can not be removed, by design.

That makes perfect sense, since every user created edition should have its own GettingStarted tiddler, which is specific to the edition. And if they have none, the default one does not hurt.

If you start from https://tiddlywiki.com/empty and then attempt to edit the default GettingStarted tiddler, you definitely DO get a warning. If you’ve already overridden GettingStarted, then there is no further warning.

-e

Ok, just as with any shadow tiddler, then. I thought you meant something more radical than that.

Ok, but if you simply create a new tiddler with that title, you don’t get the usual warning of:

Target tiddler already exists: GettingStarted

I feel as though that is just an oversight, that somehow it should show that. Anyone know if there is a logical reason that it doesn’t?

The “Target tiddler already exists: …” message originates in $:/core/ui/EditTemplate/title, which uses this logic:

<$list filter="[{!!draft.title}!is[missing]]" variable="listItem">
<div class="tc-message-box">

{{$:/core/images/warning}}&#32;{{$:/language/EditTemplate/Title/Exists/Prompt}}:&#32;<$link to={{!!draft.title}} />

</div>
</$list>

The problem is that !is[missing] (which is equivalent to is[tiddler]) only checks for the existence of real tiddlers, not shadows. If the filter is changed to

<$list filter="[{!!draft.title}has[title]]" variable="listItem">

then it will also detect existing shadow tiddlers.

In addition, in order to show a suitable warning message, we should change:

{{$:/core/images/warning}}&#32;{{$:/language/EditTemplate/Title/Exists/Prompt}}:&#32;<$link to={{!!draft.title}} />

to something like this:

<$list filter="[{!!draft.title}is[shadow]]" variable="listItem">
{{$:/core/images/warning}}&#32;{{$:/language/EditTemplate/Shadow/Warning}}:&#32;<$link to={{{ [{!!draft.title}shadowsource[]] }}} />
</$list>
<$list filter="[{!!draft.title}!is[shadow]]" variable="listItem">
{{$:/core/images/warning}}&#32;{{$:/language/EditTemplate/Title/Exists/Prompt}}:&#32;<$link to={{!!draft.title}} />
</$list>

-e

1 Like