Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 6 additions & 35 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ docs/
│ │ └── reference/
│ ├── content.config.ts # registers the docs collection
│ └── styles/
│ └── custom.css # brand colours, screenshot-placeholder style
│ └── custom.css # brand colours
└── tsconfig.json
```

Expand Down Expand Up @@ -91,30 +91,9 @@ import { Icon } from 'astro-icon/components';
See the [Starlight docs](https://starlight.astro.build/components/asides/)
for the full component list.

### Screenshot placeholders
### Screenshots

The site uses styled placeholders so every screenshot slot is visible
while writing:

```mdx
<div class="screenshot-placeholder">
&nbsp;Screenshot placeholder: short description of what should be here.
</div>
```

The style lives in [src/styles/custom.css](src/styles/custom.css).
Replace the `<div>` with a real `![alt](path.png)` (and drop the image
into `src/assets/`) when the screenshot lands.

### Em-dashes and special characters

By convention this site avoids em-dashes (`-`) and decorative Unicode
that does not render predictably across platforms. Use commas,
periods, or hyphens.

For autolinks, write `[label](https://example.com)` instead of
`<https://example.com>`. MDX is stricter than plain Markdown about
the latter inside lists.
Use real captures of the current client with descriptive alt text. Do not add screenshot placeholders to published pages.

## Verify before pushing

Expand Down Expand Up @@ -181,19 +160,11 @@ culprits are:

## Contributing screenshots

1. Take a screenshot at a sensible window size (the default app
width, around 1280 wide, looks best on the docs site).
2. Save as `.png` or `.webp` under `src/assets/screenshots/<section>/`.
3. Replace the matching `<div class="screenshot-placeholder">` with:

```mdx
import myShot from '../../assets/screenshots/section/my-shot.png';
Capture the current client at a readable window size and save PNG or WebP files under `public/`. Use original sample assets from the parent e2e repository’s `assets/sample-profiles/` directory.

<Image src={myShot} alt="Short description of the screenshot." />
```
The October 2026 desktop captures render the actual React client in Edge with deterministic sample users, avatars, messages, and settings. Native responses are fixtures; these images demonstrate the UI and do not verify a live server operation. The screen-sharing capture uses the client’s preview harness.

4. Run `npm run build` to confirm the image is included and the
build passes.
Add an image with descriptive alt text to the relevant guide, inspect the rendered result, and run `npm run build`. Remove unused superseded screenshots.

## License

Expand Down
3 changes: 2 additions & 1 deletion astro.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export default defineConfig({
starlight({
title: "Fancy Mumble",
description:
"Documentation for the Fancy Mumble app, server, and Docker image. Voice chat reimagined for 2026.",
"Documentation for the Fancy Mumble app and Starling server. Voice chat reimagined for 2026.",
logo: {
src: "./src/assets/logo.svg",
replacesTitle: false,
Expand Down Expand Up @@ -168,6 +168,7 @@ export default defineConfig({
badge: { text: "Ops", variant: "note" },
items: [
{ label: "Docker quick start", link: "/server/docker/" },
{ label: "Migrating to Starling", link: "/server/migrating-to-starling/" },
{ label: "First-run setup", link: "/server/wizard/" },
{ label: "Configuration reference", link: "/server/config/" },
{ label: "Ports & networking", link: "/server/network/" },
Expand Down
Binary file removed public/android.jpg
Binary file not shown.
Binary file modified public/mainpage.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/preview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/screenshot-admin-acl-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/screenshot-admin-bans-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/screenshot-admin-emotes-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/screenshot-admin-marketplace-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/screenshot-admin-onboarding-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/screenshot-admin-roles-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/screenshot-admin-users-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshot-getting-started-connect-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed public/screenshot-getting-started-connect-2.png
Binary file not shown.
Binary file removed public/screenshot-getting-started-connect-3.png
Binary file not shown.
Binary file removed public/screenshot-getting-started-connect-4.png
Binary file not shown.
Binary file modified public/screenshot-getting-started-first-call-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshot-getting-started-first-call-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshot-getting-started-install-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshot-server-features-link-previews-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshot-server-features-persistent-chat-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file removed public/screenshot-server-features-push-1.jpg
Binary file not shown.
Binary file modified public/screenshot-server-features-reactions-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file removed public/screenshot-server-wizard-1.png
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshot-users-audio-1.png
Binary file modified public/screenshot-users-audio-2.png
Binary file modified public/screenshot-users-chat-community.png
Binary file modified public/screenshot-users-file-sharing-1.png
Binary file modified public/screenshot-users-file-sharing-2.png
Binary file added public/screenshot-users-notifications-1.png
Binary file removed public/screenshot-users-personalization-1.png
Diff not rendered.
Binary file modified public/screenshot-users-personalization-2.png
Binary file modified public/screenshot-users-personalization-3.png
Binary file added public/screenshot-users-privacy-1.png
Binary file modified public/screenshot-users-profile-1.png
Binary file modified public/screenshot-users-profile-2.png
Binary file modified public/screenshot-users-profile-3.png
Binary file modified public/screenshot-users-screen-sharing-1.png
Binary file modified public/shortcuts.png
4 changes: 1 addition & 3 deletions src/content/docs/admin/acl.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,7 @@ ACLs are powerful, but easy to over-engineer. Most servers do fine
with mostly-roles plus a handful of per-channel ACL tweaks.


<div id="screenshot-admin-acl-1" class="screenshot-placeholder">
&nbsp;Screenshot placeholder: channel ACL tab with three rules and the inheritance indicator.
</div>
<img src="/screenshot-admin-acl-1.png" alt="Current client administration screen with sample data" />

## Opening the ACL editor

Expand Down
24 changes: 3 additions & 21 deletions src/content/docs/admin/bans.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,7 @@ The **Ban list** is a server-wide block list of:
Banned identities cannot connect. The list survives restarts.


<div id="screenshot-admin-bans-1" class="screenshot-placeholder">
&nbsp;Screenshot placeholder: ban list with five entries and the "Add ban" button.
</div>
<img src="/screenshot-admin-bans-1.png" alt="Current client administration screen with sample data" />

## Ban from the user list

Expand Down Expand Up @@ -48,25 +46,9 @@ Open **Admin, Ban list**, click **Add ban**:

Useful when you know who you want to block before they connect.

## Auto-ban on the older C++ server
## Connection limits

The settings below apply only to the older C++ server image. They are not Starling configuration. For Starling, consult its [current TOML reference](https://github.com/Fancy-Mumble/starling/blob/main/examples/reference.toml) before configuring connection limits:

```yaml
environment:
MUMBLE_CONFIG_AUTOBANATTEMPTS: 5
MUMBLE_CONFIG_AUTOBANTIMEFRAME: 60
MUMBLE_CONFIG_AUTOBANTIME: 3600
```

| Key | What |
|-----|------|
| `autobanattempts` | Failed connections per source IP that triggers a ban. |
| `autobantimeframe` | Window (seconds) in which the attempts are counted. |
| `autobantime` | How long the auto-ban lasts (seconds). |

Auto-bans show in the ban list with a "auto" tag and can be removed
manually.
Use the [Starling configuration reference](https://github.com/Fancy-Mumble/starling/blob/main/examples/reference.toml) for gateway connection and rate limits.

## IP-range bans

Expand Down
8 changes: 2 additions & 6 deletions src/content/docs/admin/channels.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@ Channels are the rooms in your server. Users sit in one channel at a
time for voice; chat is per channel.


<div id="screenshot-admin-channels-1" class="screenshot-placeholder">
&nbsp;Screenshot placeholder: channel tree on the left with a "Voice" parent and three child channels.
</div>
<img src="/screenshot-admin-acl-1.png" alt="Current client administration screen with sample data" />

## Create a channel

Expand Down Expand Up @@ -51,9 +49,7 @@ Right-click, **Edit channel**. The dialog has several tabs:
| **Audio** | Bandwidth caps, codec overrides. |


<div id="screenshot-admin-channels-2" class="screenshot-placeholder">
&nbsp;Screenshot placeholder: channel-edit dialog with the ACL tab open.
</div>


## Linking channels

Expand Down
15 changes: 2 additions & 13 deletions src/content/docs/admin/emotes.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,7 @@ This feature requires the [file server](/server/features/file-server/)
to be enabled and the **Manage emotes** permission.


<div id="screenshot-admin-emotes-1" class="screenshot-placeholder">
&nbsp;Screenshot placeholder: custom emotes admin tab with five uploaded emotes.
</div>
<img src="/screenshot-admin-emotes-1.png" alt="Current client administration screen with sample data" />

## Upload an emote

Expand Down Expand Up @@ -99,16 +97,7 @@ custom ones.

## Storage and limits

Stored in the file server at `/data/file-server-storage/emotes/`.

Default limits:

```ini
plugin.file-server.maxEmoteSizeBytes=1048576
plugin.file-server.maxEmoteCount=1000
```

Bump these in your custom INI for very large communities.
Starling stores emote assets through its file service. Keep that service’s database and object storage in your backups. Upload limits and access permissions depend on the running service configuration; use the [file-storage guide](/server/features/file-server/) and your release’s TOML reference. Legacy plugin INI keys do not configure Starling.

## Pitfalls

Expand Down
4 changes: 1 addition & 3 deletions src/content/docs/admin/groups.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@ should use instead. Groups are still useful for **per-channel
membership lists** that should not be promoted to server-wide roles.


<div id="screenshot-admin-groups-1" class="screenshot-placeholder">
&nbsp;Screenshot placeholder: channel groups tab listing three groups and inheritance toggle.
</div>
<img src="/screenshot-admin-roles-1.png" alt="Current client administration screen with sample data" />

## Groups vs roles

Expand Down
113 changes: 8 additions & 105 deletions src/content/docs/admin/marketplace.mdx
Original file line number Diff line number Diff line change
@@ -1,115 +1,18 @@
---
title: Plugin Marketplace
description: Browse and install community plugins for your Fancy Mumble server from the built-in marketplace.
sidebar:
order: 11
description: Browse plugins and check server support before installing them.
---

import { Steps, Aside, Card } from '@astrojs/starlight/components';
Open **Settings, Marketplace** to browse the catalogue exposed to your client. Availability depends on the catalogue, network access, and the connected server’s plugin capabilities.

The **Marketplace** tab in the admin panel connects directly to the
[Fancy Mumble Plugin Marketplace](https://plugins.fancy-mumble.com/)
— a curated directory of community plugins you can install on your
server in a single click.
<img src="/screenshot-admin-marketplace-1.png" alt="Current Marketplace screen with Refresh and an empty sample catalogue" />

<Aside type="caution" title="Server version requirement">
Installing marketplace plugins requires **Fancy Mumble Server 0.4.0
or newer**. On older servers the install button is hidden and a
warning banner is shown. You can still browse the catalogue.
</Aside>
## Check compatibility

<div id="screenshot-admin-marketplace-1" class="screenshot-placeholder">
&nbsp;Screenshot placeholder: Marketplace tab showing a search bar and a grid of plugin cards.
</div>
Read a plugin’s description, required server version, capabilities, and installation instructions before enabling it. A catalogue entry does not establish compatibility with your Starling release.

## Browsing plugins
Starling has a native and WASM plugin host. Remote installation and lifecycle management are still subject to the host’s implemented admin capabilities. Do not assume that an Install control shown by a client means your deployment supports the operation.

Open **Admin > Marketplace**. The page loads the most popular plugins
automatically. Each card shows:
For a Starling deployment, follow [Server plugins](/server/plugins/using/) to install compatible artifacts and restart the affected service. Check its logs and advertised registry to confirm loading. Keep plugin configuration and data in your backups.

- Plugin name and author.
- Short description.
- Star rating and download count.
- **Official** badge for first-party plugins maintained by the Fancy
Mumble project.
- Capability tags (e.g. `slash-commands`, `modals`).

Type in the search box to filter by name, author, or keyword. Results
update 300 ms after you stop typing.

## Plugin detail page

Click a card to open the full detail page. It shows:

- Full description, author, and homepage link.
- **README** rendered from Markdown — documentation written by the
plugin author.
- **Version history** table:
- Version number.
- Release date.
- Minimum server version and minimum Fancy Mumble server version
required.
- Changelog snippet.
- **Yanked** badge if a version was pulled by the author (prefer a
different version).
- Tags and capability list.

<div id="screenshot-admin-marketplace-plugin-1" class="screenshot-placeholder">
&nbsp;Screenshot placeholder: Plugin detail page for "fancy-greeter" showing README and version table.
</div>

## Installing a plugin

<Steps>

1. Find the plugin you want in the search results or on the detail page.

2. Click **Install**.

3. The client sends an install request to your server referencing the
plugin's manifest URL from the marketplace. The server downloads
and verifies the plugin.

4. A confirmation (or error) banner appears once the server responds.

5. Navigate to **Server Plugins** to confirm the plugin appears in the
list and toggle it on if it is not already enabled.

</Steps>

<Aside type="note">
The install operation happens server-side. Your client just forwards
the marketplace metadata; it never downloads the plugin binary itself.
</Aside>

## After installing

Once the server loads the plugin, it advertises the plugin's
**manifest** to connected clients. Each user who connects will be
prompted to review and grant trust before the plugin's UI surfaces
appear (slash commands, buttons, modals, etc.). See
[Plugins](../users/plugins) for what users see.

## Refreshing the list

Click **Refresh** to re-fetch the marketplace index. Useful after
a new plugin is published or if the page loaded with stale results.

## Developer mode

If your Fancy Mumble preferences are set to **Developer** mode, an
extra URL selector appears in the toolbar. This lets you point the
marketplace tab at a local development instance (`http://localhost`)
instead of the production registry. The selection is persisted in
your preferences and survives restarts.

<Aside type="caution" title="Developer mode only">
The local URL override is only visible in Developer mode. It is
intended for plugin authors testing a local marketplace server.
</Aside>

## See also

- [Server Plugins](/admin/server-plugins/) — enable, disable, and uninstall plugins already on your server.
- [Using plugins (server config)](/server/plugins/using/) — install plugins manually via Docker volume mount without the marketplace.
- [Developing a plugin](/server/plugins/developing/) — build and publish your own plugin to the marketplace.
Client plugins that expose interactive surfaces also require the user’s trust. See [Client plugins](/users/plugins/).
8 changes: 2 additions & 6 deletions src/content/docs/admin/onboarding.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ If you have used Discord's "Community" onboarding, this is the same
idea.


<div id="screenshot-admin-onboarding-1" class="screenshot-placeholder">
&nbsp;Screenshot placeholder: onboarding modal as seen by a new user, with three questions.
</div>
<img src="/screenshot-admin-onboarding-1.png" alt="Current client administration screen with sample data" />

## What you can configure

Expand Down Expand Up @@ -66,9 +64,7 @@ idea.
</Steps>


<div id="screenshot-admin-onboarding-2" class="screenshot-placeholder">
&nbsp;Screenshot placeholder: onboarding admin panel with two questions and four answers each.
</div>


## Example: gaming community

Expand Down
12 changes: 3 additions & 9 deletions src/content/docs/admin/roles.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@ everywhere on the server. Roles are the bread-and-butter of
administration.


<div id="screenshot-admin-roles-1" class="screenshot-placeholder">
&nbsp;Screenshot placeholder: roles list with five roles, each showing a colored badge.
</div>
<img src="/screenshot-admin-roles-1.png" alt="Current client administration screen with sample data" />

## Built-in roles

Expand Down Expand Up @@ -51,9 +49,7 @@ Open the role and switch to the **Members** tab:
- **Bulk add** by pasting a list of usernames.


<div id="screenshot-admin-roles-2" class="screenshot-placeholder">
&nbsp;Screenshot placeholder: role-members tab with five members and an autocomplete on top.
</div>


## Set permissions

Expand Down Expand Up @@ -128,9 +124,7 @@ The Display tab of a role lets you tweak:
in the sidebar).


<div id="screenshot-admin-roles-3" class="screenshot-placeholder">
&nbsp;Screenshot placeholder: role display panel with the live badge preview.
</div>


## Audit log

Expand Down
17 changes: 13 additions & 4 deletions src/content/docs/admin/server-plugins.mdx
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
---
title: Server plugins
description: Understand Starling's plugin host and its current installation path.
description: Inspect and manage plugins advertised by Starling.
---

Starling has a plugins service and a Rust plugin host. It can load native plugins and WebAssembly components from its configured plugin directory. The host has been exercised with the published native examples and a WebAssembly component; installing plugin bytes over the wire and operator REST routes remain unfinished in the checked-out implementation.
Starling runs plugins inside its **plugins** service. Native plugin libraries and WebAssembly components use the host's scoped capabilities for configuration, sessions, channels, permissions, and messaging.

For now, operators place a compatible plugin binary in the configured plugins directory and enable it through the available plugin RPC. Check its startup logs and advertised plugin registry before expecting client controls to appear. A built-in service named plugins does not mean every plugin from the older C++ server has been ported.
The service reads its host options from `[services.plugins.options]`. Configure `plugins_dir` to the directory containing compatible plugin artifacts. With no directory configured, no plugins are loaded.

See the [Starling plugin-host status and porting plan](https://github.com/Fancy-Mumble/starling/blob/main/docs/PLUGIN-HOST-PLAN.md) and [feature availability](/server/features/). The older [plugin guides](/server/plugins/overview/) describe the C++ fork's host and INI configuration.
~~~toml
[services.plugins.options]
plugins_dir = "/var/lib/starling/plugins"
~~~

Per-plugin settings use the `plugin.<name>.` prefix inside that options table. Read the plugin's own documentation for its keys. After startup, check the service logs and advertised registry; a plugin file on disk does not prove that it loaded successfully.

The host supports listing, enabling, disabling, and uninstalling loaded plugins. Installation from remotely uploaded bytes and the operator REST plugin routes remain unfinished in the current host plan. Place artifacts through your deployment tooling and use only the administration operations supported by your release.

See the [plugin host implementation and plan](https://github.com/Fancy-Mumble/starling/blob/main/docs/PLUGIN-HOST-PLAN.md), [Starling configuration reference](https://github.com/Fancy-Mumble/starling/blob/main/examples/reference.toml), and [feature availability](/server/features/).
Loading
Loading