alchemy.new

Project contracts

Registry schema and deploy contracts

alchemy.new reads a versioned alchemy.new.jsonc file at the project root. That file is the project contract. The live JSON Schema is the machine source of truth. This page describes schema version 1.

Independent project

alchemy.new is not affiliated with Alchemy at alchemy.run. It uses Alchemy as the deployment engine.

Project manifest

Place alchemy.new.jsonc at the repository root for a Git project, or at the package root for an npm project. The file can use JSON with comments. The app rejects a missing or invalid manifest.

Set $schema to https://alchemy.new/schema/v1/project.json so editors can validate the file.

Schema fields

The tables below come from the live schema at /schema/v1/project.json. Do not add fields that the schema does not declare. Unknown fields fail validation.

ProjectManifest fields

FieldRequiredDescription
$schemaOptionalJSON Schema URL for editors. Use the live versioned schema URL.
schemaVersionRequiredSchema version. The only accepted value is 1.
idRequiredStable project identifier.
nameRequiredDisplay name on alchemy.new.
descriptionRequiredShort project summary.
publisherRequiredPublisher identity object.
sourceRequiredGit source object or npm source object.
deploymentRequiredEntrypoint, providers, and default stage.
parametersRequiredForm inputs. An empty array is valid.
tagsOptionalSearch and display labels.
websiteOptionalProject website.

Publisher

publisher is a required object. Only name is required inside that object.

ProjectPublisher fields

FieldRequiredDescription
nameRequiredPublisher display name.
githubOptionalGitHub organization or user.
websiteOptionalPublisher website.

Deployment

deployment names the Alchemy entrypoint and the default run. packageManager is optional in the schema. The runner currently selects Nub or Bun from the project lockfile.

ProjectDeployment fields

FieldRequiredDescription
entrypointRequiredRepository-relative Alchemy entrypoint. npm wrappers write alchemy.run.ts and import the package export.
packageManagerOptionalDeclared installer, nub or bun. The runner currently selects the installer from the project lockfile.
providersRequiredSupported providers. Allowed values are cloudflare, aws, and other.
defaultProviderRequiredDefault provider. Allowed values are cloudflare, aws, and other.
defaultStageRequiredDefault Alchemy stage.

Git and npm sources

source is one Git object or one npm object. The two shapes do not mix.

Git source

The repository must contain the declared Alchemy entrypoint. Direct manifest loads currently support GitHub repositories. The runner clones the repository into an isolated sandbox. A private repository can use a one-run source token on the deployment request.

GitSource fields

FieldRequiredDescription
kindRequiredSource kind. The value must be git.
urlRequiredHTTPS repository URL.
refOptionalBranch, tag, or commit. Direct GitHub loads use HEAD when this field is absent.
tokenOptionalOne-run token for a private repository. Do not publish this value in the manifest. Send it only with the deployment request. Share links remove it.

npm source

The npm package must export a default Alchemy Stack from the declared export path. alchemy.new writes a wrapper repository with package.json, alchemy.run.ts, and a resolved lockfile. The wrapper keeps the npm dependency so the user can update it later.

NpmSource fields

FieldRequiredDescription
kindRequiredSource kind. The value must be npm.
packageNameRequirednpm package name.
versionOptionalPackage version. Direct loads use latest when this field is absent.
exportPathOptionalPackage export that returns the default Alchemy Stack. The runner uses ./alchemy when this field is absent.

Parameters

Each parameter declares an environment variable name and a display label. The web form is built from this list. required and secret are required booleans. type is optional.

A select input can declare options. A secret field uses a masked control. Secret values stay out of shared URL state and short links.

ProjectParameter fields

FieldRequiredDescription
nameRequiredExact environment variable name.
labelRequiredDisplay label on the form.
descriptionOptionalHelp text on the form.
requiredRequiredBoolean that controls form validation.
secretRequiredBoolean that marks a secret. The form masks the field and removes the value from URL state and short links.
typeOptionalstring, number, boolean, or select. The form uses a text field when this field is absent.
defaultOptionalPublic default. The value can be a string, number, or boolean. Do not publish a credential as a default. Registry readers can inspect the manifest.
optionsOptionalAllowed values for a select input.

Example

This example matches schema version 1. It includes a public string, a secret string, and a select input. The file can include comments when you store it as JSONC.

{
  "$schema": "https://alchemy.new/schema/v1/project.json",
  "schemaVersion": 1,
  "id": "example-stack",
  "name": "Example stack",
  "description": "Deploys the Example service.",
  "publisher": {
    "name": "Example",
    "github": "example-org",
    "website": "https://example.com"
  },
  "source": {
    "kind": "git",
    "url": "https://github.com/example-org/example-stack",
    "ref": "main"
  },
  "deployment": {
    "entrypoint": "alchemy.run.ts",
    "packageManager": "nub",
    "providers": [
      "cloudflare"
    ],
    "defaultProvider": "cloudflare",
    "defaultStage": "prod"
  },
  "parameters": [
    {
      "name": "APP_NAME",
      "label": "Application name",
      "description": "Public name used for deployed resources.",
      "required": true,
      "secret": false,
      "type": "string"
    },
    {
      "name": "API_KEY",
      "label": "API key",
      "description": "Service key for the Example API.",
      "required": true,
      "secret": true,
      "type": "string"
    },
    {
      "name": "REGION",
      "label": "Region",
      "required": false,
      "secret": false,
      "type": "select",
      "default": "us-east",
      "options": [
        "us-east",
        "eu-west"
      ]
    }
  ],
  "tags": [
    "cloudflare",
    "example"
  ],
  "website": "https://example.com"
}

Listing and verification

Submit a repository from the alchemy.new home page. A submission records the repository for review. A submission does not grant verification.

alchemy.new reviews publisher identity in a separate step. After that review, a project can receive a verified badge and a higher search rank. Featured and verified projects rank before unverified projects.

Publishers can prepare a manifest with the publish-to-alchemy-new skill. Validate the file against the live schema before submission.