Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Project Identifiers

Sysand Index identifies published projects by a normalized publisher ID and a normalized project name ID. Source package metadata can use readable publisher and name fields, but the index stores, authorizes, and serves their normalized identifier forms.

This page is the technical reference for Sysand project identifier fields, normalization, and related URL and PURL forms. For the conceptual model behind these rules, see Project name and publisher fields.

Identifier Vocabulary

.project.json Fields

Uploaded packages include publisher and name fields in .project.json. Both fields are required for Sysand Index uploads and must be strings.

FieldAllowed charactersLength
publisherASCII letters, digits, spaces, and hyphens3-50 characters
nameASCII letters, digits, spaces, hyphens, and periods3-50 characters

The name field is slightly more permissive than publisher: project names may contain periods, while publisher names may not.

For both fields:

Examples:

FieldValid examplesInvalid examples
publisherSensmetry, ACME Systems, Team-42acme.systems, -acme, acme--systems
nameFancy Stuff.Teapots, sysml-utils, Core 2.core, core..model, core_2

Regular expressions:

publisher field: ^[a-zA-Z0-9](?:[a-zA-Z0-9]|[- ](?=[a-zA-Z0-9])){1,48}[a-zA-Z0-9]$
name field:      ^[a-zA-Z0-9](?:[a-zA-Z0-9]|[-. ](?=[a-zA-Z0-9])){1,48}[a-zA-Z0-9]$

Normalized Identifiers

Sysand Index and the upload API use normalized identifier fields. These are also the publisher-id and name-id components of a Sysand project ID.

IdentifierSource fieldNormalization
normalized_publisher.project.json publisherlowercase, then replace spaces with hyphens
normalized_name.project.json namelowercase, then replace spaces with hyphens; periods stay periods

Examples:

.project.json fieldNormalized value
publisher: "Sensmetry"sensmetry
publisher: "ACME Systems"acme-systems
name: "Fancy Stuff.Teapots"fancy-stuff.teapots

The normalized values must also match the index identifier rules:

IdentifierAllowed characters
normalized_publisherlowercase letters, digits, and single hyphens
normalized_namelowercase letters, digits, single hyphens, and single periods

Regular expressions:

publisher ID: ^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){1,48}[a-z0-9]$
name ID:      ^[a-z0-9](?:[a-z0-9]|[.-](?=[a-z0-9])){1,48}[a-z0-9]$

During upload, Sysand Index rejects a package if:

Sysand Project IDs

A Sysand project ID combines the normalized publisher ID and name ID:

<publisher-id>/<name-id>

Example:

sensmetry/fancy-stuff.teapots

Use the Sysand project ID when referring to a Sysand Index package in index URLs, pkg:sysand usage resources, and upload metadata.

Publisher Namespace Requirements

The normalized publisher must map to an existing Sysand Index namespace. A namespace is either a username or an organization name.

For example, a package with this .project.json metadata:

{
  "publisher": "Sensmetry",
  "name": "Fancy Stuff.Teapots"
}

uploads under the normalized project identifier:

sensmetry/fancy-stuff.teapots

The upload is accepted only if sensmetry exists on Sysand Index as a user or organization namespace, and the upload token is authorized for that namespace and project.

Upload Metadata Fields

The upload API receives the normalized identifiers separately from the archive:

{
  "normalized_publisher": "sensmetry",
  "normalized_name": "fancy-stuff.teapots",
  "version": "1.2.3",
  "license": "MIT",
  "kpar_sha256_digest": "..."
}

The .kpar archive must contain a root .project.json file whose publisher and name fields normalize to the submitted normalized_publisher and normalized_name values.

Usage Identifiers

Usage entries in .project.json use IRI resources to identify how a dependency can be acquired. A Sysand package usage uses the Sysand PURL form:

pkg:sysand/<sysand-project-id>

Example:

pkg:sysand/sensmetry/fancy-stuff.teapots

For Sysand Index uploads, usage resources must reference either a current-index project with the Sysand PURL form or an OMG standard library .kpar URL such as https://www.omg.org/spec/SysML/20250201/Systems-Library.kpar. Other IRI schemes may be useful to general sysand tooling, but they are not accepted by the official index upload API.

Common Forms

The same publisher and project name appear in a few related forms:

FormFormatExample
Project ID<normalized-publisher>/<normalized-name>sensmetry/fancy-stuff.teapots
Sysand package URLpkg:sysand/<project-id>pkg:sysand/sensmetry/fancy-stuff.teapots
Index versions URL/index/<publisher>/<name>/versions.json/index/sensmetry/fancy-stuff.teapots/versions.json