Legal

Frequently Asked Questions

Everything you need to know about ExtenSilica, .xsil packages, publishing, versioning, security, and your account.

Last updated: May 2026

Getting Started

What is ExtenSilica?

ExtenSilica is a free, public registry for .xsil packages — versioned, self-describing archives that bundle RISC-V simulation assets, toolchains, test suites, documentation, and optional FPGA artifacts. Think of it as npmjs.com for reproducible RISC-V extensions: you can search for packages, install them with xsil install, publish your own work, and view download statistics and reviews.

Is ExtenSilica free to use?

Yes — free to use. There are no paid tiers, publishing fees, or download quotas. To protect the service from abuse, we may apply reasonable rate-limiting or temporary restrictions during unusual traffic or incident response.

How do I install the xsil CLI?

The CLI is written in Rust. Build from source using Cargo:

cargo install xsil

Pre-built binaries for Linux and macOS are available on the GitHub releases page.

What RISC-V targets are supported?

Targets are declared per-package inside the manifest. The registry does not maintain a global platform catalog. Commonly declared target identifiers include spike, qemu, and fpga. FPGA support is entirely optional; board-specific BSPs are bundled inside the package itself, not provided by the platform. Any target string may be declared — the registry treats it as opaque metadata.

Do I need an account to browse or install packages?

No. Browsing the registry, searching packages, viewing package pages, and installing packages with xsil install are all available without an account. An account is required only to publish packages or leave reviews.

What is the fastest way to scaffold a new package?

Use the Extension Wizard. Either fill the web form at extensilica.com/wizard and download a ready-to-edit .xsil, or run the CLI:

xsil new my-extension

Both paths produce the same skeleton: manifest.json, opcodes.json, an opcodes.h header with __asm__ .insn macros for each declared instruction, a Spike extension_t stub under sim/spike-extension/ withMakefile, runnable per-instruction examples in examples/, an SPDX LICENSE, a Keep-a-Changelog CHANGELOG.md, and standard tests/, docs/, and toolchain/ placeholders. The wizard requires a repository URL (use the future GitHub URL if the repo does not exist yet).

The wizard never publishes for you — the output is a local archive you can edit, version, and ship with xsil publish when ready.

What does "standard status" mean on a package?

Every package on ExtenSilica must declare its honest relationship to the RISC-V standard. The label appears as a badge on the package page and powers the homepage counts. Five values are allowed:

  • ratified — frozen specification approved by RISC-V International. The encoding is locked.
  • draft — working draft from RISC-V International or another standards body. Not ratified yet — the encoding may still change.
  • vendor — custom extension defined and shipped by a commercial vendor (T-Head, SiFive, Qualcomm, Andes, Ventana, …).
  • research — academic / experimental extension, often used in research papers or pre-production prototypes.
  • custom — bespoke or one-off extension that does not fit the categories above.

The accompanying authority field is free text (2–200 characters) identifying who defines the spec — for example RISC-V International, T-Head / XuanTie, or University of Michigan. Both fields are stored at the top of manifest.json, validated by the registry, and required by both the web wizard and xsil new. Do not label a package ratified unless RISC-V International has actually frozen the spec — the registry checks this and we audit the catalog regularly.

What is "port status" / provenance on a package?

portStatus is orthogonal to standardStatus: the latter describes the SPEC, the former describes who put the package on ExtenSilica and whether the upstream maintainer has blessed it. It is always server-set — we never read it from the uploaded manifest, so publishers cannot lie about being the official maintainer. Five values exist:

  • seeded — auto-published by the ExtenSilica catalog-seed agent from public sources. The upstream maintainer has not (yet) claimed authorship.
  • community_port — ported by a non-upstream community member. Useful, but not vetted as official.
  • claimed — the current owner went through the Request authorship flow and was approved by a platform admin.
  • official — a platform admin verified the publisher's identity / affiliation with the upstream project.
  • archived — upstream is dead or the package has been intentionally frozen. Still installable; no further updates expected.

Packages published directly by a user are unmarked ("self-published") until either an ownership claim or an admin verification flips them. Approving an ownership request on a seeded or community_port package automatically promotes it to claimed.

Packages and Publishing

What is a .xsil package?

A .xsil file is a gzip-compressed tar archive. It must contain a manifest.json at its root that declares at minimum:
  • name, version, description, author, license
  • isa — RISC-V ISA string (e.g. rv64gc, rv64imafc)
  • targets — declared execution platforms (typically spike, optionally qemu, binutils, llvm, fpga)
  • entry / testEntry — primary run / test entry points
  • checksums.payload — SHA-256 of the non-manifest payload for integrity verification
  • repository — http(s) URL to the source (required for wizard-generated packages)

Common companion files (all optional but produced by xsil new and the web wizard):

  • opcodes.json — schema-versioned descriptor of custom instructions (mnemonic, format, opcode, funct3/funct7, operands, summary)
  • opcodes.h — C header with __asm__ macros that emit the custom instructions via GAS .insn, no toolchain patch required
  • sim/spike-extension/ — Spike extension_t C++ stub plus Makefile for building lib<slug>_spike.so
  • examples/, tests/, docs/, toolchain/ — runnable examples, expected-output tests, prose docs, and a placeholder for any bundled toolchain
  • README.md, CHANGELOG.md, LICENSE, .xsilignore — standard surface metadata
  • bitstream/ — optional FPGA artifacts when applicable

How do I publish a package?

  1. Create a free account at extensilica.com/register.
  2. Authenticate the CLI:
    xsil login
  3. Create your package directory with a valid manifest.json. Run a dry-run to validate it:
    xsil publish ./my-package/ --dry-run
  4. Set resolution.mode to bundled, resolved, or host-dependent per your reproducibility story. If you use resolved with dependencies.tools, you can upload matching binaries to ExtenSilica artifacts so installs resolve with auth; it is optional for other modes.
  5. Publish when ready:
    xsil publish ./my-package/

The CLI validates your manifest, computes SHA-256 checksums, packs the directory into a .xsil archive, and uploads it to the registry. The backend stores your declared resolution.mode and dependencies; strict artifact linkage is applied only when every declared resolved tool matches a registered ExtenSilica artifact.

Can I publish host-dependent or bundled packages to the marketplace?

Yes. bundled, resolved, and host-dependent manifests can be published. When you use resolved with dependencies.tools pointing at ExtenSilica artifact URLs, the registry can record artifact linkage for installs; otherwise the manifest JSON alone is kept and users follow your docs for host prerequisites.

What are the package naming rules?

Package names must:
  • Contain only lowercase letters (a–z), digits (0–9), and hyphens (-) — no underscores
  • Start and end with a letter or digit (no leading or trailing hyphen)
  • Be between 2 and 64 characters
  • Be unique across the entire registry
  • Not match a reserved name (e.g. extensilica, admin, api, system) — the full list is enforced server-side

Pattern: ^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$|^[a-z0-9]{1,2}$

Organizations and scoped slugs use the form @<org>/<package>; both segments follow the same rules above.

Names that impersonate popular projects, contain offensive language, or are reserved for abuse purposes may be removed.

Can I update or delete a published package?

You cannot overwrite or delete a published version. Version immutability is a core design principle: once [email protected] is published, its bytes are permanent. This ensures reproducible builds for anyone who depends on that version.

What you can do:

  • Publish a new version — use semantic versioning to supersede the old one.
  • Yank a version — mark it as unsafe. Yanked versions are excluded from normal installs but remain in the registry for auditability.
  • Deprecate a package — mark the entire package as deprecated (e.g., if it has been renamed). A deprecation notice is shown on the package page.
  • Edit metadata — description, keywords, links, and README can be updated at any time via the dashboard or xsil publish. Version artifacts are immutable; metadata is not.

What happens after I publish — is there a review process?

There is no manual review gate. Packages are indexed and publicly visible immediately upon successful upload. We perform integrity verification (checksum validation) at upload time but do not perform automated behavioral analysis of package contents.

Authors are solely responsible for the content of their packages. See the Terms of Service for the full acceptable-use policy.

Does ExtenSilica support organizations or scoped packages?

Yes. ExtenSilica supports organizations and scoped package slugs (e.g., @myorg/package).

Organization profiles live under /orgs/<slug>. Package pages and CLI commands accept scoped slugs wherever a package name is accepted.

Versioning

What versioning scheme is required?

All package versions must follow Semantic Versioning 2.0.0 (semver). Examples of valid versions: 1.0.0, 2.3.1, 0.1.0-alpha, 1.0.0-rc.1+build.42. Non-semver strings are rejected at publish time.

How does 'latest' work?

The latest tag always points to the semver-greatest non-yanked version of a package. It is recomputed automatically after every publish. This means publishing a backport patch (e.g., 1.0.1 after 1.1.0 is already live) does not move the latest tag.

You can explicitly target latest in the CLI:

xsil install rvx-demo@latest
xsil info    rvx-demo@latest

How do I install a specific version?

Use the @version suffix with any xsil command that accepts a package name:

xsil install [email protected]
xsil run     [email protected]
xsil info    [email protected]

The version history table on every package page shows per-version install commands that you can copy with one click.

What does 'yanking' a version mean?

Yanking marks a version as unsafe without deleting it. Yanked versions:

  • Are excluded from normal resolution (latest, bare installs).
  • Appear in the version history with a yanked badge.
  • Can only be installed explicitly with xsil install pkg@version --override-security.
  • Are not deleted — the artifact remains accessible for auditing and for systems that were already pinned to that version.

Security and Trust

What does 'reproducible' mean?

Every .xsil package records a SHA-256 checksum of all non-manifest files at publish time. The xsil CLI recomputes this checksum on every install and before every run or test. If the bytes do not match — the file was tampered with, corrupted in transit, or silently replaced — the CLI refuses to execute it and prints an error.

This gives you a strong integrity check: what runs matches the author-published payload checksum, regardless of how the file was served.

Is it safe to run packages from unknown authors?

Exercise caution. .xsil packages may contain executable scripts and binaries. The registry verifies archive integrity (checksums match what the author published) but does not perform behavioral analysis.

Before running a package from an unknown author:

  • Review the package description, README, and repository link.
  • Inspect the entry point and any scripts listed in the manifest.
  • Check download counts and reviews — popular, well-reviewed packages from active authors are lower risk.
  • Consider running inside a sandbox or container.

How do I report a malicious or abusive package?

For IP / copyright infringement, use the formal DMCA / Takedown Request page.

For malware, abuse, or policy violations, email [email protected] or open an issue on the project’s GitHub repository with the package name, version(s), and a description of the concern. We treat security and abuse reports as high priority and will investigate promptly. Confirmed malicious packages will be yanked and the publishing account suspended.

How are checksums computed and verified?

At publish time the CLI computes two SHA-256 digests:

  • Payload checksum — SHA-256 over all non-manifest files (sorted by path), stored in manifest.json.
  • Archive checksum — SHA-256 of the full .xsil archive byte stream, verified by the server on upload and stored in the registry database.

At install time the CLI re-downloads the archive, recomputes the archive checksum, and recomputes the payload checksum from the extracted files. Any mismatch causes an immediate abort.

For resolved mode with dependencies.tools, the CLI may download each declared tool archive, verify SHA-256, and cache it before execution. bundled and host-dependent flows skip those downloads.

What is the CLI authentication model?

Running xsil login prompts for your email and password. On success the registry returns a random opaque API token. The CLI stores this token in ~/.extensilica/config.json. All subsequent authenticated requests (publish, etc.) send the token as a Bearer header.

The token is not a session cookie and is not stored in the browser. Running xsil logout invalidates the token on the server and removes it from the config file.

Keep your config file and token private. Do not commit it to version control.

Account and Data

What personal data does ExtenSilica store?

We store your username, email address (hashed password, never plaintext), and optional bio/avatar. Download events are recorded as aggregate daily counts with no user identity attached. Full details are in the Privacy Policy.

Can I delete my account?

Yes. Email [email protected] or open an issue on GitHub to request account deletion. We will remove your email, password hash, and API token.

Your published packages will remain in the registry — they are attributed to your username but no longer linked to active account credentials. Other users’ builds may depend on your packages, so we do not delete artifacts on account closure.

How do I transfer ownership of a package to another user?

Package ownership transfer is available through the maintainers dashboard. Add the new owner as a maintainer, then contact us to update the owner record. Full self-service ownership transfer is planned for a future release.

Can I add other people as maintainers of my package?

Yes. Go to the Maintainers tab in your package dashboard (or navigate to /publish/[slug]/maintainers) and enter the username of the person you want to add. Maintainers can publish new versions and edit metadata, but cannot manage other maintainers or transfer ownership. Only the package owner can add or remove maintainers.

Where are .xsil archive files stored?

Archive files are stored in an S3-compatible object store separate from the registry database. The registry holds only metadata and a URL pointing to the blob. Download links served to the CLI point directly to the storage URL. No personal data is transmitted to the storage provider.

Governance & stewardship

Who operates ExtenSilica?

ExtenSilica operates the public registry and .xsil packaging platform as an interim technical steward, with a stated goal of neutral long-term governance (including possible transfer to RISC-V International or an affiliated foundation). ExtenSilica is not affiliated with RISC-V International. See Governance.

Does ExtenSilica process payments or hold funds?

No. The registry is free to use and has no paid tiers, wallets, escrow, or payout flows in the platform schema. Implementation requests may list an optional off-platform funding contact; that is not an offer, contract, or payment rail operated by ExtenSilica.

Where can I see adoption metrics?

Public page-view and download aggregates are on the Adoption dashboard (GET /stats/adoption). They support transparency for stewards and contributors, not billing.

What are XSIL tokens? Do they have monetary value?

XSIL is the contributor governance token for ExtenSilica. It records verified contribution and is used for platform governance via the ExtenSilica DAO on Aragon. See also Token Documentation.

Still have questions?

[email protected] (general), [email protected] (legal), or [email protected] (support). You can also open an issue on GitHub, or review the .xsil specification.