All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog,
and this project try to adheres to Semantic Versioning.
Go to the v2 branch to see the changelog of Lume 2.
Go to the v1 branch to see the changelog of Lume 1.
paginate.firstandpaginate.lastproperties to get the first and last page of the pagination.feedplugin: upgrade JSON output to JSON Feed 1.1.feedplugin: add Atom feed support.
- Duplicated pages throws an error instead of using the
log.errorhelper. - Updated dependencies:
schema-dts,esbuild,sass,terser,katex,satori,zip-js,xml,deno-loader,pug,tailwindcss,decap-cms,partytown,unocssand icons.
3.2.3 - 2026-03-11
image_sizeplugin was unable to extract image dimensions in some cases due to faulty path resolution.
3.2.2 - 2026-03-11
- New
site.removePageto make easier to remove files or pages during the build. - Redirect middleware:
copySearchParamsoption. - New
replacehook to update or add new replacements to thereplaceplugin. - Abort the fetch of remote files after 10s.
json_ldplugin:insertoptions to control whether to place the JSON-LD data into pages.
transform_imagesplugin incorrectly deduplicates when format is an object #823extract_orderplugin: convert the order to number if cascade option is disabled.- Added names to some processor functions to show up in the debug bar.
- Updated dependencies:
cliffy,zip-js,markdown-it,std,katex,html-validate,autoprefixer,tailwind,vento,decap,satori,unocss,svgo,deno/loader,satori,sass,lightningcssand some icons.
3.2.1 - 2026-02-10
- LumeCMS: the preview url wasn't detected.
- SEO plugin: revert change in 3.2.0 to ensure the custom output is exported after build or update.
- Validate HTML plugin: revert change in 3.2.0 to ensure the custom output is exported after build or update.
- Updated dependencies:
zip-js,satori.
3.2.0 - 2026-02-09
- New plugin
epubto export the site into a.epubfile. - New plugin
image_sizeto generate automatically thewidthandheightattributes ofimgelements. - New plugin
extract_orderto extract theorderproperty from the filename. (i.e.23.hello-world.md) - New plugin
replaceto perform basic replacements in the pages. - New
watcher.dependenciesoption to map manual dependencies. katexplugin: add support formhchemextension #805.katexplugin: Allow not downloading CSS and font assets for KaTeX plugin #810parseBasenamefunctions accept a second argument with the parent data object, useful for aggregated values. For example to parse the full date in/posts/2024/06/21/hello-world.md.relativeUrlsplugin: addrelativeUrlfilter.- Support for
.xhtmlpages (required to build ebooks). - Support for
.mjsas the extension of _component scripts' output file #815. remarkplugin: addmdRemarkfilter.
dateplugin: if no language is specified to the filter, use the current page language. If it's not defined, use the default language.- Simplified the logic to detect the hostname, port and location in
--servemode. - LumeCMS plugin:
- Protect the whole site only when the location is not
localhost. - Now it's mandatory that the CMS is registered in the import map as
lume/cms/. - The
srcstorage can be overwriten in the_cms.tsfile.
- Protect the whole site only when the location is not
- Pages defined with
site.page({ url: "foo", content: (data) => "..." })uses automaticallyjsas the template engine. - The
server.rootoption is always relative to the dest folder. - Capture
warn,errorandfatallogs to output at the end of the build.
LUME_PROXIEDenvironment variable is no longer needed.
- LumeCMS: Ensure
previewUrlis only applied for changes in thesrcstorage. - Updated dependencies:
@deno/loader,std,sass,decap,html-validate,remove-markdown,satori,terser,unocss,lightningcss,purgecss,katex,autoprefixer,esbuild,zip-js,etaand some icons. - Esbuild plugin resolution erroring with Windows style file paths #807, #808.
- Conflict with _component scripts and script.ts file #659
transform_imagesplugin doesn't process image files generated by a.page.tsfile #813- Allow
%character in filenames #809 - The property
sourcePathof pages and files was wrongly returning the extension in lowercase, even if the original filename is in uppercase. - Make
thistype ofLume.Helperscompatible with consuming from an object (helpers.foo()). - When adding remote files from npm/github/jsdelivr, paths starting with
/*are now correctly parsed #818. - Add missing types for helper functions to Lume global namespace #817.
3.1.4 - 2026-01-01
- Removed a 10s await in the dev server #803
- Updated MynaUI icons.
3.1.3 - 2025-12-30
- The dev server starts before the build, displaying a waiting screen until the build is complete.
- Append search to redirect in
/core/server.tsif path matches directory #796. - Import
esbuilddependency fromnpmto avoid permissions issues #795. - Updated dependencies:
deno-loader,sass,xml,unocss,std,katex,html-validate,bar,eta,vento,autoprefixer,tailwindcss,esbuild,ssxand icons. - Vento components shouldn't inherit the page's data #797.
iconsplugin: ensure the SVG code includes theviewBoxattribute.unocssplugin: process HTML files with UnoCSS transformers.resvgdependency works offline.
3.1.2 - 2025-11-18
search.file()to search for a single file.faviconplugin: Theinputoption allows an object with different files per size. Example:site.use( favicon({ input: { 16: "favicon.svg", 180: "big-favicon.svg", }, }), );
- Cache results of
search.files(). LUME_DRAFTSenvironment variable is true by default with--serve | -s.
runcommand code. It didn't work for a while and it's better to run Deno tasks.
- Ensure console output for validate_html and seo plugins is shown after the build process.
- Ensure
metasplugin is registered afterog_images. faviconplugin: scale the SVG icons before render to PNG.- Added missing tests for SEO plugin.
- Renamed
Configinterface ofseoandvalidate_htmlplugins toOptions. - Added export-ignore paths to
.gitattributes. site.remote(): support commit SHA for GitHub versions.- Don't prompt for the CMS login credentials in local development to access to the site.
- Updated dependencies:
deno-loader,tailwindcss,html-validate,magic-string,minify-html,sass,esbuild,terser,sharp,decap-cms,unocss,eta,stdand some icons.
3.1.1 - 2025-10-20
- Plugin
icons: added Ionicons catalog site.remote()allow a string as the third argument.
- Ensure url pathname is normalized in
serveFile#789 - Updated some icons.
3.1.0 - 2025-10-17
- New plugin
validate_html. - New plugin
partytown. - Detect
form[action]values bymodify_urls,base_path,check_urlsandrelative_urlsplugins. site.remote()function that works likesite.remoteFile()but allows an array of glob patterns fornpm:andgh:. For example:site.remote("_includes/styles/animate", "npm:animate.css@4.1.1/source", [ "/**/*.css", ]);
site.remoteFile()is now an alias ofsite.remote().inlineplugin: Add support for CSS. For exampleurl("/image.png?inline").pictureplugin: Allow to crop images by setting the width and height dimmensions. For example:200x400.
check_urlsplugin: broken links details are no longer shown in the console. Use the debug bar or export to a file to see the details.- Switch from
deno.land/xtojsdelivr.
cmscommand. LumeCMS is automatically initialized if the file_cms.tsor_cms.jsis detected. Use--no-cmsoption to disable it.
- Plugins
katexandgoogle_fontsfails when runningsite.build()multiple times. feedplugin: revert changes introduced in 3.0.7 (UsetextContentinstead ofinnerHTMLto get values using CSS selectors).- Updated dependencies:
std,katex,html-validate,unocss,decap_cms,lightningcss,tailwindcss,vento,deno-loader,etaand some icons.
3.0.11 - 2025-09-25
- Support for
gh:specifiers in Lightningcss, Postcss and Tailwindcss.
google_fontsplugin: handle unnamed @font-face subsets #785tailwindplugin: Support to import styles from npm. (i.e.@import "npm:tw-animate-css")tailwindplugin: Imports with relative paths don't work.- Updated dependencies.
3.0.10 - 2025-09-24
- New env variable
LUME_PROXIEDto use a location with a different hostname and port to the server's hostname and port. - New file
serve.tsto run LumeCMS in a VPS (experimental, will be stable in 3.1). - Ignore
deno.jsonanddeno.jsoncfiles by the watcher.
inlineplugin: Error when basePath plugin is used before.iconsplugin: clear the plugin list on update.- Updated dependencies:
vento,satori,sharp,esbuild,deno-loader,sass,unocssand some icons.
3.0.9 - 2025-09-11
sourceURLpragma to the live update script inlined in the HTML pages.ventoplugin: Supportslottags inside components.
- Replaced
svg2png-wasmdependency withresvg. sitemapplugin: Don't add theUser-agentrule torobots.txt.esbuildplugin: Handle alias option.esbuildplugin: Handlejsonfiles imported withoutwith { type: "json" }attribute.- Type changes introduced in Deno 2.5.0
- Updated dependencies:
vento,tailwindcss,sass,satori,unocssand some icons.
3.0.8 - 2025-09-04
esbuildplugin: Handle external and node built-in modules.- Make sure development middlewares are registered at the begining.
- Updated dependencies:
terser,sass,satori,stdand some icons.
3.0.7 - 2025-09-02
check_urlsplugin: New optionanchorsto check the URL hash.filter_pagesplugin: New optionbeforeRenderto filter the pages before rendering.inlineplugin: New optionsourceURLto add thesourceURL=inline:...pragma to inlined JS and CSS files #779.site.initDebugBar()to initialize manually thedebugBar.gh:specifier foradd()andcopy(), to use files from GitHub repositories.- Allow to download several files from a GitHub or NPM package using glob patterns. For example
site.add("npm:ventojs/**").
- Issues running
site.build()multiple times in the same process. mergedKeyskey is not merged.- Use
textContentinstead ofinnerHTMLto get values using CSS selectors by some plugins like metas #782 - Updated Vento to v2.
- Updated dependencies:
bar,unocss,tailwindcss,esbuild,std,deno/loader,sass,xml,magic-string,satori,mdx,pagefindand some icons.
3.0.6 - 2025-08-07
- New
idleevent, triggered when thebuildorupdateprocess has finished or stopped. - New flag
--cmsfordeno task serveto run the new experimental version of LumeCMS. sheetsplugin: New optionoutputOptionsto configure the output of the data.prismplugin: NewautoloadLanguagesoption to load automatically the languages on demand.
esbuildplugin: usejsr:@deno/loaderofficial package instead of@luca/esbuild-deno-loader.- Middlewares configured in the
server.middlewaresoption are registered before the dev middlewares. --watchand--servemodes don't exit if there's an error on build.mdxplugin: NowstylePropertyNameCaseoption is fixed to "css", ensuring generated HTML always uses kebab-case inline styles.- Local server: when the port is not explicitly set and the default
3000is in use, Lume will use the next available port (from3001to3010).
- Optimized file server by removing a
Deno.statcall. jsxplugin: Supportprecompileoption #770.katexplugin: Catch Katex errors when delimiters are allowed- Updated dependencies:
std,satori,vento,decap-cms,esbuild,ssx,lume-bar,deno-dom,unocssand some icons. - Fixed bug with date handling in the
sheetsplugin #772. - Don't urlencode the
basenamevariable.
3.0.5 - 2025-07-17
- Unify browsers support accross several plugins like
postcss,highlightningcssoresbuild. - Remove access request to env variables #765
favicon: Changed the default favicon.ico file size from 48x48 to 32x32.
decap_cms: prevent to apply a layout to the generated admin page.- When the update action fails, the watcher is paused indefinitely.
- Updated dependencies:
svgo,terser,postcss,decap-cms,unocss,deno_dom,std,tailwindcsss,vento,sharpand some icons.
3.0.4 - 2025-06-13
- Performance measurement error building an empty site.
- Updated some icons.
3.0.3 - 2025-06-12
- Google fonts plugin: new option
ignoredSubsets#755. - Lightningcss plugin: Report errors in the terminal and Lume bar.
- Tailwindcss plugin: Add
minifyoption #757. - Feed plugin: new option
stylesheetto style xml outputs. - More build info in the Lume bar, like performance and ability to enable/disable drafts.
- Sitemap plugin mangles already existing robots.txt file #761
- The Lume bar is less invasive and hidden by default.
- Updated dependencies:
std,terser,esbuild,tailwindcss,xml,sass,postcss,unocss,vento,satori,decap-cms,lume-barand some icons. - Redirects plugin with Netlify: append new redirects to the existing file instead of override the content.
3.0.2 - 2025-05-23
- Source maps support for tailwindcss plugin.
- Decap CMS plugin: show the URL in the debugbar.
- prism plugin: Allow
prismas theme name. - Add/copy paths starting with
_(add("_assets", "assets")) - minify_html plugin: Disable js and css minification by default
unless
.cssand.jsextensions are added. - Vento filters in components (ex: `{{ comp.button() |> toUpperCase }})
- Slugifier: ignore errors for malformed URLs.
- Duplicated pages created with
site.page(). HelperThistype.- Error loading empty JSON files.
- Tailwindcss: Resolve relative modules
- Updated dependencies:
sass,lightningcss,std,terser,satori,decap-cms,ssx,tailwindcss,unocss,ventoand some icons.
3.0.1 - 2025-05-10
- Reintroduced
site.copy()function removed in 3.0.0, because it's still useful in specific scenarios. - More info in the debugbar from minify_html, esbuild, terser, postcss, lightningcss, google_fonts and svgo plugins.
- Warning message by the transform_images plugin.
- Don't ignore
/.well-knownfolders. - Updated dependencies:
tailwindcss,unocss,lume-barand some icons.
3.0.0 - 2025-05-07
- New
site.add()with support URLs and NPM specifiers. - New debugbar for development mode.
- New options
cssFile,jsFileandfontsFolderto configure a default destination for automatic generated code. It's used by default by code_highlight, google_fonts, prism and unocss. It's also used by default by components. - New folder-based components.
- Components: allow to define default data values in components.
awaitfilter for nunjucks.page.textandpage.bytesgetters and setters.site.process(callback)as an alias ofsite.process("*", callback).site.preprocess(callback)as an alias ofsite.preprocess("*", callback).Serverclass is now compatible withdeno servecommand.- New data merging strategy named
data, used by the multilanguage plugin. slugify_urlsplugin: newtransliterateoption to define a different library per language.katex:cssFile,placeholderandfontsFolderoption. The plugin downloads the CSS code.iconsplugin: Added css.gg and radix-ui.com/icons #736feedplugin: Allow to pass an array of options or a function that return an array of options.sitemapplugin: New optionstylesheet.- Deno lint plugin.
TemporalAPI is enabled by default.- Minimum Deno version supported is LTS (2.1.0)
- Refactor source.build function to give priority to load over copy statically.
- Always load files with extensions that need to be (pre)processed instead copy them.
- Lume's components are now async.
jsxplugin uses SSX library instead of React.- The
jsxpages have the.pagesubextension (.page.jsx). mdxplugin no longer depends on ajsxplugin installed before.- Upgraded
tailwindto v4 and removed the dependency onpostcssplugin. - Replaced events-based operations with processors in the plugins code_highlight, decap_cms, favicon, feed, google_fonts, icons, prism, robots, sitemap and slugify_urls.
metasplugin:generatorproperty istrueby default.page.documentalways returns a Document or throws and exception.- Refactor of
esbuildplugin to useesbuild-deno-loaderto resolve and load jsr and npm dependencies. transform_imagesandpictureplugins no longer load all images by default. Usesite.add().- Only the images that must be transformed are loaded.
decap_cms: create the admin html page once.postcss,sass,tailwindcss,unocssandlightningcss, plugins no longer load all CSS files by default. Usesite.add().svgoplugin no longer load all SVG files by default. Usesite.add().terserandesbuildplugins no longer load all JS and TS files by default. Usesite.add().esbuildbundles jsx and tsx files by default.sitemapplugin: changed the options for something similar tofeedandmetas.- The basename variable reflects always the final URL instead of the original file #660.
- Page generators can define the basename instead of the full URL to modify only the last part of the URL.
- Moved the date extration from the file paths to the
extract_dateplugin. google_fonts: renamedfolderoption tofontsFolder.og_images: renamedsatorioption tooptions.redirectsmiddleware:strictoption is false by default.multilanguageplugin: Now it can handle generator pages with an array of languages.source_mapplugin: ThesourceContentoption istrueby default.- Renamed
CRITICALlog level toFATAL. And addedTRACElevel. - Renamed
site.server()tosite.getServer()for consistency withsite.getWatcher(). - Use the
site.cacheinstance instead of creating a different instance per plugin. - Changes in the
Cacheclass:- Renamed
get()togetBytes()for consistency withgetText() - New method
remove(). - Changed the signature of
getText()andgetBytes().
- Renamed
renderOrderproperty is not applied to page layouts #749.- unocss plugin: Used presetWind3 as default.
- renamed the
isRedirectproperty created by redirects plugin tounlisted.
jsx_preactplugin. Usejsxinstead.liquidplugin. Usenunjucksinstead.site.copyRemainingFiles()andsite.copy(). Usesite.add()instead.- Automatic
<!doctype html>to all HTML pages. extensionsoption of the pluginsmodify_urls,check_urls,base_path,code_highlight,fff,inline,json_ld,katex,metas,multilanguage,og_images,prism,purgecss,relative_urls,postcss,lightningcss,sass,svgo,filter_pages.nameoption of the plugins:date,json_ld,metas,nav,paginate,picture,reading_info,search,transform_images,url,postcss.site.loadAssets()function. Usesite.add()instead.on_demandplugin and middleware. If you need some server-side logic, you can use router middleware.inlineplugin: removed theattributeoption.cacheoption intransform_images,faviconandog_images. UseLUME_NOCACHE=trueenv variable to disable cache.variableoption of Lume components. It's alwayscomp.namespecial variable of components to customize the name. It's always the filename.slugify_urlsplugin no longer handle unicode characters by default. Use thetransliterateoption to configure it.- Internal variable
page._databecause it's useless. site.globalDatavariable due it's no longer needed. Usesite.scopedData.get("/")if you need it.
- The resolution of npm and jsr specifiers by esbuild plugin have been improved.
- Replaced some thrown errors with warnings in the console (
icons,inline,picture) #740. - Merging of multilanguage variables.
- Parsing the escaped URLs in CSS files.
- Improved the output CSS and JS code of components.
- Components interoperability, specially between JSX vs text engines.
- Improved reload after renaming or removing a folder.
- Added live-reload to the 404 page.
- Log an error if prism and codeHighlight plugins are registered at the same time #497.
- Updated all dependencies to the latest version.
- Plugin sheets: UTF-8 characters in .csv files.
- Search plugin: Sorting when some pages lack key fields #748
- json_ld plugin: alias to non-string value causes an error.
- transform_images: preserve the animation between gif and webp formats #750.
- Set
LUME_LIVE_RELOADenv variable in the CMS environment - check_urls plugin: Handle correctly the spaces and other escaped characters.