Releases: WaylonWalker/markata
v0.11.0.dev11
Markata Changelog
0.11.0
CLI Configuration Overrides
- Feat: Add
-s/--setflag for runtime config overrides with dot notation (e.g.,-s 'style.theme=nord') - Feat: Add
-c/--configflag for alternate config files - Feat: Add
-o/--output-dirflag for output directory override - Feat: Add support for
MARKATA_*environment variables with nested config (e.g.,MARKATA_STYLE__THEME=nord) - Feat: Add
parse_set_options()and_deep_merge()utilities for config handling - Enable: Runtime theme switching and configuration without editing files
Performance Improvements
- Perf: increased diskcache size limit to 5GB and reduced cull_limit to minimize expensive eviction operations (saves ~4s during cache culling)
- Perf: optimized feed hash generation to use lightweight post identifiers (slug + content_hash) instead of expensive
str(post.to_dict())serialization (saves ~6s) - Perf: feeds now cache expensive
feed.map()calls during hash generation (~7.7s savings) - Perf: feeds batch directory creation operations (~2s savings)
- Perf: feeds only read XSL files when they exist and need comparison
- Perf: to_json, service_worker, redirects, jinja_env, and post_template now only write files when content changes (prevents unnecessary file system modifications and downstream syncing)
Cache Invalidation Improvements
- Fix: feeds now properly invalidate cache when post metadata changes (title, date, slug, published, description)
- Fix: feeds now properly invalidate cache when template files are modified
- Fix: post_template now tracks template file changes for cache invalidation
- Fix: redirects now invalidate cache when template files change
- Fix: jinja_md now includes post metadata and version in cache keys
- Fix: standardized cache keys across plugins to include
__version__for proper invalidation on updates - Fix: render_markdown now includes backend and extensions in cache key
- Fix:
auto_descriptionnow strips wikilinks, HTML tags, markdown-it attributes (e.g. {.class-name}), Jinja template tags, admonitions (!!!, !!!+, ???, ???+), and HTML comments for cleaner descriptions - Fix:
publish_htmlnow properly resolves customoutput_htmlpaths relative tooutput_dir, preventing files from being written to project root - Perf: heading_link replaced expensive file I/O with
__version__in cache key - Feat: feeds now support atom feeds
Enhanced Wikilinks System
- Feat: Added comprehensive configuration system for wikilinks resolution with priority-based scoring
- Feat: Implemented intelligent duplicate resolution that eliminates false warnings for hierarchical patterns (e.g.,
tag/pythonvspython) - Fix: Fixed display text override syntax
[[page|Display Text]]- now properly splits on first pipe and preserves display text - Feat: Added support for anchor links
[[page#anchor]]and complex syntax[[folder/page#anchor|Display Text]] - Feat: Configurable priority rules allow custom scoring patterns for different content types
- Feat: Warning suppression patterns to reduce noise for expected duplicates (e.g.,
tag/*,category/*) - Feat: Multiple resolution strategies: "priority" (default), "first", or "warn"
Template Utilities (Breaking for Plugin Authors)
- BREAKING: Removed internal
get_template()functions fromfeeds.pyandpost_template.py - Feat: added centralized
get_template(),get_template_paths(), andget_templates_mtime()tojinja_envplugin - Feat:
get_template()includes automatic caching with@lru_cacheand smart fallback handling - Plugin authors: Import from
markata.plugins.jinja_envinstead of using internal functionsfrom markata.plugins.jinja_env import get_template, get_templates_mtime template = get_template(markata.jinja_env, "template.html")
0.10.1
- Release: version bump
0.10.0
Feed Pagination
- Feat: Add feed pagination with three types:
htmx,manual,js - Feat: HTMX infinite scroll with partial loading
- Feat: JavaScript infinite scroll using Intersection Observer
- Feat: Manual page navigation with prev/next controls
- Feat: Configurable
items_per_page,pagination_type, andenabledper feed
Security
- Feat: SHA-256 integrity verification for HTMX downloads (25+ versions supported)
- Feat: Path traversal protection for feed slugs
- Feat: XSS prevention in templates using
|tojsonfilter - Feat: Fail securely if HTMX download fails (no CDN fallback)
- Feat: Comprehensive security test suite for feeds
Other
- Feat: Improve feed name sanitization with Python identifier conversion
- Feat: Add pagination implementation guide documentation
- Fix:
auto_descriptionnow more accurately returns plain text, does not cut off words, and add an ellipsis. - Fix: article_html now typed such that it may be a dict without warning
- publish_source now only supports using post models that include a dumps command, i.e. no longer frontmatter post objects
- Fix: Raise warning, do not silently pass no config when
markata.tomlhas parse errors - Feat: Save files only if they have changed, this prevents whole site re-deploys on every change
- Fix: do not use the word index in the slug of the post for links
0.9.1
- HUGE DOCS UPDATE
- Fix: feeds now update with any content change
- Fix: og tags should use property not name
- Feat: centralized
jinja_envplugin that is used for template rendering accross all plugins - Feat: added support for multiple templates per article https://markata.dev/multi-template/
- Feat: skip now supports environment variable
MARKATA_SKIP=true/falseto control skipping
0.9.0
- Feat: add skip plugin
- Fix: wikilinks uses a faster and more robust link lookup
- Feat: most plugins now only do work on posts not marked as skip
- Fix: wikilinks now give good error messages to show you which article is throwing the warning
Performance Improvements
Here are a couple of build times ran back to back on the same content with 0.8.2 and 0.9.0
Markata
63 posts
- 0.9.0 - 4.308s cold - 1.457s hot
- 0.8.2 - 9.063s cold - 1.542s hot
waylonwalker.com
exactly 2k posts
- 0.9.0 - 69.200s cold - 2.860 hot
- 0.8.2 - 479s cold - 4.683 hot
Core Optimizations
- Added map cache with statistics tracking in Markata core
- Optimized template rendering with bytecode caching
- Parallelized markdown rendering and file loading
- Added configurable cache expiration times for different components
Component-specific Optimizations
- Updated auto_description to use markdown-it for better performance
- Improved date parsing with dateparser fallback
- Optimized post loading with bulk processing
- Modernized pydantic validators to use new field_validator syntax
0.8.2
- Fix: markata installs setuptools required by one dependency
- Fix: cleaup cli output
- Fix: speed up cli starup with some lazy imports
- Fix: all cache.adds were replaced with cache.set
- Fix: Updated to new typer format requiring name=
- Fix: teardown only runs if a the build process was started, i.e. some clis
will not need to teardown
0.8.1
Feeds have partials
The feeds plugin now has configurable partial_template that can be used to
render only the inside of the feeds page. This is indended to allow you to
load small feeds into a page with htmx.
Better Jinja Templates
Markata now fully supports jinja templates with a loader that will load from
your templates directory, the markata built-in templates, and from a
dynamically generated templates directory in your .markata.cache directory.
cli
You can list out your templates and configuration with the following command
markata templates showVariables
The following variables are available within jinja templates for post
templates. This is now consistent accross all three built in plugins that
render jinja templates.
post_template
__version__- the version of markatamarkata- the markata instanceconfig- the markata configbody- the body of the postpost- the current post object
feeds
Similarly from within rendering feeds.
__version__- the version of markatamarkata- the markata instanceconfig- the markata configposts- the list of postspost- a pseudo post object with title, slug, description, and date for template consistencyfeed- the current feed object
jinja_md
Similar to posts from within jinja_md to render a markdown post as a template.
__version__- the version of markatamarkata- the markata instancebody- the body of the postconfig- the markata configpost- the current post object
Feeds cli
The feeds cli will help show which templates each feed will be using.
❯ markata feeds show
Feeds 6
┏━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Feed ┃ posts ┃ config ┃
┡━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ project_gallery │ 2 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Project Gallery │
│ │ │ slug: project-gallery │
│ │ │ name: project_gallery │
│ │ │ filter: 'project-gallery' in str(path) │
│ │ │ sort: title │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │...v0.11.0.dev10
Markata Changelog
0.11.0
CLI Configuration Overrides
- Feat: Add
-s/--setflag for runtime config overrides with dot notation (e.g.,-s 'style.theme=nord') - Feat: Add
-c/--configflag for alternate config files - Feat: Add
-o/--output-dirflag for output directory override - Feat: Add support for
MARKATA_*environment variables with nested config (e.g.,MARKATA_STYLE__THEME=nord) - Feat: Add
parse_set_options()and_deep_merge()utilities for config handling - Enable: Runtime theme switching and configuration without editing files
Performance Improvements
- Perf: increased diskcache size limit to 5GB and reduced cull_limit to minimize expensive eviction operations (saves ~4s during cache culling)
- Perf: optimized feed hash generation to use lightweight post identifiers (slug + content_hash) instead of expensive
str(post.to_dict())serialization (saves ~6s) - Perf: feeds now cache expensive
feed.map()calls during hash generation (~7.7s savings) - Perf: feeds batch directory creation operations (~2s savings)
- Perf: feeds only read XSL files when they exist and need comparison
- Perf: to_json, service_worker, redirects, jinja_env, and post_template now only write files when content changes (prevents unnecessary file system modifications and downstream syncing)
Cache Invalidation Improvements
- Fix: feeds now properly invalidate cache when post metadata changes (title, date, slug, published, description)
- Fix: feeds now properly invalidate cache when template files are modified
- Fix: post_template now tracks template file changes for cache invalidation
- Fix: redirects now invalidate cache when template files change
- Fix: jinja_md now includes post metadata and version in cache keys
- Fix: standardized cache keys across plugins to include
__version__for proper invalidation on updates - Fix: render_markdown now includes backend and extensions in cache key
- Fix:
auto_descriptionnow strips wikilinks, HTML tags, markdown-it attributes (e.g. {.class-name}), Jinja template tags, admonitions (!!!, !!!+, ???, ???+), and HTML comments for cleaner descriptions - Fix:
publish_htmlnow properly resolves customoutput_htmlpaths relative tooutput_dir, preventing files from being written to project root - Perf: heading_link replaced expensive file I/O with
__version__in cache key - Feat: feeds now support atom feeds
Enhanced Wikilinks System
- Feat: Added comprehensive configuration system for wikilinks resolution with priority-based scoring
- Feat: Implemented intelligent duplicate resolution that eliminates false warnings for hierarchical patterns (e.g.,
tag/pythonvspython) - Fix: Fixed display text override syntax
[[page|Display Text]]- now properly splits on first pipe and preserves display text - Feat: Added support for anchor links
[[page#anchor]]and complex syntax[[folder/page#anchor|Display Text]] - Feat: Configurable priority rules allow custom scoring patterns for different content types
- Feat: Warning suppression patterns to reduce noise for expected duplicates (e.g.,
tag/*,category/*) - Feat: Multiple resolution strategies: "priority" (default), "first", or "warn"
Template Utilities (Breaking for Plugin Authors)
- BREAKING: Removed internal
get_template()functions fromfeeds.pyandpost_template.py - Feat: added centralized
get_template(),get_template_paths(), andget_templates_mtime()tojinja_envplugin - Feat:
get_template()includes automatic caching with@lru_cacheand smart fallback handling - Plugin authors: Import from
markata.plugins.jinja_envinstead of using internal functionsfrom markata.plugins.jinja_env import get_template, get_templates_mtime template = get_template(markata.jinja_env, "template.html")
0.10.1
- Release: version bump
0.10.0
- Fix:
auto_descriptionnow more accurately returns plain text, does not cut off words, and add an ellipsis. - Fix: article_html now typed such that it may be a dict without warning
- publish_source now only supports using post models that include a dumps command, i.e. no longer frontmatter post objects
- Fix: Raise warning, do not silently pass no config when
markata.tomlhas parse errors - Feat: Save files only if they have changed, this prevents whole site re-deploys on every change
- Fix: do not use the word index in the slug of the post for links
0.9.1
- HUGE DOCS UPDATE
- Fix: feeds now update with any content change
- Fix: og tags should use property not name
- Feat: centralized
jinja_envplugin that is used for template rendering accross all plugins - Feat: added support for multiple templates per article https://markata.dev/multi-template/
- Feat: skip now supports environment variable
MARKATA_SKIP=true/falseto control skipping
0.9.0
- Feat: add skip plugin
- Fix: wikilinks uses a faster and more robust link lookup
- Feat: most plugins now only do work on posts not marked as skip
- Fix: wikilinks now give good error messages to show you which article is throwing the warning
Performance Improvements
Here are a couple of build times ran back to back on the same content with 0.8.2 and 0.9.0
Markata
63 posts
- 0.9.0 - 4.308s cold - 1.457s hot
- 0.8.2 - 9.063s cold - 1.542s hot
waylonwalker.com
exactly 2k posts
- 0.9.0 - 69.200s cold - 2.860 hot
- 0.8.2 - 479s cold - 4.683 hot
Core Optimizations
- Added map cache with statistics tracking in Markata core
- Optimized template rendering with bytecode caching
- Parallelized markdown rendering and file loading
- Added configurable cache expiration times for different components
Component-specific Optimizations
- Updated auto_description to use markdown-it for better performance
- Improved date parsing with dateparser fallback
- Optimized post loading with bulk processing
- Modernized pydantic validators to use new field_validator syntax
0.8.2
- Fix: markata installs setuptools required by one dependency
- Fix: cleaup cli output
- Fix: speed up cli starup with some lazy imports
- Fix: all cache.adds were replaced with cache.set
- Fix: Updated to new typer format requiring name=
- Fix: teardown only runs if a the build process was started, i.e. some clis
will not need to teardown
0.8.1
Feeds have partials
The feeds plugin now has configurable partial_template that can be used to
render only the inside of the feeds page. This is indended to allow you to
load small feeds into a page with htmx.
Better Jinja Templates
Markata now fully supports jinja templates with a loader that will load from
your templates directory, the markata built-in templates, and from a
dynamically generated templates directory in your .markata.cache directory.
cli
You can list out your templates and configuration with the following command
markata templates showVariables
The following variables are available within jinja templates for post
templates. This is now consistent accross all three built in plugins that
render jinja templates.
post_template
__version__- the version of markatamarkata- the markata instanceconfig- the markata configbody- the body of the postpost- the current post object
feeds
Similarly from within rendering feeds.
__version__- the version of markatamarkata- the markata instanceconfig- the markata configposts- the list of postspost- a pseudo post object with title, slug, description, and date for template consistencyfeed- the current feed object
jinja_md
Similar to posts from within jinja_md to render a markdown post as a template.
__version__- the version of markatamarkata- the markata instancebody- the body of the postconfig- the markata configpost- the current post object
Feeds cli
The feeds cli will help show which templates each feed will be using.
❯ markata feeds show
Feeds 6
┏━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Feed ┃ posts ┃ config ┃
┡━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ project_gallery │ 2 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Project Gallery │
│ │ │ slug: project-gallery │
│ │ │ name: project_gallery │
│ │ │ filter: 'project-gallery' in str(path) │
│ │ │ sort: title │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ docs │ 10 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Documentation │
│ │ │ slug: docs │
│ ...v0.11.0.dev9
Markata Changelog
0.11.0
CLI Configuration Overrides
- Feat: Add
-s/--setflag for runtime config overrides with dot notation (e.g.,-s 'style.theme=nord') - Feat: Add
-c/--configflag for alternate config files - Feat: Add
-o/--output-dirflag for output directory override - Feat: Add support for
MARKATA_*environment variables with nested config (e.g.,MARKATA_STYLE__THEME=nord) - Feat: Add
parse_set_options()and_deep_merge()utilities for config handling - Enable: Runtime theme switching and configuration without editing files
Performance Improvements
- Perf: increased diskcache size limit to 5GB and reduced cull_limit to minimize expensive eviction operations (saves ~4s during cache culling)
- Perf: optimized feed hash generation to use lightweight post identifiers (slug + content_hash) instead of expensive
str(post.to_dict())serialization (saves ~6s) - Perf: feeds now cache expensive
feed.map()calls during hash generation (~7.7s savings) - Perf: feeds batch directory creation operations (~2s savings)
- Perf: feeds only read XSL files when they exist and need comparison
- Perf: to_json, service_worker, redirects, jinja_env, and post_template now only write files when content changes (prevents unnecessary file system modifications and downstream syncing)
Cache Invalidation Improvements
- Fix: feeds now properly invalidate cache when post metadata changes (title, date, slug, published, description)
- Fix: feeds now properly invalidate cache when template files are modified
- Fix: post_template now tracks template file changes for cache invalidation
- Fix: redirects now invalidate cache when template files change
- Fix: jinja_md now includes post metadata and version in cache keys
- Fix: standardized cache keys across plugins to include
__version__for proper invalidation on updates - Fix: render_markdown now includes backend and extensions in cache key
- Fix:
auto_descriptionnow strips wikilinks, HTML tags, markdown-it attributes (e.g. {.class-name}), Jinja template tags, admonitions (!!!, !!!+, ???, ???+), and HTML comments for cleaner descriptions - Fix:
publish_htmlnow properly resolves customoutput_htmlpaths relative tooutput_dir, preventing files from being written to project root - Perf: heading_link replaced expensive file I/O with
__version__in cache key - Feat: feeds now support atom feeds
Template Utilities (Breaking for Plugin Authors)
- BREAKING: Removed internal
get_template()functions fromfeeds.pyandpost_template.py - Feat: added centralized
get_template(),get_template_paths(), andget_templates_mtime()tojinja_envplugin - Feat:
get_template()includes automatic caching with@lru_cacheand smart fallback handling - Plugin authors: Import from
markata.plugins.jinja_envinstead of using internal functionsfrom markata.plugins.jinja_env import get_template, get_templates_mtime template = get_template(markata.jinja_env, "template.html")
0.10.1
- Release: version bump
0.10.0
- Fix:
auto_descriptionnow more accurately returns plain text, does not cut off words, and add an ellipsis. - Fix: article_html now typed such that it may be a dict without warning
- publish_source now only supports using post models that include a dumps command, i.e. no longer frontmatter post objects
- Fix: Raise warning, do not silently pass no config when
markata.tomlhas parse errors - Feat: Save files only if they have changed, this prevents whole site re-deploys on every change
- Fix: do not use the word index in the slug of the post for links
0.9.1
- HUGE DOCS UPDATE
- Fix: feeds now update with any content change
- Fix: og tags should use property not name
- Feat: centralized
jinja_envplugin that is used for template rendering accross all plugins - Feat: added support for multiple templates per article https://markata.dev/multi-template/
- Feat: skip now supports environment variable
MARKATA_SKIP=true/falseto control skipping
0.9.0
- Feat: add skip plugin
- Fix: wikilinks uses a faster and more robust link lookup
- Feat: most plugins now only do work on posts not marked as skip
- Fix: wikilinks now give good error messages to show you which article is throwing the warning
Performance Improvements
Here are a couple of build times ran back to back on the same content with 0.8.2 and 0.9.0
Markata
63 posts
- 0.9.0 - 4.308s cold - 1.457s hot
- 0.8.2 - 9.063s cold - 1.542s hot
waylonwalker.com
exactly 2k posts
- 0.9.0 - 69.200s cold - 2.860 hot
- 0.8.2 - 479s cold - 4.683 hot
Core Optimizations
- Added map cache with statistics tracking in Markata core
- Optimized template rendering with bytecode caching
- Parallelized markdown rendering and file loading
- Added configurable cache expiration times for different components
Component-specific Optimizations
- Updated auto_description to use markdown-it for better performance
- Improved date parsing with dateparser fallback
- Optimized post loading with bulk processing
- Modernized pydantic validators to use new field_validator syntax
0.8.2
- Fix: markata installs setuptools required by one dependency
- Fix: cleaup cli output
- Fix: speed up cli starup with some lazy imports
- Fix: all cache.adds were replaced with cache.set
- Fix: Updated to new typer format requiring name=
- Fix: teardown only runs if a the build process was started, i.e. some clis
will not need to teardown
0.8.1
Feeds have partials
The feeds plugin now has configurable partial_template that can be used to
render only the inside of the feeds page. This is indended to allow you to
load small feeds into a page with htmx.
Better Jinja Templates
Markata now fully supports jinja templates with a loader that will load from
your templates directory, the markata built-in templates, and from a
dynamically generated templates directory in your .markata.cache directory.
cli
You can list out your templates and configuration with the following command
markata templates showVariables
The following variables are available within jinja templates for post
templates. This is now consistent accross all three built in plugins that
render jinja templates.
post_template
__version__- the version of markatamarkata- the markata instanceconfig- the markata configbody- the body of the postpost- the current post object
feeds
Similarly from within rendering feeds.
__version__- the version of markatamarkata- the markata instanceconfig- the markata configposts- the list of postspost- a pseudo post object with title, slug, description, and date for template consistencyfeed- the current feed object
jinja_md
Similar to posts from within jinja_md to render a markdown post as a template.
__version__- the version of markatamarkata- the markata instancebody- the body of the postconfig- the markata configpost- the current post object
Feeds cli
The feeds cli will help show which templates each feed will be using.
❯ markata feeds show
Feeds 6
┏━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Feed ┃ posts ┃ config ┃
┡━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ project_gallery │ 2 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Project Gallery │
│ │ │ slug: project-gallery │
│ │ │ name: project_gallery │
│ │ │ filter: 'project-gallery' in str(path) │
│ │ │ sort: title │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ docs │ 10 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Documentation │
│ │ │ slug: docs │
│ │ │ name: docs │
│ │ │ filter: "markata" not in slug and "tests" not in slug and ... │
│ │ │ sort: slug │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml ...v0.11.0.dev8
Markata Changelog
0.11.0
Performance Improvements
- Perf: increased diskcache size limit to 5GB and reduced cull_limit to minimize expensive eviction operations (saves ~4s during cache culling)
- Perf: optimized feed hash generation to use lightweight post identifiers (slug + content_hash) instead of expensive
str(post.to_dict())serialization (saves ~6s) - Perf: feeds now cache expensive
feed.map()calls during hash generation (~7.7s savings) - Perf: feeds batch directory creation operations (~2s savings)
- Perf: feeds only read XSL files when they exist and need comparison
- Perf: to_json, service_worker, redirects, jinja_env, and post_template now only write files when content changes (prevents unnecessary file system modifications and downstream syncing)
Cache Invalidation Improvements
- Fix: feeds now properly invalidate cache when post metadata changes (title, date, slug, published, description)
- Fix: feeds now properly invalidate cache when template files are modified
- Fix: post_template now tracks template file changes for cache invalidation
- Fix: redirects now invalidate cache when template files change
- Fix: jinja_md now includes post metadata and version in cache keys
- Fix: standardized cache keys across plugins to include
__version__for proper invalidation on updates - Fix: render_markdown now includes backend and extensions in cache key
- Fix:
auto_descriptionnow strips wikilinks, HTML tags, markdown-it attributes (e.g. {.class-name}), Jinja template tags, admonitions (!!!, !!!+, ???, ???+), and HTML comments for cleaner descriptions - Fix:
publish_htmlnow properly resolves customoutput_htmlpaths relative tooutput_dir, preventing files from being written to project root - Perf: heading_link replaced expensive file I/O with
__version__in cache key - Feat: feeds now support atom feeds
Template Utilities (Breaking for Plugin Authors)
- BREAKING: Removed internal
get_template()functions fromfeeds.pyandpost_template.py - Feat: added centralized
get_template(),get_template_paths(), andget_templates_mtime()tojinja_envplugin - Feat:
get_template()includes automatic caching with@lru_cacheand smart fallback handling - Plugin authors: Import from
markata.plugins.jinja_envinstead of using internal functionsfrom markata.plugins.jinja_env import get_template, get_templates_mtime template = get_template(markata.jinja_env, "template.html")
0.10.1
- Release: version bump
0.10.0
- Fix:
auto_descriptionnow more accurately returns plain text, does not cut off words, and add an ellipsis. - Fix: article_html now typed such that it may be a dict without warning
- publish_source now only supports using post models that include a dumps command, i.e. no longer frontmatter post objects
- Fix: Raise warning, do not silently pass no config when
markata.tomlhas parse errors - Feat: Save files only if they have changed, this prevents whole site re-deploys on every change
- Fix: do not use the word index in the slug of the post for links
0.9.1
- HUGE DOCS UPDATE
- Fix: feeds now update with any content change
- Fix: og tags should use property not name
- Feat: centralized
jinja_envplugin that is used for template rendering accross all plugins - Feat: added support for multiple templates per article https://markata.dev/multi-template/
- Feat: skip now supports environment variable
MARKATA_SKIP=true/falseto control skipping
0.9.0
- Feat: add skip plugin
- Fix: wikilinks uses a faster and more robust link lookup
- Feat: most plugins now only do work on posts not marked as skip
- Fix: wikilinks now give good error messages to show you which article is throwing the warning
Performance Improvements
Here are a couple of build times ran back to back on the same content with 0.8.2 and 0.9.0
Markata
63 posts
- 0.9.0 - 4.308s cold - 1.457s hot
- 0.8.2 - 9.063s cold - 1.542s hot
waylonwalker.com
exactly 2k posts
- 0.9.0 - 69.200s cold - 2.860 hot
- 0.8.2 - 479s cold - 4.683 hot
Core Optimizations
- Added map cache with statistics tracking in Markata core
- Optimized template rendering with bytecode caching
- Parallelized markdown rendering and file loading
- Added configurable cache expiration times for different components
Component-specific Optimizations
- Updated auto_description to use markdown-it for better performance
- Improved date parsing with dateparser fallback
- Optimized post loading with bulk processing
- Modernized pydantic validators to use new field_validator syntax
0.8.2
- Fix: markata installs setuptools required by one dependency
- Fix: cleaup cli output
- Fix: speed up cli starup with some lazy imports
- Fix: all cache.adds were replaced with cache.set
- Fix: Updated to new typer format requiring name=
- Fix: teardown only runs if a the build process was started, i.e. some clis
will not need to teardown
0.8.1
Feeds have partials
The feeds plugin now has configurable partial_template that can be used to
render only the inside of the feeds page. This is indended to allow you to
load small feeds into a page with htmx.
Better Jinja Templates
Markata now fully supports jinja templates with a loader that will load from
your templates directory, the markata built-in templates, and from a
dynamically generated templates directory in your .markata.cache directory.
cli
You can list out your templates and configuration with the following command
markata templates showVariables
The following variables are available within jinja templates for post
templates. This is now consistent accross all three built in plugins that
render jinja templates.
post_template
__version__- the version of markatamarkata- the markata instanceconfig- the markata configbody- the body of the postpost- the current post object
feeds
Similarly from within rendering feeds.
__version__- the version of markatamarkata- the markata instanceconfig- the markata configposts- the list of postspost- a pseudo post object with title, slug, description, and date for template consistencyfeed- the current feed object
jinja_md
Similar to posts from within jinja_md to render a markdown post as a template.
__version__- the version of markatamarkata- the markata instancebody- the body of the postconfig- the markata configpost- the current post object
Feeds cli
The feeds cli will help show which templates each feed will be using.
❯ markata feeds show
Feeds 6
┏━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Feed ┃ posts ┃ config ┃
┡━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ project_gallery │ 2 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Project Gallery │
│ │ │ slug: project-gallery │
│ │ │ name: project_gallery │
│ │ │ filter: 'project-gallery' in str(path) │
│ │ │ sort: title │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ docs │ 10 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Documentation │
│ │ │ slug: docs │
│ │ │ name: docs │
│ │ │ filter: "markata" not in slug and "tests" not in slug and ... │
│ │ │ sort: slug │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ autodoc │ 17 │ DEFAULT_TITLE: All Posts │
│ │ │ title: AutoDoc Python Modules. │
│ │ │ slug: autodoc ...v0.11.0.dev7
Markata Changelog
0.11.0
Performance Improvements
- Perf: increased diskcache size limit to 5GB and reduced cull_limit to minimize expensive eviction operations (saves ~4s during cache culling)
- Perf: optimized feed hash generation to use lightweight post identifiers (slug + content_hash) instead of expensive
str(post.to_dict())serialization (saves ~6s) - Perf: feeds now cache expensive
feed.map()calls during hash generation (~7.7s savings) - Perf: feeds batch directory creation operations (~2s savings)
- Perf: feeds only read XSL files when they exist and need comparison
- Perf: to_json, service_worker, redirects, jinja_env, and post_template now only write files when content changes (prevents unnecessary file system modifications and downstream syncing)
Cache Invalidation Improvements
- Fix: feeds now properly invalidate cache when post metadata changes (title, date, slug, published, description)
- Fix: feeds now properly invalidate cache when template files are modified
- Fix: post_template now tracks template file changes for cache invalidation
- Fix: redirects now invalidate cache when template files change
- Fix: jinja_md now includes post metadata and version in cache keys
- Fix: standardized cache keys across plugins to include
__version__for proper invalidation on updates - Fix: render_markdown now includes backend and extensions in cache key
- Fix:
auto_descriptionnow strips wikilinks, HTML tags, markdown-it attributes (e.g. {.class-name}), Jinja template tags, admonitions (!!!, !!!+, ???, ???+), and HTML comments for cleaner descriptions - Fix:
publish_htmlnow properly resolves customoutput_htmlpaths relative tooutput_dir, preventing files from being written to project root - Perf: heading_link replaced expensive file I/O with
__version__in cache key - Feat: feeds now support atom feeds
Template Utilities (Breaking for Plugin Authors)
- BREAKING: Removed internal
get_template()functions fromfeeds.pyandpost_template.py - Feat: added centralized
get_template(),get_template_paths(), andget_templates_mtime()tojinja_envplugin - Feat:
get_template()includes automatic caching with@lru_cacheand smart fallback handling - Plugin authors: Import from
markata.plugins.jinja_envinstead of using internal functionsfrom markata.plugins.jinja_env import get_template, get_templates_mtime template = get_template(markata.jinja_env, "template.html")
0.10.1
- Release: version bump
0.10.0
- Fix:
auto_descriptionnow more accurately returns plain text, does not cut off words, and add an ellipsis. - Fix: article_html now typed such that it may be a dict without warning
- publish_source now only supports using post models that include a dumps command, i.e. no longer frontmatter post objects
- Fix: Raise warning, do not silently pass no config when
markata.tomlhas parse errors - Feat: Save files only if they have changed, this prevents whole site re-deploys on every change
- Fix: do not use the word index in the slug of the post for links
0.9.1
- HUGE DOCS UPDATE
- Fix: feeds now update with any content change
- Fix: og tags should use property not name
- Feat: centralized
jinja_envplugin that is used for template rendering accross all plugins - Feat: added support for multiple templates per article https://markata.dev/multi-template/
- Feat: skip now supports environment variable
MARKATA_SKIP=true/falseto control skipping
0.9.0
- Feat: add skip plugin
- Fix: wikilinks uses a faster and more robust link lookup
- Feat: most plugins now only do work on posts not marked as skip
- Fix: wikilinks now give good error messages to show you which article is throwing the warning
Performance Improvements
Here are a couple of build times ran back to back on the same content with 0.8.2 and 0.9.0
Markata
63 posts
- 0.9.0 - 4.308s cold - 1.457s hot
- 0.8.2 - 9.063s cold - 1.542s hot
waylonwalker.com
exactly 2k posts
- 0.9.0 - 69.200s cold - 2.860 hot
- 0.8.2 - 479s cold - 4.683 hot
Core Optimizations
- Added map cache with statistics tracking in Markata core
- Optimized template rendering with bytecode caching
- Parallelized markdown rendering and file loading
- Added configurable cache expiration times for different components
Component-specific Optimizations
- Updated auto_description to use markdown-it for better performance
- Improved date parsing with dateparser fallback
- Optimized post loading with bulk processing
- Modernized pydantic validators to use new field_validator syntax
0.8.2
- Fix: markata installs setuptools required by one dependency
- Fix: cleaup cli output
- Fix: speed up cli starup with some lazy imports
- Fix: all cache.adds were replaced with cache.set
- Fix: Updated to new typer format requiring name=
- Fix: teardown only runs if a the build process was started, i.e. some clis
will not need to teardown
0.8.1
Feeds have partials
The feeds plugin now has configurable partial_template that can be used to
render only the inside of the feeds page. This is indended to allow you to
load small feeds into a page with htmx.
Better Jinja Templates
Markata now fully supports jinja templates with a loader that will load from
your templates directory, the markata built-in templates, and from a
dynamically generated templates directory in your .markata.cache directory.
cli
You can list out your templates and configuration with the following command
markata templates showVariables
The following variables are available within jinja templates for post
templates. This is now consistent accross all three built in plugins that
render jinja templates.
post_template
__version__- the version of markatamarkata- the markata instanceconfig- the markata configbody- the body of the postpost- the current post object
feeds
Similarly from within rendering feeds.
__version__- the version of markatamarkata- the markata instanceconfig- the markata configposts- the list of postspost- a pseudo post object with title, slug, description, and date for template consistencyfeed- the current feed object
jinja_md
Similar to posts from within jinja_md to render a markdown post as a template.
__version__- the version of markatamarkata- the markata instancebody- the body of the postconfig- the markata configpost- the current post object
Feeds cli
The feeds cli will help show which templates each feed will be using.
❯ markata feeds show
Feeds 6
┏━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Feed ┃ posts ┃ config ┃
┡━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ project_gallery │ 2 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Project Gallery │
│ │ │ slug: project-gallery │
│ │ │ name: project_gallery │
│ │ │ filter: 'project-gallery' in str(path) │
│ │ │ sort: title │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ docs │ 10 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Documentation │
│ │ │ slug: docs │
│ │ │ name: docs │
│ │ │ filter: "markata" not in slug and "tests" not in slug and ... │
│ │ │ sort: slug │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ autodoc │ 17 │ DEFAULT_TITLE: All Posts │
│ │ │ title: AutoDoc Python Modules. │
│ │ │ slug: autodoc ...v0.11.0.dev6
Markata Changelog
0.11.0
Performance Improvements
- Perf: feeds now cache expensive
feed.map()calls during hash generation (~7.7s savings) - Perf: feeds batch directory creation operations (~2s savings)
- Perf: feeds only read XSL files when they exist and need comparison
- Perf: to_json, service_worker, redirects, jinja_env, and post_template now only write files when content changes (prevents unnecessary file system modifications and downstream syncing)
Cache Invalidation Improvements
- Fix: feeds now properly invalidate cache when post metadata changes (title, date, slug, published, description)
- Fix: feeds now properly invalidate cache when template files are modified
- Fix: post_template now tracks template file changes for cache invalidation
- Fix: redirects now invalidate cache when template files change
- Fix: jinja_md now includes post metadata and version in cache keys
- Fix: standardized cache keys across plugins to include
__version__for proper invalidation on updates - Fix: render_markdown now includes backend and extensions in cache key
- Fix:
auto_descriptionnow strips wikilinks, HTML tags, markdown-it attributes (e.g. {.class-name}), Jinja template tags, admonitions (!!!, !!!+, ???, ???+), and HTML comments for cleaner descriptions - Fix:
publish_htmlnow properly resolves customoutput_htmlpaths relative tooutput_dir, preventing files from being written to project root - Perf: heading_link replaced expensive file I/O with
__version__in cache key - Feat: feeds now support atom feeds
Template Utilities (Breaking for Plugin Authors)
- BREAKING: Removed internal
get_template()functions fromfeeds.pyandpost_template.py - Feat: added centralized
get_template(),get_template_paths(), andget_templates_mtime()tojinja_envplugin - Feat:
get_template()includes automatic caching with@lru_cacheand smart fallback handling - Plugin authors: Import from
markata.plugins.jinja_envinstead of using internal functionsfrom markata.plugins.jinja_env import get_template, get_templates_mtime template = get_template(markata.jinja_env, "template.html")
0.10.1
- Release: version bump
0.10.0
- Fix:
auto_descriptionnow more accurately returns plain text, does not cut off words, and add an ellipsis. - Fix: article_html now typed such that it may be a dict without warning
- publish_source now only supports using post models that include a dumps command, i.e. no longer frontmatter post objects
- Fix: Raise warning, do not silently pass no config when
markata.tomlhas parse errors - Feat: Save files only if they have changed, this prevents whole site re-deploys on every change
- Fix: do not use the word index in the slug of the post for links
0.9.1
- HUGE DOCS UPDATE
- Fix: feeds now update with any content change
- Fix: og tags should use property not name
- Feat: centralized
jinja_envplugin that is used for template rendering accross all plugins - Feat: added support for multiple templates per article https://markata.dev/multi-template/
- Feat: skip now supports environment variable
MARKATA_SKIP=true/falseto control skipping
0.9.0
- Feat: add skip plugin
- Fix: wikilinks uses a faster and more robust link lookup
- Feat: most plugins now only do work on posts not marked as skip
- Fix: wikilinks now give good error messages to show you which article is throwing the warning
Performance Improvements
Here are a couple of build times ran back to back on the same content with 0.8.2 and 0.9.0
Markata
63 posts
- 0.9.0 - 4.308s cold - 1.457s hot
- 0.8.2 - 9.063s cold - 1.542s hot
waylonwalker.com
exactly 2k posts
- 0.9.0 - 69.200s cold - 2.860 hot
- 0.8.2 - 479s cold - 4.683 hot
Core Optimizations
- Added map cache with statistics tracking in Markata core
- Optimized template rendering with bytecode caching
- Parallelized markdown rendering and file loading
- Added configurable cache expiration times for different components
Component-specific Optimizations
- Updated auto_description to use markdown-it for better performance
- Improved date parsing with dateparser fallback
- Optimized post loading with bulk processing
- Modernized pydantic validators to use new field_validator syntax
0.8.2
- Fix: markata installs setuptools required by one dependency
- Fix: cleaup cli output
- Fix: speed up cli starup with some lazy imports
- Fix: all cache.adds were replaced with cache.set
- Fix: Updated to new typer format requiring name=
- Fix: teardown only runs if a the build process was started, i.e. some clis
will not need to teardown
0.8.1
Feeds have partials
The feeds plugin now has configurable partial_template that can be used to
render only the inside of the feeds page. This is indended to allow you to
load small feeds into a page with htmx.
Better Jinja Templates
Markata now fully supports jinja templates with a loader that will load from
your templates directory, the markata built-in templates, and from a
dynamically generated templates directory in your .markata.cache directory.
cli
You can list out your templates and configuration with the following command
markata templates showVariables
The following variables are available within jinja templates for post
templates. This is now consistent accross all three built in plugins that
render jinja templates.
post_template
__version__- the version of markatamarkata- the markata instanceconfig- the markata configbody- the body of the postpost- the current post object
feeds
Similarly from within rendering feeds.
__version__- the version of markatamarkata- the markata instanceconfig- the markata configposts- the list of postspost- a pseudo post object with title, slug, description, and date for template consistencyfeed- the current feed object
jinja_md
Similar to posts from within jinja_md to render a markdown post as a template.
__version__- the version of markatamarkata- the markata instancebody- the body of the postconfig- the markata configpost- the current post object
Feeds cli
The feeds cli will help show which templates each feed will be using.
❯ markata feeds show
Feeds 6
┏━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Feed ┃ posts ┃ config ┃
┡━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ project_gallery │ 2 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Project Gallery │
│ │ │ slug: project-gallery │
│ │ │ name: project_gallery │
│ │ │ filter: 'project-gallery' in str(path) │
│ │ │ sort: title │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ docs │ 10 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Documentation │
│ │ │ slug: docs │
│ │ │ name: docs │
│ │ │ filter: "markata" not in slug and "tests" not in slug and ... │
│ │ │ sort: slug │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ autodoc │ 17 │ DEFAULT_TITLE: All Posts │
│ │ │ title: AutoDoc Python Modules. │
│ │ │ slug: autodoc │
│ │ │ name: autodoc │
│ │ │ filter: "markata" in slug and "plugin" not in slug and "te... │
│ │ │ sort: slug ...v0.11.0.dev5
Markata Changelog
0.11.0
Cache Invalidation Improvements
- Fix: feeds now properly invalidate cache when post metadata changes (title, date, slug, published, description)
- Fix: feeds now properly invalidate cache when template files are modified
- Fix: post_template now tracks template file changes for cache invalidation
- Fix: redirects now invalidate cache when template files change
- Fix: jinja_md now includes post metadata and version in cache keys
- Fix: standardized cache keys across plugins to include
__version__for proper invalidation on updates - Fix: render_markdown now includes backend and extensions in cache key
- Fix:
auto_descriptionnow strips wikilinks, HTML tags, markdown-it attributes (e.g. {.class-name}), Jinja template tags, admonitions (!!!, !!!+, ???, ???+), and HTML comments for cleaner descriptions - Fix:
publish_htmlnow properly resolves customoutput_htmlpaths relative tooutput_dir, preventing files from being written to project root - Perf: heading_link replaced expensive file I/O with
__version__in cache key - Feat: feeds now support atom feeds
Template Utilities (Breaking for Plugin Authors)
- BREAKING: Removed internal
get_template()functions fromfeeds.pyandpost_template.py - Feat: added centralized
get_template(),get_template_paths(), andget_templates_mtime()tojinja_envplugin - Feat:
get_template()includes automatic caching with@lru_cacheand smart fallback handling - Plugin authors: Import from
markata.plugins.jinja_envinstead of using internal functionsfrom markata.plugins.jinja_env import get_template, get_templates_mtime template = get_template(markata.jinja_env, "template.html")
0.10.1
- Release: version bump
0.10.0
- Fix:
auto_descriptionnow more accurately returns plain text, does not cut off words, and add an ellipsis. - Fix: article_html now typed such that it may be a dict without warning
- publish_source now only supports using post models that include a dumps command, i.e. no longer frontmatter post objects
- Fix: Raise warning, do not silently pass no config when
markata.tomlhas parse errors - Feat: Save files only if they have changed, this prevents whole site re-deploys on every change
- Fix: do not use the word index in the slug of the post for links
0.9.1
- HUGE DOCS UPDATE
- Fix: feeds now update with any content change
- Fix: og tags should use property not name
- Feat: centralized
jinja_envplugin that is used for template rendering accross all plugins - Feat: added support for multiple templates per article https://markata.dev/multi-template/
- Feat: skip now supports environment variable
MARKATA_SKIP=true/falseto control skipping
0.9.0
- Feat: add skip plugin
- Fix: wikilinks uses a faster and more robust link lookup
- Feat: most plugins now only do work on posts not marked as skip
- Fix: wikilinks now give good error messages to show you which article is throwing the warning
Performance Improvements
Here are a couple of build times ran back to back on the same content with 0.8.2 and 0.9.0
Markata
63 posts
- 0.9.0 - 4.308s cold - 1.457s hot
- 0.8.2 - 9.063s cold - 1.542s hot
waylonwalker.com
exactly 2k posts
- 0.9.0 - 69.200s cold - 2.860 hot
- 0.8.2 - 479s cold - 4.683 hot
Core Optimizations
- Added map cache with statistics tracking in Markata core
- Optimized template rendering with bytecode caching
- Parallelized markdown rendering and file loading
- Added configurable cache expiration times for different components
Component-specific Optimizations
- Updated auto_description to use markdown-it for better performance
- Improved date parsing with dateparser fallback
- Optimized post loading with bulk processing
- Modernized pydantic validators to use new field_validator syntax
0.8.2
- Fix: markata installs setuptools required by one dependency
- Fix: cleaup cli output
- Fix: speed up cli starup with some lazy imports
- Fix: all cache.adds were replaced with cache.set
- Fix: Updated to new typer format requiring name=
- Fix: teardown only runs if a the build process was started, i.e. some clis
will not need to teardown
0.8.1
Feeds have partials
The feeds plugin now has configurable partial_template that can be used to
render only the inside of the feeds page. This is indended to allow you to
load small feeds into a page with htmx.
Better Jinja Templates
Markata now fully supports jinja templates with a loader that will load from
your templates directory, the markata built-in templates, and from a
dynamically generated templates directory in your .markata.cache directory.
cli
You can list out your templates and configuration with the following command
markata templates showVariables
The following variables are available within jinja templates for post
templates. This is now consistent accross all three built in plugins that
render jinja templates.
post_template
__version__- the version of markatamarkata- the markata instanceconfig- the markata configbody- the body of the postpost- the current post object
feeds
Similarly from within rendering feeds.
__version__- the version of markatamarkata- the markata instanceconfig- the markata configposts- the list of postspost- a pseudo post object with title, slug, description, and date for template consistencyfeed- the current feed object
jinja_md
Similar to posts from within jinja_md to render a markdown post as a template.
__version__- the version of markatamarkata- the markata instancebody- the body of the postconfig- the markata configpost- the current post object
Feeds cli
The feeds cli will help show which templates each feed will be using.
❯ markata feeds show
Feeds 6
┏━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Feed ┃ posts ┃ config ┃
┡━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ project_gallery │ 2 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Project Gallery │
│ │ │ slug: project-gallery │
│ │ │ name: project_gallery │
│ │ │ filter: 'project-gallery' in str(path) │
│ │ │ sort: title │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ docs │ 10 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Documentation │
│ │ │ slug: docs │
│ │ │ name: docs │
│ │ │ filter: "markata" not in slug and "tests" not in slug and ... │
│ │ │ sort: slug │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ autodoc │ 17 │ DEFAULT_TITLE: All Posts │
│ │ │ title: AutoDoc Python Modules. │
│ │ │ slug: autodoc │
│ │ │ name: autodoc │
│ │ │ filter: "markata" in slug and "plugin" not in slug and "te... │
│ │ │ sort: slug │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html ...v0.11.0.dev4
Markata Changelog
0.11.0
Cache Invalidation Improvements
- Fix: feeds now properly invalidate cache when post metadata changes (title, date, slug, published, description)
- Fix: feeds now properly invalidate cache when template files are modified
- Fix: post_template now tracks template file changes for cache invalidation
- Fix: redirects now invalidate cache when template files change
- Fix: jinja_md now includes post metadata and version in cache keys
- Fix: standardized cache keys across plugins to include
__version__for proper invalidation on updates - Fix: render_markdown now includes backend and extensions in cache key
- Perf: heading_link replaced expensive file I/O with
__version__in cache key - Feat: feeds now support atom feeds
Template Utilities (Breaking for Plugin Authors)
- BREAKING: Removed internal
get_template()functions fromfeeds.pyandpost_template.py - Feat: added centralized
get_template(),get_template_paths(), andget_templates_mtime()tojinja_envplugin - Feat:
get_template()includes automatic caching with@lru_cacheand smart fallback handling - Plugin authors: Import from
markata.plugins.jinja_envinstead of using internal functionsfrom markata.plugins.jinja_env import get_template, get_templates_mtime template = get_template(markata.jinja_env, "template.html")
0.10.1
- Release: version bump
0.10.0
- Fix:
auto_descriptionnow more accurately returns plain text, does not cut off words, and add an ellipsis. - Fix: article_html now typed such that it may be a dict without warning
- publish_source now only supports using post models that include a dumps command, i.e. no longer frontmatter post objects
- Fix: Raise warning, do not silently pass no config when
markata.tomlhas parse errors - Feat: Save files only if they have changed, this prevents whole site re-deploys on every change
- Fix: do not use the word index in the slug of the post for links
0.9.1
- HUGE DOCS UPDATE
- Fix: feeds now update with any content change
- Fix: og tags should use property not name
- Feat: centralized
jinja_envplugin that is used for template rendering accross all plugins - Feat: added support for multiple templates per article https://markata.dev/multi-template/
- Feat: skip now supports environment variable
MARKATA_SKIP=true/falseto control skipping
0.9.0
- Feat: add skip plugin
- Fix: wikilinks uses a faster and more robust link lookup
- Feat: most plugins now only do work on posts not marked as skip
- Fix: wikilinks now give good error messages to show you which article is throwing the warning
Performance Improvements
Here are a couple of build times ran back to back on the same content with 0.8.2 and 0.9.0
Markata
63 posts
- 0.9.0 - 4.308s cold - 1.457s hot
- 0.8.2 - 9.063s cold - 1.542s hot
waylonwalker.com
exactly 2k posts
- 0.9.0 - 69.200s cold - 2.860 hot
- 0.8.2 - 479s cold - 4.683 hot
Core Optimizations
- Added map cache with statistics tracking in Markata core
- Optimized template rendering with bytecode caching
- Parallelized markdown rendering and file loading
- Added configurable cache expiration times for different components
Component-specific Optimizations
- Updated auto_description to use markdown-it for better performance
- Improved date parsing with dateparser fallback
- Optimized post loading with bulk processing
- Modernized pydantic validators to use new field_validator syntax
0.8.2
- Fix: markata installs setuptools required by one dependency
- Fix: cleaup cli output
- Fix: speed up cli starup with some lazy imports
- Fix: all cache.adds were replaced with cache.set
- Fix: Updated to new typer format requiring name=
- Fix: teardown only runs if a the build process was started, i.e. some clis
will not need to teardown
0.8.1
Feeds have partials
The feeds plugin now has configurable partial_template that can be used to
render only the inside of the feeds page. This is indended to allow you to
load small feeds into a page with htmx.
Better Jinja Templates
Markata now fully supports jinja templates with a loader that will load from
your templates directory, the markata built-in templates, and from a
dynamically generated templates directory in your .markata.cache directory.
cli
You can list out your templates and configuration with the following command
markata templates showVariables
The following variables are available within jinja templates for post
templates. This is now consistent accross all three built in plugins that
render jinja templates.
post_template
__version__- the version of markatamarkata- the markata instanceconfig- the markata configbody- the body of the postpost- the current post object
feeds
Similarly from within rendering feeds.
__version__- the version of markatamarkata- the markata instanceconfig- the markata configposts- the list of postspost- a pseudo post object with title, slug, description, and date for template consistencyfeed- the current feed object
jinja_md
Similar to posts from within jinja_md to render a markdown post as a template.
__version__- the version of markatamarkata- the markata instancebody- the body of the postconfig- the markata configpost- the current post object
Feeds cli
The feeds cli will help show which templates each feed will be using.
❯ markata feeds show
Feeds 6
┏━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Feed ┃ posts ┃ config ┃
┡━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ project_gallery │ 2 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Project Gallery │
│ │ │ slug: project-gallery │
│ │ │ name: project_gallery │
│ │ │ filter: 'project-gallery' in str(path) │
│ │ │ sort: title │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ docs │ 10 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Documentation │
│ │ │ slug: docs │
│ │ │ name: docs │
│ │ │ filter: "markata" not in slug and "tests" not in slug and ... │
│ │ │ sort: slug │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ autodoc │ 17 │ DEFAULT_TITLE: All Posts │
│ │ │ title: AutoDoc Python Modules. │
│ │ │ slug: autodoc │
│ │ │ name: autodoc │
│ │ │ filter: "markata" in slug and "plugin" not in slug and "te... │
│ │ │ sort: slug │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ ...v0.11.0.dev3
Markata Changelog
0.11.0
Cache Invalidation Improvements
- Fix: feeds now properly invalidate cache when post metadata changes (title, date, slug, published, description)
- Fix: feeds now properly invalidate cache when template files are modified
- Fix: post_template now tracks template file changes for cache invalidation
- Fix: redirects now invalidate cache when template files change
- Fix: jinja_md now includes post metadata and version in cache keys
- Fix: standardized cache keys across plugins to include
__version__for proper invalidation on updates - Fix: render_markdown now includes backend and extensions in cache key
- Perf: heading_link replaced expensive file I/O with
__version__in cache key - Feat: feeds now support atom feeds
Template Utilities (Breaking for Plugin Authors)
- BREAKING: Removed internal
get_template()functions fromfeeds.pyandpost_template.py - Feat: added centralized
get_template(),get_template_paths(), andget_templates_mtime()tojinja_envplugin - Feat:
get_template()includes automatic caching with@lru_cacheand smart fallback handling - Plugin authors: Import from
markata.plugins.jinja_envinstead of using internal functionsfrom markata.plugins.jinja_env import get_template, get_templates_mtime template = get_template(markata.jinja_env, "template.html")
0.10.1
- Release: version bump
0.10.0
- Fix:
auto_descriptionnow more accurately returns plain text, does not cut off words, and add an ellipsis. - Fix: article_html now typed such that it may be a dict without warning
- publish_source now only supports using post models that include a dumps command, i.e. no longer frontmatter post objects
- Fix: Raise warning, do not silently pass no config when
markata.tomlhas parse errors - Feat: Save files only if they have changed, this prevents whole site re-deploys on every change
- Fix: do not use the word index in the slug of the post for links
0.9.1
- HUGE DOCS UPDATE
- Fix: feeds now update with any content change
- Fix: og tags should use property not name
- Feat: centralized
jinja_envplugin that is used for template rendering accross all plugins - Feat: added support for multiple templates per article https://markata.dev/multi-template/
- Feat: skip now supports environment variable
MARKATA_SKIP=true/falseto control skipping
0.9.0
- Feat: add skip plugin
- Fix: wikilinks uses a faster and more robust link lookup
- Feat: most plugins now only do work on posts not marked as skip
- Fix: wikilinks now give good error messages to show you which article is throwing the warning
Performance Improvements
Here are a couple of build times ran back to back on the same content with 0.8.2 and 0.9.0
Markata
63 posts
- 0.9.0 - 4.308s cold - 1.457s hot
- 0.8.2 - 9.063s cold - 1.542s hot
waylonwalker.com
exactly 2k posts
- 0.9.0 - 69.200s cold - 2.860 hot
- 0.8.2 - 479s cold - 4.683 hot
Core Optimizations
- Added map cache with statistics tracking in Markata core
- Optimized template rendering with bytecode caching
- Parallelized markdown rendering and file loading
- Added configurable cache expiration times for different components
Component-specific Optimizations
- Updated auto_description to use markdown-it for better performance
- Improved date parsing with dateparser fallback
- Optimized post loading with bulk processing
- Modernized pydantic validators to use new field_validator syntax
0.8.2
- Fix: markata installs setuptools required by one dependency
- Fix: cleaup cli output
- Fix: speed up cli starup with some lazy imports
- Fix: all cache.adds were replaced with cache.set
- Fix: Updated to new typer format requiring name=
- Fix: teardown only runs if a the build process was started, i.e. some clis
will not need to teardown
0.8.1
Feeds have partials
The feeds plugin now has configurable partial_template that can be used to
render only the inside of the feeds page. This is indended to allow you to
load small feeds into a page with htmx.
Better Jinja Templates
Markata now fully supports jinja templates with a loader that will load from
your templates directory, the markata built-in templates, and from a
dynamically generated templates directory in your .markata.cache directory.
cli
You can list out your templates and configuration with the following command
markata templates showVariables
The following variables are available within jinja templates for post
templates. This is now consistent accross all three built in plugins that
render jinja templates.
post_template
__version__- the version of markatamarkata- the markata instanceconfig- the markata configbody- the body of the postpost- the current post object
feeds
Similarly from within rendering feeds.
__version__- the version of markatamarkata- the markata instanceconfig- the markata configposts- the list of postspost- a pseudo post object with title, slug, description, and date for template consistencyfeed- the current feed object
jinja_md
Similar to posts from within jinja_md to render a markdown post as a template.
__version__- the version of markatamarkata- the markata instancebody- the body of the postconfig- the markata configpost- the current post object
Feeds cli
The feeds cli will help show which templates each feed will be using.
❯ markata feeds show
Feeds 6
┏━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Feed ┃ posts ┃ config ┃
┡━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ project_gallery │ 2 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Project Gallery │
│ │ │ slug: project-gallery │
│ │ │ name: project_gallery │
│ │ │ filter: 'project-gallery' in str(path) │
│ │ │ sort: title │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ docs │ 10 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Documentation │
│ │ │ slug: docs │
│ │ │ name: docs │
│ │ │ filter: "markata" not in slug and "tests" not in slug and ... │
│ │ │ sort: slug │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ autodoc │ 17 │ DEFAULT_TITLE: All Posts │
│ │ │ title: AutoDoc Python Modules. │
│ │ │ slug: autodoc │
│ │ │ name: autodoc │
│ │ │ filter: "markata" in slug and "plugin" not in slug and "te... │
│ │ │ sort: slug │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ ...v0.11.0.dev2
Markata Changelog
0.11.0
Cache Invalidation Improvements
- Fix: feeds now properly invalidate cache when post metadata changes (title, date, slug, published, description)
- Fix: feeds now properly invalidate cache when template files are modified
- Fix: post_template now tracks template file changes for cache invalidation
- Fix: redirects now invalidate cache when template files change
- Fix: jinja_md now includes post metadata and version in cache keys
- Fix: standardized cache keys across plugins to include
__version__for proper invalidation on updates - Fix: render_markdown now includes backend and extensions in cache key
- Perf: heading_link replaced expensive file I/O with
__version__in cache key
Template Utilities (Breaking for Plugin Authors)
- BREAKING: Removed internal
get_template()functions fromfeeds.pyandpost_template.py - Feat: added centralized
get_template(),get_template_paths(), andget_templates_mtime()tojinja_envplugin - Feat:
get_template()includes automatic caching with@lru_cacheand smart fallback handling - Plugin authors: Import from
markata.plugins.jinja_envinstead of using internal functionsfrom markata.plugins.jinja_env import get_template, get_templates_mtime template = get_template(markata.jinja_env, "template.html")
0.10.1
- Release: version bump
0.10.0
- Fix:
auto_descriptionnow more accurately returns plain text, does not cut off words, and add an ellipsis. - Fix: article_html now typed such that it may be a dict without warning
- publish_source now only supports using post models that include a dumps command, i.e. no longer frontmatter post objects
- Fix: Raise warning, do not silently pass no config when
markata.tomlhas parse errors - Feat: Save files only if they have changed, this prevents whole site re-deploys on every change
- Fix: do not use the word index in the slug of the post for links
0.9.1
- HUGE DOCS UPDATE
- Fix: feeds now update with any content change
- Fix: og tags should use property not name
- Feat: centralized
jinja_envplugin that is used for template rendering accross all plugins - Feat: added support for multiple templates per article https://markata.dev/multi-template/
- Feat: skip now supports environment variable
MARKATA_SKIP=true/falseto control skipping
0.9.0
- Feat: add skip plugin
- Fix: wikilinks uses a faster and more robust link lookup
- Feat: most plugins now only do work on posts not marked as skip
- Fix: wikilinks now give good error messages to show you which article is throwing the warning
Performance Improvements
Here are a couple of build times ran back to back on the same content with 0.8.2 and 0.9.0
Markata
63 posts
- 0.9.0 - 4.308s cold - 1.457s hot
- 0.8.2 - 9.063s cold - 1.542s hot
waylonwalker.com
exactly 2k posts
- 0.9.0 - 69.200s cold - 2.860 hot
- 0.8.2 - 479s cold - 4.683 hot
Core Optimizations
- Added map cache with statistics tracking in Markata core
- Optimized template rendering with bytecode caching
- Parallelized markdown rendering and file loading
- Added configurable cache expiration times for different components
Component-specific Optimizations
- Updated auto_description to use markdown-it for better performance
- Improved date parsing with dateparser fallback
- Optimized post loading with bulk processing
- Modernized pydantic validators to use new field_validator syntax
0.8.2
- Fix: markata installs setuptools required by one dependency
- Fix: cleaup cli output
- Fix: speed up cli starup with some lazy imports
- Fix: all cache.adds were replaced with cache.set
- Fix: Updated to new typer format requiring name=
- Fix: teardown only runs if a the build process was started, i.e. some clis
will not need to teardown
0.8.1
Feeds have partials
The feeds plugin now has configurable partial_template that can be used to
render only the inside of the feeds page. This is indended to allow you to
load small feeds into a page with htmx.
Better Jinja Templates
Markata now fully supports jinja templates with a loader that will load from
your templates directory, the markata built-in templates, and from a
dynamically generated templates directory in your .markata.cache directory.
cli
You can list out your templates and configuration with the following command
markata templates showVariables
The following variables are available within jinja templates for post
templates. This is now consistent accross all three built in plugins that
render jinja templates.
post_template
__version__- the version of markatamarkata- the markata instanceconfig- the markata configbody- the body of the postpost- the current post object
feeds
Similarly from within rendering feeds.
__version__- the version of markatamarkata- the markata instanceconfig- the markata configposts- the list of postspost- a pseudo post object with title, slug, description, and date for template consistencyfeed- the current feed object
jinja_md
Similar to posts from within jinja_md to render a markdown post as a template.
__version__- the version of markatamarkata- the markata instancebody- the body of the postconfig- the markata configpost- the current post object
Feeds cli
The feeds cli will help show which templates each feed will be using.
❯ markata feeds show
Feeds 6
┏━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Feed ┃ posts ┃ config ┃
┡━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ project_gallery │ 2 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Project Gallery │
│ │ │ slug: project-gallery │
│ │ │ name: project_gallery │
│ │ │ filter: 'project-gallery' in str(path) │
│ │ │ sort: title │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ docs │ 10 │ DEFAULT_TITLE: All Posts │
│ │ │ title: Documentation │
│ │ │ slug: docs │
│ │ │ name: docs │
│ │ │ filter: "markata" not in slug and "tests" not in slug and ... │
│ │ │ sort: slug │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │
│ autodoc │ 17 │ DEFAULT_TITLE: All Posts │
│ │ │ title: AutoDoc Python Modules. │
│ │ │ slug: autodoc │
│ │ │ name: autodoc │
│ │ │ filter: "markata" in slug and "plugin" not in slug and "te... │
│ │ │ sort: slug │
│ │ │ reverse: False │
│ │ │ rss: True │
│ │ │ sitemap: True │
│ │ │ card_template: card.html │
│ │ │ template: feed.html │
│ │ │ rss_template: rss.xml │
│ │ │ sitemap_template: sitemap.xml │
│ │ │ xsl_template: rss.xsl │
│ │ │ │...