A floating island of caves, cavemen and arcade games — and one small file that puts you on it.
Ooga Booga Land is a free 3D island you fly around in your browser. Its cliff caves hold real projects, its arcade holds games, and the weather is the live Bitcoin mempool. It is built in plain JavaScript by the OogaBoogaX community, with no frameworks and no dependencies.
Every voxel caveman standing on that island is a real contributor. Feed one a banana and it perks up. Your own caveman can be up there too — and you do not need to be a programmer to make one. If you can copy and paste, describe a character, and click a few buttons on GitHub, you can do this.
Third-party site & repository — open in a new window
A character is a tiny data file — a name, a look, and a few things to say. That makes it a perfect job for an AI assistant.
ChatGPT, Claude, Gemini, Grok, a coding agent — any of them can do this. There is nothing special to install and no account to connect. The only thing that matters is that the AI follows the file format exactly.
Open the characters folder in the repository and open any file. Copy the whole thing. This is your template — it has the real, exact key names, so you are not guessing at what the game accepts.
Browse src/characters →Paste the prompt below into your AI, replace the placeholders with your GitHub username, and paste the template file at the end. Then describe your character in your own words: hair, skin tone, face, build, hat, and the lines they should say.
Your AI's answer should be a single file. Save it as src/characters/your-github-username.js — lowercase, matching your GitHub username exactly. If the AI wrapped it in markdown code fences, strip those lines out.
You can do this entirely on github.com — no command line. The crash course below walks through every click, including the one thing people get wrong: the pull request has to target the rock branch.
You are writing ONE character file for Ooga Booga Land, a plain-JavaScript WebGL2 game. I will paste a real character file at the end: treat it as the exact template. Output ONLY the finished file contents. No explanation, no markdown code fences. Hard rules: - Keep the same wrapper and the same key names as my template. Change only the values. - Plain data only: no functions, loops, callbacks, getters, spread operators, template strings, imports, DOM access, network calls or console output. - Keep "handle" and "github" exactly as I give them below. - "voice.poke" is one short, non-empty line. - "voice.idle" is a list of 1 to 24 short lines of plain text, 160 characters each at most. - Do not invent new keys. If you are unsure whether a look option exists, use one that already appears in my template. Values to use: handle: "[your-github-username]" github: "[your-github-username]" display: "[optional prettier name]" My caveman: [describe hair, skin tone, face, build, hat, and the catchphrase or lines you want them to say] --- MY TEMPLATE --- [paste a real file from src/characters/ here] --- END TEMPLATE ---
Fill in the two bracketed names before sending. Anything still in square brackets is a placeholder for you to replace.
It looks like code, but it is only a settings block. Here is every part in plain English.
handleYour caveman's name in the game. Use your GitHub username, lowercase.
githubYour GitHub username again. This is what proves the character belongs to you — the ownership check compares it to whoever opens the pull request.
displayOptional prettier name shown to players. Purely cosmetic; it does not change who owns the character.
joined / lastCommitTimestamps in seconds. Copy the format from your template — the numbers themselves do not matter much.
lookHow your caveman looks: skin colour, bald, face and build, height, hat position, eye glow. Copy the exact key names from the file you started from. Made-up keys are rejected.
voice.pokeThe one line they say when someone pokes them. Required, short, plain text.
voice.idleBetween one and twenty-four short lines they say while standing around. Plain text, 160 characters max each.
Only plain data goes in automatically. No functions, loops, imports or clever tricks. If you add hand-written drawing code instead — a custom dress hook, for example — a maintainer has to read and approve it by hand, which takes longer.
GitHub looks intimidating and is mostly three ideas: copy, save, ask. Here is the whole process, in order.
Free, takes a minute. Your username becomes your caveman's name, so pick one you are happy to see on the island permanently.
"Fork" just means "give me my own copy to work in." Press Fork on the repository page. You now have a version nobody else can change.
In your fork, open src/characters, click "Add file", then "Create new file", and name it after your GitHub username with a .js ending. Paste in what your AI wrote. No installs, no terminal, nothing to download.
"Commit" is just "save with a note." Something like add my character is fine. This saves the file into your fork.
A pull request means "please consider my change." Press "Contribute", then "Open pull request" — and check that it targets rock, not main. rock is this project's main branch.
Automated checks run on your pull request. A clean, data-only character that belongs to you normally gets bundled and merged on its own shortly after midnight UTC. If you included custom code, a maintainer reads it first.
Repository (repo)
The folder holding all the project's files and their history.
Fork
Your own copy of somebody else's repository.
Branch
A parallel version of the project. This one's main branch is called rock.
Commit
A saved change with a short message attached.
Pull request (PR)
A request for your change to be merged into the real project.
Merge
Accepting those changes into the real thing.
Maintainer
A person who reviews changes and approves them.
Checks
Automatic scripts that test whether your change is valid before anyone looks at it.
You do not need to install anything, use git, or touch a terminal. Everything above happens on github.com in a browser. Once you have merged your first one, the next one takes about two minutes.
A merged character shows up on the island after the next rebuild
Six rules that save you a rejected pull request.
The character has to be yours
The ownership check matches the file's github value to the account opening the pull request. You cannot claim someone else's caveman, and you cannot edit or delete another person's.
Never edit oogaboogaland.html
That big single file is generated automatically after merges and published by their build. Hand edits get overwritten or rejected.
Plain JavaScript only
No frameworks, packages, TypeScript, bundlers or external scripts. The project is deliberately dependency-free.
One small change per pull request
Add your character file and stop there. Do not reformat or rename anything else — unrelated edits make a change much harder to review.
Assume everything is public forever
Your file is public and stays in the project's history. Do not put real names, emails, addresses or anything private in it.
It is a shared space
The island is played by everyone who visits. Keep your character and its voice lines friendly.
All links open an external site