Skip to content

stabilization has been completed

Well, almost.

Announcement

KiseiIllarin
me-rn-fr

For the past few weeks or so, Illarin got no new features. It got a full stop instead.

The site worked, but it wasn't ready for strangers. Labels used words only I understood. Some features were there but hard to find, and some took too many clicks. The blog sat on its own address and felt bolted on. Shared links showed an old design or nothing at all. Profiles were a browse page with a different header. One app got more space on the page than the others. I had no idea how many people visited, because nothing counted them.

So this round was about fixing what already exists. It touched almost every page on the site and almost every file behind it. New major features come later, once Illarin has had some time to settle and grow.

This post walks through the changes that matter most. Everything smaller is in the changelog at the end.

The short version

  • Browse asks which app you use and shows what works there.

  • Downloading is one click for your app, and a dialog compares the formats when you want to know more.

  • Editing a work happens on its page. Changes save themselves, and one Publish button shows what changed.

  • Deleting a work or a post takes one confirmation, and Recently deleted keeps it for 30 days.

  • Profiles have a banner, featured works, a feed of recent versions and a follow button.

  • Links to works, profiles and posts show a proper card in Discord and anywhere else that shows link previews.

  • Creators can post each new version to their own Discord channel.

  • Connecting an app always asks for the app's code, and you choose what the app may do.

  • Extensions can publish new versions straight from GitHub releases.

  • The blog lives at [illarin.com/blog](https://illarin.com/blog), inside the site.

  • Guides for app developers and extension developers are at [illarin.com/docs](https://illarin.com/docs).

Browse knows your app

Browse used to show everything to everyone, with an app filter off to the side.

Now Illarin asks which app you use: SillyTavern, RisuAI, Lumiverse, or any. Sign-up asks once, beside your adult content setting. If you're signed out, Browse asks in the line above the feed and your browser remembers the answer. You can change it any time from that line or from the Browse section of Settings.

With an app chosen, Browse shows only works that app can read, and only the types it reads. Without one, you see everything, and each card says which apps can read it. A type that only one app reads, like Lumiverse packs, only appears once you've chosen that app. Someone who doesn't use Lumiverse never has to scroll past packs.

The page itself was rebuilt too:

  • The types sit in one row at the top, each with a count. The butterfly marks the one you've picked.

  • Search takes plain words, tag:fantasy for a tag and author: for a creator.

  • Filters for the chosen type live behind one Filters button. Each filter you turn on shows as a chip you can remove.

  • Going back from a work keeps your place and your filters.

One download button

The download box was the most crowded control on the site. It listed every format, with notes under each about what that format drops.

Now it's one button. If Illarin knows your app, the button says "Download for SillyTavern" (or your app) and gives you the right file in one click. If it doesn't, the button opens a list of formats. The same menu holds the other formats, sends to a connected app, and your original upload if the work is yours.

The notes moved into Compare formats, a dialog that lays out CCv2, CCv3, CHARX and each app's own format field by field. For each field it says whether the format keeps it fully, partly or not at all. The table is built from the same code that writes the files, so it can't drift from what the download actually contains.

Editing a work happens on its page

The work page was already the editor, but getting in and out of editing, saving and publishing took too many steps. That whole flow was redone.

  • One button in, one button out. "Edit your character" (or preset, or lorebook) opens the edit bar in place. "Done" closes it.

  • Changes save themselves. Edits to content save a moment after you stop typing. The page marks what's drafted, so you always know what readers can't see yet. If a save fails, your edit stays on the page with a Retry button.

  • Tidying isn't a version. Moving blocks, changing their width, hiding them or renaming them applies right away for everyone, without making a new version or pinging your followers.

  • One Publish button. It opens one dialog that shows exactly what changed, takes your notes, and asks who should hear about it: your followers, your Discord channel, both or neither. With nothing drafted, the button is off. The old step-by-step flow and the per-block save buttons are gone.

  • Visibility is its own control. Public, unlisted or draft sits on the edit bar and in the owner menu. It used to share a padlock with private prompts.

  • The padlock means private prompts. On a preset, it opens the list of prompts you've marked private and the apps allowed to use them.

  • "Upload a new version" replaces "Replace the file". If you edit your work somewhere else, this is how the new file comes in, and the page says so under the button.

  • The Ctrl+K jump palette is gone. The contents list down the side is how you move around a long page.

Delete in two clicks

Every work has an owner menu, on its page and on its card in Your work. It holds edit, visibility, copy link and delete, so quick jobs no longer mean opening edit mode.

Delete asks once. The work then moves to Recently deleted in Your work, where you can restore it exactly as it was for 30 days. After that it's gone for good.

Posts on the blog work the same way, with their own Recently deleted in Your posts.

Profiles that look like yours

A profile used to be Browse with your name on top. Now it's a page you'd want to link.

  • A banner, with your avatar over it, then your bio and your links.

  • Up to four featured works, picked from your published work.

  • Your work on a shelf, split into tabs by type.

  • A feed of your recent versions. Several versions of one work in a row fold into one entry.

  • A follow button. Followers get a notification when you publish a new work.

  • The page takes a tint from your banner. The tint is kept within limits so text stays readable in light and dark themes.

You edit all of it on the page itself. The account menu calls it Your profile, and the old profile settings screen now sends you there.

Adult works on a profile follow the reader's adult content setting, the same as in Browse.

Your own Discord channel

Creators can now paste a Discord webhook address into Settings. When you publish a version of a public work with "Post to Discord" left on, Illarin posts it to that channel. A work's first publish posts too. Unlisted works never post.

This replaced the older integrations page, which let you send versions to any webhook with signing secrets and a verification step. That was a lot of machinery for something that only needed Discord. Discord addresses that were already set up carried over. Webhooks that weren't Discord were removed.

Connecting an app

Two changes make connecting an app safer and clearer.

You always type the app's code. The app shows a short code, and you enter it on Illarin before you see anything to approve. That's true whether you start from the app or from Illarin, and a link can't fill the code in for you. It stops a link someone sends you from connecting their app to your account.

You choose what the app may do. The approval screen lists two permissions, and both start off:

  • Receive works you send it. You pick each work to send. The app can't browse your account or take anything.

  • Share its library. Illarin shows which works the app has and when a newer version is out.

You can grant either, both or neither, and change them later in Settings without reconnecting. Turning off library sharing makes Illarin forget that app's list. Apps you'd already connected keep the permissions they had.

Extensions from GitHub

If you publish an extension, you can now connect it to its GitHub repository and let Illarin pick up new releases for you.

1. Open your published extension and connect a repository.

2. Put the code Illarin shows you in a file named .illarin-proof at the root of the repository, then choose Verify repository.

3. Pick GitHub's source archive or one named release attachment. Stable releases are the default. Prereleases are opt-in.

Illarin checks every hour and publishes each new release as a new version. If the attachment you named is missing, the import fails and says so. It never falls back to a different file. If you have unpublished edits, the import waits and tells you. Publish or discard them, then choose Resume. Illarin never runs the code it imports. Installing still goes through your app and its own permission prompt.

The full walkthrough is in the [extension publishing guide](https://illarin.com/docs).

The blog moved home

The blog used to live on its own address with its own header. It's now at [illarin.com/blog](https://illarin.com/blog), with the site's header, your sign-in and your theme. Old blog addresses redirect to the new ones, and post links no longer point at the wrong address.

Behind the scenes, access to the blog got much simpler. There used to be a whole system for outside apps to post here, with tokens, keys and rate limits. Nothing used it, so it's gone. Writing access is now one switch on an account.

What Illarin counts now

Before this round, Illarin counted nothing, so I couldn't tell whether anyone was here. Now it counts a few things, and none of it identifies you.

  • Visits. Illarin runs its own copy of Umami, on its own server, to count page views and where visitors came from. It sets no cookie. Raw visit records are deleted after 30 days.

  • Downloads, sends, sign-ups and publishes. Each one records what happened, which work it was, and the day. Nothing about who did it. Raw records are deleted after 30 days, and only the daily totals are kept.

  • Errors. Datadog watches the servers so I hear about failures before you do.

The [privacy policy](https://illarin.com/legal/privacy) was rewritten to say exactly this. The terms also now describe how money could work later: donations, memberships, and commissioned work with a cut taken through a payment provider. None of that exists yet. There are no ads on Illarin, and there never will be.

The footer now links to the [Illarin Discord](https://discord.gg/TeTwMzZ7G6 (opens in a new tab)) and the [Ko-fi](https://ko-fi.com/illarin (opens in a new tab)).

For app developers

There is now real documentation at [illarin.com/docs](https://illarin.com/docs), with one guide for connecting an app and one for publishing extensions. The guides cover connecting, permissions, sending, library sharing, keeping credentials across app updates, and the extension install contract. Their examples are checked against the API in Illarin's own tests, so the docs can't quietly go stale.

The connected-app protocol took the new words too: /connect in place of /link, permissions in place of scopes, work:receive in place of asset:receive, and so on.

A connected app also no longer tracks a separate "content generation" number. The version number is the one signal that a work has something new.

Under the hood

Most of this round happened where nobody sees it, but it's why the rest was possible.

The server code used to be one flat folder of handlers plus tens of thousands of lines of API description and code generated from it. Now each thing Illarin has, like works, versions, uploads, downloads, profiles, the blog or connected apps, has its own folder, and the request and response shapes live in Go beside the code that uses them. The site's types are generated from those shapes, so renaming a field breaks the build instead of a page.

Between the reorganization, the old v1 migration code, the unused blog API, the generic webhooks, and the old addresses and prototypes, the codebase is about 60,000 lines smaller than when this round started.

What comes next

For a while, nothing big. Illarin needs time with real people using it before I build the next large feature. Bug reports, confusing labels and "I couldn't find X" are the most useful things you can send me right now. The [Discord](https://discord.gg/TeTwMzZ7G6 (opens in a new tab)) is the place for them.

Full changelog

Everything else that shipped in this round, grouped by where you'll meet it.

Browse

  • Added a "Your app" choice that narrows the feed and the type row to what your app reads.

  • Cards show which apps can read each work when no app is chosen.

  • Types that only one app reads stay out of Browse until you choose that app.

  • Each type in the top row shows its count, and so does "all".

  • Filters moved behind one Filters button, with removable chips for each active filter.

  • Search takes tag: and author:.

  • When "Show more" fails, the error shows beside the button instead of at the top of the page.

  • The background art is shorter and fainter, so the feed starts higher on the page.

Work page

  • "Edit your {type}" and "Done" replace the old edit toggle.

  • Content edits autosave, with a drafted mark and a Retry button when a save fails.

  • Block order, width, hidden state and titles apply live, without a version.

  • One Publish dialog shows the changes, the notes, and switches for followers and Discord.

  • Publish is off when nothing is drafted.

  • Visibility has its own control. Draft can't be picked again once a work is published.

  • The padlock only opens private prompts. Changing just the allowed apps now saves.

  • "Upload a new version" replaces "Replace the file", with a line saying what it's for.

  • An owner menu with edit, visibility, copy link and delete sits on the page header and on Your work cards.

  • Recently deleted in Your work keeps deleted works for 30 days.

  • Removed the Ctrl+K jump palette.

  • Prompt text in presets shows its formatting and line breaks.

  • Blocks stay visible while you resize or edit them, and block text has a formatting bar.

  • Found images replaced the "README vault", with one line saying where the images came from.

  • The install notes no longer claim every app asks for permissions.

  • "Lumia" became "character" in the pack editor and the work page.

Downloads and formats

  • One download button, set to your app when Illarin knows it.

  • A menu for other formats, sends and your original upload.

  • A Compare formats dialog, field by field, built from the format code.

  • SillyTavern preset downloads keep each prompt's system flag and no longer duplicate built-in markers like chat history.

  • Removed the per-format notes, sample thumbnails and gallery picker from the download box.

Profiles

  • Banner with a tint drawn from it, avatar, bio and links.

  • Up to four featured works.

  • Tabs by type, and a feed of recent versions.

  • Follow a creator and get notified when they publish a new work.

  • Edit everything on the page. The account menu link is now "Your profile".

  • A new creator with nothing published sees first steps. A reader visiting an empty profile sees what to follow.

  • Adult works follow the reader's adult content setting.

Sign-up, sign-in and settings

  • Sign-up and sign-in are one centered card, with the Discord icon on the Discord button.

  • Sign-up asks for your app and your adult content setting.

  • Settings has a Browse section with Your app and Adult content.

  • Settings holds your Discord channel for announcements.

  • Connected apps in Settings let you change each app's permissions.

Connected apps

  • A new connection always needs the app's code, typed on Illarin.

  • Both permissions start off, and you choose them at approval.

  • Permission changes take effect right away, including for sends already waiting.

  • Updating an app keeps its connection and its permissions.

  • Renamed protocol paths and fields, with the old names answering until 18 November 2026.

Extensions

  • Connect a GitHub repository and import releases automatically.

  • Choose the source archive or one named attachment.

  • Failed and held imports show on the page, with Retry and Resume.

Blog

  • Moved to [illarin.com/blog](https://illarin.com/blog), inside the site.

  • The old blog address redirects to the new one.

  • Post links and feeds use the right address.

  • Owner menu and Recently deleted for posts.

  • The blog's Discord channel is set on the admin page. A post's first publish goes there when "Post to Discord" is on.

  • Writing access is one switch per account.

  • Link cards for posts.

  • Link cards for works, profiles and posts, with adult covers blurred.

  • New privacy policy covering Umami, the event counts, Datadog, email and Discord sign-in.

  • Terms that cover donations, memberships and commissions for when they exist, and say no ads.

  • Acceptable use and DMCA pages reread against the new words.

  • Discord and Ko-fi links in the footer.

  • Guides at [illarin.com/docs](https://illarin.com/docs).

  • Illarin moved to illarin.com. Every illarin.xyz address redirects.

  • The landing page follows the butterfly through the story instead of the cave video, and names no app.

  • The butterfly mark now appears in the browser tab and app icons.

  • The portrait beside the connect flow is gone. The upload art is hidden on phones.

Removed

  • Webhooks that weren't Discord, signing secrets and the integrations settings page.

  • Outside access to the blog's API, and the old developer pages.

  • The leaderboard, studio, DLC and moderation pages from the old site, and their addresses.

  • Old addresses for works by type and profiles by Discord id.

  • Profile addresses without the @ (/handle instead of /@handle).

  • The v1 migration code, which ran once and is done.

Subscribe to blog updates.

Subscribe via RSS

Keep reading

Back to top