{#if loading && !app}

Loading…

{:else if loadError && !app}
Could not load app.

{loadError}

Back to apps
{:else if app} {#if activeTab === 'scripts'}

Scripts

{#if canWrite} {/if}
{#if showCreateScript && canWrite}
{#if createScriptError}
{createScriptError}
{/if}
{/if} {#if scripts.length === 0}

No scripts in this app yet.

{:else} {/if}
{:else if activeTab === 'domains'}

Domain claims

Hosts this app answers on. Routes inside this app can only bind to these. Use app.example.com for exact, *.example.com for wildcard, or {'{'}tenant{'}'}.example.com to bind a capture.

{#if canAdmin}
{#if createDomainError}
{createDomainError}
{/if} {/if} {#if domains.length === 0}

No domain claims yet.

{:else} {/if}
{:else if activeTab === 'members' && canAdmin}

Members

Users with explicit access to this app. Instance owners and admins already have implicit access — they are not listed here. Use the Users page to invite a member first, then grant them app access below.

{#if eligibleLoadError}

{eligibleLoadError}

{:else if eligibleAfterFilter.length === 0}

No eligible users to invite. Create a member on the Users page first.

{/if} {#if addMemberError}
{addMemberError}
{/if}
{#if memberActionError}
{memberActionError}
{/if} {#if members.length === 0}

No explicit members yet.

{:else}
User
Instance
App role
Joined
{#each members as m (m.user_id)}
{m.username} {#if m.email}{m.email}{/if} {#if !m.is_active}(inactive){/if}
{shortDate(m.created_at)}
changeMemberRole(m, 'app_admin') }, { label: 'Make editor', disabled: m.role === 'editor' || roleChangeBusy === m.user_id, onClick: () => changeMemberRole(m, 'editor') }, { label: 'Make viewer', disabled: m.role === 'viewer' || roleChangeBusy === m.user_id, onClick: () => changeMemberRole(m, 'viewer') }, { label: 'Remove from app', danger: true, onClick: () => askRemoveMember(m) } ]} />
{/each}
{/if}
{:else if activeTab === 'settings' && canAdmin}

Settings

saveSettings(e)}> {#if slugTakeoverNeeded}
Slug previously redirected.

{editSlug} currently redirects to {slugTakeoverNeeded.slug}. Renaming to it will break old links.

{:else if settingsError}
{settingsError}
{/if} {#if !slugTakeoverNeeded}
{/if}

Delete app

Permanently removes the app along with all its scripts, routes, execution logs, and domain claims.

{/if} {#if confirmingDeleteApp} (confirmingDeleteApp = false)} >

This will permanently delete everything inside {app.name}. There is no undo.

{#if domains.length > 0}

The following hosts will stop pointing at this app:

{/if} {#if deleteAppError} {/if}
{/if} {#if domainToRemove} (domainToRemove = null)} >

{app.name} will stop answering on {domainToRemove.pattern}.

Routes already bound to this host are blocked from deletion by the API; if so, you’ll see an error here.

{#if removeDomainError} {/if}
{/if} {#if memberToRemove} (memberToRemove = null)} >

{memberToRemove.username} will lose access to this app. Their other app memberships and account are untouched.

{#if removeMemberError} {/if}
{/if} {/if}