A downloadable tool for macOS and Linux

Welcome, writer! Tee-Wee is an editor (or authoring tool) for CYOA games, also known as choice-based or hypertext interactive fiction. These are text-based games made of passages with links between them, so that the story changes based on what players choose. As of 2020, many tools can make such games. Tee-Wee is different from them in a few ways:

  • It runs on your desktop; you don't need to be online for it.
  • It's very lightweight and fast.
  • It uses the same story formats and data as Twine 2.

Wait, what's Twine? It's the premier authoring tool for making games of this type, available at the twinery.org website. It's also free to use, and may be better for some people. As you can move your stories back and forth between Twine and Tee-Wee, there's no risk in trying them both and choosing later.

Tee-Wee can also publish completed games as stand-alone web pages, also through story formats made for Twine 2. It can only load a few of them for technical reasons; the recommended story format for Tee-Wee is Chapbook. See the official Chapbook documentation for how to use its various features.

The very first story made with Tee-Wee is Let's build a Chapbook.

As of mid-2022, Tee-Wee isn't actively used or developed. Treat it as a proof of concept. Feedback is still welcome (see below).


The latest version as of 27 October 2021 (after an 18-month wait) is 1.1, which comes with a number of important updates:

  • Access to the game options in metadata, so you can enable debug mode
  • Better looks when running under X11
  • Improved search that works across passages

The new version hasn't been tested much; see contact info inside the archive.

Older news have been moved to their own file.

Note: Running the editor in KDE with a dark theme can make parts of the UI unreadable, such as the file selection dialogs. This is outside of my control.

License and credits

Tee-Wee Editor is free and open source software under the Artistic License 2.0; a copy is included in the archive. It's made with knowledge gained from TkDocs.com and the official Twine specifications, with some details reverse-engineered from Tweego exports.

Many thanks to JigmeDatse for the bug reports and other feedback, and to all my friends for the encouragement.

PlatformsmacOS, Linux
Rated 1.0 out of 5 stars
(1 total ratings)
AuthorNo Time To Play
GenreInteractive Fiction
TagsText based, Twine, User Interface (UI)
Code licenseArtistic License 2.0
Asset licenseCreative Commons Zero v1.0 Universal
Average sessionAbout an hour
InputsKeyboard, Mouse


tee-wee-1_1.pyz 30 kB
tee-wee-1_0.pyz 30 kB
NEWS.md 863 bytes

Install instructions

Tee-Wee Editor requires a Python runtime, version 3.6 or newer. Python comes preinstalled on most Linux distributions; Windows and Mac users can get it from the python.org website. You'll also need the Tkinter module, which is bundled with most Windows and Mac runtimes. On Linux you might need to add it yourself: look in your package manager for something called "tkinter", "python-tk" or the like.

Tee-Wee Editor comes as a Python archive that can be opened directly with the interpreter, or you can unpack it and run __main__.py; it's just a zip file with a different extension.

Recommended screen resolution: 1024x768.

Development log


Log in with itch.io to leave a comment.


Fascinating project! Would be a nice alternative to electron... Electron has a LOT of issues.

Thank you! I ended up not using it, but it works, and could be revived if there's more interest.

I guess I should upgrade then...  :D

Fingers crossed!


Probably not until I go and start working on a Twine project.

I'm not sure if this works with other formats, but with working with Chapbook, I have discovered that we can enable debugging by adding the `options="debug"` when running a story.  I'm not sure if you'd want to have a "publish" and a "debug" button.  It doesn't work if you're using the 1.1.0 micro format (as expected, as that's the code that was removed to make it smaller), but if you don't use that smaller format, it works from what I can tell the same as the test button in the Twine editor.  

What I could do if it's not there already is give access to the story options field in metadata; it should have the same effect. But I'd rather not release a new version just for that. Thanks!


I'll take a look.  I just had to log out and back in because my system borked when trying a new to me game...  

It looks like the options field isn't available in the metadata.  I'd rather have something like that anyway, rather than having something specific to a single feature.  

Randomly came across your comment. I'm writing a story in the Chapbook format and would prefer to do so in a text editor but didn't know Backstage was an option in that case. Is it possible as you seem to say here? Can you please explain how? I'm able to compile and build from twee files using VS Code, but I would love to know how to add the Backstage feature. Currently I'm using Twine even though I prefer a text editor, because Twine has the Test button/Backstage.

When I look, at my chapbook.html I have:


It looks like it needs a relatively small edit to the output file putting `options="debug"` in the `<tw-storydata>` seems to do it.

as the explanation so you would put the attribute `options="debug"` in the <tw-storydata> element.  It's a bit of a manual fix, but it probably can be automated somewhat.  There probably already is an options attribute.  So just add the debug option.

Hey, folks. Sorry for the long silence. I ended up not needing Tee-Wee myself after all, so kinda set it aside. Been working on another thing, but once it's released I hope to pick up this baby again and give it a bit of a refresh, including access to the options field in metadata. Thanks for the patience!


It works well as is.  While there are maybe some "feature request" things, it seems to not have any actual bugs at this point.

(1 edit)

That's great news! I'll stick to making small changes then. Let me know what else you need.

Edit: by the way, I had another complaint about the looks. Should I give Tee-Wee a facelift? It would be a bit of work, but it probably can't break anything.

Thanks for your reply! I'm not actually using Tee-Wee, but VS Code. That said, I was able to ask in the Twine discord and found out that there's a command line option for Tweego (the command line twee file compiler) that is "-t" (for "test") and that worked!

Your comment, even though it's specific to Tee-Wee, got me on the hunt for being able to use something other than Twine itself to see the debugging Backstage sidebar when testing my Chapbook game, so thanks again...

What I was doing probably would work for the Tweego compiler as well.  But throwing a flag on your compile is *way* easier.  

(1 edit)

Hi there! I started working with this today. I input text in the Start page, and added a few options, and then decided to test if it publishes properly so far. (Aka am I using the right syntax, etc.)

For format, I entered in the line from Chapbook ( https://klembot.github.io/chapbook/use/1.0.0/format.js ).

When I clicked Publish, it asked if I wanted it to open in my browser. For some reason it opened it in Edge, so I copied the local address and put it in Chrome. 

In either browser, it doesn't display cleanly. I get lines like this: 

</tw-passagedata><tw-passagedata pid="2" name="IF YES" tags="" position="225.0,100.0" size="100.0,100.0">Do important phone calls, errands, bureaucracy.

Have I done something wrong, or is this a bug? 


I don't understand what you did. For one thing, you have to download a format, and open it using the Format button. Don't just put it in the metadata by hand, it doesn't work that way. And it sounds like you never published the game either. The editor would have warned that you don't have a format loaded.

Chapbook's site says:
"Chapbook is a story format for Twine 2, which means that it plays stories created in Twine in a web browser. To use it, add this URL as a story format:


So in Tee-Wee I put that web address in for the format, on the line where you put the file name.

Then I clicked publish, and it did allow me to do that. It didn't warn me that I didn't have a format loaded.

But then when I clicked to open the file in my browser when it asked if I wanted to, it opened it in Edge or Internet Explorer (not sure which) for some reason.

It had a lot of lines like the one I pasted in my first comment, but otherwise was plaintext a bit of what I'd entered in.

Today I'm refollowing those steps so I can express it clearly, and instead of mostly readable with strange lines, in Edge it's got this a lot:

 * Copyright (c) 2014-2016, Jon Schlinkert.
 * Licensed under the MIT License.
 */var r=n(39),o=n(41),i=n(42);e.exports=function(e,t,n){return r(e)?o(i(e,t),n):o(e,t)}},function(e,t,n){"use strict";
 * isobject <https: github.com="" jonschlinkert="" isobject=""></https:>
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */var r=n(40);e.exports=function(e){return null!=e&&"object"==typeof e&&!1===r(e)}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";

In Chrome, though, it looks more like this:

.small-caps{text-transform:uppercase;font-size:70%;letter-spacing:.075em}#backdrop{min-height:100vh;align-items:center}#backdrop,#page{display:flex;justify-content:center}#page{flex-direction:column;width:40em;min-height:calc(100vh - 2em);max-width:calc(100vw - 2em);line-height:150%;margin:1em;padding:4em 4em 2em;position:relative}#page article{flex-grow:1;display:flex}#page article>:first-child{margin-top:0;width:100%}#page footer,#page header{display:flex}#page footer>div,#page header>div{flex-grow:1}#page footer p,#page header p{margin:.5em 0 0}#page footer .center,#page header .center{text-align:center}#page footer .right p,#page header .right p{text-align:right}#page header{margin-top:0}#page header.has-content{border-bottom:1px solid #000}#page header.has-content+article>article>div>p:first-child,#page header.has-content+article>div>p:first-child{margin-top:1em}#page footer{margin-bottom:0}#page footer.has-content{border-top:1px solid #000}#page hr{border:none}#page hr:after{content:"* \A0   * \A0   *";display:block;text-align:center}#page .error,#page .warning{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu Cantarell,Helvetica Neue,sans-serif;font-size:80%;background:#fff5f5;color:#c92a2a;padding:.5em;border-left:4px solid #ffa8a8;position:relative;margin-bottom:1em;overflow:auto}#page .error :first-child,#page .warning :first-child{margin-top:0}#page .error :last-child,#page .warning :last-child{margin-bottom:0}#page .error a,#page .warning a{color:#c92a2a}#page .warning{background:#fff9db;color:#e67700}#page .warning a{color:#e67700}#page .fork p{display:flex;flex-direction:column;width:100%}#page .fork p a{display:block;flex-grow:1;text-align:center;padding:.5em}@media screen and (max-width:768px){#page{margin:0;width:100vw;max-width:100vw;min-height:100vh;padding:1em}}#spinner{position:absolute;bottom:0;right:0;opacity:0;transition:opacity .25s ease-in-out;pointer-events:none}#spinner.visible{display:block;opacity:1}
*{box-sizing:border-box}body{margin:0;padding:0}img{max-width:100%;height:auto}input[type=text],select{padding:.25em}pre{white-space:pre-wrap}tw-storydata{display:none}</style></head><body><form id="cb-validation" action="javascript:void(0)"><button id="cb-validation-tester" hidden></button> <button id="cb-block-enter-key" hidden></button><div id="backdrop"><div id="page" aria-live="polite"><header><div class="left"></div><div class="center"></div><div class="right"></div></header><article></article><ul class="warnings"></ul><footer><div class="left"></div><div class="center"></div><div class="right"></div></footer><div id="spinner"><img 
(1 edit)

Yes, the instructions on the Chapbook website are for adding it to Twine 2. Tee-Wee is a different application, that works differently. You need to first download the format, then load it using the Format button, then Publish. In fact the latter should stop after warning you there's no format loaded; if it doesn't, that's a bug. I'll look into it.

Edit: looks like I misread. Frankly, I've no idea what's going on there. Looks like Tee-Wee did load the format straight from the site (somehow), but when you published the game it actually just saved the raw data?! Just try downloading the story format and loading it from disc like it's supposed to work.

But it doesn't offer a download. There isn't one at that site at all. The only way to use it is to add the URL.

Unh... you can download the Javascript file, either with a right click on the link, or with Save As after it opens in the browser. It's still a file like any other. Either way, you can't expect to put an URL in a file opening dialog and have it work correctly.

This is working fairly well, though I'm not sure if it's resulting in problems with my local Twine with having the story in the Twine directory.  

I have tried to run Twine after having saved to that directory, so I'm not sure if that might be a problem.  I will test further.  

Yes, it appears that Twine isn't really liking having the version from Tee-Wee in the source directory, and so far it's having trouble importing it.  

Damn. Sorry to hear that. I thought it was working. Tweego definitely doesn't seem to have a problem.

Thanks for the pointers! It should work now.

Hey any documentation

Not yet, sorry. Alpha release, remember? What do you need to know?

what language does it use

That depends on the story format. For Chapbook, you can find complete documentation at the official website. See the link above.

How do I code


There's some information about Twine that can be a starting point, but you're going to need to find a format (Chapbook works well for me, link is also there) to use, if you want to publish with this.

It took me a bit to figure out how to get it working, but I now have it working quite well, and have a story of ~2500 words, that will be expanded at least somewhat.