Qoopershare.com is a website consisting of a distributed database of arbitrary data records, organized in master-detail trees (tables) of arbitrary depth. Each record contains fields: text, numeric, boolean, image. Each table is optionally associated with a screen layout file coded using a language called Coopertags: a simplified version of HTML. Every Qoopershare user can access databases belonging to other users; the databases live in shared folders which make use of Google Drive/Dropbox. For a non-technical description of Qoopershare, please click on Summary.

Business Model

Subscribers pay $10/year or $3.60 for 3 months. They can download records belonging to other users, and can copy/paste text contained in those records. They also have access to normal versions of image files contained in those records. Non-subscribers can only access thumbnail versions of image files, which have a maximum size of 9216 pixels (96 x 96). They cannot download records or copy/paste text. All users who join in the first 6 months, post-launch, receive a free 6-month subscription.


Every database is associated with a Cooperscript web app which takes care of data entry and browsing the database. Cooperscript is a new open source web programming language employed by Qoopershare users. Database owners choose an existing Cooperscript app (and may customize it), or they can develop a Cooperscript app from scratch. To run Qoopershare, the user launches the embedded Jetty web server, and then uses a web browser, pointing it to localhost.


To search a distributed database for matching records, the user fills out one or more fields in one or more data entry screens, one screen per table. All radio buttons are initially deselected, and check boxes are 3-state: on, off, don't care. To match a null string in a text field, enter a single double quote character ("). Only alphanumeric characters are recognized in text edit boxes, other characters are treated as blanks. Keywords entered result in a hit whenever all keywords occur in the matching record. Phrases (multiple adjacent keywords) are delimited with double quotes (").

Search Results

The search results are returned in user-id/hit-count pairs. This list is sorted in descending order by hit-count. The hit-count can be view-count, zip-count, or view-zip-product-count. Whenever an end-user clicks on Zip, image data or some other piece of data is downloaded from another user's shared drive to the local drive, and the zip-count Z is incremented. Whenever an end-user performs a command resulting in a Zip button being displayed, the view-count V is incremented. The view-zip-product-count, P = V(Z + 1).

Clicking on a list member in the list of user-id/hit-count pairs displays the first record (text, image, or both) matching the query. Clicking on next/previous steps through the list of records matching the query, which is sorted in descending order by hit-count. Text can be either plain text or Coopertags code (which may contain embedded images).

Indexed Search

  • Keywords
    • keyid (4)
    • text (16)
  • KeyPages
    • keyid (4)
    • pgid (8)
  • Phrases
    • pgid (8)
    • keyid (4)
    • pos (2)
  • AppPages
    • appid (4)
    • pgid (8)

Monospace Mode

Monospace and rich-text modes pertain to local single-user Qoopershare scripts (accessed via localhost) created using Cooperscript and Coopertags. In monospace mode, all body text rendered to the screens of end-users is in a mono-spaced, typewriter-style font. Every character takes up 2 square cells: an upper cell and a lower cell. Superscripts and subscripts are handled by employing a vertical offset of one square cell. Header text is also mono-spaced, and each character takes up 2 oversized square cells.

Additional Formatting

The grid of characters can be subdivided into panels, which can themselves be subdivided into more panels, and so on. Any panel can contain zero or more text boxes, which may overlap each other. Vertical grid lines each take up one square cell per row of square cells. Horizontal grid lines are displayed in the same pixel row as underscore characters. Any row of square cells containing a horizontal grid line which is 2 pixels wide is taller by exactly one pixel. The following bracket characters: ( ) [ ] { } can be oriented vertically or horizontally, taking up a single column or row of at least 2 square cells, respectively. Widgets such as check boxes, radio buttons, and combo box arrows take up 4 square cells (2 by 2). Images, animations, and diagrams are contained in canvas objects, which can appear anywhere panels can appear.

Rich-Text Mode

In rich-text mode, a given header or paragraph of body text can consist of a single variable-width font. Paragraphs have before/after spacing, left/right indent, and line spacing (single, double, 1.5, etc.). Panels have margins on all 4 sides. In both rich-text and monospace modes, text is either rendered to the HTML5 canvas object, or converted on the fly from Coopertags to HTML. The conversion takes place for subscribers, whereas rendering text to the canvas object is used for non-subscribers, to prevent them from selecting text and then copy/pasting it. Some features like form fields and submit buttons use hidden HTML.

[ Back to Top ]