function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}Every block is highlighted on the server. Your pages ship zero highlighter JavaScript — no render blocking, no flash of unstyled code, no 200 KB bundle.
// highlighted on the server — no frontend JSadd_filter( 'the_content', 'lsh_render' );function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks, 'auto' );}The same block rendered through the real plugin. Set one theme site-wide, or override it per block.
function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}Nord, Dracula, Tokyo Night, Gruvbox, Night Owl, Solarized and eleven of VS Code’s own — every one included with Pro.
Show all 19 Pro themes Hide Pro themesfunction lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}function lsh_render( $html ) { $blocks = parse_blocks( $html ); return lsh_highlight( $blocks );}Highlighting happens once, on the server. The browser downloads markup and a few hundred bytes of CSS — nothing else.
Every new WordPress release is tested before it lands, so your code blocks keep working when other highlighter plugins stop shipping updates.
Long snippets collapse to a fixed height behind a “show more” button, so a 200-line config file doesn’t swallow the article. Still zero front-end JavaScript.
Set a site-wide line threshold, or override it per block. The toggle is a CSS checkbox — it works with JavaScript off.
add_filter( 'the_content', 'lsh_render' );function lsh_render( $html ) { if ( ! str_contains( $html, 'wp-block-code' ) ) { return $html; } $blocks = parse_blocks( $html ); foreach ( $blocks as $block ) { if ( 'core/code' !== $block['blockName'] ) { continue; } $code = wp_strip_all_tags( $block['innerHTML'] ); $lang = lsh_detect_language( $code ); $html = str_replace( $block['innerHTML'], lsh_highlight( $code, $lang ), $html ); } return $html;}| Feature | Free | Everything in Free, and Pro: |
|---|---|---|
| Server-side highlighting, ~185 languages, render cache | Included | Included |
| Enlighter & core Code-block compatibility (render-time, no database writes) | Included | Included |
| Built-in themes | 5 | 5 |
| Extra theme pack | Not included | 19 (24 total) |
| Header bar: None, Headlights | Included | Included |
| Header bar: Headlights (muted), Language label, Language pill | Not included | Included |
| Typography, corners, padding, line numbers, line hover, copy button | Included | Included |
| Folding, inline highlighting, live editor highlighting, “Detect from code” | Included | Included |
| “See more” / expand for long blocks (site-wide default + per-block) | Not included | Included |
| Site-wide default language | Not included | Included |
| Per-post default language | Not included | Included |
| wp lsh cache — warm / clear the render cache | Included | Included |
| wp lsh migrate — permanent Enlighter conversion, with rollback | Not included | Included |
| Support | wordpress.org forum | Priority email |
Your subscription is what keeps it maintained — and it unlocks the extra themes, header styles, long-code handling and the WP-CLI Enlighter migration.
Yearly subscription, cancel any time. Renewal, expiry behaviour and the refund window follow the Freemius configuration — verify against checkout before publishing.
Your code blocks keep working — nothing breaks, no content is lost. Pro-only features (extra themes, “see more”, WP-CLI conversion, default languages) stop applying until you renew.
Yes. Staging, local and dev copies of a licensed site don’t count against your site limit.
No setup fee. 7-day refund window, no questions asked.
Yes. The free plugin is the engine Pro is built on — every fix and language improvement lands there first.
Uninstalling converts every block back to a standard WordPress code block. No shortcode residue, no broken markup left behind in your posts.
One WP-CLI command converts every block on the site. The docs cover flags, dry runs and rollback.