
Research
/Security News
jscrambler npm Package Compromised in Supply Chain Attack
A compromised jscrambler npm release added a malicious preinstall hook that runs hidden native binaries on Linux, macOS, and Windows.
Markdown pages plugin for Void — .md files as first-class routes with zero client JS, islands support, and Shiki syntax highlighting.
// vite.config.ts
import { defineConfig } from 'vite';
import { voidPlugin } from 'void';
import { voidVue } from '@void/vue/plugin';
import { voidMarkdown } from '@void/md/plugin';
export default defineConfig({
plugins: [voidPlugin(), voidVue(), voidMarkdown()],
});
Works with any framework adapter — auto-detects Vue, React, Svelte, or Solid from the plugin list.
voidMarkdown(options?) returns a Vite plugin array (Plugin[]). The plugin runs with enforce: "pre".
Options:
shiki?.themes — { light: string; dark: string } (default: github-light / github-dark)shiki?.langs — additional Shiki languages to load (default: all bundled languages, lazy-loaded)The plugin exposes an API:
api.getClientScripts() — returns Map<string, string> of component ID → client code (used by the islands plugin)Import from @void/md:
useFrontmatter() — access the current page's frontmatter object. Uses framework-native context (provide/inject for Vue, createContext/useContext for React/Solid, setContext/getContext for Svelte).@void/md — resolves to useFrontmatter() runtime@void/md/pages — flat array of all MdPage objects (HMR-aware), useful for building navs, sidebars, and search indexesimport pages from '@void/md/pages';
// MdPage { path, title, frontmatter, headings }
.md files in the pages/ directory become routes. They compile to static HTML at build time with zero client JS by default — auto-prerendered like static island pages.
---
title: Getting Started
author: Jane
---
# Getting Started
Regular markdown content with **full** syntax support.
YAML frontmatter between --- fences. Title is extracted from frontmatter.title or the first <h1>.
Embed interactive components via a <script> block with island import attributes:
---
title: Interactive Page
---
<script>
import Counter from "../components/Counter.vue" with { island: "visible" }
</script>
# Page with Islands
Static content above, interactive island below:
<Counter />
Island strategies: idle (default), visible, media(...).
Regular imports and statements in <script> blocks (without island attribute) are bundled as a client module, code-split per page:
<script>
import { initAnalytics } from "../lib/analytics"
initAnalytics()
</script>
# My Page
Content here.
Full VitePress-parity feature set:
{1,3-5} meta in code fences[!code ++], [!code --], [!code highlight], [!code focus], [!code error], [!code warning]:line-numbers / :no-line-numbers per fence, {=N} start line<<< ./file.ext with region and line range support:::tip, :::info, :::warning, :::danger, :::details> [!NOTE], > [!TIP], > [!WARNING], > [!IMPORTANT], > [!CAUTION]:emoji_name: shortcodestext[^1] refs with matching [^1]: definition blocks{.class #id} on elements via markdown-it-attrs[[toc]] directiveloading="lazy" on imagestarget="_blank", internal .md links normalizedTwo CSS exports for styling markdown content:
@void/md/theme.css — full standalone theme (reset + prose + code + containers)@void/md/theme-content.css — content-only styles scoped to .void-md (prose + code + containers)// In your layout or entry
import '@void/md/theme.css'; // or theme-content.css
extractScript() strips <script> blocks and collects island imports → compile() runs gray-matter + markdown-exit + Shiki → emit-{framework}() generates a framework-specific virtual componentextractMetadata() parses frontmatter + headings without running Shiki, used for @void/md/pages scanningdata-island markers; pages without islands emit static HTML with a frontmatter context provider/@void-md-svelte/ or /@void-md-solid/) so Vite processes through the framework's own plugintest/unit/compile.test.ts — compilation pipeline: basic, frontmatter, title extraction, headings, Shiki, emoji, footnotes, anchorstest/unit/extract-script.test.ts — script extraction: island imports, client code, edge casestest/unit/plugins.test.ts — markdown-it plugins: containers, GitHub alerts, links, images, line numbers, emoji, TOCtest/unit/emit-vue.test.ts — Vue component emission with and without islandstest/unit/emit-react.test.ts — React component emission with and without islandstest/unit/emit-svelte.test.ts — Svelte component emission with and without islandstest/unit/emit-solid.test.ts — Solid component emission with and without islandsFAQs
Unknown package
The npm package @void/md receives a total of 1,541 weekly downloads. As such, @void/md popularity was classified as popular.
We found that @void/md demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
A compromised jscrambler npm release added a malicious preinstall hook that runs hidden native binaries on Linux, macOS, and Windows.

Research
/Security News
A malicious .NET package is typosquatting the Braintree SDK to steal live payment card data, merchant API keys, and host secrets from production apps.

Security News
/Research
Compromised Injective SDK npm version 1.20.21 exfiltrates wallet private keys and mnemonics through fake telemetry functionality.