references:

  • plug-api/lib/ref.ts
  • plugs/index/refactor.ts

In SilverBullet every Page|page or Document|document has a name. Names are (currently) unique, meaning no two pages or documents can share the same name.

Rules

Names must also follow certain rules:

  • Names cannot be empty
  • Names cannot start with a ., ^ nor /
  • Names cannot contain the characters |, @ or #
  • Names cannot contain the sequences [ or ]( or )
  • Names cannot contain one or two . enclosed by a combination of the start/end of the name or /
  • Names cannot contain //
  • Names cannot end in .md (See [Paths#Relation to names](Paths#Relation to names) section)
  • (Names are case-sensitive and contrary to most filesystem, / is allowed)

Valid Examples

  • “foo”
  • “this/is/a/page/name”
  • “this/.../is/also/a/page”
  • “this/is/a/document.png”

Invalid Examples

  • “foo@bar”
  • “.foo”
  • “foo//bar”
  • “foo/../bar”

Special characters

Certain HTTP reverse proxies may block “suspicious” characters (such as ?, # and ;) by default, including Traefik, see this thread on how to work around this.

Naming conventions

Beyond the hard rules above, there is a widely-used stylistic convention for everyday content pages:

  • Use Title Case with spaces: name a page as you’d write it in prose: Customer Persona, Release Process — not customer-persona, release_process, or CustomerPersona. The page name doubles as its title and as inline link text, so a readable name reads well in context: see [Release Process](Release Process).
  • Keep the namespace flat by default: place most pages at the top level and reach for folders only once a clear grouping earns it. See [Best Practices#Flat name space](Best Practices#Flat name space) for the rationale.

These are conventions, not enforced rules — your space is yours to organise however suits you.