Chrysalis

Publish to the Store

Any public git repository with a Chrysalis app in it can be installed with Import app. Adding it to the Store puts it in front of everyone.

#Put your app in a repository

  1. Create a public repository with manifest.json at its root and the rest of the app beside it.
  2. Leave out node_modules/, dist/ and your own data/. Ship only the templates (files starting with _) and any starter data a new install needs.
  3. Add the chrysalis-app topic to the repository so people can find it on GitHub.
  4. Check that it installs: in Chrysalis, Import app > Git repository with your repository's address.

#Add it to the Store

The Store's list is apps.json in the app-store repository.

  1. Fork the app-store repository and add an entry at the end of apps.json:
    {
      "id": "reading-tracker",
      "name": "Reading Tracker",
      "description": "Books I am reading, with notes.",
      "author": "Your name",
      "repository": "https://github.com/you/reading-tracker",
      "tags": ["books", "notes"],
      "added": "2026-09-13"
    }
  2. Run bun scripts/validate.ts --clone in your fork. It checks every entry and installs yours from its repository.
  3. Open a pull request.
FieldRules
idUnique. Lowercase letters, digits, - and _, up to 64 characters. It becomes the app's folder name when installed.
nameUp to 80 characters.
descriptionUp to 500 characters.
authorUp to 80 characters.
repositoryThe https:// address of a public git repository.
refOptional. A branch or tag to install instead of the default branch.
tagsOptional. Up to 8 lowercase tags.
addedThe day you add the entry, as YYYY-MM-DD. It decides what counts as new.

#Releasing updates

No pull request is needed for updates. Push to your repository (or to the branch or tag the entry names) and every install is offered the new commits. Raise version in manifest.json when you release, so people see what they are updating to.

  • Keep your plugins' permissions as small as you can. On community apps, an update that adds a permission stops and asks the user.
  • Changing npm packages also asks the user on community apps, so batch those changes.
  • If a release needs a newer Chrysalis, say so with engine in the manifest.
  • Upgrade stored data in a plugin's onAppUpdate export rather than asking people to start over. It receives the version the data last had, which can be several releases back, so check ctx.from against each change. It may run for up to five minutes with 512 MB of memory, and if it throws it runs again later from the same version, so every step must be safe to repeat.

#Official apps

Official apps are maintained by the Chrysalis team in the ProjectChrysalis organization, in repositories whose names end in -Chrysalis. An app is official because of where it is installed from; nothing in an entry or a manifest can make an app official.

#Removal

Apps that break, disappear or turn out to be harmful are taken off the list. Removing an entry does not uninstall the app from anyone's Chrysalis.

Edit this page on GitHub