Skip to main content
KiwiFS provides three ways to make content accessible without authentication: per-page publishing, share links, and space-level visibility.

Per-page publishing

Set published: true in a page’s frontmatter to make it accessible at /p/{path} without authentication.
---
title: "Getting Started"
published: true
published_at: "2026-05-02T14:30:00Z"
---
Published pages are served as rendered HTML at their public permalink:
http://localhost:3333/p/concepts/auth.md
curl -X POST 'http://localhost:3333/api/kiwi/publish' \
  -H 'Content-Type: application/json' \
  -d '{"path":"concepts/auth.md"}'

Bulk operations

Publish or unpublish multiple pages at once:
curl -X POST 'http://localhost:3333/api/kiwi/publish/bulk' \
  -H 'Content-Type: application/json' \
  -d '{"paths":["concepts/auth.md","concepts/billing.md"]}'

Listing published pages

curl 'http://localhost:3333/api/kiwi/publish/list'
See Publish API for full endpoint reference. Create time-limited, optionally password-protected links to individual pages. Share links work independently from publishing — a page does not need to be published to be shared.
curl -X POST 'http://localhost:3333/api/kiwi/share' \
  -H 'Content-Type: application/json' \
  -d '{"path": "concepts/auth.md", "expiresIn": "168h", "password": "optional-secret"}'
Recipients open the returned token URL without API authentication:
GET /api/kiwi/public/:token
Share links have their own view counter. Revoke a link with DELETE /api/kiwi/share/:id using the share id (not the long token).

Space visibility

Control access at the space level with the visibility setting in .kiwi/config.toml:
[space]
visibility = "private"   # "private", "unlisted", or "public"
VisibilityBehavior
privateAll access requires authentication (default)
unlistedAccessible to anyone with the URL, not listed publicly
publicPages with visibility: public in frontmatter are browseable without authentication

Public visibility browsing

When space visibility allows it, pages that declare visibility: public in their frontmatter are accessible via dedicated endpoints:
curl 'http://localhost:3333/api/kiwi/public/file?path=concepts/open.md'
curl 'http://localhost:3333/api/kiwi/public/tree?path='
Non-public pages return 404 to avoid leaking existence.

Changing visibility at runtime

curl -X PUT 'http://localhost:3333/api/kiwi/space/visibility' \
  -H 'Content-Type: application/json' \
  -d '{"visibility": "public"}'

How the models interact

ModelScopeAuth needed to read?Persisted where?
Published pagesSingle pageNo — served at /p/{path}published: true in frontmatter
Share linksSingle pageNo — token in URLServer-side share store
Space visibilityAll public pagesNo — via /public/* endpoints[space] visibility in config + per-page visibility frontmatter
Use publishing for content you want permanently public (docs, guides). Use share links for temporary or restricted sharing (reviews, previews). Use space visibility to open an entire knowledge base for browsing.

Publish API

REST endpoints for publish, unpublish, and status.

Analytics

Share links, comments, and real-time events.

Configuration

Space visibility settings.

Optional features

Feature matrix and error codes.
Last modified on May 31, 2026