Built-In Features
JamsEDU comes with a set of built-in features that are always available on every page. You do not need to install, configure, or wire up any frameworks. Just write your HTML using the patterns shown on this page and JamsEDU handles the rest. When you are ready for the full details on any feature, follow the link to its dedicated guide.
Beyond what is covered here, JamsEDU also supports repeatable form sections, URL pickers with validation, print and save from structured reports, embedded PDF viewing, responsive video embeds from plain video tags, DOM observation for dynamically injected markup, and theme tokens so every control feels native to your site. Each of these has its own guide under Built-Ins where applicable.
Each published page loads /assets/js/main.js as a module one time. After that, JamsEDU finds the patterns on the page and runs the matching built-ins for you.
Math (KaTeX)
LaTeX math formulas can be added inline so they read naturally with your prose or as their own block when you want them to stand out. KaTeX handles the rendering so your equations always look crisp at any size. Here is an inline example: . And here is a block example:
Diagrams (Mermaid)
Mermaid turns plain text into rendered diagrams. Flowcharts, sequence diagrams, and more can all be written directly in your HTML and JamsEDU will render them on the page for you.
flowchart LR
Idea[Author writes text] --> Render[JamsEDU renders]
Render --> Polish[Theme + layout]
sequenceDiagram
participant S as Student
participant P as Page
S->>P: Updates a field
P-->>S: Keeps structure + print-ready layout
Code Highlighting
Wrap a code element in a pre tag and add a language class on the code element (for example html or javascript). Highlight JS Lite will automatically tokenize it with theme-aware colors, optional line numbers, and a copy button when enabled.
function sum(a, b) {
return a + b;
}
const total = sum(10, 32);
console.log(total);
The same integration can turn a block into an editable mini editor, pin syntax highlighting with a locked language on the code element, and include extra text in the clipboard when you place template elements next to the pre. The guide below spells out the classes and shows each pattern.
// This block is a mini editor: try editing the code below.
const greeting = 'Hello, HLJSL';
console.log(greeting);
Rich Text
Any textarea with the class rich becomes a lightweight Rich Text editor with a toolbar for bold, italic, underline, bullet and numbered lists, paragraph and heading levels, blockquote, code blocks, and link insertion. The output stays as HTML in the textarea value and the Rich Text editor inherits your light or dark palette automatically. Per field options are documented in the Rich Text guide.
Tiny Doc
Tiny Doc is a structured document system built into JamsEDU. It provides sections, headers, repeatable rows, URL pickers, Rich Text areas, and print or save functionality all from within the document itself. This is not the same as embedding an existing PDF for students to read in the page; that is the separate Embedded PDF built-in.
This is an example of an instructions block. It is not included in the exported PDF.
Embedded PDF
Put a PDF on the page the same way you would link any other file: one line of HTML with the URL. JamsEDU notices it and swaps in an in-page reader so people can scroll, zoom, and read without leaving your site. Point data-pdf at a path you actually publish (for example under /assets/docs/).
<div data-pdf="/assets/docs/your-handout.pdf"></div>
You can also use a plain embed tag whose src ends in .pdf; sizing, titles, and extra options are on the full guide page.
Responsive Video
JamsEDU can embed videos from supported hosts like YouTube and Vimeo using a simple video element with a src attribute pointing to the video URL. During the build, JamsEDU replaces this with a responsive figure containing the correct embed iframe so the player scales with your layout automatically.
You can also include a cite element inside the video tag. JamsEDU will turn the cite text into a link pointing to the same URL as src so readers can open the original video on the host site.
<video src="https://youtu.be/NpEaa2P7qZI">
<cite>Your visible citation label</cite>
</video>
Theming and Color
All built-in features read CSS custom properties first, shared tokens second, and sensible defaults last. This means a single palette file can recolor Tiny Doc, Rich Text, the code highlighter, and the embedded PDF viewer so your branding shows up consistently across the entire site.
/* Example: adjust built-in surfaces to match your brand */
:root {
--doc-link-color: #0b57d0;
--richtext-border-color: color-mix(in srgb, var(--color-border) 80%, transparent);
}
Optional Settings
Built-ins start on their own when the page contains the markup each loader looks for. To change runtime behavior (CDN URLs, toolbar wording, PDF zoom limits, disabling a loader), edit the plain object passed to initJamsEdu in /assets/js/main.js. In the template it is usually named jamsEduConfig: set only the fields you care about for each built-in; anything you omit keeps the shipped defaults. Set a top-level key to false to turn that loader off entirely. None of this is read from .jamsedu/config.js; that file is only for the CLI builder.
Each top-level key is either an options object (include only the keys described for that feature) or false to skip that loader entirely:
tinyDocument— Tiny Doc (.documentworksheets)tinyWysiwyg— Rich text (textarea.rich); docs call this feature rich textkatex— Inline and block mathmermaid— Diagrams frompre.mermaidhighlightJsLite— Highlighted fenced codeembedPdf— Embedded PDF viewer (not Tiny Doc print or save)
Individual guides call out the keys that matter for that feature (for example jamsEduConfig.embedPdf on the Embedded PDF page). Loaders already attach a MutationObserver when useMutationObserver stays enabled (the default). For your own scripts, the bundle exposes window.DomWatcher in assets/js/jamsedu/dom-watcher.js: use DomWatcher.watch(selector, callback) when you inject matching markup after load (for example after a fetch).
Settings like destDir, srcDir, and build hooks are covered on the Configuration page. Project configuration and browser-side feature options are separate and do not share the same object.