expressive-code-twoslash now lives under StudioCMS, and we’re shipping a major release with it. The repo moved from MatthiesenXYZ to withstudiocms/expressive-code-twoslash. We used the move to fix long-standing module and tooling issues and to ship features that were blocked before.


Why the move (and why the refactor)

New home. StudioCMS is where we’re building docs tooling and content experiences; expressive-code-twoslash is a core piece of that. Keeping the plugin in the same org as the rest of the stack makes it easier to maintain and evolve.

CJS and the weird quirks. The original Twoslash stack (and some dependencies) were built for CommonJS and ESM. In Astro and Vite that meant awkward workarounds, inconsistent behavior, and extra build steps. We stopped patching and went all-in on ESM: we forked and refactored the pieces we depend on so the whole pipeline is ESM-only and works cleanly with Astro and Vite. That refactor unlocked the rest of this release.


What’s in this release

This release bumps expressive-code-twoslash to 0.6.0 and introduces several new or updated packages. Here’s the high-level picture.

New ESM-only packages under @ec-ts/

These live under the @ec-ts/ scope and are published from this repo; the main plugin now depends on them instead of the original CJS/ESM packages.

expressive-code-twoslash 0.6.0

css-js-gen 1.1.0


Who this is for

If you already use expressive-code-twoslash in an Astro or Vite docs site, this release gives you:

If you’re new to the plugin: it brings Twoslash-style behavior (inline type hovers, error underlines, code cuts, completions, and more) to Expressive Code code blocks. TypeScript (and now Vue) code samples in your docs can show real types, compiler errors, and emitted output without leaving the page.


Try it

The release is going out via PR #65. Once it’s merged, the new versions will publish to npm. If you run into issues upgrading, open an issue or drop by Discord—we want the move to 0.6 to be smooth.


Ready to try expressive-code-twoslash 0.6? Check out the documentation to get started, or join our Discord to connect with the team and other users.



Back to Blog