Contribute to Oreo. Bring snacks.
OreoOS is open: code, hardware, prompts, assets, the lot. Pick a lane — or invent one. We merge fast and credit loudly.
Write an app
manifest.json + a thin main.py shim + a src/ folder for modular code. apps/snake/ is the reference layout — see the App structure guide below for the full convention.
OpenFix a bug
Open issues are labelled by area (os / store / ota / wifi / bt). 'good first issue' tags exist; pair them with a serial log.
OpenWrite a hack
Drop Markdown into docs/hacks/ — we feature it on /hacks the next deploy.
OpenImprove the OS
Performance, polish, new services. Big changes — open a draft PR early so we can review the shape.
OpenApp structure
Every app on the badge lives in apps/<name>/. The launcher loads main.py and reads an App class off it — but main.py is now a thin re-export shim. Real code lives under src/ so logic, rendering, and persistence each get their own file. Easier to read, easier to test on a laptop.
apps/snake/
├── manifest.json name, author, icon, version
├── main.py thin shim: from .src.app import App
├── __init__.py (empty, makes it a package)
└── src/
├── __init__.py
├── app.py App class — lifecycle hooks only
├── game.py pure game logic + constants
├── render.py drawing functions
└── highscore.py persistent best-score I/OSee the full app guide for lifecycle hooks, manifest fields, drawing APIs, and a walkthrough of the snake reference app.
The full contributing guide
view raw →Mirrored verbatim from the repo's CONTRIBUTING.md. Edits to the source on GitHub re-deploy here automatically.
