Optional application validation

Publishing without changing the language core.

Org export and the Dogfood design consume ordinary compiler, runtime, and ESM boundaries. They prove custom applications without turning a blog stack into language architecture.

A publishing compiler, not a theme

content/*.org
  → Emacs + ox-html
  → deterministic article ESM
  → Eliscript React application
  → static Vite bundle

The Org adapter is optional and lives outside the language compiler. Direct export needs only Emacs; Vite and React enter when the data module becomes a browser application.

The output is ordinary data and HTML. Layout, navigation, interaction, typography, and deployment remain application decisions.

Article metadata

#+TITLE: The Compiler Is the Publishing System
#+DATE: 2026-08-28
#+SLUG: compiler-publishing
#+DESCRIPTION: One programmable path from Org to React.
#+FILETAGS: :emacs:compiler:react:
#+DRAFT: false

* A stable section

The body is ordinary Org.
FieldContract
TITLERequired, non-empty display title
DATERequired real date in YYYY-MM-DD form
SLUGOptional stable identity; filename is the fallback
DESCRIPTIONOptional summary for article lists
FILETAGSOptional normalized, deduplicated tags
DRAFTOptional publication filter

Missing heading IDs are assigned deterministically. Explicit Org CUSTOM_ID properties stay untouched.

Export a data module

./bin/eliscript-org \
  --output dist/articles.mjs \
  content/

The generated module exports one date-sorted articles array containing the slug, title, date, description, tags, draft state, source path, and exported HTML. Repeated builds from the same inputs are byte-identical.

Org HTML is trusted build output and is rendered directly by the example. Content from untrusted authors needs a separate sanitization boundary.

Use Org as a Vite module

import { eliscriptOrg } from "./tools/org/vite-plugin.mjs";

export default {
  plugins: [
    eliscriptOrg({ contentDirectory: "content" })
  ]
};

Application code imports virtual:eliscript-org. The adapter recursively watches Org sources, rebuilds the deterministic module, and invalidates it when content changes.

Run the custom site

bun run dev:org-site
bun run build:org-site

The example application is written in Eliscript and compiles through the same React and Vite path as any other browser program. It implements responsive article navigation, hash routes, tags, and trusted Org HTML rendering. Navigation uses portable sequence, text, and immutable object source modules for mapping, hash-prefix removal, browser options, and a prebuilt slug index with direct lookups. Drafts do not enter the production bundle.

Inspect the example

Dogfood hybrid blog design

The planned examples/dogfood project separates two Eliscript programs. A build program runs in Actions and normalizes local Markdown, authorized GitHub Issues, and authorized Discussions into static blog and comment data. A browser program renders the resulting site after compilation to standard JavaScript.

Sources can be enabled independently or together. By default, only the repository owner may publish an Issue or Discussion as an article; a configured author list can extend that authority. Other participants may comment on an existing article or use a configured external comment provider, but cannot silently promote their content into a blog post.

Comment events are coalesced before rebuilding so bursts do not consume one Actions run per reply. Static output remains the fallback, while optional dynamic enhancement can refresh comments without changing core language semantics.

Dogfood is currently a complete design package, not an implemented or production-accepted application. Its status never contributes to the Eliscript core percentage.

Read the Dogfood design