• Stars
    star
    237
  • Rank 169,885 (Top 4 %)
  • Language
    CoffeeScript
  • License
    MIT License
  • Created almost 9 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Coauthor supercollaboration/discussion forum

Coauthor

Coauthor is a tool for group collaboration, discussion, keeping track of notes/results of meetings, etc., in particular to enable supercollaboration. Coauthor's primary goal is to ease multiauthor collaboration on unsolved problems in theoretical computer science, so e.g. you'll find LaTeX math support, but it has proved useful in other fields too.

Coauthor screenshot

To see what's changed in Coauthor recently, check out the Changelog.

Features

  • Live updates/redraw of everything, thanks to Meteor. If you're looking at a problem and someone posts/edits something, you see it as quickly as they see their preview (roughly 1-second delay). You should never have to hit "reload" (except in case of a bug).

  • Real-time editing of messages in the style of Google Docs/EtherPad (Operational Transforms), if people feel like editing together (useful if e.g. working on a proof together).

    • When editing, you see near-instant updates from the other side(s).
    • Keeps track of coauthorship by who is in edit mode at the time.
    • Can also manually add coauthors (e.g. when one person scribes the work of many) or remove coauthors (e.g. accidents or minor edits)
    • Live previews of formatted message with ~1-second delay, after the data has round-tripped with the server. (The delay is to reduce the crazy number of "old versions" that get saved in the history: the server only pushes after the document has not changed for 1 second.)
  • Three formats for writing messages (and easy to add additional formats). All formats support LaTeX math (via $...$, $$...$$, \(...\), \[...\], or \begin{align/alignat/equation/eqnarray/gather/CD}...\end{align/alignat/equation/eqnarray/gather/CD}) via KaTeX, so math mode supports this list of supported functions (see also this support table). Macros defined with \gdef can be used throughout one message.

    • GitHub-flavored Markdown (default), e.g., *italic*, **bold**, ~~strikethrough~~, # Heading, ## Subheading, `code`, > Block quote, ```multiple lines of code``` (including language-based highlighting if you start with ```language), links via [text](url), images via ![caption](url), lists via * or 1., to-do lists via * [ ] and * [x], tables, etc. Also supports all LaTeX commands listed below that start with a letter (notably, not accents) and math mode, and all HTML commands listed below.
    • LaTeX, limited. Beyond extensive math mode support (see above), the following features are supported in text mode; feel free to ask for more. %..., \def\macro{...}, \let\macro=\mac, \protect, \sout, \emph, \textit, \textup, \textnormal, \textrm, \textlf, \textmd, \textbf, \textsf, \texttt, \textsc, \textsl, \em, \itshape, \upshape, \rmfamily, \lfseries, \mdseries, \bfseries, \rmfamily, \sffamily, \ttfamily, \scshape, \slshape, \rm, \normalfont, \md, \bf, \it, \sl, \sf, \tt, \sc, \bfseries, \itseries, \mdseries, \sffamily, \slshape, \scshape, \ttfamily, \centering, \raggedright, \raggedleft, \uppercase, \MakeTextUppercase, \lowercase, \MakeTextLowercase, \underline, \textcolor{color}{text}, \colorbox{backcolor}{text}, \url, \href{url}{text}, \pdftooltip{hovertext}{text}, \raisebox{amount}{text}, \par, \BY{...}, \YEAR{...}, \chapter, \section, \subsection, \subsubsection, \footnote, \includegraphics[width/height/scale]{url}, \smallskip, \medskip, \bigskip, \noindent, \indent, \,, \thinspace, \enspace, \space, \quad, \qquad, \negthinspace, \negmedspace, \negthickspace, \", \', \` , \^, \~, \=, \c, \v, \u, \H, \aa, \AA, \i, \j, \ss, \ae, \AE, \oe, \OE, \o, \O, \S, \P, \checkmark, \textasciitilde, \textasciicircum, \textbackslash, \textbar, \textbardbl, \textbraceleft, \textbraceright, \lbrack, \rbrack, \textcopyright, \copyright, \textregistered, \circledR, \textdagger, \dag, \textdaggerdbl, \ddag, \textdegree, \degree, \textdollar, \textellipsis, \dots, \ldots, \textendash, \textemdash, \textless, \textgreater, \textquoteleft, \lq, \textquoteright, \rq, \textquotedblleft, \textquotedblright, \textsterling, \pounds, \yen, \maltese, \textunderscore, \&, \$, \{, \}, \%, \#, ``, '', ~, --, ---, {, }, \\, \item, \item[...]; \begin/\end for environments verbatim, CJK, itemize, enumerate (including enumerate.sty's optional argument) ย  ย quote, center, tabular (basic but including \multicolumn and \multirow), ย  ย equation, eqnarray, align, alignat, gather, CD, problem, question, example, idea, theorem, conjecture, lemma, corollary, fact, observation, proposition, claim, proof. Also supports all HTML commands listed below.
    • HTML, sanitized. The following tags are allowed; feel free to ask for more. <h1>, <h2>, <h3>, <h4>, <h5>, <h6>, <blockquote>, <p>, <div>, <span>, <a href/name/target>, <ul>, <ol start>, <nl>, <li>, <b>, <strong>, <i>, <em>, <u>, <s>, <strike>, <del>, <code>, <tt>, <kbd>, <pre>, <hr>, <br>, <table>, <thead>, <caption>, <tbody>, <tr>, <th>, <td>, <details><summary>Title</summary> Folded-away text</details>, <img src/alt/width/height>, <video controls>, <source src>; attributes title, style, class (limited), aria-*. Also supports LaTeX math mode.
  • Light and dark themes available under Settings.

  • CodeMirror editor supports syntax highlighting, block folding, bracket matching, line numbering, light and dark themes, spell checking, "regular" keybindings as well as Vim and Emacs keybindings (especially useful for rectangular selection for e.g. ASCII art), multiple cursors for simultaneous editing (ctrl-click).

    • Copy/paste produces text by default. Special handling of Coauthor URLs produces coauthor:... links or embeds images. Special handling of user URLs produces @mentions. To paste rich text, you can toggle HTML paste mode via Ctrl-Shift-H.
    • @mentioning has automatic completion of all users in group. You can type any substring of the real name or username (but skipping spaces, like GitHub), and select by pressing enter, or ignore by pressing space.
  • Messages are organized by groups (intended to correspond to groups of people who meet), so it's easy to share material with everyone in the group. But it's also possible to share part of a group (only certain threads) with specific users, for visitors or paper merges etc.

  • Sorting of threads within a group by title, creator, creation date, last update, number of posts, number of positive emoji responses, or whether subscribed (by clicking on the corresponding column, once for default sort order and again for opposite sort order). Intelligent handling of numbers while sorting, e.g. "9." comes before "10.". Deleted messages always sort to the very bottom; minimized messages always sort near the bottom; pinned messages always sort near the top; and unpublished messages always sort near the very top.

  • "Live Feed" to watch messages as they get changed/posted. Useful for projecting the latest activity onto a big screen while a group is gathered and some are maybe editing.

  • "Catchup on Recent Posts" to see all messages since a particular date/time (including relative specifications like "1 week" or "12 hours"). Useful for progress reports since the last meeting.

  • Threaded message organization, with arbitrary tree structure (root messages, replies with arbitrary depth). You can focus on the subthread rooted at any message (click on the arrow), or fold away the contents of a subthread to focus on the rest (click on the minus sign). Folding with the minus/plus sign is a local and temporary change (resets when reloading the page), while minimizing the message makes it start out folded for all users (e.g., when a discussion/question resolves and is no longer important, but you want to preserve it for future reference).

  • Move (reparent) messages by selecting Action / Move, or by dragging messages around in the table of contents on the right. (You can also start a drag in the main view from the right-arrow of a message, but the drag must end at the table of contents.) Dragging directly onto a message makes the dragged message the last child, while dragging onto the slot before a message makes the dragged message the immediately preceding sibling. Dialog confirms move, and allows you to type another message title/creator/ID, or the name of a group if you want to make the message into a new thread's root message.

  • Tags: attach an arbitrary set of strings to a message. Find other messages with the same tag by clicking on a tag.

  • Emoji for super-short responses that show appreciation but don't cause email notifications or take up much space. (Like GitHub and Slack.) Hover over an emoji to see a list of people who added the emoji; click to toggle your own status. Emoji are positive (purple) or negative (red). Positive emoji on root messages are counted on the group page, enabling a simple voting system for e.g. which problems to work on.

  • Search across the current group, thread, or across all groups, for posts by keywords using the search bar at the top.

    • Search for a word as a whole word (default behavior), or specify asterisks to search for partial word matches: prefix*, *suffix, *substring*, or prefix*suffix.
    • Lower-case letters are case insensitive, while upper-case letters are case sensitive.
    • Restrict search to title or body via title:... or body:... (default is to search both).
    • Negative match with minus sign (e.g., -word excludes documents with whole word).
    • Search for a regular expression via regex:....
    • Use quotes ('...' or "...") to search for phrases or regex:"..." to search for regular expressions with spaces in them; normally, spaces act as an AND query.
    • Connect words/phrases with | to get an OR query instead.
    • Use parentheses to mix AND and OR arbitrarily, e.g. always (this | that).
    • by:username searches for messages coauthored by a specified username (which can include *s or use regular expressions via regex:); by:me is shorthand for searching for your own username.
    • tag:... does an exact match for a specified tag; it can be negated.
    • emoji:heart, emoji:thumbs-up, emoji:thumbs*, emoji:* etc. search for messages with (certain) emoji symbol responses; emoji:@username searches for messages with emoji response by a specific user (emoji:@me finds your own emoji responses); or you can combine the two with e.g. emoji:thumbs*@username.
    • root:id matches messages in thread with specified root message ID.
    • is:root matches root messages (tops of threads).
    • is:file matches file messages (made via Attach).
    • is:deleted, is:published, is:private, is:minimized, is:pinned, is:protected match various states of messages.
    • is:empty matches empty messages (no title, body, or file).
    • not:... or isnt:... are negated forms of the above is:... operators, equivalent to -is:....
  • User search: find posts by a particular user by clicking on their username. Search for your own posts in a group by clicking the "My Posts" button.

  • Statistics about user's and all posts within a group, by day, week (with configurable week start), month, year, or hour within a day. Your own statistics are available via the Statistics button on the group page, while other users' stats are available from their user page.

  • Permanent URLs for all messages, groups, etc., for easy emailing etc. (but other than group name, not revealing, so only those with permission can open). Links to other messages via specical coauthor:xxx syntax. Drag messages (via their arrow icon) into other messages to make such links.

  • Files (another type of message) can be attached to other messages, as another type of reply. You can click on the Attach button to select a file to attach, or drag the file from the operating system onto the Attach button. Similarly, files can be modified by clicking the Replace File button or dragging a file onto that button. File messages can have title and body too; title defaults to the filename. Image/video files (including PNG, JPEG, SVG, MP4) are displayed inline. Images automatically detect EXIF orientation, and can be further rotated by multiples of 90 degrees in edit mode. PDF files are rendered using pdf.js, only when visible on screen, and displayed inline with page-turning buttons.

  • Messages can start/be marked Unpublished (not yet finished) or Deleted (mistake / no longer useful). In either state, the message is hidden from people who are not coauthors (as listed in the "by" line and editable at the bottom of the Edit view) or superusers who click "Become Superuser". The default published state is initially true (so everyone sees the new message and live updates immediately), but can vary by user (e.g., if they are "shy" and only want to post finished thoughts).

  • Threads can be marked as allowing public replies only (the default, for maximum collaboration), private replies only (useful for solved problems/puzzles, to prevent accidentally spoiling the fun), or public and private replies (useful for feedback on lectures, for example, which can have varying relevance to the entire group).

    • Private messages have an access list of users who can see the message beyond the coauthors, initially set to include the access list and all coauthors of the parent message being replied to ("Reply All" behavior for back-and-forth private conversation). Unlike coauthors, access users can only see the message when it is published and not deleted. You can add or remove users from the access list, but note that permissions are not synchronized between parent and children, so if you change a parent's permissions you might also want to change the children's.
    • Replies to replies inherit the public/private state of their parent.
    • Superusers can see all the messages and change them between public and private.
    • Superusers can also mark messages as protected, meaning they can be edited only by coauthors and superusers. This is useful to prevent someone from accidentally becoming a coauthor on the root message of a private-replies thread, thereby gaining access to all subsequent replies. Protected messages can still be seen normally and gain emoji responses.
  • Email notifications for subscribed threads, clustering together all updates since the last email, with a maximum lag of a specified number of hours or minutes (default 1 hour). Each user can specify in Settings whether they are, by default, subscribed to all threads or none, both globally and local to each group. Either way, the default can be overridden in the group view using the checkbox on the right (checked means "subscribed"). Users can choose in Settings whether to receive notifications about their own edits, and whether to receive separate email messages for each group (e.g. for email folder separation) or bundle them altogether.

  • Time travel: You can drag through history and see past versions. Versions of messages where the user explicitly clicked "Stop Editing" are marked as "finished" versions, and only those are shown by default. But if you need to see more intermediate versions, you can click "Show All Versions". In general, Coauthor aims to automatically track all history in case it's useful later.

  • Download ZIP: You can archive an entire group's contents into a ZIP file of raw HTML/CSS and attached files which requires no JavaScript to run. This future-proofs your content against software rot, making it suitable for NSF's Data Archiving Policy. It is also useful for offline viewing of content, e.g., while traveling.

  • Permissions can be specified for each user at the group level (typical case --- user can access the entire group of messages), at the thread level (user can access only certain threads within group), or at the global level: just click "Users" in the appropriate view. Levels of access:

    • read: see the group and read the messages (otherwise invisible)
    • post: create new messages, replies, etc. in the group
    • edit: modify other people's messages
    • super: somewhat dangerous "super" operations like history-destroying superdelete, history-creating import, and the ability to see other users' deleted messages
    • admin: administer over other users, in particular setting permissions

    Anonymous access means that everyone, even not-logged-in users, can see the messages and group. This is generally not recommended as it opens Coauthor to spam, so it requires global admin privileges to enable.

  • Superuser operations (only for superusers):

    • Import from LaTeX document with figures attached as a ZIP file
    • Import from osqa's XML dump, including old edit history
    • Superdelete (permanently destroying a message including its history)
    • Setting the default sort for a group
    • Setting message threads as allowing public and/or private messages

User Tips

  • On Android, the Chrome browser with SwiftKey keyboard seems to work best for editing messages in Coauthor. (Firefox and Gboard have cursor positioning issues.)
  • LaTeX mode supports LaTeX accents (like \'e), but other modes do not. To easily type Unicode accented characters, use WinCompose on Windows, set up a compose key on Linux, or press and hold keys on MacOS.
  • Conversely, if you're on modern MacOS, holding down letter keys will bring up an accent tool instead of repeating the key. If you'd rather repeat the key (e.g. for Vim mode), follow these instructions: defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false then restart your web browser.
  • Vimium is incompatible with the Vim editor mode (specifically, both capture the Escape key), so be sure to disable Vimium if you want to use Vim keybindings in the message editor.

Installation

See detailed installation instructions.

More Repositories

1

fold

FOLD file format for origami models, crease patterns, etc.
CoffeeScript
303
star
2

cocreate

Cocreate Shared Whiteboard/Drawing
CoffeeScript
210
star
3

author-stack-paper

"Every Author as First Author" paper from SIGTBD 2023, about superimposing author names in a stack
TeX
105
star
4

coffeescript-for-python

CoffeeScript for Python programmers (a guide)
CoffeeScript
53
star
5

svgtiler

Tool for drawing diagrams on a grid, combining grids of SVGs into a big SVG figure
CoffeeScript
51
star
6

font-tetris

Tetris Font
CoffeeScript
50
star
7

comingle

Multiroom meeting app integrating web tools
CoffeeScript
44
star
8

kadira-compose

docker-compose.yml for running open-source Kadira
Shell
38
star
9

topp

The Open Problems Project
TeX
23
star
10

slack-backup

Backup Slack users, channels, and messages for conversion to Discord
Python
17
star
11

reveal-pug-talk

Template for RevealJS talk slides using Pug, KaTeX, Stylus, CoffeeScript, SVG Tiler, SVG.js
CoffeeScript
16
star
12

tex2text

Simple conversion from LaTeX to ASCII or Markdown
Python
15
star
13

solid-meteor-data

Integrating SolidJS and Meteor reactivity
JavaScript
15
star
14

virtualglass

Computer-aided design of blown glass, specifically glass cane
C
15
star
15

cosuite

Software for better online synchronous meetings and classes
14
star
16

cp-editor

Crease pattern editor
CoffeeScript
14
star
17

solid-meteor-demo

Simple demo of SolidJS in Meteor
TypeScript
13
star
18

mathcestor

Ancestor/descendant tree from Mathematics Genealogy Project, rendered to HTML
JavaScript
13
star
19

svgink

Efficiently convert SVG files to PDF and/or PNG via Inkscape
CoffeeScript
11
star
20

hardness-book-site

Website for Computers and Intractability: A Guide to Algorithmic Lower Bounds
Sass
10
star
21

talk-yin-yang

Yin-Yang CCCG 2021 talk
Pug
8
star
22

tex2svg-webworker

CoffeeScript
8
star
23

compgeom

Computational Geometry Playground
CoffeeScript
7
star
24

recursed-xls2lua

Custom level design for Recursed via spreadsheets
CoffeeScript
5
star
25

font-webapp

Framework for webapps demoing JavaScript-rendered fonts
CoffeeScript
5
star
26

edemaine

Erik Demaine's GitHub profile
4
star
27

svgtiler-gui

Prototype GUI for interactive SVG Tiler drawing
CoffeeScript
4
star
28

github-math-demo

Testing GitHub's new math formula support
4
star
29

timer

Timer/countdown web app
CoffeeScript
4
star
30

curved-crease-editor

Curved crease pattern drawing program
CoffeeScript
4
star
31

attractor

Counterexamples to conjecture that a magnet outside a polygon can grab a metal ball inside a polygon
HTML
4
star
32

furls

Remember form state (and other state) in URL
CoffeeScript
3
star
33

font-cubefolding

Cube Folding Font
CoffeeScript
3
star
34

meteor-solid

Meteor compiler plugin for SolidJS including SSR
JavaScript
3
star
35

coinsliding

Coin-sliding font puzzles app
JavaScript
3
star
36

lectr

CoffeeScript
3
star
37

astro-solid-civet-template

Template for Astro site using Civet programming language to write Solid components
Astro
3
star
38

python2coffee

Python to CoffeeScript automatic converter
Python
3
star
39

markdown-it-replacements

Customize replacements in markdown-it typographer
CoffeeScript
3
star
40

talk-token-swapping-in-trees

Slides for talk about Hardness of Token Swapping in Trees
Pug
3
star
41

font-yinyang

Yin-Yang font
CoffeeScript
2
star
42

followshows-to-trakt

Transfer followshows.com history to trakt.tv
CoffeeScript
2
star
43

font-orthofoldcut

Orthogonal Fold & Cut Font
CoffeeScript
2
star
44

static-pug

Render static .pug files as static HTML in Meteor
JavaScript
2
star
45

meteor-tracker

NPM version of Meteor Tracker
JavaScript
2
star
46

font-spiralgalaxies

Spiral Galaxies Font
CoffeeScript
2
star
47

comingle-attendance

Attendance measurement for Comingle meetings
CoffeeScript
2
star
48

shtml2html

Convert Apache server-side rendered HTML to static HTML
JavaScript
2
star
49

yin-yang-svgtiler

Yin-Yang puzzles and hardness figures via SVG Tiler
AGS Script
2
star
50

talk-puzzle-fonts-about-puzzles

Talk about Puzzle Fonts about Puzzles
Pug
2
star
51

parseltongue

Better Python
Python
2
star
52

word-ladder

Word Ladder Designer
Sass
2
star
53

font-impossible

Impossible Folding Font
CoffeeScript
2
star
54

font-voronoi

Voronoi Font
CoffeeScript
1
star
55

meteor-solid-template-helper

Use SolidJS components in Meteor Blaze templates
JavaScript
1
star
56

character-layout

Algorithmic Character Layout
Stylus
1
star
57

dark-monkey

Tampermonkey scripts to bring (extra) dark modes to various websites
JavaScript
1
star
58

font-juggling

Juggling Font
Python
1
star
59

font-pathpuzzles

Path Puzzles Font
CoffeeScript
1
star
60

bustamove

Bust-a-Move / Puzzle Bobble clone, in particular for illustrating NP-completeness
CoffeeScript
1
star
61

gitall

Bulk operations on all Github repositories you can access
CoffeeScript
1
star
62

webapp-coffee-pug-stylus

Template gulpfile for coffee/pug/stylus webapp/website automatic compilation (including watch rule)
CoffeeScript
1
star
63

beancount

Count number of papers and coauthors via DBLP
JavaScript
1
star
64

fast-scrollspy

Mark visible nav items in logarithmic time
TypeScript
1
star
65

babel-plugin-module-deps

Babel plugin to annotate CJS modules with what they require
CoffeeScript
1
star
66

talk-token-swapping-robot-pivoting

Slides for talk about Token Swapping and Robot Pivoting
Pug
1
star
67

font-strip

Strip Folding Font
CoffeeScript
1
star
68

alpha-key

BibTeX style for overriding alphabetic labels
1
star