Skip to content
alkemist

← Blog

Three packages, one site you own

Alkemist separates reusable components, optional theme behavior, and Astro defaults so an existing site can adopt only what it needs.

Alkemist has three public package boundaries in the current source checkout.

Components begin with one useful thing

@alkemdotdev/alkemist-components contains the visible building blocks: Layout, Chart, Model, Math, Code, and the bounded Shader study. An existing Astro site can import a single component without adopting a starter, a stylesheet system, or an integration.

That is the smallest useful promise. A chart remains a chart in the site’s own page and data model; Alkemist supplies the supported rendering and interaction contract around it.

Theme and integration are choices

@alkemdotdev/alkemist-theme holds the board tokens, local fonts, invariant palette, CSS, and browser preference helpers. A site can use those pieces when it wants the Alkemist visual language, or keep its own theme while using a component.

@alkemdotdev/alkemist-astro holds the optional integration and Markdown/MDX defaults. It is useful when a site wants those authoring defaults, but component imports do not depend on configuring the integration.

The split keeps the dependency graph legible: components need the theme’s shared values internally, while an author chooses whether the page imports the theme’s global CSS or integration behavior.

A generator is an initial handoff

The repository’s source generator creates a complete site in an empty directory. It places packed package snapshots in vendor/; its explicit --update refreshes those snapshots while preserving the generated site’s content, assets, configuration, and custom source. The two paths make different ownership promises on purpose.

The getting-started guide explains the source workflow, and the publishing guide records the release policy.