.github
Content-Gamedata
css-utils
custom-themes
docs
localization
public
scripts
src
.browserslistrc
463 o
.editorconfig
274 o
.gitattributes
102 o
.gitignore
1 Ko
.nvmrc
3 o
.yarnrc.yml
2 Ko
biome.json
692 o
CHANGELOG.md
12.4 Ko
CLAUDE.md
34.7 Ko
current-octane-cards.html
22.3 Ko
eslint.config.mjs
1.3 Ko
index.html
1.1 Ko
install.bat
39 o
install.mjs
33.1 Ko
install.sh
113 o
LICENSE
34.3 Ko
package.json
2.8 Ko
postcss.config.js
130 o
README.md
9.9 Ko
tailwind.config.js
4.2 Ko
tsconfig.json
1.5 Ko
vite.config.mjs
15.1 Ko
vitest.config.mts
1.5 Ko
yarn.lock
149.7 Ko
README

Octane
A modern browser client for Habbo retro hotels, built with React 19, TypeScript and PixiJS 8.
Octane · Octane Renderer · Polaris Emulator · Confurter · Discord
Octane is the user interface of the hotel: navigator, catalog, inventory, chat, Wired Creator Tools and everything else you click on. The rooms, avatars and furniture are drawn by its companion, the Octane Renderer. It talks to the Polaris Emulator over WebSockets.
Octane started as a fork of Nitro React and Nitro Renderer. It is developed independently and has no ties to Billsonnn / Nitro.
✨ Highlights
.habasset bundles as well as.nitro: furniture, clothes and pets, including Habbo's own.habfiles as downloadedcore/,custom/andseasonal/tiers📋 Requirements
corepack enableonce; the version is pinned inpackage.json)You also need a running Polaris Emulator and your game assets (
.nitro/.habbundles and gamedata), which you can make with the Confurter.🚀 Quick install (recommended)
Clone Octane and run the installer from its root:
Both wrappers run
node install.mjs, which you can also call directly. The installer:../Octane-Renderer) when it is not there yetpublic/configuration/*.exampleto*.json(existing files are kept).octane-build.json/api(secure mode), sets the two flags inclient-mode.json, and either patches the emulator'sconfig.ini(backup first) or prints the lines to paste, with a freshly generatednitro.secure.master_keyRe-running it is safe: existing config files are kept and only the URL keys you pass are patched. A
nitro.secure.master_keythat is already set inconfig.iniis never replaced.Every step can be driven from flags:
--non-interactive/--skip-prompts: keep the example defaults unless a URL flag is passed--json-mode=<jsonc|legacy|auto>: pick the parser without the prompt--secure=<on|off>,--secure-api=<on|off>: secure mode without the prompt; without--securea non-interactive run leaves it as it is--emulator-config=<path to config.ini>: patch the emulator config instead of printing the values--skip-build,--skip-clone,--skip-link: skip those steps on a re-run--help: every flag, including one per URL key🛠️ Manual install
Octane finds the renderer as a sibling folder, so clone both repositories into the same parent folder:
Then copy the configuration examples (see below), set your URLs and build with
yarn build.⚙️ Configuration
All runtime configuration lives in
public/configuration/. Copy each.exampleyou need to its real name:renderer-config.jsonsocket.url,api.url,asset.url,image.library.url,hof.furni.urland the asset URLs belowui-config.jsoncamera.url,thumbnails.url,url.prefix,habbopages.urlclient-mode.jsonapiBaseUrl,plainConfigBaseUrl,plainGamedataBaseUrlUITexts_<lang>.jsonc📦 Asset bundles:
.nitroand.habHabbo's own client now loads every asset as a
.habbundle. Octane loads both.haband.nitro. Which one is used is decided by the extension in each asset URL:.habfurniture, clothes and pets work as downloadedlandscapebefore switching (the Confurter's Nitro … to HAB tools do that)landscapebundle: Habbo'slandscape.habis only the catalogue item.habjust like for.nitro🧾 JSON or JSONC
Octane can read the configuration and gamedata files in two ways:
jsonc(recommended)legacyautoThe first
yarn startoryarn buildasks which mode to use and stores it in.octane-build.json(git-ignored, so every deployment keeps its own choice). Change it later withyarn configure, or for one build only:The choice is compiled in as
__OCTANE_JSON_MODE__and used for every config and gamedata file the renderer loads.🗂️ Split gamedata
Instead of one large file (FurnitureData.json can be tens of MB), gamedata can be a folder of small files in three tiers:
Tiers load in order and later files override earlier ones that share an
id,classnameorname. Point the config at the folder; the trailing slash switches on split mode:Create the
core/tier from an existing file with the bundled splitter:It detects the gamedata type (FurnitureData, FigureData, FigureMap, EffectMap, ProductData, HabboAvatarActions, ExternalTexts / UITexts) and picks a sensible split. Run it with
--helpfor all options. You can migrate one gamedata file at a time; single files keep working.💻 Development
yarn startdist/)yarn buildyarn build:prodyarn previewyarn typecheckyarn lint(Biome)yarn lint:hooksyarn testDuring development, game assets are served from a sibling
Nitro-Files/folder (/nitro-assetsand/swf), so you do not need to copy them intopublic/.🌐 Production
Run
yarn buildand upload the contents ofdist/to your web server, or point your CMS at it. Check your CMS documentation for how it embeds the client.🤝 Related projects
Questions, bugs or ideas? Join us on Discord.
📄 License
Octane is licensed under the GNU General Public License v3.0.