Ajeeb
Patterns for playful systems in the browser and beyond
Ajeeb is a collection of packages and ideas that I have been using to great effect for a few years while making games, installations, hardware, and other playful systems. It is the set of tools I have always wanted for my practice and I hope it is similarly useful in yours.
Getting Started
$ npm create ajeeb@latest
✔ Name … new-ajeeb-project
✔ Features › Coroutines, Input, 3D Graphics
Scaffolding project in new-ajeeb-project...
added 15 packages, and audited 16 packages in 8s
3 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
Done! Now run
cd new-ajeeb-project
npm run dev
to launch dev server. have fun and always take care of each other.
https://ajeeb.games/
Packages
Ajeeb is developed as a monorepo. It is made up of separate modules that you can mix and match according to your needs.
@ajeeb/coroutines
— ES6-generator based coroutines for terse and arbitrarily powerful state machines@ajeeb/input
— Simple pipeline-based input system and defaults for common input devicescreate-ajeeb
— the module that enablesnpm create ajeeb@latest
Ideas
In addition to the code, Ajeeb provides is a way of thinking about architecting playful systems. These ideas are captured in the in-progress Book of Ajeeb.
Status
Ajeeb has been used in web games, museum installations, art pieces, and public performances. The core semantics and implementation are sound, stable, tested, and do not change with any frequency.
That said, this is still an experiment that I am building primarily for myself. Treat it as battle tested but pre-1.0 software.
Who
This is project is a labor of love by Ramsey Nasser. Get in touch over Mastodon if you have questions or feedback.
Roadmap
Clean up and publish repository- Extract support modules for common libraries from projects
@ajeeb/three
— Support for THREE.js projects, including coroutine-based asset loading@ajeeb/three/gizmos
— Simple drawing API inspired by Unity's Gizmos for prototyping and debugging
@ajeeb/pixi
— Support for Pixi.js projects, including coroutine-based asset loading@ajeeb/pixi/proto
— Reactive prototype graphics
@ajeeb/tone
— Support for Tone.js projects, including coroutine-based asset loading@ajeeb/howler
— Support for Howler.js projects, including coroutine-based asset loading
Legal and Attribution
Ajeeb is free and unencumbered software released into the public domain under the terms of the CC0 1.0 UNIVERSAL license.
Attribution is appreciated but not required. When attributing a mention to the effect of "This project makes use of Ajeeb, originally by Ramsey Nasser" and/or a link to https://ajeeb.games/
is sufficient.
Author's Intent
While this software may legally be used by anyone, it is not for everyone.
This software is the result of a great deal of joyful labor on the part of the author, and it is shared freely in the hope that individuals, students, artists, and worker cooperatives will benefit from its use and study in any capacity, commercial and otherwise. The author made this for you.
It is absolutely not intended for use in service of capital, in pursuit of profit for a minority off the labor of others, or by organizations that differentiate their owners and their workers.
If you own such an organization, know that the author believes that you are a bad person, and that you should step aside and allow your enterprise to be run democratically by your employees with equal stake and say in its management. The author did not made this for you, and holds you in contempt.
If you work for such an organization, know that the author believes that you are being exploited, and that you should start organizing towards converting your workplace into a cooperative or unionizing at the very least. The author is on your side, hopes this software lightens the burden of your labor.
We have nothing to lose but our chains and a better world is possible.
Name
Ajeeb comes from the Arabic عجيب meaning "wondrous" but with a connotation of "strange" or "miraculous". It was developed for my contribution to the Wonderbundle in Wonderville's successful 2019 Kickstarter campaign and is named after Wonderville.