Studio — manage your installed apps
Studio is your control center for all applications installed in your organization. Here you see which apps are active, what resources (forms, lists, dashboards) each one provides, and where each piece of configuration comes from.
What this module is for
Studio helps you understand the status of your installed applications (such as CRM, helpdesk, or any other app from uKore's marketplace). In plain terms: it shows you what came originally from the template, what your organization customized, and what varies based on user role.
Who is this for?
Administrator or owner of your organization. Regular users do not see Studio, they just use the apps that are already installed.
Switching apps from any screen
In the top navigation bar, next to the uKore logo, there's an app switcher that shows which app you're currently in (for example, "uKCRM").
- Click the switcher to open the dropdown menu.
- You'll see the list of all apps installed in your organization, with the active one marked.
- Click uKCRM to go straight to the CRM.
- Click any other installed app to open it: you land on its home page, listing the app's entities (for example, "Tasks", "Orders") as cards — click one to see and manage its records. If the app has no entities yet, you'll see a link to build it in Studio instead.
- Click "+ More apps" to go to the Marketplace and install another app.
How to use it — step by step
0. Create a new app
Available in P1-N23 F1. Requires admin or owner role.
You can create your own blank app, with no template, by giving it just a name. The app is created empty (no entities yet) and immediately appears in the app switcher and in Studio's list — you can already "jump" to it.
- In Studio, click the "+ New app" button (top right of the list, or inside the empty state if you don't have any app installed yet).
- Type the Name of your app (for example, "Tasks").
- The Namespace field auto-fills from the name (for example,
tasks) — this is your app's internal technical identifier. You can edit it by hand if you prefer: lowercase letters, numbers and hyphens only, 3-32 characters, starting with a letter. - Click "Create app". The app is created and you're taken straight to its detail page in Studio.
Note: the app is created empty — to add your own entities and fields, continue with the next section, "Build your app: entities and fields".
Common errors:
- "Invalid name or namespace" — the namespace doesn't match the required format (lowercase, numbers and hyphens, 3-32 characters, starts with a letter). Fix it by hand in the Namespace field.
- "That namespace is already in use in your organization" — an app with that namespace already exists in your organization. Choose a different name/namespace.
0b. Build your app: entities and fields
Available in P1-N23 F2b. Only for apps you created yourself (step "0. Create a new app") — marketplace apps (like uKCRM) have a fixed structure that isn't edited here. Requires admin or owner role.
After creating your app, click "Build" on its detail page to open the builder. Here you define what your app is made of: which entities (the types of things it stores — "Tasks", "Customers", "Products"…) it has, and which fields each one saves. On the right you always see a live preview of how the form and the list will look for your users — no need to save anything to check it.
The screen has three zones:
- Left — Entities: the list of entities in your app. Click "+ Add entity", type a name (for example, "Orders") and click "Create". The new entity appears selected, with no fields yet.
- Center — Fields: the fields of the selected entity. Use the new-field button to open the guided dialog: type a name, pick a human type (Text, Long text, Number, Date, Yes/No, Options…) and, for the "Options" type, add the choices. To edit a field, select it on the canvas; to remove it, delete it from the canvas — this doesn't delete data you've already saved, it just stops asking for it in new forms/lists.
- Right — Preview: Form and List tabs. They show live how the form to add a record looks, and the list to browse them, updating every time you add, edit, or remove a field. The data you see here is sample data — not real records (that's the next phase of the App Builder).
Changes (creating an entity, adding/editing/removing a field) save automatically to your app — there's no separate "Save" button. At the bottom of the screen, "Advanced" shows the technical identifiers (the app's namespace, the active entity's key) in case you ever need them; you don't need to touch these in normal use.
Common errors:
- "An entity with that name already exists" — you already have an entity with that technical key in this app. Choose a different name.
- "Please enter a valid entity name" — the name couldn't be converted into a valid identifier (for example, it was empty or only had symbols).
- "You do not have permission to edit this app" — you need the admin or owner role.
- The "Build" button doesn't show up on an app's detail page — that app comes from the marketplace (e.g. uKCRM) and has a fixed structure; only apps you created yourself with "+ New app" can be built here.
1. View your installed apps
- Log in to your uKore account as admin or owner.
- In the left sidebar menu, click Admin (the gear icon).
- Inside Admin, click on Studio.
- You see a list of installed apps with their name, version, and status (active or archived).
2. Explore the details of an installation
- In Studio's app list, click on the name of the app you want to inspect (for example, "uKCRM v1.2").
- The detail view opens with a summary of how many resources it has:
- ✓ Forms
- ✓ Data lists
- ✓ Kanban (drag-and-drop boards)
- ✓ Dashboards (analysis panels)
- ✓ Roles and permissions
- ✓ Advanced settings
- Each type is a clickable button. Click one to see individual resources (for example, "Contact Form", "Revenue Dashboard", etc.).
3. View a resource's content and its origin badges
From the installation detail, select a type (for example, "Forms").
The forms list opens. Click on one (for example, "Contact").
You see the form in read-only mode with color badges next to each field:
🔒 from template — This field came from the original template. If the template updates to a new version, this field could change automatically. If you want to modify it and make it independent of the template, you can "convert it to custom" (coming in a future Studio version).
✎ your org — Your organization added or customized this field. Template updates do NOT affect your customizations.
👥 by role — This field exists differently depending on the user's role. For example: salespeople see "Phone", but managers also see "Closing probability".
👤 my preferences — This is your personal setting (not organizational). Other users in your org see something different based on their preferences.
4. Update an app to a new version
Available in S9-PRE-B3b. Requires admin or owner role.
When an app's template has a newer version available, you can review and apply the update from Studio without losing your customizations.
4.1 Start the analysis
- From Studio's app list, click on the name of the app you want to update.
- In the detail header, click "Update app".
- The update screen opens with a list of available update manifests.
- Select the manifest for the target version.
- Studio automatically runs a dry-run analysis: it reviews what would change without touching any real data.
4.2 Review the report
The report classifies each change into three categories:
| Category | What it means |
|---|---|
| ✅ Added | New fields or resources that will be incorporated without risk. |
| ⚠️ Needs attention | Reversible changes (renaming a field, moving data). Your organization can decide how to proceed. |
| 🔴 Blocking | Changes that require manual action before the update can be applied (for example, an incompatible platform version or deleting a field with important data). |
If there are "Needs attention" items of the "conflict with your customization" type, you'll see a selector for each one:
- Keep my customization — preserves what your org configured.
- Use template — accepts the template version (your customization is lost).
- Decide later — leaves the conflict on hold (the update stays blocked until you decide).
4.3 Apply the update
The "Apply update" button is only active when:
- There are no pending Blocking items.
- All customization conflicts have a decision.
When you click "Apply update":
- Studio applies the migration to your organization.
- You see a confirmation with the status
appliedand the operation ID.
4.4 Roll back
If the update is reversible, you'll see the "Roll back update" button on the confirmation screen. When you click it:
- Studio undoes all changes from the update.
- You see a confirmation with the status
rolled-back.
Note: not all updates are reversible. An update that permanently deletes data cannot be undone. The pre-update report indicates whether the update is reversible.
Common cases
"I just signed up for uKore and want to know what's included in the CRM" — Go to Admin → Studio → uKCRM → explore the sections (Forms, Lists, Dashboards).
"Can I change this field in the Contact form?" — Go to Admin → Studio → uKCRM → Forms → Contact. If the field has a "🔒 from template" badge, you can convert it to custom (coming in a future Studio version). If it has a "✎ your org" badge, your organization changed it and it may be editable (also in future versions).
"I have two CRMs installed and I don't know which is which" — In Studio, each CRM appears with a different name (e.g. "Main CRM" and "Resellers CRM"). Click on each one to see its resources.
Edit an installation
Available in S9-PRE-B4b. Requires admin or owner role.
From the detail view of a resource you can change its simple values — texts, numbers, and on/off toggles — and save them as an override for your organization. Fields you modify will show the orange badge ✎ your org so you always know what you have customized.
Step by step
- In Studio, open an installation and click on a resource name
(for example
forms / contactForm). - Click the "Edit installation" button. A blue banner "✎ Editing installation" appears in the header.
- Change one or more fields in the form. Advanced fields (internal structures such as columns or field schemas) appear read-only with the note "Deep editing not available yet".
- Click "Save" to confirm. The page reloads automatically and the fields you changed now show the ✎ your org badge.
- To discard your changes before saving, click "Cancel".
Revert to template
If you want to remove all of your organization's customizations from a resource and return to the original template values:
- Open the resource in view mode (without entering edit mode).
- Click "Revert to template" (visible only if the resource has at least one org-layer customization).
- Confirm the dialog. The page reloads and all badges return to 🔒 from template.
Note: "Revert" removes the customization for the entire resource, not field by field. Field-level revert will arrive in a future version.
5. Edit list columns (P1-49 E1)
Available in P1-49 E1. Requires admin or owner role. Only available for list resources (
Listssection inside Studio).
You can choose which fields appear as columns in a data list, set their display order, and decide whether each column can be sorted by users. Changes are saved as an organization-level override and take effect immediately — no redeploy needed.
Step by step
In Studio, open an installation (e.g. "uKCRM v1.0") and click on Lists.
Click the name of a list (e.g. "contacts").
The resource viewer opens. Click "Edit columns" in the action buttons.
The column editor opens with two panels:
Available fields — all fields defined in the entity schema. The "In list" column shows Yes if the field is already a column, No otherwise.
Selected columns (in order) — the columns that will appear in the list, in the order they will be displayed.
Add a column: click on any row in "Available fields" where "In list" is No. The field moves to "Selected columns" at the bottom.
Remove a column: click on any row in "Available fields" where "In list" is Yes. The field is removed from "Selected columns".
Reorder columns: in "Selected columns", click the row you want to move. Use the "Move up" and "Move down" buttons that appear below the list.
Toggle sortable: select a row in "Selected columns", then toggle the Sortable switch. If Yes, users will be able to click the column header to sort the list.
Click "Save" to apply. The page reloads and the columns are updated immediately.
To discard changes without saving, click "Cancel".
Revert to template defaults
To remove all column customizations and restore the original template columns:
- Open the column editor for the list.
- Click "Revert to template" (only visible when your organization has saved customizations).
- Confirm the dialog. All columns are reset to the template defaults.
Notes
- Only fields defined in the entity schema can be used as columns.
- Column ordering affects all users of your organization.
- Reverting removes the entire column override — individual column revert will come in a future version.
6. Create and configure buttons (actions)
Available in ADR-016 F1 + F1.2. Requires admin or owner role. Only available for entity resources (
Entitiessection inside Studio).
You can create and edit the buttons shown on a record's detail page (for example, "Convert to deal" on a lead), without touching any code or JSON. You set the label, when the button shows up, and what it does when clicked — all from a safe, predefined set of actions.
The button editor is a two-column workspace: on the left you build the button step by step; on the right you see, live, the real button inside a sample record card and a plain-language sentence — "What happens when clicked" — that updates as you type. There's no separate help panel to check: picking an action type shows a card with an icon and a one-line description, and the rest of this section (§6.1–§6.6) is the full reference for the three types, to consult while configuring a button — just like API documentation.
Step by step
In Studio, open an installation (e.g. "uKCRM v1.0") and click on Entities.
Click the name of an entity (e.g. "contacts").
The resource viewer opens. Click "Edit actions" in the action buttons.
You'll see the entity's current buttons, with their type and style.
Add a button: click "+ Add action". The build workspace opens, with the live preview visible on the right from the start:
- Step 1 — The basics: the Key (a unique identifier for the
button, e.g.
convert, never shown to the user), the Label in Spanish and English (both required — the text the user sees) and the button's Style (Primary / Secondary / Danger, picked with three buttons instead of a dropdown). - Step 2 — What does it do when clicked?: choose one of the three action types, shown as cards (icon + name + one-line description) instead of a dropdown — see the full reference in §6.1, §6.2 and §6.3. Picking a type changes Step 3 to show only that type's fields.
- Step 3 — Details (varies by type): the route, or the API call
(method + internal path in a single row), and for "Confirm and
execute" also the confirmation message. Next to the route you'll see
the "Insert a field from the record" chips (e.g.
:status,:dealId) — click one to insert it without typing the name by hand (see §6.6). For "Call the API" and "Confirm and execute" you'll also see "Data to send" — see §6.4. - Step 4 — When is it shown? (optional): add conditions so the button only appears in certain cases (e.g. "show only when Status equals Qualified"). With no conditions, the button is always visible. If the field you pick has a closed set of values (like Status) or is yes/no, the editor offers a dropdown of the valid values instead of free text — see §6.5.
- Live preview (right): as you fill in the steps above, you see the real button (with its label and style) inside a sample record card, and below it the "What happens when clicked" sentence updating live — for "Confirm and execute" it's shown as two chained steps (Asks → Calls the API). If you add conditions in Step 4, a visibility note also appears ("Shown only when…").
- Step 1 — The basics: the Key (a unique identifier for the
button, e.g.
Click "Save" at the bottom of the build workspace to add the button to the list (not persisted yet — see step 8).
Repeat to create more buttons, or click "Edit" / "Delete" / "↑" / "↓" on any row to edit, delete, or reorder existing ones.
When done, click "Save" at the bottom of the screen to persist all changes as an organization-level override.
Revert to template defaults
To remove all button customizations and restore the original template buttons:
- Open the actions editor for the entity.
- Click "Revert to template" (only visible when your organization has saved customizations).
- Confirm the dialog. All buttons reset to the template defaults.
Why can't I pick any action type
For security, the editor only allows a closed set of action types, and never lets "Call the API" point at an external website. This prevents a misconfigured button from leaking information outside uKore. If you need an action type that isn't listed, contact support.
6.1. Reference: navigate (Go to a screen)
What it does: takes the user to another screen inside uKore. Nothing is sent to the server — it's navigation only.
Parameters:
| Field | What it accepts |
|---|---|
| Route | The internal route to open. Supports :field to insert a value from the current record. |
Full example:
Key: viewDeal
Label: View deal
Type: navigate
Route: /crm/deals/:dealId/edit
Clicking the button on a lead with dealId = "abc123" sends the user to
/crm/deals/abc123/edit.
When to use it: opening a related record or a specific screen — it doesn't change any data.
Common mistakes: forgetting the : before the field name (typing
dealId instead of :dealId navigates literally to that route, with no
substitution).
6.2. Reference: callEndpoint (Call the API)
What it does: runs an action on uKore's server immediately, with no
confirmation step. Only internal paths (starting with /) are allowed —
never an external website, for security (see "Why can't I pick any action
type" above).
Parameters:
| Field | What it accepts |
|---|---|
| API call (method + route) | The method says what kind of change this makes: GET reads data, POST creates, PUT/PATCH update, DELETE removes — most buttons use PUT or POST. The route is the internal API path to call; it must start with / and may use :field. External websites are never allowed. |
| Data to send | Optional — see §6.4. |
Full example:
Key: markVip
Label: Mark as VIP
Type: callEndpoint
Method: PUT
Route: /crm/contacts/:id
Data to send: isVip = Yes/No → true
Clicking the button on a contact with id = "c1" makes uKore do
PUT /crm/contacts/c1 sending { "isVip": true }.
When to use it: quick, low-risk changes the user doesn't need to confirm first.
Common mistakes: leaving the path empty or pointing it at an external
website (the editor blocks this on save); expecting the body to support
:field — it doesn't, only the path does (see
§6.4).
6.3. Reference: confirmAndExecute (Confirm and execute)
What it does: asks the user to confirm first, and if they do, does exactly the same as "Call the API". Same security rules for the internal path.
Parameters:
| Field | What it accepts |
|---|---|
| Confirmation message (English) / (Spanish) | The question shown before running the action, in both languages. |
| Confirmation style | The dialog's visual style: info (neutral), warning (caution) or error (destructive). |
| API call (method + route) | Same as "API call" in callEndpoint — this is the call that runs once the user confirms. |
| Data to send | Optional — see §6.4. |
Full example:
Key: archive
Label: Archive
Type: confirmAndExecute
Confirmation message: Archive this lead?
Confirmation style: warning
Method: PUT
Route: /crm/leads/:id
Data to send: archived = Yes/No → true
Clicking the button on a lead with id = "l1" shows the dialog "Archive
this lead?"; if the user confirms, uKore does PUT /crm/leads/l1 sending
{ "archived": true }. If they cancel, nothing happens.
When to use it: destructive or hard-to-undo changes (archiving, deleting, irreversible status changes).
Common mistakes: leaving the confirmation message empty in one language
(the editor requires both); using it when you don't actually need a
confirmation step (use callEndpoint instead).
6.4. Data to send (body)
callEndpoint and the "then" call of confirmAndExecute optionally accept
a list of key/value pairs sent along with the call — for example, the
new value of a field (isVip: true, archived: true, tier: 3).
- For each row you choose a key (the field name as the API expects it,
e.g.
isVip), a type (Text, Number, Yes/No or Dynamic value), and a value. - Fixed-value types (Text/Number/Yes-No) are sent literally — unlike the
route/URL,
:fieldis not supported here. If you need to send the value of a field from the record, contact support (coming in a future version). - A row with an empty key is ignored when you save (it won't break the button).
Dynamic value: instead of a fixed value, the field is filled in automatically when the button is pressed, with one of these two values — always resolved by the server, never by your browser:
| Option | What it saves |
|---|---|
| Current date and time | The exact moment the button was pressed (server clock). |
| Current user | The person who is logged in and pressed the button. |
Choosing "Dynamic value" hides the text/number input — there's nothing to type, the editor already knows what to save.
Example: you want a "Mark as contacted" button on a lead that, when
pressed, records when it was last contacted. In Step 3 you add a "Data to
send" row with key lastContactedAt, type Dynamic value, and option
Current date and time. Every time someone on the team presses the
button, that field updates with the exact date and time — no one has to
type anything.
6.5. "Show when…" conditions
Each condition row combines a field, an operator, and (except for "has a value") a value:
| Operator | Meaning |
|---|---|
equals |
The button shows only when the field has exactly this value. |
is not (notEquals) |
The button shows only when the field does NOT have this value. |
has a value (exists) |
The button shows only when the field is filled in. Choose "No" to require it empty instead. |
Multiple conditions always combine with AND (all must pass).
The value control adapts to the selected field's type:
- If the field has a closed set of values (e.g. "Status": New / Qualified / Converted), the editor shows a dropdown with those values instead of free text — no need to guess how each value is spelled internally.
- If the field is yes/no, the editor shows a Yes/No dropdown.
- For every other field, it's free text with an example placeholder.
6.6. Inserting field values (:field)
In any route (Step 3: Route, or the API call's route, including "Confirm
and execute") you can write :fieldName to insert the value of that field
from the record currently open — for example, /crm/deals/:dealId/edit
inserts the deal's ID from the current record. To avoid typing the name by
hand, use the "Insert a field from the record" chips shown next to the
route in Step 3 — one click inserts the right token.
This only works in routes/URLs. Fixed values you type into "Data to send" (§6.4) are always sent literally, as fixed text — the only way for a body field to NOT be a fixed value is to choose Dynamic value (§6.4), which is also resolved on the server.
Notes
- Reverting removes the entire button override — not button by button.
- Advanced action types (workflows/transitions, external hooks) will arrive in future versions of Studio.
Uninstall an app
You can uninstall an installed app from the Studio installation detail page. Uninstalling immediately cuts access to the module for all users in the organization. Business data is not deleted — contacts, deals, and other records are preserved and you can recover access by reinstalling the same app from the Marketplace.
Step by step
- In Studio, open the installation you want to uninstall.
- Click the red "Uninstall" button (visible only when the app status
is
installed). - Confirm the dialog: "Uninstall this app? All users will immediately lose access to the module. Your business data will be kept and can be recovered by reinstalling."
- The system uninstalls the app and redirects you to the installed apps list.
What happens after uninstalling?
| Effect | Detail |
|---|---|
| Module access | Cut immediately for all users |
| Business data | Preserved (contacts, deals, etc.) |
| Navigation menu | The module section disappears automatically |
| Reinstallation | Possible at any time from the Marketplace |
Errors when uninstalling
| Error | Cause | Solution |
|---|---|---|
| "You do not have permission to uninstall this app" | Only admin/owner roles can uninstall | Ask an owner to do it |
| "App installation not found" | The slot no longer exists | Reload Studio and check the list |
| "This app is already uninstalled" | Previously uninstalled | Reinstall from the Marketplace if needed |
Common errors
I don't see Studio in the Admin menu — Your organization has no apps installed yet, or you don't have admin permission. Ask the administrator of your organization.
"No permission to edit" — You need admin or owner role. Ask the administrator of your organization.
"Resource not found" — The resource may have been deleted or the installation is no longer available. Go back to the resource list and reload.
An app appears as "archived" — It was uninstalled. Data is preserved. You can reinstall it from the Marketplace.
Required permissions
| Action | Minimum role |
|---|---|
| Create a new app | admin |
| View Studio and installed apps | admin |
| Update an app (dry-run + apply) | admin |
| Roll back an update | admin |
| Edit an installation | admin |
| Revert to template | admin |
| Edit list columns | admin |
| Create and configure buttons | admin |
| Uninstall an app | admin |
Current version
P1-N23 F1 — Studio now includes:
- Create a new app: "+ New app" button that creates a blank app (no entities yet) from just a name + namespace — it appears immediately in the app switcher and in Studio (App Builder MVP, step 1)
- App switcher in the navigation bar: see which app you're in and switch between installed apps (P1-N20)
- View installed apps and their resources (origin badges)
- Update flow: dry-run analysis → report review → apply / roll back
- Edit installation: modify simple values of a resource and revert to template
- Uninstall app: Uninstall button with confirmation on the installation detail page
- Edit list columns: choose which columns appear in a list, set their order, and toggle sortable (E1)
- Create and configure buttons: create, edit, reorder and delete an entity's
actions/buttons, with visibility conditions, from a safe catalogue of action
types — with a per-type explanation and example, a field guide, available-field
chips, guided condition values, and a key/value body for
callEndpoint/confirmAndExecute(F1 + F1.1) - Open and use your app: selecting a non-uKCRM app in the switcher now opens the app itself (its home page, listing entities as navigation) instead of only its Studio management screen (App Builder v2 T1)
Future versions will add:
- Edit column display properties: width, format, visibility (E4)
- Edit form field properties and kanban states (E2, E3)
- Workflow/transitions editor (F2) and external hooks editor (F3)
- Conversion of customizations into your own templates
See also
- Technical documentation: APP_TEMPLATES.md — if you're a developer and want to understand how it works internally
- Admin → Modules — to manage licenses and modules (different from Studio)