Convert content to Steam BBCode with live preview, linting, and translation.
Built for game marketing, community, and dev teams to streamline patch notes and announcements. Import from Confluence, Markdown, or plain text -- edit, preview, copy, and post to Steam.
- Download the latest
.dmgfrom Releases or Slack - Double-click the
.dmg - Drag SteamBBEditor to Applications
- Double-click to run
First launch: If you see "can't be opened because Apple cannot check it for malicious software":
- Right-click the app > Open > Click Open in the dialog
The app opens with an interactive welcome document that shows:
- How the two-panel workflow works
- Formatting examples (bold, lists, links, code)
- Steam BBCode quirks to watch out for
- A sample error you can click to see the "jump to error" feature
The welcome doc resets on each launch. Open a file or paste your content to get started!
+-------------------+ +-----------------------------------+
| EDITOR | | OUTPUT |
| | | |
| - Open .md file |--->| Preview | BBCode | Translation |
| - Paste content | | |
| - Drag & drop | | - Steam-accurate preview |
| - Auto-detect | | - BBCode source view |
| format (MD / | | - Translation (pt-BR, es-LATAM) |
| Confluence / | | - Copy to clipboard |
| plain text) | | - Character count + lint status |
| - Syntax colored | | |
| - Linting | | |
+-------------------+ +-----------------------------------+
The app uses a "Save As" workflow to protect your source files:
- Open loads a file but doesn't lock it
- Save As always prompts for a new filename/location
- Original files are never overwritten
- Open your patch notes
.mdfile (or paste from Confluence) - Review the Steam preview in the right panel
- Make any edits in the editor
- Copy the BBCode and paste into Steam
- Optionally Save As to keep the source for next time
- Open - Load
.mdfiles from disk - Save As - Save to new
.mdfile - Format detection - Auto-detects Markdown, Confluence XHTML, or plain text
- Linting - Catches formatting errors (click to jump and select)
- Syntax highlighting - One Dark Pro theme
- Image drag-and-drop - Drop images to insert placeholders
- Blacklist detection - Wavy underlines on configurable blocked terms
- Auto-save - Draft persistence to browser storage
Tabbed output with three views:
- Preview - Live Steam-accurate rendered preview
- BBCode - Raw BBCode source for inspection
- Translation - Claude API translation (pt-BR, es-LATAM) with DNT glossary
All tabs show character count and lint status. Copy button copies the active tab content.
- Image placeholders -
{placeholder:filename}resolved via Images panel with Steam URLs - Tag reference - Floating popover with Markdown-to-BBCode mapping
- Settings panel - Blacklist term management, DNT glossary
- Recent files - Quick access to last opened files (desktop only)
- Discord splitter - Auto-split into 2000-char chunks
- Context-aware linting - Validates against Steam context rules (Announcements, Guides, Forums, Reviews)
| Shortcut | Action |
|---|---|
Cmd+O |
Open file |
Cmd+S |
Save As |
Cmd+Shift+C |
Copy BBCode to clipboard |
Tab |
Insert 2 spaces |
Esc |
Blur editor |
Team members don't need this -- just use the pre-built .dmg.
# Xcode Command Line Tools
xcode-select --install
# Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# Node.js (if not installed)
brew install node# Install dependencies
npm install
# Generate app icon (first time only)
npm run tauri icon path/to/your-logo.png
# Build the app
npm run tauri:buildOutput:
src-tauri/target/release/bundle/dmg/SteamBBEditor_1.0.0_aarch64.dmg
npm run tauri:dev # Desktop app with hot reload
npm run dev # Web-only (no Tauri)npm run test:run # Run all 551 unit tests once
npm run test # Watch mode
npx playwright test # Run 110 E2E testsnpm run releaseThis interactive script will:
- Show current version and prompt for bump type (patch/minor/major)
- Update
package.json,Cargo.toml, andtauri.conf.json - Commit, tag, and push to GitHub
- GitHub Actions builds and publishes releases automatically
steam-bbcode/
├── src/ # React frontend
│ ├── components/ # UI panels (Editor, Output, Preview, Settings, Images)
│ ├── lib/ # Conversion, linting, translation, format detection
│ ├── hooks/ # React hooks (file service, auto-save, image store)
│ └── styles/ # CSS (app theme + Steam preview styling)
├── src-tauri/ # Rust/Tauri backend
│ ├── tauri.conf.json # App config
│ ├── Cargo.toml # Rust dependencies
│ └── src/main.rs # Rust entry point
├── e2e/ # Playwright E2E tests
├── scripts/ # Build & release scripts
├── CLAUDE.md # AI assistant context
├── BUILD.md # Detailed build instructions
└── ROADMAP.md # Feature tracking
| Tag | Announcements | Guides | Forums | Reviews |
|---|---|---|---|---|
[h1] [h2] [h3] |
Yes | Yes | Yes | Yes |
[b] [i] [u] [strike] |
Yes | Yes | Yes | Yes |
[list] [olist] [*] |
Yes | Yes | Yes | Yes |
[url] |
Yes | Yes | Yes | Yes |
[img] |
Yes | Limited | Yes | No |
[code] |
Yes | Yes | Yes | Yes |
[quote] |
Yes | Yes | Yes | Yes |
[spoiler] |
Yes | Yes | Yes | No |
[table] |
Yes | Yes | Yes | No |
[hr] |
Yes | Yes | Yes | Yes |
Limited: Guides require uploaded images with [previewimg] tags.
| Context | Limit |
|---|---|
| Announcements | 8,000 |
| Guides (per section) | 8,000 |
| Forums | 4,000 |
| Reviews | 8,000 |
| Discord | 2,000 |
MIT. See LICENSE.