Sharing

Ink has three levels of sharing: internal (workspace members), external (signed share links), and public (published to a custom domain). Each level has its own access controls and use cases.

Internal sharing

Share a page or space with workspace members.

Page menu → Share → Invite members.

  • Pick users by name or email.
  • Pick their role: Viewer, Commenter, Editor.
  • Roles at the page level override space defaults.

For full workspace access, set the page to Workspace-wide visibility instead of inviting individuals.

Sometimes you need to share a page with someone outside the workspace — a client, a contractor, a vendor. External share links let you do that without creating an account.

Page menu → Share → Create share link.

Options per link:

  • Access level — view only, comment, or edit.
  • Expiration — never, 7 days, 30 days, 1 year, or custom.
  • Password — optional additional gate.
  • Require email — recipient enters their email to unlock (for audit trails).
  • Downloadable — allow or disallow markdown/PDF export.

Each link is HMAC-signed with INK_SHARE_SIGNING_SECRET. Copy the link and send it however you like (email, Slack, carrier pigeon).

Every share link is listed under Settings → Share links with its page, access level, and creation date. Revoke any time.

Audit log

Every visit to a share link is logged to share_link_visits with timestamp, user agent, and email (if required). Admins can see the full log from Admin → Audit.

Public publishing

For pages that should be public (docs sites, landing pages, changelogs, handbooks), publish to a custom subdomain.

Setup (one-time)

See Installation for the full flow:

  1. Add a custom subdomain to your Vercel deployment.
  2. Set VITE_INK_PUBLIC_DOMAIN env var.
  3. Confirm the domain in Settings → Publishing.

Publishing a page

Page menu → Publish → Make public.

  • Pick a slug (auto-generated from title, editable).
  • Optional SEO metadata: title, description, Open Graph image.
  • Optional password gate.

Saving triggers ink-publish-renderer to write static HTML. The published URL is live within a few seconds.

Unpublish from the same menu; the page returns to its previous visibility.

Publishing a whole space

Space menu → Publish → Publish space. Every page in the space becomes accessible under the custom domain at /space-slug/page-slug. The space's index page is the landing page at /space-slug.

Per-page publish flags still apply — pages tagged draft or explicitly unpublished stay private.

SEO

The publish renderer emits:

  • <title> and <meta name="description">
  • Open Graph + Twitter Card tags
  • JSON-LD Article schema
  • sitemap.xml per space
  • robots.txt (configurable per space)

Customize the publish template under Settings → Publishing → Templates.

Embedding

Embed any page (or a single block) in another website via an iframe:

<iframe
  src="https://your-ink-domain/embed/{page_id}?block={block_id}"
  width="100%"
  height="500"
></iframe>

Embedded content respects the same access controls — if the page is private, the iframe shows a "log in" prompt. For anonymous embeds, publish the page first or use a share link.

Security notes

  • Share links use HMAC — no key on the client, so clients can't forge links.
  • Revoking a link invalidates it immediately (link table lookup happens on every request).
  • Public-published pages are static HTML — the Supabase database is not hit at all on reads, so scraping or traffic spikes can't exhaust your project quota.
  • Password-gated share links store only a bcrypt hash of the password.

Limits

  • Share links per page: 20.
  • Published pages per workspace: unlimited.
  • Custom domains per workspace: 5 (contact support to raise).

Example workflows

Customer proposal. Create a page per prospect. Share as an external link with 14-day expiration and email requirement.

Public handbook. Create a "Handbook" space, publish it to handbook.acme.com. Internal team edits in Ink; the world reads the static site.

Contractor collaboration. Invite contractor as a Commenter on specific project pages; revoke when the contract ends.