Name it
The final extension selects the executor. A file like index.html.md means “produce HTML by executing Markdown.”
Your file extensions are the build pipeline.
.html.md → LLM → index.html
nlang turns chained extensions into execution rules, so generation feels native to the filesystem instead of hidden in custom scripts.
The final extension selects the executor. A file like index.html.md means “produce HTML by executing Markdown.”
Markdown becomes an LLM prompt, while JavaScript or TypeScript runs in Node.js with full access to fetch, transform, and generate files.
.md → LLM • .js/.ts → NodeRun a single command and nlang resolves dependencies, executes sources in order, and writes clean build output into dist/.
Each chained extension communicates both the target artifact and the runtime that should generate it.
| Source File | Executor | Output |
|---|---|---|
index.html.md |
Markdown → LLM | index.html |
blog.json.ts |
TypeScript → Node.js | blog.json |
sitemap.xml.js |
JavaScript → Node.js | sitemap.xml |
feed.xml.md |
Markdown → LLM | feed.xml |
users/[slug].html.ts |
TypeScript → Node.js | users/[slug].html |
report.csv.js |
JavaScript → Node.js | report.csv |
landing.html.md |
Markdown → LLM | landing.html |
api/openapi.json.ts |
TypeScript → Node.js | api/openapi.json |
nlang combines prompt-driven generation, executable transforms, dependency orchestration, and scheduled automation in one minimal model.
Markdown files become prompts sent to any OpenAI-compatible API, letting content, templates, docs, and pages compile from natural language instructions.
Use full Node.js for data fetching, transforms, generation, API calls, filesystem work, or any custom logic too precise for a prompt.
@{path} references resolve in order, so files build their dependencies first and generated outputs can safely compose other artifacts.
[name] in paths plus a JSON array enables templated multi-output builds for slugs, locales, categories, product pages, and more.
Add trigger frontmatter and nlang can generate GitHub Action schedules automatically for periodic rebuilds and refreshed content.
Content-hash plus TTL caching skips unchanged files, reduces repeated LLM calls, and keeps builds fast and cost-aware.
A minimal setup for creating your first executable extension pipeline.
# install globally npm install -g nlang-cli
# inside your project folder
nlang init
--- model: gpt-4o-mini --- Create a clean landing page in semantic HTML for my product.
# compile sources to outputs nlang build # result dist/index.html
.html.md workflowPrompt a page with frontmatter configuration, pull in design tokens as a dependency, and generate a concrete artifact.
--- model: gpt-4o-mini temperature: 0.2 trigger: 0 8 * * 1 --- Create a polished, single-file marketing page for nlang. Requirements: - Output valid semantic HTML5 only - Use the design system from @{design-tokens.json} - Include a hero, feature grid, quick start, and footer - Tone: technical, premium, minimal - Keep copy concise and developer-focused Use this product message: "Executable Extensions: your file extensions are the build pipeline."
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>nlang — Executable Extensions</title> </head> <body> <main> <section> <h1>Executable Extensions</h1> <p>Your file extensions are the build pipeline.</p> </section> </main> </body> </html>
When nlang build runs, dependencies like @{design-tokens.json} are resolved first, then the prompt is executed, cached, and written to dist/landing/index.html.