Applet Store
Watch this as a presentation — 1 on this page, slides with narration.
Overview
The Applet Store is the platform screen where a signed-in user browses the applet catalogues their login has been granted and installs applets onto their own account. It is the screen every “install the X applet” instruction on this site points at.
Two things about it decide almost everything else on this page. First, installation is per user, not per tenant: each install writes one row linking your login to one applet in one catalogue, and the backend refuses an install submitted for anybody else’s login. Second, what you can see is decided elsewhere — a catalogue is public or private, and a private catalogue reaches you only because an administrator linked your login to it in the Tenant Admin Applet.
Its registry row is appletStore, name Applet Store, applet_type ROOT-USER, status
ACTIVE. It has no settings of its own (see Configuration).
Where it fits
| Direction | What | Why |
|---|---|---|
| Upstream | Developer SysAdmin Applet | The registry record it maintains is what the store lists — an applet’s name, icon, description, type, documentation URL and the module URL the shell loads. An applet the registry does not carry as ACTIVE never appears here. |
| Upstream | Tenant Admin Applet | Builds catalogues, puts applets in them, and links a user’s login to a private catalogue. That link is the only reason a private catalogue appears on the Private tab. It can also bulk-install applets for other users in the tenant — the store cannot. |
| Downstream | The platform launchpad | An installed applet becomes a tile on the launchpad; the store itself is reached from there. |
| Alongside | Complete Applet Catalog | The wiki’s own list of every applet that exists, generated from the same registry the store reads. |
Screens and menus
Everything is mounted under applets/bigledger/akaun-platform/applet-store. There is no sidebar:
navigation is the three-link bar at the top of the listing screens.
| Screen | Route | State |
|---|---|---|
| Private catalogue listing | catalog-listing-private | Working — this is the landing screen; an empty child path redirects here |
| Public catalogue listing | catalog-listing | Working |
| My Applets | my-applets | Working |
| Applet detail | applet-information/:guid | Working — :guid is the applet-to-catalogue link |
| Per-catalogue applet list | applet-listing/:guid | Legacy — no link in any live template reaches it |
| Notifications | applet-notifications | Placeholder — a static card of repeated stock images, no data, not linked from anywhere |
| Subscription | applet-subscription | Broken — reads a row object that is never populated and throws on load; not linked from anywhere |
The Terms of Use gate
A guard runs before every screen in the store. It reads the signed-in user’s profile extensions
and looks for a parameter whose code contains APPLET_STORE_TNC with a truthy numeric value. If it
is there, you go straight through and never see the dialog again. If it is not, a full-height,
non-dismissable dialog opens with the Akaun.com Marketplace Terms of Use, an I have read the
terms and conditions checkbox, and Accept / Decline buttons. Accept is disabled until the
checkbox is ticked. Accepting writes the acceptance to your user profile (see
Lifecycle and effects); declining bounces you back to the launchpad.
Acceptance is recorded per login, not per tenant or per company. A new colleague sees the dialog on their first visit even though everyone else in the business has accepted.
The listing screens
All three listing screens render the same component, so they look alike:
- A header bar reading Catalog, with links Public, Private and My Applets.
- A Search for applets box. It filters the rows already loaded in the browser — it does not re-query the server. On the Public and My Applets tabs it matches the applet name; on the Private tab it matches the applet name or the catalogue name, after a short typing pause.
- A grid of applet cards.
- On the Public and Private tabs only, an Install All button. It is greyed out when every applet on screen is either already installed or blocked from installation.
The Public tab loads every public catalogue in one request and shows the applets as one flat grid, each card carrying its catalogue’s name. The same applet offered by the same tenant at the same rank is shown once even if it sits in two catalogues.
The Private tab loads one catalogue per request. Scrolling to the bottom — or pressing the Load More button below the grid — fetches the next one, so a user with many private catalogues reaches them a page at a time rather than all at once.
My Applets shows the heading My Installed Applets and lists what your login has installed. It has no Install All button and no uninstall control; uninstalling is done from the applet’s detail screen.
Below 500 px of viewport width the listings switch themselves to a dark theme. Above it they are light. This is a width test, not an operating-system preference test.
The applet detail screen
Clicking any card opens the detail screen, which is laid out like a consumer app-store listing:
- Hero — icon (clickable, opens full size), name, and up to four stats: Rating (the average, or “No ratings”), Rank, Tenant, Status (Installed / Not installed).
- Documentation button — opens the applet’s documentation URL in a new tab. It is disabled when the registry row for that applet has no documentation URL.
- Share button — uses the browser’s native share sheet where one exists, otherwise copies the current page URL to the clipboard and confirms with a toast.
- Install, or — once installed — Uninstall and Open.
- Preview — a horizontally scrolling gallery of the applet’s screenshots, ordered by their sequence number. The whole section is hidden when the applet has no images.
- About this app — the description, plus Version and Updated on when the registry carries them. With no description it reads No description is available for this applet yet.
- Rate this applet / My review — a five-star row, and a Write a review / Edit your review link that opens a dialog with the stars and a comment box capped at 500 characters.
- Ratings and reviews — the average, a five-bar histogram of one- to five-star counts, the total count, and other users’ reviews. Your own review is lifted out of that list into the section above it.
Configuration
Before you can use it
| Prerequisite | Where it is set | Without it |
|---|---|---|
| A platform login | Platform user administration; see Tenant Admin Applet | Every screen in the store is behind an authenticated endpoint |
| Terms of Use accepted | The store itself, once per login | The dialog blocks every screen |
The applet exists and is ACTIVE in the registry | Developer SysAdmin Applet | It is filtered out of both listings |
The applet is linked to a catalogue, and that link is ACTIVE | Tenant Admin Applet | Nothing to install — the store lists catalogue membership, not the registry directly |
The owning tenant record is ACTIVE | Platform administration | The applet is filtered out of the public listing |
| For a private catalogue: your login is linked to it | Tenant Admin Applet | The catalogue does not appear on the Private tab |
Applet settings
No exposed control found (routes and settings components checked at commit
b7b68bb33e7e6717a1aafdc4935170a0646a9e0e).
The store has no settings surface of any kind: no settings route, no field-configuration or
default-settings component, no settings service and no persisted settings model. The only per-user
state it writes is the Terms of Use acceptance flag.
.../applet-store/settings exists in the applet’s menu-items file,
and a sidebar template renders it. Neither is reachable: the component that hosts that sidebar is
declared but never routed, and no settings route exists. Do not plan around it.Settings in other applets that control this applet
| Setting | Where it is set | Effect here |
|---|---|---|
Catalogue access_type (PUBLIC / PRIVATE) | Catalogue record, Tenant Admin Applet | Decides which tab the catalogue’s applets appear on. The public query selects only access_type = 'PUBLIC' catalogues with status ACTIVE. |
| Catalogue-to-user link | Tenant Admin Applet | The Private tab lists exactly the catalogues your login has a link to. No link, no catalogue. |
Applet-to-catalogue link rank | Tenant Admin Applet | Shown on the card and on the detail screen, and copied onto the installed link. Values are OWNER, ADMIN, MEMBER. |
Registry documentation_url | Developer SysAdmin Applet | Enables or disables the Documentation button on the detail screen. |
| Registry icon and images | Developer SysAdmin Applet | The card icon and the Preview gallery. |
Registry es_module_url, applet_mf_html_tag, routerLink | Developer SysAdmin Applet | What Open hands to the shell to load the applet. |
Feature visibility and permissions
The Applet Store declares no client-side permission definitions — there are no
bl_applet_client_side_perm_dfn rows for it, and no permission constants in its repository. Nothing
in the store is hidden or shown by a permission set. Authority is enforced on the server, per
endpoint:
| Rule | Enforced by | Effect |
|---|---|---|
| You may install only for yourself | Install and multiple-install endpoints compare the submitted login against the token’s subject | A request naming another user is refused with INSTALLING_APPLETS_FOR_OTHER_USER_IS_NOT_ALLOWED |
| You may uninstall only your own link | Uninstall endpoint compares the link’s login against the token’s subject | Refused with UNINSTALLING_APPLETS_FOR_OTHER_USER_IS_NOT_ALLOWED |
| Installing for other people is an administrator action | A separate tenant-admin endpoint requires either platform system-administrator status or OWNER/ADMIN rank in that tenant | Done from the Tenant Admin Applet, not from the store |
ADMIN on a catalogue entry grants no administrative authority.What an installed row actually buys you
The installed link is not decoration, and it is not a complete answer either. Both halves matter if you are deciding who may open what.
It is a real gate, once. An applet cannot talk to the platform with your ordinary login token.
On start-up it exchanges that token for an applet token, and the server issues one only after
checking that a live bl_applet_login_subject_link row exists for your login, that applet and that
tenant; with no row the exchange is refused with One or more Applet/Tenant Code combination does
not exist. So “uninstall it and they cannot use it” is true.
Past that gate, the API is not organised by applet. Server-side permission codes are named for the resource they protect — a customer, a document, an export — never for an applet, and the applet identity carried in the token is read almost exclusively to stamp the audit trail. Two endpoints on the whole platform require an applet token at all. The practical consequence for an access model: installing fewer applets tidies what a person can reach through the screens; it is not a restriction on what their login can do through the API. The restriction that survives a determined person is the permission set, not the applet list.
And an install can quietly admit somebody to a tenant. Granting an applet also makes sure the login exists in that applet’s tenant, and the tenant a grant lands in is taken from the applet-to-catalogue link row rather than from the tenant you were inviting into. A catalogue whose rows point at more than one tenant therefore admits the person to every one of them in a single invitation. Compose catalogues deliberately, and check the tenant on each row before you use one as the target of an invitation — this is the concrete reason behind the advice not to hand out a catalogue you have not looked inside.
Fields
The store has no create or edit form. These are the fields it displays and the one field it accepts.
Applet card (all three listings)
| Field | Meaning | Notes |
|---|---|---|
| Icon | The registry icon image | Served from the platform’s public applet-icon endpoint by icon GUID |
| Title | Applet name from the registry | |
| Publisher | The owning tenant’s name | Catalogue layout only |
| Rank | The applet-to-catalogue link’s rank | OWNER / ADMIN / MEMBER |
| Catalogue | The catalogue the entry belongs to | Colour-coded; on My Applets this slot shows the catalogue the applet was installed from |
| Rating | Average rating | A star with one decimal; an outlined star with no number when the applet has never been rated |
| Installed tick | Whether your login already has this applet | Green tick badge |
Applet detail screen
| Field | Meaning | Notes |
|---|---|---|
| Rating | Average, and the total rating count | “No ratings” when the count is zero |
| Rank | Catalogue-link rank | Hidden when empty |
| Tenant | Owning tenant name | Hidden when empty |
| Status | Installed or Not installed | Derived from your own installed link, not from the listing row |
| Description | Registry description | Falls back to an explicit “no description” line |
| Version | Registry version | Hidden when empty |
| Updated on | Registry update date, else creation date | Hidden when both are empty |
| Preview | Screenshots, ordered by sequence | Whole section hidden when there are none |
| Reviews | Reviewer display name, photo, date, stars, comment | Your own review is excluded from this list and shown separately |
Review dialog
| Field | Meaning | Required | Notes |
|---|---|---|---|
| Stars | Your rating, 1–5 | Yes | Submit review stays disabled until a star is chosen. The server rejects anything outside 1–5 |
| Comment | Free text | No | Capped at 500 characters in the box, with a live counter; the server’s own limit is 4,000. A draft you type is kept locally so it survives a reload |
Lifecycle and effects
The Applet Store is a utility applet. It posts no journals, moves no stock and writes nothing to any tenant ledger. Everything it changes lives in the platform (master) database.
| Action | Endpoint | What it writes |
|---|---|---|
| Accept the Terms of Use | The identity user-profile endpoints — the store reads your profile, appends the flag, and saves the profile back | A user profile extension BIGLEDGER_APPLET_STORE_TNC, boolean, value 1 |
| Install (detail screen) | POST core2/platform/dm/applets/user-applet-links/install | One applet-to-login link: your login GUID, the applet, the catalogue, the applet-to-catalogue link, the owning tenant, and the rank copied from the catalogue entry |
| Install All (Public or Private tab) | POST core2/platform/dm/applets/user-applet-links/multiple-install | The same row for every applet on screen that is neither installed nor blocked, in one request |
| Uninstall | DELETE core2/platform/dm/applets/user-applet-links/uninstall/{guid} | Removes your applet-to-login link. Nothing inside the applet is deleted |
| Rate | POST / PUT core2/platform/dm/applet-ratings/backoffice-ep | One rating row per user per applet; the platform’s rating summary for that applet is recalculated and is what every listing card reads |
| Write or edit a review | The applet-comments endpoints | One comment row attached to your rating |
| Open | — | Writes the applet’s module URL, element tag, router link, tenant code, applet code and installed-link GUID into the browser session for the shell to pick up |
Three consequences worth knowing:
- Uninstall is reversible and destroys nothing. It deletes the link between your login and the applet. Reinstalling from the same catalogue entry gives you the applet back; the data the applet holds in the tenant is untouched either way.
- Install All is not idempotent across catalogues. It skips anything already installed and anything blocked, so pressing it twice is safe, but it installs only what is on screen — on the Private tab that is the catalogues loaded so far, not all of them.
- An applet already installed from one catalogue cannot be installed again from another. The listing marks such a card as blocked and refuses the click, with the tooltip This applet has been installed in another catalog!
There are no statuses to manage in this applet. An installed link is either present and ACTIVE or
gone.
Related applets
- Developer SysAdmin Applet — registers the applet and everything the store displays about it. If a listing looks wrong, the record behind it is edited there.
- Tenant Admin Applet — builds catalogues, decides who sees a private one, and installs applets in bulk for other users in the tenant. It is the administrator’s counterpart to this user-facing screen.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| The Terms of Use dialog appears again for one person | Acceptance is stored on the individual login, not the tenant | Expected. Have them accept it once |
| A catalogue a colleague can see is missing from your Private tab | Your login has no link to that catalogue | An OWNER/ADMIN-ranked user adds the link in the Tenant Admin Applet |
| An applet the business has bought is in no catalogue at all | The applet is not ACTIVE in the registry, its catalogue link is not ACTIVE, or the owning tenant record is not ACTIVE | Check the registry record, then the catalogue membership |
| A card is greyed out and does not open | It is already installed from a different catalogue — tooltip This applet has been installed in another catalog! | Open it from My Applets, or uninstall the other copy first |
| Install reports The applet already exists! | The install call failed — most often because a link for that applet and login already exists | Check My Applets; refresh before retrying |
| Install All is greyed out | Everything on screen is already installed or blocked | Nothing to do |
| Rating fails with Install this applet before you can rate it | The server requires an installed link for the applet before it accepts a rating | Install it, then rate it |
| Rating fails with You already rated this applet | Only one active rating per user per applet is allowed | Refresh the page; the existing rating is then edited rather than created |
| Rating fails with Not logged in or Auth token is invalid or expired | The store was opened without a valid session token | Sign in through the platform shell again |
| The Documentation button is greyed out | The applet’s registry record carries no documentation URL | Add it in the Developer SysAdmin Applet |
| The Private tab shows a spinner that never resolves | The private-catalogue fetch has no error handling; a failed request leaves the loading state set | Reload the page. This is a known product defect, not a configuration problem |