Roadmap
Typstatic
Archive of implemented ideas
Page status: seedling
Contents
Typstatic is pre-alpha!
Everything changes all the time, everything breaks all the time, and most of the time nobody tells you anything about that. Just like life.
This website is very fragmentary, broken in many places, and sometimes misleading and out of date.
Be patient, Typstatic in development (2026-08). When it’s ready for public use it will be announced on the forum and this message will be removed.
The items below are not ordered in any particular order, except for the firstDepart from evil comes before and do good in Psalms 34:15… section; in particular the given order does not suggest priority in implementation.
Ideas which have been implemented are move to the archive.
Consider the ideas below as invitations for collaboration
Known issues and bugs
Unwanted p elements
For some reason Typst adds unwanted p elements in the HTML export. This affects us in at least two cases:
- Sidenotes on mobile devices in the
tufte-csstheme had to be made non-interactive, even though they are in the original Tufte CSS, due topelements being added (see this issue), which breaks the interactive mechanism. - The last item before a nested list gets extra spacing because it’s surrounded by a
pelement (see this issue).For the moment I suggest leaving it as is; while the output is suboptimal, it’s still totally usable.
Tufte margin
The tufte-css theme is based on the Tufte CSS style, which has an issue where sidenotes on list items are misaligned. At the moment (2026-06) this issue is yet to be fully solved. In order to mitigate the problem (yet not truly solve it), two heuristics have been proposed. The tufte-css theme incorporates this one, which seems to perform better than vanila Tufte CSS but is not perfect.
Pure Typst short urls
Currently if a path/index.html document or an element therein (e.g. path/index.html#toc-1) is linked, the link stays as-is, resulting in cumbersome URLs even if short-urls is set in Typstatic. Until this is solvable by Typst, one can rewrite the URLs using the web server. For example, with Apache edit .htaccess and add the following:
RewriteEngine On
RewriteCond %{THE_REQUEST} /index\.html? [NC]
RewriteRule ^(.*?)index\.html?$ /$1 [R=301,L]Cumbersome references to figures
Currently the use of std.figure triggers a <figure> tag in HTML output, and a break in paragraph, making it unusable for inline margin figures. As a workaround, the provided figure function receives a label argument and a non-standard figure-ref function is used for referencing figures (instead of the more elegant @label). When this issue is solved or circumvented more neatly pages that use the current clunky syntax will have to be rewritten (this will be a breaking change), although the old syntax might be supported for a while to ease transition.
RSS/Atom feeds
Typst doesn’t support outputting arbitrary files. Nevertheless, I suppose it’s possible to make use of the built-in HTML export feature in order to produce valid XML. The exported file might need to be cleaned by external tools of unnecessary boilerplate, which currently (as of Typst 0.13.1) is obligatory.
Additional output formats
Gemtext
I love Geminispace. The Web is bloated and Project Gemini offers a quieter place where text and hypertextuality reclaim their place, and minimalism and focus are appreciated over maximalism and constant interruptions that plage the Web.
Exporting arbitrary output files, including GemtextGemtext is the native file format of Geminispace (cf. HTML and the Web). It’s a simple, lightweight markup language where each line is of a particular type according to its first characters: text (no special indication), link (=>), heading (#, ## and ###), list (*), blockquote (>) and preformatted text (toggled using ```). That’s about the whole language. documents, is currently not supported in Typst but there is a possible workaround: produce very simple HTML documents with a dedicated theme, which will be trivial to convert to Gemtext with an external tool. Looking around there are several such tools, if you have a specific recommendation contact me. Anyway, special care should be taken with chronological indices so they are subscribable with a Gemini browser that supports subscription.
EPUB
EPUB support should be done with the aid of an external package.
Webmention
Typstatic incorporates site-internal backlinks, but what about links from other sites? That’s where Webmention comes into play — it’s a protocol that allows exactly that. At the moment I’m not familiar with the technical side of how to implement Webmention supportIt shouldn’t be too complicated. I just haven’t got around to have a look at it yet., so contributions are very welcome.
Automatic generation of pages.yaml
Add-on system
Move paricon support to an add-on
Comments from the fediverse
New themes
Creating themes isn’t difficult, but it’s currently undocumented. Thanks to Typst’s scripting abilities, themes can provide new commands which add functionality, saves time and improve consistency; this how to do this will be also explained.
I suggest Gutenberg as the basis for the theme, and adding iconsPhosphor is my favourite icon family. in the left margin at the top of paragraphs as a special added functionality.
The resulting theme can be added to Typstatic.
Customising existing themes
Link icons
This is a feature seen on Wikipedia and Gwern.net. Should be a general solution supported both on html and paged outputs, not something specific to Typstatic.
Better accessibility
Since I don’t use assistive technologyApart from eyeglasses, if they count… and I’m not familiar with this area, I do not know how accessible is the default theme (tufte-css) or other themes. In particular I suspect sidenotes might pose some problems for screen readers. If you can provide any feedback on this matter, I’d be grateful.This is a hobby project and I can’t afford consulting a paid specialist before it goes public.
Page logo
Cards
Add more themes
More comprehensive digital garden support
A graph view
The graph view is a well-known feature of Obsidian. It allows you to view at a glance the relationship between objects (in our case links between pages) and navigate their structure. Site generators that support a graph view include Quartz 5 and the Obsidian Digital Garden plug-in.
It’s tempting to use one of Typst’s packages for drawing graphs (even linking should work from within html.frame!) but this won’t allow navigation.
Migrate tufte-css to Tufte CSS 1.9.0
A new version has been released after a long pause.
As a part of the migration process, all of the tweaks to the CSS file should move to a separate file which will override the default settings.
Make headings linkable
Linking to fragments (in this case, direct links to headings) makes hypertext more useful.
Two ways to implement this:
- Each heading is a non-underlined link to itself.
- With a icon that appears on mouse hover when using a desktop or laptop computer and always when on a mobile device.Like one used on GitHub’s rendering of Markdown files. See Typst’s readme file for example.
favicon support
Code highlighting settings
Incorporate choosing a colour scheme into non-minimal themes. tufte-css and marginalia, for example, should use a monochrome scheme.
Transclusion
TransclusionSee also the Wikipedia pages about transclusion and Project Xanadu. If you find these interesting, have a look the Memex article as well. is an interesting concept not really explored in the Web as we know it.Here is not the place to describe it. Read the linked — not transcluded, perhaps unfortunately — pages instead.
I suggest making a quote command that has metadata in addition to the quoted text. With external pages we have no alternative but to copy the words to the local page, but with internal pages transclusion can be achieved if the transcluded fragment is defined as a top-level variable, which can be accessed from other pages.
Control theme configuration
Apart from the content itself a page has various items of metadata shown: date of creation, tags, navigation, author, etc. Currently these items are hard coded into the theme, but things should be more flexible. Instead, each one should consist of a modular function that represents it. For each area of the page (say header, sidebar and footer) the gardener (‘user’) can content fragment that calls these functions in the order and design they wishes. This is the simplest and the most effective and elegant way to deal with this.
Support for visually-oriented content
Support for auditorily-oriented content
Support non-Typst input
While having Typst all the way down is central to Typstatic’s raison d’être, it’s handy to support input in other formats. Support should be made possible on per-page basis, making hybrid sites which merge different types of content possible.
Some scenarios include:
Migration from other static site generators. If you have a website that is written in Markdown and generated by Hugo, Jekyll, Pelican, Eleventy or any other SSG, you can convert the content to Typst (using Pandoc, for example), but if you wish so this feature lets you use your old files with minimal adaptation. cmarker can be used in order to transpile CommonMark Markdown to Typst.Special non-standard features, such as tables and footnotes, are pain to implement because each Markdown extension has slightly different syntax.
Producing pages from personal knowledge bases, such as Org-mode+Org-roam, Logseq or Obisian.As of now (2026-07) there is no package that allows transpiling Org-mode’s markup or parsing Org-mode(+Org-roam) and Obsidian files in terms of metadata and internal connectivity. Neorg/norg is also an option but I’m not sure how active or usable the project is.
Cooperating with people who don’t use TypstYet…. If you work with people who aren’t familiar with Typst’s syntax but are with Markdown, working with file types which are the lowest common denominator makes sense.
Support dates (‘N years ago’)
Some websites, such as Gwern Branwen’s and Maggie Appleton’s digital gardens, have a neat feature: when a year appears in the text (say 1984) a subscript note says how many years have passes since (e.g. 198442ya). Gwern’s website also support page ranges. This is feature is trivial to implement with Typst’s datetime capabilities. In addition to dates in the past, dates in the future should be supported as well (‘the story is set in 208458yh’ or ‘[…] 208458yfn’‘yh’ is short for ‘years hence’ and ‘yfn’ for ‘years from now’.).
Move literal strings from themes to modules
Currently for each theme there’s a strings.yaml file which contains multilingual strings for use by the modules. This doesn’t make sense:
- This is not the proper place for this.
- This means the file is basically duplicated for each theme.
The solution is trivial: move the relevant content to the modules.