v0.17.4 (2026-06-20)
-
Multi-Language (Site Configuration)
- Before rendering, the entire
configtree ineverkm.yamlis deep-processed: the template global variable__configandconfig(key=...)both return final values for the current language (including nested objects and arrays). - Category 1
@i18n:<key>: continues to reference language bundles (__everkm/i18n/, theme and extend i18n files); when no language bundle is found, the original reference is preserved and a warning is logged. - Category 2 Translation Objects: scalar values in configuration can use a structure isomorphic to language bundles (
_default+ language code fields), useful for fields like Algoliaindex_nameand external linkurlthat should not be placed in language bundles. - Removed flat sibling key syntax (e.g.,
index_name.en,url.zh); please use translation objects instead. folders.breadcrumbstitle/urluses the same resolution rules asconfig.
- Before rendering, the entire
-
Default Exclude
private- Body rendering now strips content blocks tagged with
#privateby default;posts()and similar lists exclude articles with theprivatelabel in frontmatter by default. - During preview, set
EVERKM_PRIVATE=1to temporarily view private content; export always excludes it.
- Body rendering now strips content blocks tagged with
v0.17.3 (2026-06-17)
-
Multi-Language
LangBundlescanning scope expanded:*.i18n.md/*.i18n.yamlfiles withinextend/templatesandextend/dcardare merged with theme and__everkm/i18nbundles (low to high: theme -> extend/templates -> extend/dcard ->__everkm/i18n).
-
Directory Configuration
everkm.yaml#foldersaddsurl_id_suffix(defaulttrue): when set tofalse, non-index article URLs become{slug}.htmlwithout appending-{id}; orthogonal tohash_scatter.
-
dCard
- Cards now support a more concise syntax: write
`dcard/card-name`on a standalone line in the body to insert the corresponding card, without needing a code block or configuration. For example,`dcard/download`directly displays a download block.
- Cards now support a more concise syntax: write
v0.17.2 (2026-06-15)
-
Site Extension Directory (Breaking)
- Site-level templates, static assets, dCard cards, and HTML pages for overriding generated results are now unified under
__everkm/extend/(subdirectories:templates,assets,dcard,pages). everkm-publish init <site-root>automatically creates theextenddirectory structure within that directory.- The following old paths are no longer supported; please migrate to the corresponding
extendsubdirectories:__everkm/__theme->extend/templates(andextend/assets)__everkm/__assets,__assetsunder content directories ->extend/assets__everkm/__public,__publicunder content directories ->extend/pages__dcardunder content directories ->extend/dcard
- During preview, files in
extend/assetstake priority over theme-bundled assets; after export, HTML files inextend/pagesoverride generated pages at the same path.
- Site-level templates, static assets, dCard cards, and HTML pages for overriding generated results are now unified under
-
CLI (Breaking)
everkm-publish init: now initializes within an existing site root directory instead of automatically creating a subdirectory from the site name.- Usage changed from
init <site-name> [--work-dir parent]toinit <site-root>; you must create the directory first, e.g.,mkdir my-site && everkm-publish init my-site. - An empty
__everkm/everkm.yamlis also created during initialization for subsequent site configuration.
- Usage changed from
everkm-publish web: the static preview directory changed from--work-dirto a positional argument; usage isweb <directory>, e.g.,everkm-publish web ./dist.- When running
serve,export,init, and other commands, startup logs now display the current everkm-publish version number for easy verification and troubleshooting.
v0.17.1 (2026-06-14)
-
Multi-Language
- Site configuration and breadcrumb text support
@i18n:<key>references, automatically replaced with the corresponding translation for the current language. - During local preview, you can switch languages via the URL parameter
?_langor the__langcookie to instantly view configuration text in different languages. - You can place
*.i18n.yamllanguage bundles in the project's__everkm/i18n/directory to override theme translations; changes to language bundles take effect automatically during preview without restarting.
- Site configuration and breadcrumb text support
-
Page Rendering
- Preview and export behavior is more consistent: if a theme does not provide a Tera template (e.g., some themes'
index.html), the theme's built-in JS rendering is used automatically, and both article pages and home pages display correctly.
- Preview and export behavior is more consistent: if a theme does not provide a Tera template (e.g., some themes'
-
Export and Preview
- Fixed an issue where some sites would stall indefinitely under default export concurrency and fail to complete static export; this commonly occurred when using JS-rendered dCard cards (e.g., list-type
dcard/items) in body text or macro references. - Default concurrency now completes export normally; generally no need to reduce
EVERKM_EXPORT_WORKERSas a workaround.
- Fixed an issue where some sites would stall indefinitely under default export concurrency and fail to complete static export; this commonly occurred when using JS-rendered dCard cards (e.g., list-type
-
Navigation and Internal Links (
[[...]])- The
from_fileparameter of navigation functionsnav_indicator/nav_path/nav_tree, when wrapped with[[...]], now resolves target articles using the same rules as body internal links (title, slug, path, etc.); plain string syntax is unchanged. - Internal links are resolved to site URLs during preview and export; when a link points to a non-existent or ambiguous target (e.g., multiple documents with the same title), it immediately reports the error and identifies the problematic link, instead of showing an incomprehensible message at the end of export.
- Matching internal links by title or slug now ignores case (e.g.,
[[faq]]matches the title "FAQ"); duplicate slugs trigger an ambiguity warning. - If a title may be duplicated across directories, use an explicit path instead, e.g.,
[[./faq/]]or[[/section/doc/file]]. - New
everkm-publish lintscans all internal links in body text and lists unresolvable or ambiguous links by line number, useful for pre-publish self-checks. - In aNote publishing scenarios, internal link resolution rules are consistent with the CLI tool.
- The
-
Error Messages
- When a page fails to publish due to link issues, the error message now specifies the page URL, source Markdown file, the specific link address, and suggested fixes for quick identification.
v0.17.0 (2026-06-13)
-
Export and Preview
- Static export and local preview are significantly faster for large sites; list filtering and tag/category queries are also more stable with large datasets.
- Preview enables lazy image loading (
lazy_img) by default; local image processing and caching are optimized, reducing IO when repeatedly previewing the same media. - Export concurrency is controlled by
--export-workers(alias--export-jobs), defaulting to the number of CPU cores.
-
Indexing and Startup
- Content index is cached at
{work_dir}/__everkm/cache/everkm-publish.db, with automatic migration on startup; manualdb-migrateis no longer needed. - If the index structure is incompatible after a version upgrade, it is automatically rebuilt (the first startup may be slightly slower, which is normal).
- Directory configuration
foldersis aligned with legacyDirConfigbehavior; path/slug/title lookup continues the case-insensitive semantics from v0.16.15.
- Content index is cached at
-
Theme Installation
- Remote installation aligns with the ekmp-themes official catalog; a CDN fallback is attempted when the primary source fails.
- Supports
{author}/{theme-name}@versionexpressions and local.zippackage installation. - The default theme directory for scaffolding changed from
youlogtoeverkm/youlog(only affectsinitfor new sites).
-
Markdown and Page Behavior
- Breaking change: curly-brace macros such as
{{everkm::include(...)}}and{{everkm::toc(...)}}have been removed; please use fenced blocks like```macro/includeand```macro/tocinstead. - During preview and publishing, if the first h1 in the body duplicates the page title, it is automatically hidden to avoid showing the title twice.
- dCard card rendering is aligned with v0.16.15; extended attributes,
exclude_tags, and other behaviors are more consistent after the scraper upgrade. - In book/navigation templates, context passing is more complete when
nav_treeand similar functions indirectly pull lists, reducing secondary rendering warnings.
- Breaking change: curly-brace macros such as
-
Templates and CLI
- Breaking change: the article date field in Tera templates renamed from
post.datetopost.created_at(second-level timestamp). - The CLI subcommand
createhas been renamed toinit. - The preview server adds a
/__everkm/navigation page for browsing built-in APIs and debugging endpoints.
- Breaking change: the article date field in Tera templates renamed from
-
aNote Resources
- When exporting a static site from aNote,
anote://assets/...links are materialized todist/assets/media. - Markdown internal links and
img/apaths in HTML are handled consistently.
- When exporting a static site from aNote,
v0.16.15 (2026-04-11)
- Path and Reference Resolution: locating pages by content virtual path,
slug, or article title is now case-insensitive, regardless of the actual case of filenames in the repository. - Directory URLs: paths ending with
/(including the site root/) are uniformly resolved as "directory default pages", covering common conventions:index.md,slugofindex, and cases likefoo/foo.mdwhere the folder name matches the md file name. - Markdown Internal Links: internal links that specify a directory address with a trailing
/are resolved as directory pages with correct links; handling of relative paths,.mdsuffix, attachments, and other non-body resources is also more consistent and predictable in several edge cases.
v0.16.14 (2026-04-08)
Fixes
- During directory configuration merging, subdirectory
index.yamlfiles withoutbreadcrumbsno longer override and clear breadcrumbs already merged from ancestors (e.g., root directory); consistent withtemplateand other field behavior. - During directory configuration merging, non-empty
breadcrumbsin each level'sindex.yamlare appended to the ancestor chain (inheriting from root and each parent level), instead of being entirely replaced by the next level which would lose root configuration. find_by_path("/")correctly resolves the content root directory home page; for directory-level lookup, pages with the filenameindexare also treated as directory index pages, in addition toslug=index.
Additions / Improvements
PostItemaddsis_index_filename()andis_dir_index_post()for breadcrumb and path lookup reuse.- Page breadcrumbs: "Home" is no longer automatically inserted at the chain start; middle layers are entirely generated from each level's
index.yamland directory index posts (dir_index,resolve_breadcrumbs_middle) -- levels with an index post always have an entry (non-empty YAML takes priority, otherwise the level's index post is used); the chain end is the current page; if a home page entry is needed, declare it in thebreadcrumbsof the posts rootindex.yaml. - For
.../indexdirectory index pages, a different slug can be specified for internal reference without affecting the final generated filenameindex.html.
v0.16.13 (2026-04-08)
- Add a separator line at the beginning of footnote definitions.
- Fix: site root
index.yamlno longer incorrectly generates URL path segments. - Pages with the filename
indexnow have their slug forced toindex.
v0.16.12 (2026-03-18)
- Add CLI parameter
--lazy-imgto enable lazy loading for body images during export. - Footnotes are now uniformly rendered at the end of the body text.
v0.16.11 (2026-03-13)
- Fix the
index.htmlurl_path calculation issue. Removedas_channel;slug=indexnow uniformly determines url_path. - Enhanced breadcrumbs resolution capabilities.
- Added
/__everkm/postsendpoint for an overview of all pages. - Filter out
.mdfiles starting with__from parsing. DirConfigsupports the variable$THIS_DIR.
v0.16.10 (2026-03-12)
- Optimized assets public fallback priority.
- Optimized MIME type detection.
- Added request log output for
everkm-publish web.
v0.16.9 (2026-03-11)
hash_scattercan now be used as an alias forhash_storagein directory configuration.- Index pages under each directory generate
index.html, with links based on the directory; when not separately configured inindex.yaml, the index page is automatically treated as a channel page. - When breadcrumbs are not configured in
index.yaml, they are automatically generated from the current page's URL path: the index page for each directory level appears in the breadcrumbs. - When no post record is found for a URL, instead of returning a 404 directly, the request path is passed to the template engine to attempt rendering.
- Directory configuration adds a
queryoption, passed toquery_stringduring rendering. - Added
nav_treefunction. - Added
langfunction.
v0.16.8 (2025-12-09)
- Fixed extended attribute support for
blockquoteandcodeblockblocks.
v0.16.7 (2025-11-23)
- Renamed
unotopermalink. postslist addsorder_byandorder_directionparameters.
v0.16.6 (2025-11-20)
- Optimized dcard asset injection method.
- Added dcard rendering via JS.
v0.16.5 (2025-11-14)
- Fixed nginx redirect map parameter conversion error.
- Fixed Vercel redirect parameter conversion error.
v0.16.4 (2025-11-11)
Fixes
- Fixed issue where undefined properties of template objects were converted to null.
- Fixed issue where template search by suffix required a complete filename.
Improvements
postslist now excludes the current document by default.- The
asparameter ofeverkm::include()can now be omitted and is inferred from the file extension.
v0.16.3 (2025-11-08)
- Fixed breadcrumb deduplication issue when no links are present.
v0.16.2 (2025-11-03)
- Fixed Vercel configuration export issue.
- Fixed query string conversion issue.
v0.16.1 (2025-11-02)
Additions
- Content auto-lint and fix functionality (
--auto-fix-on-update). - dCard force-render switch (
--ignore-dcard-errors). - JS template rendering (SSR) support.
- Article list returns
prev/nextIDs. - Support for fetching article details by ID (
post_detail). - External resource references automatically append timestamps.
Fixes
- Fixed rendering deadlock issue.
- Fixed dcard parameter passing.
- Fixed dcard invocation.
Changes
- Deprecated the behavior of obtaining the title from the first h1 in the body.
hash_storageis now disabled by default.- Switched metadata field
datetoupdated_at.
v0.16.0 (2025-10-24)
Additions
- Directory-level configuration
DirConfig(index.yaml), supporting multi-level merge inheritance. - Automatic breadcrumb navigation injection.
- URL redirect export (supporting nginx and Vercel).
hash_storagepath fallback: long slugs are automatically mapped to short paths.- Directory configuration supports
queryquery parameters. --title-selectorparameter: customize how article titles are selected.--with-extend-md-metaparameter: export extended Markdown metadata.
Improvements
- Directory configuration merging: subdirectories inherit and override parent directory configuration.
- Page metadata parsing: uses built-in metadata parser.
v0.15.1 (2025-09-06)
- Added
__theme_nameglobal variable in templates, representing the current theme name.
v0.15.0 (2025-09-06)
Additions
__everkm/pagesdirectory supports supplementary pages independent of templates.--with-url-mapparameter exports a URL mapping file.--with-publish-mapparameter exports a publish page log.- Export nginx-compatible
url_mapfile. file_metasubcommand to read metadata of a single file.--template-pathparameter exports template paths.- Support for exporting
publish_mapoutput. - Added template asset injection functionality.
Improvements
- Unified interface definitions.
- Fixed frontend directory fallback.
v0.14.2 (2025-07-12)
- Refined
theme_diracquisition logic. - Modified asset copying and fallback rules in theme-dev mode.
v0.14.1 (2025-06-25)
Additions
--configparameter to specify the configuration file path.--theme-devparameter to enable theme development mode.- Global variable
__everkm_publish_version(current tool version). - Global variable
__theme_version(current theme version). - Support for relative URL calculation during export.
asset_base_url()function.
Improvements
- Symlinks can be used during export.
- Exit immediately on error instead of continuing.
v0.14.0 (2025-06-20)
Additions
postsfunction addsexclude_tagsparameter to exclude articles by tag.- Title fallback strategy: when no title is defined in metadata, the first h1 in the body is automatically used as the title.
- Internal links now prioritize searching by
slug. __env_is_previewglobal variable to indicate whether the current environment is a preview.- Support for watching multiple directories.
- Assets directory auto-fallback.
Fixes
- Fixed internal link resolution issues.
- Fixed sorting issues.
- Fixed missing theme version numbers.
- Avoided title promotion (edge cases when obtaining the title from the body h1).
v0.13.7 (2025-04-30)
- Fixed issue where anchors were ignored when determining relative links.
v0.13.6 (2025-04-30)
Changes
- Removed OpenSSL dependency.
- Sitemap configuration rules changed: multiple rules now select one match instead of merging.
- Glob matching rules adjusted:
*matches only one path segment,**matches multiple directory levels.
Additions
theme install --forceoption to force overwrite theme installation.- Display installed version numbers.
Fixes
- Mapping templates no longer allow relative paths.
- Fixed test cases to accommodate new configuration priority.
v0.13.5 (2025-04-26)
Additions
nav_treefunction for generating navigation trees.dir_treedirectory configuration option.LinkItemdata structure.
Fixes
- Fixed breadcrumb detection.
- Fixed alias path lookup.
- Fixed path lookup issues.
- Fixed
base_urlissue. - Fixed duplicate TOC heading keywords.
- Fixed anchor ignoring during navigation parsing.
- Fixed copying when assets directory does not exist.
Improvements
base_urladdsurlparameter, automatically converting addresses starting with~/tobase_prefix.- Optimized link comparison method.
- Added directory exclusion functionality.
- Added link crawl source log output.
v0.13.4 (2025-04-12)
- Fixed style loss issue when exporting pages.
v0.13.3 (2025-04-08)
- Fixed dcard data and scripts prioritizing reading from
__dcard. - Fixed dcard parsing errors.
- Optimized log output.
v0.13.2 (2025-04-03)
- Fixed file copy deletion error.
v0.13.1 (2025-04-02)
- Fixed directory issues.
- Fixed variable renaming.
- Adjusted print output.
v0.13.0 (2025-04-02)
Major Changes
The content directory is now the top-level directory, and all everkm-publish related configurations are unified under the __everkm directory.
Renamed Functions
post_exist->has_postmedia_local->media_remotesrc->medialocal_cfg->configlocal_cfg_exist->has_configget_random->randomget_env->envassets->assetds->datamd_html->md_to_htmlmarkdown_html->markdown_to_html
Directory Structure Changes
- Moved content from under the
contentdirectory to the top level;postis promoted one level up and flattened. - All everkm-related files are placed under the
__everkmdirectory.
Additions
regex_replacefilter.- Global variable
__host.