Join 10350+ others. No spamming.
I promise!

Follow us at github.



technomancy / cooper


HyperCard-ish in Racket



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.