Skip to content

Releases: WaylonWalker/markata

v0.11.0.dev11

22 Jan 03:36

Choose a tag to compare

Markata Changelog

0.11.0

CLI Configuration Overrides

  • Feat: Add -s/--set flag for runtime config overrides with dot notation (e.g., -s 'style.theme=nord')
  • Feat: Add -c/--config flag for alternate config files
  • Feat: Add -o/--output-dir flag 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_description now strips wikilinks, HTML tags, markdown-it attributes (e.g. {.class-name}), Jinja template tags, admonitions (!!!, !!!+, ???, ???+), and HTML comments for cleaner descriptions
  • Fix: publish_html now properly resolves custom output_html paths relative to output_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/python vs python)
  • 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 from feeds.py and post_template.py
  • Feat: added centralized get_template(), get_template_paths(), and get_templates_mtime() to jinja_env plugin
  • Feat: get_template() includes automatic caching with @lru_cache and smart fallback handling
  • Plugin authors: Import from markata.plugins.jinja_env instead of using internal functions
    from 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, and enabled per 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 |tojson filter
  • 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_description now 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.toml has 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_env plugin 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/false to 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 show

Variables

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 markata
  • markata - the markata instance
  • config - the markata config
  • body - the body of the post
  • post - the current post object
feeds

Similarly from within rendering feeds.

  • __version__ - the version of markata
  • markata - the markata instance
  • config - the markata config
  • posts - the list of posts
  • post - a pseudo post object with title, slug, description, and date for template consistency
  • feed - 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 markata
  • markata - the markata instance
  • body - the body of the post
  • config - the markata config
  • post - 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                                                 │
│                 │       │...
Read more

v0.11.0.dev10

19 Jan 15:43

Choose a tag to compare

Markata Changelog

0.11.0

CLI Configuration Overrides

  • Feat: Add -s/--set flag for runtime config overrides with dot notation (e.g., -s 'style.theme=nord')
  • Feat: Add -c/--config flag for alternate config files
  • Feat: Add -o/--output-dir flag 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_description now strips wikilinks, HTML tags, markdown-it attributes (e.g. {.class-name}), Jinja template tags, admonitions (!!!, !!!+, ???, ???+), and HTML comments for cleaner descriptions
  • Fix: publish_html now properly resolves custom output_html paths relative to output_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/python vs python)
  • 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 from feeds.py and post_template.py
  • Feat: added centralized get_template(), get_template_paths(), and get_templates_mtime() to jinja_env plugin
  • Feat: get_template() includes automatic caching with @lru_cache and smart fallback handling
  • Plugin authors: Import from markata.plugins.jinja_env instead of using internal functions
    from 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_description now 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.toml has 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_env plugin 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/false to 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 show

Variables

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 markata
  • markata - the markata instance
  • config - the markata config
  • body - the body of the post
  • post - the current post object
feeds

Similarly from within rendering feeds.

  • __version__ - the version of markata
  • markata - the markata instance
  • config - the markata config
  • posts - the list of posts
  • post - a pseudo post object with title, slug, description, and date for template consistency
  • feed - 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 markata
  • markata - the markata instance
  • body - the body of the post
  • config - the markata config
  • post - 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                                                    │
│ ...
Read more

v0.11.0.dev9

18 Dec 21:20

Choose a tag to compare

Markata Changelog

0.11.0

CLI Configuration Overrides

  • Feat: Add -s/--set flag for runtime config overrides with dot notation (e.g., -s 'style.theme=nord')
  • Feat: Add -c/--config flag for alternate config files
  • Feat: Add -o/--output-dir flag 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_description now strips wikilinks, HTML tags, markdown-it attributes (e.g. {.class-name}), Jinja template tags, admonitions (!!!, !!!+, ???, ???+), and HTML comments for cleaner descriptions
  • Fix: publish_html now properly resolves custom output_html paths relative to output_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 from feeds.py and post_template.py
  • Feat: added centralized get_template(), get_template_paths(), and get_templates_mtime() to jinja_env plugin
  • Feat: get_template() includes automatic caching with @lru_cache and smart fallback handling
  • Plugin authors: Import from markata.plugins.jinja_env instead of using internal functions
    from 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_description now 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.toml has 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_env plugin 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/false to 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 show

Variables

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 markata
  • markata - the markata instance
  • config - the markata config
  • body - the body of the post
  • post - the current post object
feeds

Similarly from within rendering feeds.

  • __version__ - the version of markata
  • markata - the markata instance
  • config - the markata config
  • posts - the list of posts
  • post - a pseudo post object with title, slug, description, and date for template consistency
  • feed - 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 markata
  • markata - the markata instance
  • body - the body of the post
  • config - the markata config
  • post - 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                   ...
Read more

v0.11.0.dev8

09 Dec 02:16

Choose a tag to compare

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_description now strips wikilinks, HTML tags, markdown-it attributes (e.g. {.class-name}), Jinja template tags, admonitions (!!!, !!!+, ???, ???+), and HTML comments for cleaner descriptions
  • Fix: publish_html now properly resolves custom output_html paths relative to output_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 from feeds.py and post_template.py
  • Feat: added centralized get_template(), get_template_paths(), and get_templates_mtime() to jinja_env plugin
  • Feat: get_template() includes automatic caching with @lru_cache and smart fallback handling
  • Plugin authors: Import from markata.plugins.jinja_env instead of using internal functions
    from 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_description now 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.toml has 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_env plugin 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/false to 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 show

Variables

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 markata
  • markata - the markata instance
  • config - the markata config
  • body - the body of the post
  • post - the current post object
feeds

Similarly from within rendering feeds.

  • __version__ - the version of markata
  • markata - the markata instance
  • config - the markata config
  • posts - the list of posts
  • post - a pseudo post object with title, slug, description, and date for template consistency
  • feed - 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 markata
  • markata - the markata instance
  • body - the body of the post
  • config - the markata config
  • post - 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          ...
Read more

v0.11.0.dev7

09 Dec 01:01

Choose a tag to compare

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_description now strips wikilinks, HTML tags, markdown-it attributes (e.g. {.class-name}), Jinja template tags, admonitions (!!!, !!!+, ???, ???+), and HTML comments for cleaner descriptions
  • Fix: publish_html now properly resolves custom output_html paths relative to output_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 from feeds.py and post_template.py
  • Feat: added centralized get_template(), get_template_paths(), and get_templates_mtime() to jinja_env plugin
  • Feat: get_template() includes automatic caching with @lru_cache and smart fallback handling
  • Plugin authors: Import from markata.plugins.jinja_env instead of using internal functions
    from 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_description now 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.toml has 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_env plugin 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/false to 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 show

Variables

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 markata
  • markata - the markata instance
  • config - the markata config
  • body - the body of the post
  • post - the current post object
feeds

Similarly from within rendering feeds.

  • __version__ - the version of markata
  • markata - the markata instance
  • config - the markata config
  • posts - the list of posts
  • post - a pseudo post object with title, slug, description, and date for template consistency
  • feed - 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 markata
  • markata - the markata instance
  • body - the body of the post
  • config - the markata config
  • post - 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          ...
Read more

v0.11.0.dev6

08 Dec 22:43

Choose a tag to compare

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_description now strips wikilinks, HTML tags, markdown-it attributes (e.g. {.class-name}), Jinja template tags, admonitions (!!!, !!!+, ???, ???+), and HTML comments for cleaner descriptions
  • Fix: publish_html now properly resolves custom output_html paths relative to output_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 from feeds.py and post_template.py
  • Feat: added centralized get_template(), get_template_paths(), and get_templates_mtime() to jinja_env plugin
  • Feat: get_template() includes automatic caching with @lru_cache and smart fallback handling
  • Plugin authors: Import from markata.plugins.jinja_env instead of using internal functions
    from 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_description now 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.toml has 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_env plugin 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/false to 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 show

Variables

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 markata
  • markata - the markata instance
  • config - the markata config
  • body - the body of the post
  • post - the current post object
feeds

Similarly from within rendering feeds.

  • __version__ - the version of markata
  • markata - the markata instance
  • config - the markata config
  • posts - the list of posts
  • post - a pseudo post object with title, slug, description, and date for template consistency
  • feed - 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 markata
  • markata - the markata instance
  • body - the body of the post
  • config - the markata config
  • post - 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                                               ...
Read more

v0.11.0.dev5

08 Dec 20:50

Choose a tag to compare

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_description now strips wikilinks, HTML tags, markdown-it attributes (e.g. {.class-name}), Jinja template tags, admonitions (!!!, !!!+, ???, ???+), and HTML comments for cleaner descriptions
  • Fix: publish_html now properly resolves custom output_html paths relative to output_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 from feeds.py and post_template.py
  • Feat: added centralized get_template(), get_template_paths(), and get_templates_mtime() to jinja_env plugin
  • Feat: get_template() includes automatic caching with @lru_cache and smart fallback handling
  • Plugin authors: Import from markata.plugins.jinja_env instead of using internal functions
    from 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_description now 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.toml has 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_env plugin 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/false to 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 show

Variables

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 markata
  • markata - the markata instance
  • config - the markata config
  • body - the body of the post
  • post - the current post object
feeds

Similarly from within rendering feeds.

  • __version__ - the version of markata
  • markata - the markata instance
  • config - the markata config
  • posts - the list of posts
  • post - a pseudo post object with title, slug, description, and date for template consistency
  • feed - 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 markata
  • markata - the markata instance
  • body - the body of the post
  • config - the markata config
  • post - 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                      ...
Read more

v0.11.0.dev4

08 Dec 16:27

Choose a tag to compare

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 from feeds.py and post_template.py
  • Feat: added centralized get_template(), get_template_paths(), and get_templates_mtime() to jinja_env plugin
  • Feat: get_template() includes automatic caching with @lru_cache and smart fallback handling
  • Plugin authors: Import from markata.plugins.jinja_env instead of using internal functions
    from 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_description now 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.toml has 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_env plugin 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/false to 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 show

Variables

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 markata
  • markata - the markata instance
  • config - the markata config
  • body - the body of the post
  • post - the current post object
feeds

Similarly from within rendering feeds.

  • __version__ - the version of markata
  • markata - the markata instance
  • config - the markata config
  • posts - the list of posts
  • post - a pseudo post object with title, slug, description, and date for template consistency
  • feed - 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 markata
  • markata - the markata instance
  • body - the body of the post
  • config - the markata config
  • post - 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                                         │
│                 │       │                           ...
Read more

v0.11.0.dev3

07 Dec 22:34

Choose a tag to compare

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 from feeds.py and post_template.py
  • Feat: added centralized get_template(), get_template_paths(), and get_templates_mtime() to jinja_env plugin
  • Feat: get_template() includes automatic caching with @lru_cache and smart fallback handling
  • Plugin authors: Import from markata.plugins.jinja_env instead of using internal functions
    from 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_description now 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.toml has 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_env plugin 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/false to 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 show

Variables

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 markata
  • markata - the markata instance
  • config - the markata config
  • body - the body of the post
  • post - the current post object
feeds

Similarly from within rendering feeds.

  • __version__ - the version of markata
  • markata - the markata instance
  • config - the markata config
  • posts - the list of posts
  • post - a pseudo post object with title, slug, description, and date for template consistency
  • feed - 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 markata
  • markata - the markata instance
  • body - the body of the post
  • config - the markata config
  • post - 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                                         │
│                 │       │                           ...
Read more

v0.11.0.dev2

05 Dec 21:57

Choose a tag to compare

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 from feeds.py and post_template.py
  • Feat: added centralized get_template(), get_template_paths(), and get_templates_mtime() to jinja_env plugin
  • Feat: get_template() includes automatic caching with @lru_cache and smart fallback handling
  • Plugin authors: Import from markata.plugins.jinja_env instead of using internal functions
    from 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_description now 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.toml has 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_env plugin 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/false to 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 show

Variables

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 markata
  • markata - the markata instance
  • config - the markata config
  • body - the body of the post
  • post - the current post object
feeds

Similarly from within rendering feeds.

  • __version__ - the version of markata
  • markata - the markata instance
  • config - the markata config
  • posts - the list of posts
  • post - a pseudo post object with title, slug, description, and date for template consistency
  • feed - 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 markata
  • markata - the markata instance
  • body - the body of the post
  • config - the markata config
  • post - 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                                         │
│                 │       │                                                               │...
Read more