Skip to content

v1.3.0 — duplicate artifacts, markdown render controls, Anvil Nine look

Latest

Choose a tag to compare

@kuyazee kuyazee released this 23 Jul 17:13
· 171 commits to main since this release
245eeef

Highlights

Duplicate an artifact

Copy any artifact into a new one that keeps all of its setup. A new Duplicate... item in
each artifact's overflow menu opens the compose form pre-filled from the source: the title is
set to {name} (n) (auto-incrementing, e.g. anvilnine (1)), the slug to a derived
anvilnine-1, and the frame, visibility, tags, and project are carried over. Every field stays
editable before you create the copy.

  • Works for inline artifacts (html/jsx/tsx/md) and zip sites on one server path,
    POST /api/artifacts/:slug/duplicate. Any field the request omits inherits from the source.
  • The content is copied as-is; to change a copy's content, edit it after.
  • The view password is never copied (it is stored hashed) — a copy set to password visibility
    asks for a new one.

Markdown render controls

Global render config for markdown artifacts: reading font (system/serif/mono), content width,
font size, and default theme (auto/light/dark). Markdown renders at serve time, so changing the
global config applies to every markdown artifact live with no re-publish. The viewer frame gets
a light/dark/auto theme toggle. Inline code no longer clips at the edges.

Anvil Nine look

The dashboard and the viewer shells (frame, jsx, md, password) now carry the Anvil Nine brand.

Dashboard UX

A tag chip editor and a project combobox on the compose and edit forms, list and grid view
modes, and inline menus/dialogs with optimistic updates.

Docs

New setup guides: preview deploys from CI (GitHub Actions), and three storage backends
(Coolify + MinIO, Forgejo, GitHub). README screenshots refreshed.

Upgrade notes

Backward compatible, no migration. Duplicate is available to any key with the publish scope.
Markdown render config has sensible defaults, so existing markdown artifacts render unchanged
until you set a global preference.

Full changelog: v1.2.0...v1.3.0