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.

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

  1. Clean up and publish repository
  2. 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.