Technology moves fast! ⚡ Don't get left behind.🚶 Subscribe to our mailing list to keep up with latest and greatest in open source projects! 🏆

Subscribe to our mailing list


HyperCard-ish in Racket

Subscribe to updates I use cooper

Statistics on cooper

Number of watchers on Github 37
Number of open issues 3
Average time to close an issue 3 days
Main language Racket
Open pull requests 0+
Closed pull requests 0+
Last commit over 4 years ago
Repo Created over 4 years ago
Repo Last Updated almost 2 years ago
Size 340 KB
Organization / Authortechnomancy
Page Updated
Do you use cooper? Leave a review!
View open issues (3)
View cooper activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating cooper for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)


A primitive Racket HyperCard clone, sort of.

Create a stack consisting of cards with drawings and buttons on them. Write code to run when buttons get clicked. Explore through the stacks you've created.


Right-click to change modes.

  • explore (hand)
  • buttons (crosshair)
  • drawing (bullseye)

Buttons are invisible unless you're in buttons mode. Double-clicking on a button gives you edit mode, where you can either give the button a target card or write a function that takes the state and can return a modification of it. Buttons only run the code if their action is set to <code>, otherwise they only jump to the specified card.

Drawing is only straight lines for now.

Card Zero is where you start; it's a card that gets prepopulated with a self-hosted card listing/editing interface.


If you get lost at any point, control-0 will return you to card zero.

Control-s saves, and control-l loads.

Control-c clears background, control-b clears buttons, control-n creates cards.


See cooper/cooper.rkt for an overview of the structs used and the contracts on their fields. State is tracked with the state struct inside a box. Each mode defines a number of callback functions for various event handling. Handlers take the current state (along with event and canvas objects) and return a modified state.

Cards can have event handler functions attached to them. The card listing is implemented on the zero card, which comes pre-populated with an "enter" event handler that creates buttons pointing to all the cards in the stack.


Copyright 2014 Phil Hagelberg and contributors

Image above 2014 Boom Entertainment, Inc.

Distributed under the GNU General Public License version 3; see file LICENSE.

cooper open issues Ask a question     (View All Issues)
  • over 4 years items/inventory
  • over 4 years undo
  • over 4 years More drawing commands
cooper questions on Stackoverflow (View All Questions)
  • I have to set a heading to the font-family "Cooper Black" but it never actually goes to it.
  • Beginning ruby Peter Cooper 1.9 chapter 7 require load error
  • noMethod error in Beginning Ruby by Peter Cooper chapter 6 dungeon game
cooper list of languages used
Other projects in Racket