Repository navigation
Releases: AeteX/buddyxp
Release list
v0.1.3 — Sounds, Nudge, and Typing Indicator
BuddyChat XP now sounds like a real 2007 IM client, because it is one —
down to the animated pencil bobbing next to "Buddy is typing" and the
MSN-style nudge that shakes the whole window.
This release adds a full IM-era sound kit, all synthesized on the fly
with the Web Audio API. No audio files, no external dependencies, no
licensing questions. Every note, every whoosh, every buzz is generated
from oscillators and white noise at the moment it plays.
Highlights
-
Six synthesized sounds. Login chime (MSN-style rising arpeggio),
door open whoosh when starting a chat, door close thud when clearing
one, subtle send blip, AIM-style ding when the first token arrives,
and a low-frequency buzz for the nudge. -
The Nudge button. Does what MSN nudges did in 2004 — shakes the
whole window and plays a buzzing rumble. CSS keyframe animation in
modern browsers, JavaScript-driven shake loop in IE8/IE9 so the
effect works on real XP machines. -
AIM-style typing indicator. While waiting for the first token,
the bot message slot shows an animated pencil bobbing back and forth
next to "Buddy is typing" and three pulsing dots. As soon as the
first token arrives, the indicator is replaced by the streamed reply
and the ding plays. -
Sound On / Sound Off toggle in the toolbar. Setting persists
across reloads inlocalStorageunderbuddyChatXp.sound. -
Autoplay-aware. Browsers block audio until the first user
interaction, so the login chime is queued and fires on your first
click. Everything after that plays immediately.
What's in the toolbar now
The toolbar has grown to six buttons: New Chat, Nudge, Test
Connection, About, Help, and the new Sound toggle.
IE8 and IE9
IE8/IE9 don't have the Web Audio API, so sounds are silently skipped.
The nudge visual still works via the JavaScript fallback loop, the
typing indicator renders as static text with dots, and the sound
toggle still functions so the label stays consistent. The IE pipeline
remains fully usable, just quieter.
Also in this release
- New "Sounds & Effects" section on the landing page with an event
table, nudge notes, typing indicator description, autoplay
explanation, and IE8 caveats - Landing page's model install section expanded with a Bonsai size
comparison table — 27B, 8B, and 4B side by side with RAM
requirements and hardware guidance - Added an alternative-model example (
unsloth/Qwen3-4B-GGUF:Q4_0)
and a second option (bartowski/Llama-3.2-3B-Instruct-GGUF:Q4_K_M)
for users who want something other than Bonsai - Version bumped to 0.1.3 in the About dialog, status bar, sidebar
product mark, and README
Breaking changes
None. Every existing setting, conversation, and memory fact loads
without modification. The sound preference is a new key; sound is on
by default.
Requirements
- llama.cpp running as an OpenAI-compatible server, or an API key for
a hosted provider - Python 3, Python 2, or Node.js on the machine serving the files
- Any of: modern browser, MyPal, Firefox 3.5+, Chrome 4+ (IE8/IE9 for
Local only, no sound)
Install
Windows (PowerShell):
irm https://aetex.is-a.dev/buddyxp/install.ps1 | iexmacOS / Linux:
curl -fsSL https://aetex.is-a.dev/buddyxp/install.sh | shThen run buddyxp.
If you're upgrading from v0.1.2, just re-run the installer. Your
settings, conversations, and memory survive. Click anywhere on the
page after it loads and you'll hear the login chime.
See the README for the full
sound documentation, the nudge notes, and the IE8 caveats.
Sound event table
| Event | Sound | Style |
|---|---|---|
| First page load | Login chime | MSN-style three-note rising arpeggio (E5 → G5 → C6) |
| New chat / load chat | Door open | Rising whoosh with a soft click |
| Clear chat / delete chat | Door close | Falling whoosh with a low thud |
| Send a message | Send blip | Subtle rising two-tone |
| First token arrives | AIM ding | Two-tone up (D5 → A5 → D6) with overtones |
| Nudge button | Nudge buzz | Low-frequency square-wave rumble with vibrato |
License
MIT © 2025 AeteX Interactive
v0.1.2 — Hosted API Providers
BuddyChat XP can now talk to hosted models, not just your local
llama.cpp server.
This release adds a Provider dropdown to the Connection pane. Pick a
hosted API, paste your key, and chat — the same retro XP interface, the
same memory and history features, now backed by OpenAI, Groq,
OpenRouter, or any OpenAI-compatible endpoint you point it at.
Highlights
-
Eight built-in providers. Local (llama.cpp), OpenAI, OpenRouter,
Groq, Together, DeepSeek, Mistral, and Custom. The Custom option
takes any OpenAI-compatible URL — self-hosted vLLM, LocalAI, a
company gateway, a personal proxy. -
Per-provider configuration. Your choice of provider, API key, and
model name are all stored separately. Switching between Local and
OpenRouter keeps both configurations intact. Switch back and
everything restores. -
Smart request headers. Local requests keep using
Content-Type: text/plainto avoid a CORS preflight. Online requests
switch toapplication/jsonwith anAuthorization: Bearerheader.
OpenRouter also getsHTTP-RefererandX-Titleso the app shows
up in their rankings. -
Better error messages. The Test button now distinguishes between
a bad API key (HTTP 401/403) and an unreachable endpoint, and tells
you which provider it was checking.
The provider table
| Provider | Endpoint | Default model |
|---|---|---|
| Local (llama.cpp) | http://localhost:8080/v1 |
(whatever llama serve loads) |
| OpenAI | https://api.openai.com/v1 |
gpt-4o-mini |
| OpenRouter | https://openrouter.ai/api/v1 |
openai/gpt-4o-mini |
| Groq | https://api.groq.com/openai/v1 |
llama-3.3-70b-versatile |
| Together | https://api.together.xyz/v1 |
meta-llama/Llama-3.3-70B-Instruct-Turbo |
| DeepSeek | https://api.deepseek.com/v1 |
deepseek-chat |
| Mistral | https://api.mistral.ai/v1 |
mistral-small-latest |
| Custom | (any URL) | (any model name) |
Security note about API keys
API keys are stored in your browser's localStorage on the same origin
as the page. They are not encrypted. Anyone with access to your
browser profile or dev tools can read them.
This is fine on a personal machine. It is not fine on a shared computer,
a public kiosk, or a machine you don't fully control. The UI shows a red
warning under the API Key field when an online provider is active.
To remove a saved key, clear the field and blur it.
Internet Explorer 8 and 9
Online providers are not available in ie.html. IE8/IE9's
XDomainRequest cannot send Authorization headers, so authenticated
cross-origin requests are impossible without a proxy. The Provider
dropdown in IE mode shows only Local (llama.cpp).
The IE pipeline continues to work perfectly with a local model. If you
want the retro XP experience with hosted models, use the modern page.
Also in this release
- Migrated settings shape: the old v1
serverfield is auto-migrated
to a newlocalServerkey on first load. Existing users lose
nothing. XP.getServer()renamed toXP.getEndpoint(). If you were calling
the old function from outside the app, switch to the new one.- Corrected llama.cpp repository links from
ggerganov/llama.cppto
ggml-org/llama.cppthroughout the README and landing page. - New "Online Models" section on the landing page, new "Online API
providers" section in the README.
Breaking changes
XP.getServer() has been removed. Use XP.getEndpoint() instead.
The localStorage settings shape has changed to store per-provider
keys and model names. The v1 shape is auto-migrated on first load, so
existing users do not need to do anything.
Requirements
- llama.cpp running as an OpenAI-compatible server (for Local), or an
API key for whichever hosted provider you want to use - Python 3, Python 2, or Node.js on the machine serving the files
- Any of: modern browser, MyPal, Firefox 3.5+, Chrome 4+ (IE8/IE9 for
Local only)
Install
Windows (PowerShell):
irm https://aetex.is-a.dev/buddyxp/install.ps1 | iexmacOS / Linux:
curl -fsSL https://aetex.is-a.dev/buddyxp/install.sh | shThen run buddyxp.
If you're upgrading from v0.1.1, just re-run the installer. Your
settings, conversations, and memory survive.
See the README for the full
provider documentation, memory and history docs, and Windows XP
instructions.
License
MIT © 2025 AeteX Interactive
v0.1.1 — Memory and History
BuddyChat XP now remembers your conversations, and it remembers you.
This release adds automatic conversation persistence and a cross-chat
memory system. Every chat is saved and listed in a new History pane,
and Buddy can extract durable facts about you from any conversation and
carry them forward into future ones.
Highlights
-
History pane. Every conversation is saved to
localStorageand
listed in the sidebar. Click any entry to reload it with its full
message history. The most recent 100 conversations are kept. -
Buddy's Memory. A list of facts the model has learned about you
across conversations. On every request, those facts get prepended to
the system prompt — the model doesn't actually remember anything
itself, it's context injection. But it produces the effect of an
assistant that knows you, which is what most people want. -
"Remember this" button. Sends the current transcript back to the
model with a prompt asking it to extract durable facts. They appear
in the Memory pane within a second or two. Facts are user-editable —
click × to forget any of them. -
Memory toggle. Uncheck "Remember across chats" to stop sending
facts to the model without clearing your stored list. Useful when
switching to a provider or model you don't want personal context
going to.
Also in this release
- Toolbar row with New Chat, Test Connection, About, and Help
buttons and colored dot indicators. - Three-cell status bar showing status message, live model name,
and version. - Working menu handlers. File, Edit, View, and Help now respond
with period-correct messages instead of doing nothing. - XP-styled scrollbars in WebKit and Blink browsers.
- Title bar icon using the project favicon.
- Shorter default persona. The Buddy system prompt was trimmed
after testing showed smaller quantized models handled the shorter
version better.
Breaking changes
None. Settings from v0.1.0 load automatically and the new fields get
sensible defaults.
Requirements
- llama.cpp running as an OpenAI-compatible server, or any
OpenAI-compatible endpoint - Python 3, Python 2, or Node.js on the machine serving the files
- Any of: modern browser, MyPal, Firefox 3.5+, Chrome 4+, IE8, or IE9
Install
Windows (PowerShell):
irm https://aetex.is-a.dev/buddyxp/install.ps1 | iexmacOS / Linux:
curl -fsSL https://aetex.is-a.dev/buddyxp/install.sh | shThen run buddyxp.
See the README for Windows XP,
manual install, and full documentation.
What's next
v0.1.2 will add hosted API provider support so you can point BuddyChat XP
at OpenAI, OpenRouter, Groq, and other OpenAI-compatible endpoints
alongside your local llama.cpp server.
License
MIT © 2025 AeteX Interactive
v0.1.0 - First public release
The first public release of BuddyChat XP — a Windows XP-era chat front
end for llama.cpp, made by AeteX Interactive.
BuddyChat XP looks and behaves like a 2007 Windows XP application: Luna
blue title bars, Tahoma 11px text, a sunken status bar, and a chat log
that streams replies token by token. Behind the retro exterior it runs
three separate browser pipelines so the same page works from IE8 all the
way up to current Chrome, Firefox, and Safari.
Highlights
-
Three browser pipelines.
index.htmlfor modern browsers
(fetch + ReadableStream),legacy.htmlfor Firefox 3.5+ / Chrome 4+ /
MyPal / IE10-11 (XMLHttpRequest withtext/plainto avoid CORS
preflight),ie.htmlfor IE8 and IE9 (XDomainRequest). Each page
auto-redirects to whichever pipeline the browser can run. -
One-line install for Windows, macOS, and Linux. Downloads a
tagged release, extracts to a per-user location, and creates a
buddyxpcommand that wraps the platform launcher. No admin rights,
no build step. -
Windows XP SP3 support via
launch-xp.bat, which uses only
commands that ship with XP'scmd.exe— no PowerShell, nowhere,
notimeout. -
Emoji filter. A client-side filter runs on every streamed chunk
and converts modern emoji to their ASCII equivalents — 😊 →:),
😂 →:D, ❤️ →<3, 👍 →(y), 🎉 →\o/— and strips anything
pictographic that isn't in the map. The model cannot sneak modern
emoji past the 2007 persona. -
Default persona is Buddy — a friendly 2007-era IM buddy who talks
like it's still AIM and MSN Messenger, excited about the iPhone,
Windows Vista, YouTube, MySpace, and mix CDs.
Quick start
Windows (PowerShell 5.0+):
# 1. Install llama.cpp
irm https://llama.app/install.ps1 | iex
# 2. Download and run Bonsai-8B (~1.15 GB, 1-bit quantized)
llama serve -hf prism-ml/Bonsai-8B-gguf:Q1_0
# 3. Install BuddyChat XP
irm https://aetex.is-a.dev/buddyxp/install.ps1 | iex
# 4. Run it (in a new terminal window)
buddyxpmacOS / Linux:
# 1. Install llama.cpp
curl -LsSf https://llama.app/install.sh | sh
# 2. Download and run Bonsai-8B (~1.15 GB, 1-bit quantized)
llama serve -hf prism-ml/Bonsai-8B-gguf:Q1_0
# 3. Install BuddyChat XP
curl -fsSL https://aetex.is-a.dev/buddyxp/install.sh | sh
# 4. Run it (in a new terminal window)
buddyxpSee the README for Windows XP
instructions, manual install, and using a different model server.
What's in the box
| File | Purpose |
|---|---|
index.html |
Modern pipeline — fetch + ReadableStream + AbortController |
legacy.html |
XHR pipeline — Firefox 3.5+, Chrome 4+, MyPal, IE10/11 |
ie.html |
IE8/IE9 pipeline — XDomainRequest, no streaming |
xp.css |
Shared XP Luna theme |
xp-common.js |
Shared helpers, emoji filter, settings, About dialog |
install.sh / install.ps1 |
One-line installers |
launch.sh / launch.ps1 / launch-xp.bat |
Platform launchers |
launch-python.py |
Static server with explicit MIME types (XP fix) |
launch-node.js |
Node fallback static server |
Requirements
- Model server: llama.cpp
running as an OpenAI-compatible server on port 8080. Any server that
answers/v1/chat/completionsworks — Ollama, LM Studio, and
text-generation-webui are all fine. - Static server: Python 3, Python 2, or Node.js on the machine
serving the page. The launcher picks whichever is available. - Browser: Any of modern Chrome/Firefox/Safari/Edge, MyPal 29.x,
Firefox 3.5+, Chrome 4+, Safari 4+, IE8, or IE9. The redirect chain
routes each one to the right pipeline.
Known limitations
- IE8 and IE9 don't stream. The
ie.htmlpipeline waits for the
full reply and displays it all at once. That's a limitation of
XDomainRequest, not something we can work around without a proxy. - Python 2.7's SimpleHTTPServer binds to
0.0.0.0. While the
launcher is running, other machines on the LAN can reach the page.
launch-python.pyfixes this by binding to127.0.0.1by default,
and the launchers prefer it when present. - Bonsai-8B's Q1_0 quantization may require a recent llama.cpp
build. Ifllama servefails with an unsupported quantization error,
update to the latestllama.appinstaller or try a different model.
License
MIT © 2025 AeteX Interactive. See LICENSE.
Links
- Landing page: aetex.is-a.dev/buddyxp
- Repository: github.com/Aetex/buddyxp
- Report a bug: github.com/Aetex/buddyxp/issues
- AeteX Interactive: aetex.is-a.dev