an open-source education platform

Publish and Share

Three states control who can see content: draft, published, and unlisted. The state lives at the page and skript level (collections are just organizers — they don't have a publish state of their own). Most of the time you'll just toggle Publish and move on — but here's the full picture for when you need it.


The three states

StateVisible toListed in navigationUse case
DraftOnly you (and collaborators with edit rights)NoWork in progress
PublishedEveryoneYesReady for students
UnlistedAnyone with the linkNoHidden practice exercises, easter eggs, links from a class chat

Drafts are completely private. Published pages show up in your skript's table of contents, in your collection's index, and on your front page. Unlisted pages skip all of that — you have to know the URL.

When unlisted shines
  • A second-attempt practice exercise that should only be reachable from a "try harder" link
  • A skript you're field-testing with a small group before unveiling it
  • "Solution" pages that you only link to from the question page
  • A draft you want a colleague to review without making it public

Publishing at two levels

Publishing happens at the page and skript level — independently. Collections are purely organizational containers; they don't have their own publish state.

Collection (organizational only — no publish state)
 ├── Skript A (published)
 │    ├── Page 1 (published)  ← visible
 │    ├── Page 2 (draft)      ← invisible
 │    └── Page 3 (unlisted)   ← invisible in nav, visible by URL
 │
 └── Skript B (draft)         ← entire skript invisible regardless of pages

A page is only publicly visible if the page AND its skript are both published. You can take a whole skript offline temporarily by toggling its publish status, without touching any individual page.

Common gotcha

A published page inside a draft skript is not visible. Students get a 404. When launching new content, publish from the bottom up: pages first, then the skript. To take content offline, flip the skript to draft — every page inside disappears at once.


How to publish

Three places to toggle the state:

  1. Top toolbar of the page editor — the Publish dropdown
  2. Page list in the manage drawer — quick toggle next to each page
  3. Page builder dashboard — bulk view, drag-and-drop reorder, batch toggles

For skripts, use the skript editor or the dashboard.

In the page list, each page shows a small icon after its title that mirrors the Publish toggle's color coding: a green check for published, an amber dash for draft, and a violet crossed-out eye for unlisted.


Sharing with students

URLs are stable and shareable. Once you've got a published page at eduskript.org/<slug>/<col>/<skript>/<page>, share that URL anywhere:

  • Email — paste the link
  • LMS (Canvas, Moodle, Schoology, etc.) — add as an external link
  • Class chat (Discord, Slack, Teams) — paste, get a preview card with title + description
  • Printed handout — generate a QR code from any free service

The share icon in the page toolbar copies the URL to your clipboard. You can also click any heading in the rendered page to copy a link directly to that heading.


Every heading has an automatic ID derived from the heading text. Click a heading in your published page → URL gets a #anchor-name fragment.

eduskript.org/marie/intro-stats/descriptive/measures#mean-and-median
                                                    ↑ anchor link

When you change a heading's text, its anchor changes too. Old anchor links still land on the page (no 404), but they don't auto-scroll to the right place. So if you rename a heading after sharing the link, students get the page but not the section.

Stable anchors for important sections

If you know you'll link to a specific section repeatedly (e.g. from a syllabus), pin the heading text early and don't change it.


OG previews when shared on social

Eduskript generates Open Graph metadata automatically:

  • Title — your page title
  • Description — your page description, or auto-extracted excerpt
  • Image — your page's OG image (set in page settings) or your default front-page OG image

So when someone pastes your link into Slack, Discord, Twitter, etc., they get a preview card. Same for messaging apps that respect OG.


Connecting a custom domain

By default your site lives at eduskript.org/<your-slug>. If you'd rather use your own domain — e.g. informatikgarten.ch instead of eduskript.org/informatikgarten — you can point it at your Eduskript site instead. This is configured per-site in the dashboard's site/domain settings; once connected, your domain resolves to the same content and you keep writing and publishing exactly as before.

It's a site-level setting, not something you toggle per page or per skript.


Updating published content

Save and the changes are live — no need to re-publish. Eduskript doesn't have a "stage" environment for published content; the published version IS the live version.

If you want a sandbox to work in before going live, do one of:

  1. Keep it as a draft until ready, then toggle to published in one go
  2. Use a separate "drafts" skript for in-progress work, move pages into the live skript when done
  3. Fork your own skript as a sandbox copy, edit there, then copy changes back

Most teachers find option 1 sufficient.


Taking content offline

Toggle published → draft. The page disappears immediately. Students hitting the URL see "Page not found." If you want to leave a redirect or a "this content has been retired" message, use a published page with that note instead of fully unpublishing.


Exporting your content

Every skript can be exported as a self-contained folder or zip — for backups, moving content off Eduskript, or opening it directly in Obsidian.

Open a skript in the editor and click the export icon (a hard drive with a down arrow) in the header, next to Front Page and Delete Skript.

Two options:

  • Choose folder — writes files straight into a folder you pick. Chrome/Edge only (uses the browser's File System Access API); greyed out in Firefox and Safari.
  • As zip — downloads a single .zip, works in any browser.

Everything runs in your browser: pages and attachments are fetched from Eduskript's storage and packed locally. The server never builds the export itself.

"Also export videos" is unchecked by default. Including videos means converting each one to a downloadable file on Mux's side first, which can take a while for longer videos — leave it off for a quick export of text and images, turn it on when you specifically need the video files too.

What's inside

<skript-slug>/
  01-page-slug.md
  02-page-slug.md
  ...
  attachments/
    image.png
    diagram.excalidraw
  videos/            (only if videos were included)
    lecture.mp4
  LICENSE.txt
manifest.json

Each page becomes a numbered markdown file with a frontmatter title. Excalidraw drawings export as .excalidraw (the editable source) alongside their SVG renders. LICENSE.txt states the CC BY-NC-SA 4.0 license and lists the skript's authors — useful if you're exporting a skript you collaborate on but didn't write yourself.

Obsidian-compatible

The layout — one markdown file per page, an attachments/ folder — works directly as an Obsidian vault. To view or edit the .excalidraw drawings inside Obsidian, install the community Excalidraw plugin first — without it, Obsidian just shows the raw JSON.

One skript at a time

Export works per skript, not for your whole page in one go. There's no server-side bulk export; exporting everything you own skript by skript is safe, since each export runs independently in your browser.


Publishing cheat sheet

GoalWhere
Toggle a page draft/publishedTop toolbar of page editor → Publish dropdown
Mark a page as unlistedSame dropdown → Unlisted
Bulk-toggle pages in a skriptPage editor's Manage → page list
Publish/unpublish a whole skriptSkript editor or dashboard
Share a linkClick the share icon, or copy URL bar
Link to a specific sectionClick the heading, or paste URL with #anchor
Take a section offline temporarilyToggle the parent skript to draft
Use your own domainDashboard → site/domain settings
Export a skript (backup, Obsidian, etc.)Skript editor header → export icon