Join a channel with a code from your friends,
or create one if you're the admin.
📷 Cameras
🖥️ Streams
🎵 Listening TogetherUp next: Nothing queued
0:000:00
📌 Pinned Messages
F
forumtesterAdminToday at 06:42 PM
🎤 Voice message(0:02)
06:43 PM
🎤 Voice message(0:03)
06:44 PM
🎤 Voice message(0:03)
N
novaToday at 06:46 PM
Hey! Is this the place where we test themes?
F
forumtesterAdminToday at 06:46 PM
Welcome to Haven
This is a sample conversation for theme authors. It has underline, strikethrough, highlight, inline code, a spoiler and coloured text , plus a link to https://example.com.
06:46 PM
A quoted line and a second one
a bullet
another bullet
first
second
N
novaToday at 06:46 PM
js
const haven = "themeable";
console.log(haven);
06:46 PM
Column A
Column B
| one | two |
F
forumtesterAdminToday at 06:46 PM
N
novaToday at 06:46 PM
Nice picture 😄 and a mention for @forumtester so the highlight shows.
F
novaNice picture 😄 and a mention for @forumtester so the highlight shows.
forumtesterAdminToday at 06:46 PM
Replying to the one above, so the reply banner shows.
06:46 PM
📊 Poll: Which theme do you use?
Which theme do you use?
NEW MESSAGES
N
novaToday at 06:46 PM
And a plain closing line from the other person.
100%
0:01Recording. Click the mic or Send to post it, Escape to throw it away.
ServerConnected
Ping0ms
Channelgeneral
Online1
••••••••
18:51:05
v4.8.0
🧵Thread
Thread starter
⚙️ Settings
🗣️ Localization
Changes apply immediately
🌎 Timezone
Using this device's timezone
Saved to your account and used on every device
📐 Layout
🧩 Sidebar Layout
Original is Haven's own layout. The others come from layout plugins on this server. Saved per browser.
📏 Layout Density
📜 Channel Scrolling
✉️ Message Box
Enter still sends. Frees the end of the message box if you never click the button.
Upload, emoji, GIF and the rest sit behind a single + at the start of the message box, so the box gets the room.
🔍 Zoom
Scales the whole interface. Drag for the exact size you want.
😀 Reaction Size
🎨 Role Display
How role colors are shown next to usernames in chat and the member list.
🧰 Toolbar Icons
Toolbar slot order
React
Reply
Quote
Thread
Pin / Unpin
Protect / Unprotect
Edit
Delete
Applies to message and thread hover action bars.
🖼️ Image Display
🖼️ Image Display Mode
✨ Animated Profile Pictures
Applies to everyone's avatars and borders as you see them. Anyone who has turned animation off for their own profile stays still regardless.
🎞️ Animated Images in Chat
Applies to GIFs and other animated images posted in messages, for you only. Nobody else's view changes.
🔗 Link Previews
🏞️ Banner Display
How the banner interacts with the channel header area. These settings are per-device.
🎚️ Toggle Style
Applies to on/off settings. Lists you tick items in, like permissions and channel pickers, always stay as boxes.
📊 Status Bar
Show the status bar at the bottom of the screen with server, ping, channel, and online info.
💬 Chat
Press the Up arrow key on an empty input to quickly edit your last message.
Single-click a DM to open it in the full pane instead of a floating PiP. Double-click opens the PiP.
Hovering over a name or avatar shows a quick profile preview. Clicking opens the full card either way.
🎛️ Soundboard
Open the soundboard as a pinned sidebar panel instead of a popup.
🔔 Sounds
General message sounds (off by default). @Mentions, replies, and DMs always notify.
Suppress all notifications, sounds, and taskbar badge from this server.
Pings for roles you hold, like @Moderators. Off means they count as ordinary messages.
Throttle how often desktop/browser notification pop-ups appear, so a burst of messages or a flaky connection can't keep popping the app up. Notification sounds and unread badges are unaffected.
Automatically open screen shares when someone starts streaming. Turn off to join manually.
Hide the voice users panel on desktop. Voice users are still shown in channel indicators.
Show mute/deafen buttons in the sidebar instead of the voice panel header.
Play short cue tones when muting, unmuting, deafening, or using push-to-talk in Haven Desktop.
Browse sounds, assign to events, set hotkeys
📲 Push Notifications
Registration failed
Receive notifications even when Haven is closed
🎮 Activity
Others can see what you're playing or listening to. Games and music only appear once you link an account below. Nothing is ever shared while your status is Invisible.
Use the link above. It goes to developer.spotify.com.
Sign in with your Spotify account. This needs Spotify Premium. As of 2026 the Web API is no longer available on free accounts, so the rest of these steps will not work without it (#5528). Accept the developer terms if it asks.
Click Create app. You are not building software. This just registers a name. Call it "Haven".
Paste this into Redirect URI:https://your-haven-address/connect/spotify/callback
Tick Web API, save, then open Settings on the app you just made.
Copy Client ID, then click View client secret and copy that too.
Saved to the server's .env automatically. No restart needed.
Haven's own music player needs no connection. It shares automatically while you're listening in a voice channel.
Point your player's plugin or script at this URL. Keep it secret; anyone with it can post to your profile.
🚢 Score Badges
Don't show 🚢 badges next to other users in the member list.
Other users (and you) won't see your 🚢 badge anywhere on this server, including the leaderboard.
Channels an admin marked 🔞 leave your sidebar, and forum topics marked 🔞 leave their forum, until you turn this off. Handy on a phone in public.
🔒 Password
💻 Active Sessions
Devices with Haven open right now. A device that is signed in but closed will not be listed, so sign out everywhere if you think someone else has your account.
🔐 Two-Factor Authentication
Protect your account with a TOTP authenticator app (Google Authenticator, Authy, etc.).
Scan this QR code with your authenticator app:
Or enter this secret manually:
🗝️ Backup Codes
Save these codes somewhere safe. Each can be used once if you lose access to your authenticator.
✅ Two-factor authentication is enabled
🔑 Account Recovery
Generate one-time recovery codes to regain access if you forget your password. Store them somewhere safe: they work like a last-resort key.
Important: Using a recovery code to reset your password will permanently and irreversibly destroy your end-to-end encryption keys. All encrypted direct message history will become unreadable. There is no way to undo this.
Save these codes now. They will not be shown again. Each code can only be used once.
⚠️ Delete Account
Permanently delete your account. This cannot be undone.
🧩 Plugins & Themes
Drop .plugin.js files into the plugins/ folder and .theme.css files into the themes/ folder, then refresh.
Extension Safe Mode
Custom themes and plugins are suppressed for this session. You can reset them or exit without changing your saved choices.
Plugins
Braid Layout
Vastly simplified two-edge layout: folds the server rail into the sidebar, docks the full voice controls bottom-left, tucks header extras into a kebab menu, merges message runs into cards, and calms the chrome. One-key toggle (Ctrl+Shift+B) between Braid and the classic layout. Suspends itself while Mod Mode edits the layout. Pairs with the Braid / Braid Light themes, and respects every other theme: cosmetic shape rules use :where() so any [data-theme] override wins.
Amnibro • v1.9
Compact Layout
Reversible desktop layout that folds the server rail into the navigation sidebar and docks account and voice controls in its footer. Preserves Haven's tablet, mobile, and message-density behavior.
bernardokcosta • v1.0.0
Message Timestamps
Adds relative timestamps (e.g. "2m ago") next to every message
Haven • v1.0.0
Themes
Braid Light
Braid's airy light look: white surfaces, deep green accent, soft rounded corners. Pairs with the Braid Layout plugin.
Amnibro • v1.0 • Legacy theme
Braid
Mint-on-slate with soft rounded corners and a calm, decluttered look. Pairs with the Braid Layout plugin.
Amnibro • v1.0 • Legacy theme
Compact
Dense graphite chrome with narrow panels and crisp cyan accents. Respects the selected message density.
bernardokcosta • v1.0 • Theme API 1
⌨️ Desktop Shortcuts
Global keyboard shortcuts, active even when Haven is in the background. Click a row to rebind, or “Clear” to disable.
Mute / Unmute-
Deafen / Undeafen-
Push-to-TalkNot set
Lone modifiers (Alt / Ctrl / Shift) and extra mouse buttons (Mouse4 / Mouse5) can be bound here. Some bindings require a recent Haven Desktop build to register at the OS level.
🖥️ Desktop App
Settings specific to Haven Desktop.
Launch Haven Desktop automatically when you log in to your computer.
When launching on login, start minimized to the system tray instead of showing the window.
Closing the window hides Haven to the system tray instead of quitting.
Hide the File / Edit / View / Window / Help toolbar. Press Alt to temporarily show it.
🐞 Debug
Experimental client-side toggles. These don't change anything on the server.
Highlight your own avatar the moment your mic crosses the talk threshold, instead of waiting for the server to echo it back. Default off: the server echo is usually preferred because it confirms your audio actually reached the server.
Force the mic to start muted every time you join a voice channel. Useful if you tend to lurk first, or if you don't want to risk hot-mic'ing right after joining. You can unmute normally once you're in.
Join voice channels without requesting microphone access. You'll hear everyone but won't be able to talk. Useful if you don't own a mic, can't grant mic permission right now, or just want to listen in. Haven will also fall back to listener-only automatically if the mic can't be opened for any reason. (#5380)
Re-enable echo cancellation, noise suppression, and auto gain control on the audio captured from your screen share. Default off as of 3.17.3 because these filters mangle music and game audio. Turn this on if you're sharing voice content (tutorial narration, a podcast, a meeting) where the cleanup actually helps. Does not affect your microphone, which always gets full voice processing.
By default Haven plays incoming screen-share audio straight through the audio element, which keeps it in sync with the video over a TURN/relay connection. Turn this on to route it through Haven's Web Audio mixer instead, which unlocks the per-stream volume boost above 100% but can cause audio stutter and audio/video desync over a relay (it's fine on a local network). Leave it off if a screen share's audio stutters or drifts out of sync. (#5426)
Turn this on if your screen share stutters and drifts out of sync for viewers, but only when the call goes through a TURN server and never on your local network. It lowers the video bitrate back to the pre-3.18.1 values and lets the encoder drop frames when the connection is struggling, instead of holding the framerate and letting the backlog grow. Picture quality will be lower. Only the person sharing needs it on. (#5426)
On by default. When a viewer can only be reached through a TURN relay, your share to that one viewer uses the gentler profile above, while viewers on a direct connection keep the full-quality one. Turn this off if you would rather the toggle above be the only thing that decides. (#5426)
If you sometimes rejoin a voice call and still can't hear one or more people until you leave and rejoin, turn this on. When two people reconnect at the same moment their connections can collide mid-repair and one direction of audio stays dead; this makes Haven re-run the repair so the audio comes back on its own. Off by default while it's still being tested. (#5444)
Fix washed-out or over-saturated colors on HDR monitors. Requires restart.
Workaround for Nvidia G-Sync / VRR monitors where Haven Desktop drops to ~5 FPS after the window is minimized or hidden behind another window. Tells Chromium not to wait for the monitor's vsync signal before drawing frames. May cause visible tearing on monitors without variable refresh rate. Requires restart to take effect.
Pairs with the GPU vsync toggle above. Removes Chromium's internal frame-rate limit, which on some Nvidia G-Sync setups gets stuck at a very low value and never recovers. Only useful if the vsync toggle alone didn't help. Can increase CPU/GPU usage. Requires restart to take effect.
Linux only. Lets Haven Desktop use your graphics card's VA-API video encoder for screen sharing even where Chromium's driver blocklist would not, including on Nvidia cards. It can lower CPU use while you share, but some drivers give black or broken video, so it is off by default. Requires restart to take effect.
Linux only. Runs Haven Desktop through X11 (XWayland) instead of native Wayland. Try it if the window flickers, which some Nvidia cards do on Wayland. In this mode screen sharing may only list some windows. Requires restart to take effect.
⬆️ Server Updates
Check for new Haven releases and apply them in place. The server will create a pre-update backup automatically and restart itself.
🏠 Server Branding
In use from this server's environment (SERVER_NAME): Haven. Saving something here replaces it.
Custom title displayed on the login screen below the HAVEN logo.
Server icon (square, max 2 MB)
⬡
Server banner (wide, max 4 MB)
No banner
Banner display settings (height, offset, header style) are in User Settings.
Appearance & Welcome
New users see this theme on first visit. They can still pick their own. A theme shared under Defaults for New Members is this same setting: changing one changes the other.
New users see Haven in this language on first visit. They can still pick their own.
Shown when a new user joins a channel. Use {user} for the username. Leave blank to disable.
Custom Themes
Drop .theme.css files into the themes/ folder, then check the ones you want to appear in the theme picker for all users.
⚖️ Custom Terms of Service
Add custom terms that appear before the default ToS on the login page. Supports plain text. Leave empty to show only the default Haven ToS.
📡 Voice & Connectivity
STUN/TURN servers let voice and screen share connect between users on different networks. Leave blank to use Haven's built-in STUN pool. If users outside your local network get stuck on "ICE: Connecting...", set your own servers here.
One stun: URI per line (or comma separated). Blank = built-in defaults.
A TURN server relays traffic for users behind strict NATs that STUN alone can't connect. Only needed if some users still can't connect after setting STUN. Username/password apply to static-credential TURN servers.
Checks the servers above the same way a call does, and says in plain English what works and what doesn't. Save your changes first.
🧭 Tunnel
Inactive
👥 Members
When enabled, the "update available" banner is only shown to admins
Channels with screen share or music turned off show small crossed-out icons next to their name. Turn this on to hide those icons for everyone.
⚠️ When enabled, admins can reset any user's password to a one-time temp value. The user must change it on next login. Resetting a password also wipes that user's E2E DM history (their wrap key derives from the password). The fact that this is enabled is exposed via /api/public-config so users can see whether admins on this server have this power.
👑 Role Management
Create and manage roles. Assign roles to users from the user list context menu.
Role Icon Visibility
Controls where role icons appear. "After username" moves icons to the right side of the name instead of the left.
Channel Creator Role
When a non-admin who can create channels makes one, they are given this role inside that channel so they can manage it. Admins are never affected.
🛡️ Moderation
🕵️ Idle-online accounts
Lists accounts that have been connected and showing as online for hours without posting, joining voice, or changing their status. A normal client goes idle on its own, so an account that stays green and silent for this long is often a script parked to watch the server rather than a person. This is just something to look at, not an automatic action.
🔒 Security
🔑 Single sign-on (OIDC)
Let members sign in with an account from your own identity provider (Authentik, Keycloak, Authelia, Auth0 and anything else that speaks OpenID Connect) instead of a Haven password. Fill in the issuer address and client ID here, then put the client secret in your .env file as OIDC_CLIENT_SECRET and restart. The secret is deliberately kept out of the database so your backups never carry it. Register this address with your provider as the redirect URI: https://your-haven-address/api/auth/oidc/callback
Encrypted DMs are unlocked by a key derived from what you type when you sign in, and an SSO member never types a password here. They are asked to set a separate encryption passphrase on their first sign-in, and for it again on each new device. Nobody, including you, can reset that passphrase for them.
Off means only people who already have a Haven account linked to your provider can sign in this way. Since linking an existing account is not built yet, leaving this off will turn away everyone new.
OIDC_CLIENT_SECRET is not set in the server environment, so the sign-in button stays hidden until it is.
🔗 Referrer configuration
Sets the Referrer-Policy header Haven sends to browsers, which controls how much of the current page's address is shared when the browser loads resources or follows links to other sites. The recommended options cover almost every server; the advanced policies are standard browser values left to your discretion. Policies that would send the full page address to other sites are not offered, because Haven invite links live in that address.
Same-Origin (default): within this server, shares the full address; to other sites, shares nothing.
No-Referrer: shares nothing anywhere, not even within this server.
Strict-Origin-When-Cross-Origin: within this server, shares the full address; to other sites, shares only the origin. This was Haven's default before 3.41.0. Pick it to go back to the old behaviour.
Same-Origin and No-Referrer send nothing to other sites, so either one fixes embeds whose CDN rejects a cross-origin referrer, such as Twitter/X video. If an image or embed somewhere else stops loading after this change, that host wants a referrer: switch to Strict-Origin-When-Cross-Origin to restore the pre-3.41.0 behaviour.
🖼️ Image privacy
Haven fetches images from other sites itself and serves them from its own cache, so your members' browsers never contact those sites. With this off, anyone who posts an image link collects the IP address and browser details of everyone who scrolls past it, without a single click. It also means embeds keep working after the original link expires or the site goes down. Costs some bandwidth and disk on your server; each image is fetched once and cached for 30 days.
Cached: 1 image, 0.0 MB
🎙️ Voice privacy
Haven voice is peer-to-peer, so by default everyone in a call can see everyone else's IP address. It is how the connection is made, it needs no clicking, and nobody is told it happened. Relay-only mode routes all voice through your TURN server instead, so participants only ever see the TURN server's address. This needs a TURN server configured under Voice & Connectivity, and it uses your server's bandwidth for every call.
🔔 FCM Privacy
FCM (Firebase Cloud Messaging) is Google's system for delivering push notifications to Android phones. It's what wakes your phone when you receive a new message while Haven is closed. This means that all notifications (including your Haven username, channel name and message content) sent to your Android phone have to pass through Google's servers to reach your phone.
While this may be fine for most users, some may prefer to keep Google completely out of the equation. UnifiedPush is a decentralized notification standard that supports several notification apps, and if a UnifiedPush compatible app is installed on your phone, Haven Mobile will prioritize it over FCM.
Dangerous Action Warning: Before disabling this, please ensure every member in your Haven server including yourself has a UnifiedPush compatible app installed on their phone. Otherwise, some members of your server will not receive any mobile notifications.
🛡️ Auto-Mod
Checks the links in messages, edits, DMs, profiles and channel topics against a domain policy you control. Blocked content is rejected before it is saved, so it never reaches anyone else. This matters more than it sounds: Haven renders linked images and link previews directly from the other site, so a hostile link exposes the IP address of everyone who scrolls past it, not just whoever clicks.
Allowlist is the strict option and the one that stops links you have never seen before. Blocklist only stops domains you already know about.
🌐 Domains
🔤 Words
Groups of words that block a message, each worth a number of strikes towards the escalation below. Whole words only, case does not matter, one word or phrase per line. Staff at or above the skip level are not checked.
⚙️ Rules
0 disables this. Applies even to allowed domains, and is the single most effective rule against register-post-link-get-banned-repeat.
Members at or above this level are never filtered. Admins are always exempt.
Direct messages are end-to-end encrypted, so the server genuinely cannot read them and cannot block a DM as it is sent. Instead the check runs in the recipient's app after it decrypts: a link to a domain you have not allowed is shown as plain text with a warning rather than something clickable, and images from those domains are not loaded. Senders are warned before the message goes out. This relies on the recipient running an app that implements it, so treat it as a strong deterrent rather than a guarantee.
Strongly recommended. Link previews load images straight from the other site in every viewer's browser, which hands that site everyone's IP address without a single click.
⚖️ Escalation
Counts blocked attempts within a rolling window. A blocked link only counts for accounts less than a week old; other members are just told the site is not allowed. Set any threshold to 0 to disable that step. Note that a muted member cannot send anything at all, so they stop collecting strikes until the mute runs out. If you want a fast automatic ban, set the ban threshold close to the mute threshold, or turn muting off.
⚠️ Leave off unless you understand the risk. Shared and mobile-carrier addresses mean an IP ban can catch people who did nothing.
📊 Recent activity
Nothing blocked yet.
🚪 Who can sign up
When enabled, only pre-approved usernames can register
No whitelisted users
When enabled, anyone registering must enter the token below. Works alongside the whitelist (both checks must pass) or on its own.
-
Adds a Cloudflare Turnstile challenge to the sign-up form to block automated mass registration. It's free: create a widget at the Cloudflare Turnstile dashboard and paste both keys below. Leave off if you don't need it.
Caps how many new accounts can be created across the whole server each hour, to slow a bot flood even when it comes from many different addresses. Sign-ups above the cap are asked to try again later, so set it comfortably above your normal rate.
🌐 Server Invite Code
A single code that adds people to every channel & sub-channel on the server
-
Custom invite slug (3-32 chars, letters, numbers, hyphens, underscores). People can join via /invite/your-slug
📋 Default channels for invite joiners
Pick which public channels people land in when they use the invite code or vanity link. Private channels are never auto-joined regardless of selection. Leave everything checked to grant all public channels.
🔗 Invite Links
Shareable links that drop people straight into the channels you pick, no code to type. Each link can be turned off, limited to a number of people, or set to expire.
The maximum number of uses an invite link can be set to. Admin and manage-server permission ignore this limit. (0 = unlimited)
👤 Join as Guest
Show a "Join as Guest" button on the login page. Guests pick a username, get a temporary account with no password, and can only see the channels you whitelist below. Guests cannot DM, and their account is deleted when they disconnect (username freed).
📋 Channels guests can access
Pick which channels guests can see and post in. Pick none and the Guest button won't be very useful. DMs are never available to guests.
😎 Custom Emojis
Upload images for custom server emojis
🔄 Built-in emoji updates
Allow Haven to check Unicode.org for new emoji standards. This check is only performed at server boot, and only when the current standard file on disk was created over a month ago. If a new standard is available, Haven will automatically download the emoji pack and regenerate all your built-in emojis based on the new standard. This does not affect your custom emojis in any way.
When this setting is turned off, Haven will use the latest available standard on disk. If a standard was never downloaded before, Haven will default to Unicode standard 16.0 which is bundled with the server.
PS: This feature has nothing to do with emoji styling. That is entirely dependent on your OS, and rendering will vary from machine to machine. This feature only guarantees you'll have the latest available emojis built into your Haven server.
🖼️ Stickers
Upload sticker images grouped into packs
🔊 Custom Sounds
Upload audio files for custom notification sounds
📁 Uploads & Limits
Maximum file size users can upload in MB (default 25). No hard cap: limited by available disk space.
How many files someone can queue on one message by dropping, pasting or picking them (1 to 50, default 10). Each one still has to fit the size limit above.
Maximum characters per message, post, or DM (200-100000, default 2000)
Max soundboard upload size (256-10240 KB, default 1024 / 1 MB)
Max custom emoji upload size (64-1024 KB, default 256)
Max sticker upload size (256-10240 KB, default 1024 / 1 MB). Bump this up to allow larger GIF-style stickers.
Maximum answer choices per poll (2-25, default 10)
How long a login token stays valid before users must sign in again. "Never expire" keeps users logged in until they hit Logout or change their password. Applies to new logins only; existing tokens keep their original expiry until they expire or rotate.
🤖 Webhooks / Bots
Create and manage webhook bots that can post messages to channels.
No bots configured
🛶 Ferry (Discord bridge)
Relay messages between Haven channels and Discord channels. Needs your own Discord bot, which takes about two minutes to create.
Not configured
📦 Discord Import
Import channels and messages from a Discord export file
💾 Server Backup
Download a backup of this server, or restore from a previous backup. Useful when you don't have shell access to the host machine.
Download Backup
Pick what to include. Messages and uploaded files can make the backup very large; channels / users / settings alone are usually small. User passwords, 2FA secrets, and emails are never exported.
Restore From Backup
Uploading...
A backup can be restored here when it was made with Messages ticked: that is the whole database. Uploaded files is optional; when the backup has none, the uploads folder is left as it is. A channels/users/settings-only backup has no database to restore from.
Warning: Restoring overwrites the current server data. The server will restart automatically, so your hosting setup must support auto-restart (Docker, systemd, the Haven installer service, etc.). The previous database is preserved as haven.db.pre-restore for one cycle.
Automatic Backups
Include in scheduled backups:
Auto-backups are saved to the server's data directory and pruned to your retention count. They use the same format as manual downloads, so you can restore any of them above.
No auto-backups yet.
🗑️ Auto-Cleanup
Delete messages older than N days (0 = off)
Trim oldest messages when DB exceeds N MB (0 = off)
When the uploads folder passes N MB, remove the oldest messages with files until it is back under (0 = off). Avatars, emoji and stickers count toward it but are never removed.
Attachments from deleted messages and channels are held this long, then removed for good. This runs whether or not auto-cleanup is enabled (default 7).
On: when a self-destructing message expires, its files are held as long as other deleted files (set above), so a moderator can still recover something abusive. Off: they are deleted for good. Keep it on for community servers; small servers where everyone trusts each other may prefer off.
🔧 Mod Mode
Rearrange sidebar sections and snap server/sidebar/status panels
📜 Audit Log
Track admin and moderator actions: channel changes, role updates, bans, kicks, server settings, and more.
Changes only apply when you click Save. Close (✕) to cancel.
🎙️ VoiceON
💬 TextON
🖥️ StreamsON
🎵 MusicON
🔊 SoundboardON
🖼️ MediaON
🔒 Read OnlyOFF
🗂️ ForumOFF
🏷️ Forum tags…
🔞 NSFWOFF
🔒 PrivateOFF
🎟️ Required rolesOFF
💾 Save as template→
🐢 Slow ModeOFF
🛡️ Cleanup GuardOFF
👋 Welcome MessagesOFF
👥 Voice Limit∞
🎚️ Voice BitrateAuto
⏱️ Self DestructOFF
📢 AnnouncementOFF
👑 Default RoleNone
💤 AFK SubOFF
⏱️ AFK TimeoutOFF
Game
F
forumtester@forumtester
No bio yet. Click Edit Profile to add one
Roles
Admin
Member Since
Sep 15, 2026
F
forumtesterAdminToday at 06:42 PM
🎤 Voice message(0:02)
06:43 PM
🎤 Voice message(0:03)
06:44 PM
🎤 Voice message(0:03)
N
novaToday at 06:46 PM
Hey! Is this the place where we test themes?
F
forumtesterAdminToday at 06:46 PM
Welcome to Haven
This is a sample conversation for theme authors. It has underline, strikethrough, highlight, inline code, a spoiler and coloured text , plus a link to https://example.com.
06:46 PM
A quoted line and a second one
a bullet
another bullet
first
second
N
novaToday at 06:46 PM
js
const haven = "themeable";
console.log(haven);
06:46 PM
Column A
Column B
| one | two |
F
forumtesterAdminToday at 06:46 PM
N
novaToday at 06:46 PM
Nice picture 😄 and a mention for @forumtester so the highlight shows.
F
novaNice picture 😄 and a mention for @forumtester so the highlight shows.
forumtesterAdminToday at 06:46 PM
Replying to the one above, so the reply banner shows.
06:46 PM
📊 Poll: Which theme do you use?
Which theme do you use?
NEW MESSAGES
N
novaToday at 06:46 PM
And a plain closing line from the other person.
F
🔞
Spicy picture
Picture preview text
forumtesterReply to this topic49m ago
F
⬡
Normal topic
Plain topic body text
forumtesterReply to this topic49m ago
F
⬡
🔞
Spicy topic
https://picsum.photos/seed/haven/400/300 A preview line that should be blurred until clicked