Bryce York edited this page Feb 13, 2018 · 78 revisions



For Developers

How to's

Set up

Advanced steps

Integrating Etherpad in your web app

for Developers

Clone this wiki locally

Table of Contents


Feel free to add a +1/-1 with your name if you like or dislike the idea

server access

and _all_ applets, js, images, i.e. all resources (res) use the subdirectory /res It is currently very difficult to have "nice urls" - see my RewriteRules in the EPL Wiki - and still have difficulties when accessing through firewalls.

The server.js should be cooperative when parsing the requests, I mean, a better server.js can make the most of the RewriteRules obsolete, which will make everything more robust, secure, and testable. (+1 rasos, +1 meetbryce)

installation issues

  • Make it easier to install and edit and create a one-line install (make) script like npm has (-1 micah -1 emirotin, -1 rasos)
  • Add instructions for other, non-Debian Linux OS's on the Wiki. (-1 micah +1 emirotin -- put link to external article describing node.js install - would be enough)
  • Package it for (at least) Debian and try to have it integrated to official repos (+1 matlopes) +1

pad administration

  • on random pad name creation: before actually creating a random pad name, prompt the user to allow her to modify the generated hash to enable pad names like (assigned to Wikinaut)
  • check and sanitize user entered or modified pad names (assigned to Wikinaut)
  • Delete pads (+1 toco,+1 devoutskeptic, +1 Masses-Fallacy, +1 scanferla, +1 flosse, +1 erucolindo, +1 JanCBorchardt +1 micah, +1 johnmclear, +1 nodiscc, +1 TinaJamPearl, +1 aperezdc, +1 ulikoehler, +1 jefferai, +1 anarcat, +1 meetbryce)
  • Allow deletion of a pad for the user who created it (implementation idea: when a pad is created, show a long special token hash in an alert box, and store it in the database, perhaps store it in a cookie for this user. When the cookie is present, show a "delete this pad" button for this user.) (+1 anarcat, +1 meetbryce)
  • Adminpanel (dashboard) to manage all pads on the server (+1 0ip, +1 toco, +1 devoutskeptic, +1 Maja88, +1 Masses-Fallacy, +1 scanferla, +1 bingjie, +1 bong0, +1 erucolindo, +1 JanCBorchardt, +1 nodiscc, +1 jhollinger, +1 marcelklehr, +1 TinaJamPearl, +1 aperezdc, +1 ulikoehler +1 jefferai, +1 anarcat, +1 rasos, +1 meetbryce). See developer version on and source (--Set up a web server running PHP, just to have a decent dashboard!? I'd like to have this in epl-core or as a plugin! -marcelklehr, +1 TinaJamPearl, +aperezdc, +1 meetbryce)
  • auto-prune the database: remove edit revisions which fulfill some criteria. Examples are: delete the oldest, keep last n revisions, remove m-out-of-n revisions, keep revisions of the last n days... keep the last 200 revisions, but at least one revision per day... keep major revisions, i.e. revisions which differ substantially in more than n characters. (+1 anarcat, +1 rasos, +1 derGali)

import / export

  • Printbutton (+1 MyPixelsOnYourScreen, +1 nodiscc, +1 TinaJamPearl) -- See ep_print (npm page)
  • Import/Export in native JSON with full pad history & authordata (+1 rspeer, +1 dcht00) -- See JSON export/import pull requests
  • Create tests and may some kind of code style checker (+1 rspeer +1 emirotin) -- Frontend Tests exist in /tests/frontend already -- backend tests required.
  • implement Multimedia (Video/Audio player, Pictures) (+1 0ip, +1 Maja88, +1 devoutskeptic, +1 bingjie, +1 MyPixelsOnYourScreen, -1 rspeer, +1 cronopio, +1 JanCBorchardt, -1 micah, +1 johnmclear, -1 nodiscc, -1 anarcat) -- Lots of this is available as plugins
  • Tables (+1 0ip, +1 scanferla , +1 bingjie, +1 jcharaoui, +1 MyPixelsOnYourScreen, -1 rspeer, +1 JanCBorchardt, +1 johnmclear) - See ep_tables (npm page)
  • when importing from clipboard or import, have a clean-up function which eliminates excess white spaces, and/or new lines. -- Done
  • Cleanup exports code (i. e. factor out common code in ExportDokuWiki.js and ExportHtml.js, see #141)
  • use the interoperable TextWheel format to easily push final text to CMS and any other system using it (see )

page editing and rendering

  • cleanup of the toolbar - it overflows easily in narrower windows. It would be advisable to remove rarely used things from toolbar and leave them in the menu only (superscripts ie.) and merge formatting buttons to groups like google docs do - for example there would be only one button with alignment (showing current alignment) and if you click it "submenu" of other buttons rolls down. etherpad needs to be clean and lite (+1 meetbryce)
  • as a switchable option: mark deletions with "strike-through" attribute instead of actually deleting (-1 unless it only applies to recent deletions, it gets a big mess very soon, I have experience with this when using "tracking changes" in LibreOffice. Here however you can "approve" the changes time to time so they get deleted for good and do not show anymore. Therefore I suggest something like "cleanup all deletions" function with this)
  • RSS Feed for updates (e.g. the 10 most recent pages)
  • Syntax highlighter plugin: processing, c, ruby, js, ... (+1 dwendt, +1 0ip, +1 scanferla, +1 devjones, +1 geier, +1 martindale,+1 bong0, +1 rspeer, +1 JanCBorchardt +1 emirotin - I can suggest ). 60$ bounty for the implementor]( ) & someone tried it before ( ) -- See ep_codepad (npm page)
  • Anchors for in-doc linking (+1 devoutskeptic, +1 jcharaoui, +1 rspeer, +1 micah, +1 meetbryce)
  • Markdown support like pagedown (+1 rspeer, but making something that's both Markdown and live-editable is going to be interesting from an interface point of view. Not impossible, but interesting. -- See ep_markdown (npm page), +1 dwendt, have it work like github preview , +1 meetbryce)
  • add a basic spell checker (-1 TinaJamPearl, -1 anarcat) -- see ep_spellcheck (npm page)
  • add a shortcut function, e.g. a set of pre-programmed abbreviations which gets expanded as you type

authentication, authorisation, security, user administration, multi-user issues

  • detect "REMOTE_USER" detected in the server.js - when it is available after a user authentication (Basic or negotiated, i.e. Kerberos) (+1 spicewiesel,+1 schinken, +1 aperezdc, +1 anarcat)
  • External authentication for users (i.e. connect to ldap, oauth, OpenID etc) (+1 sdague, +1 wikinaut +1 matlopes, -1 anarcat - see above instead, imap +1 rasos, +1 LDAP tilllt , +1 meetbryce)
  • Password protected / encrypted pads (+1 0ip, +1 jcharaoui, +1 flosse, +1 MyPixelsOnYourScreen, +1 erucolindo, +1 micah, +1 wikinaut, +1 nodiscc, +1 snaut, +1 spruce, +1 TinaJamPearl, +1 matlopes, +1 anarcat - with the above, only need proper authorization, +1 nilstoedtmann) -- see settings.json
  • Add teampads/private pads/pro pads, like in the original Etherpad (+1 scanferla, +1 flosse, +1 martindale, +1 JanCBorchardt, +1 cube, +1 micah, +1 spruce, +1 TinaJamPearl, +1 matlopes, +1 meredrica, +1 Gared, +1 mluto, +1 rasos, +1 nilstoedtmann).


  • Robustness: the server shouldn't go down over a single error (+1 rspeer, +1 scanferla, +1 anarcat, -1 mblum14, +1 meetbryce)


  • PhpBB3 Connection/User Sync (+1 jcharaoui, +1 Maja88, +1 martindale)
  • MyBB Connection/User Sync
  • Joomla Connection/User Sync (+1 justfortherec)
  • some NoSQL database, since that's what we seem to be treating the DB engine underneath anyways (berkeley DB, MongoDB, Redis etc) (+1 anarcat, +1 meetbryce)