FAQ
Does any of this ship to visitors?
No. <Copy> renders the string and nothing else — no wrapper, no attribute, no
class. <CopyInkScripts /> renders nothing without a session. The test suite
contains an import-graph assertion that the editor never enters the visitor
bundle, and that test is the one to keep passing.
How is this different from Tina, Decap or Keystatic?
All of them are git-backed, and all of them are reasonable. The differences:
- copy-ink's production output has no editor markup at all, not just no visible UI.
- Editing happens on your real page, not in a parallel admin app that renders its own preview.
- Clients cannot create pages. That is a deliberate limit, not a missing feature — see Limits.
- Content is plain YAML with comments preserved, and the schema only exists for collections.
If your client needs to build pages, use a CMS that does that well.
Does it need a database?
No. Content is files in your repository; sessions live in the server process (or
a store you supply). There is nothing to back up that git clone does not
already have.
How fast do changes go live?
One to three minutes: commit, rebuild, deploy. The editor says "live in about 2 minutes" for that reason. If you need instant updates, this is the wrong architecture.
Can the client break the site?
They can change words, and they can delete a collection item. They cannot change
layout, add markup, create pages, edit locked fields, or push anything that
skips your CI. A bad edit is one git revert away.
Do I have to give the client repo access?
No, and you should not. They sign in with GitHub OAuth so you know who they are;
the commit is made by a GitHub App installation scoped to contents: write on
one repository. See Auth and backends.
Can they sign in with something other than GitHub?
Implement AuthProvider and pass it to setServices. The interface is three
methods, and it stays paired with whatever backend you like — that separation is
why the two interfaces exist.
What about GitLab, Gitea or Forgejo?
Not in v1. ContentBackend is four methods, so an adapter is a small piece of
work if you need one.
Does it work with a statically exported site?
It renders content, but it cannot use the GitHub backend — the OAuth
code-for-token exchange needs a route handler. copy-ink doctor reports this.
Does it support Pages Router?
No, and it will not. App Router Server Components are what make zero-JS rendering possible.
What happens if two people edit at once?
The second publish is rejected with "someone else changed this page — reload." The changeset carries a base SHA, and there is no merging in v1.
Can I use it with a monorepo / a non-standard root?
Yes — setupCopyInk(config, { root }) and the CLI's --root both take a
project root.
Will images bloat my repository?
They can. Every uploaded byte is a byte in git history forever. copy-ink prune
removes unreferenced files, but history keeps the blobs. For image-heavy sites,
point the client at a CDN host and let them paste URLs.
Can I edit content without the editor?
Yes — it is YAML in your repo. Edit it in your editor, commit it, done. The editor is for the client, not for you.
How do I preview an edit before publishing?
The editor shows a before/after diff at publish time. Branch-and-PR publishing, which would give you a preview deployment per changeset, is a v2 feature.
Is it production-ready?
It is v0.2.0. The architecture is settled and the API is close, but 0.2.0 moved
one extension point — SessionStore is now async — so treat the extension
points as still moving. The version number is honest about the mileage. Read
Limits before betting a client project on it, and set
COPY_INK_SESSION_SECRET before you deploy.