Chrysalis

Apps and the Store

Everything you do in Chrysalis happens in an app. Each one is a folder of plain files: a web page, optional plugins that run on the server, and the data it stores.

#The Store

Open Store in the launcher to browse apps. Installing one shows its plugins and exactly what each is allowed to do before anything runs. New apps in the Store are marked so you notice them.

#Official and community apps

  • Official apps are made by the Chrysalis maintainers. Their repositories live under the ProjectChrysalis organization and end in -Chrysalis.
  • Community apps are made by other people. They can be great, and they run real code on your server, so install ones you trust.

Official status comes from where Chrysalis installed an app from, never from anything the app says about itself.

#Import from git

Any app in a public git repository can be installed without the Store:

  1. In the launcher, click Import app and keep Git repository selected.
  2. Paste the repository's https:// address and click Inspect repository. It is downloaded and inspected; nothing runs yet.
  3. Review the app's plugins and their permissions, then click Import this app.

The app updates from that repository from then on. SSH addresses (git@…) need git installed on the server; https:// addresses work everywhere, including Android.

#Back up an app

Select an app in the launcher and click the download button (Export app) next to Check for updates. Your browser saves a zip named like roleplay-backup-2026-09-13.zip with:

  • the app's files, including your own changes and plugins you added;
  • its data: chats, characters and whatever else the app stores;
  • where the app updates from, so a restored copy keeps updating.

Installed packages and build output are left out; they come back on their own. Backups larger than 512 MB are refused.

#Restore or move an app

  1. In the launcher, click Import app, then Backup file.
  2. Click Choose file and pick the zip.
  3. Check the preview: the name it installs as, whether it includes data, where it keeps updating from, and what its plugins can do. Then click Import this app.

A restore never replaces an app you already have. If the name is taken, it installs beside it (for example roleplay-2), so you can compare and delete the one you do not want.

A restored copy of an official app shows as a community app until its next update brings its code back in line with the official repository. Only import backups you made or trust: a zip can contain any code.

A zip you made by hand works too, as long as manifest.json is at the top of the zip or inside its single top folder.

#Plugins

Plugins are the part of an app that runs on the server: they store data, call models, reach the network, and give the agent tools. Open an app, then Plugins in its toolbar (on a phone, in the account menu) to:

  • see every plugin in the app with its permissions;
  • turn a plugin off without uninstalling it;
  • import a plugin from a git repository into this app;
  • check a plugin you imported for updates;
  • remove a plugin.

#Permissions

PermissionLets a plugin
routesAnswer the app's requests to the server.
storeKeep its own small key and value storage.
fsRead and write files in the app's data folder.
llmCall models through your connections.
networkMake web requests to the hosts its manifest lists. A plugin that lists none has no network.
toolsGive models tools to call.
scheduleRun on a timer.
hooksAdjust other plugins' model requests (together with llm).
zipRead zip files a person uploads, for importers.

A plugin that can both read the app's data and reach the network could send that data somewhere. Chrysalis says so in plain words when it shows you such a plugin.

#Create your own

New app in the launcher makes a starter app and hands it to the agent, which builds it with you. See Build an app for how apps are put together.

#Delete an app

Hover the app in the launcher and click its delete button, then confirm. The whole app goes, including its data. Export a backup first if you might want it back.

Edit this page on GitHub