CodiMD - Realtime collaborative markdown notes on all platforms. https://hackmd.io/c/codimd-documentation
Go to file
Cheng-Han, Wu e473a4e61b Fixed cursor id not valid to selector 2016-01-22 19:48:07 -06:00
lib Fixed potential bug in realtime startConnection and bugs in note findOrNewNote, response showNote 2016-01-20 23:20:50 -06:00
public Fixed cursor id not valid to selector 2016-01-22 19:48:07 -06:00
tmp Jump to 0.3.1 2015-07-02 00:10:20 +08:00
LICENSE Initial commit 2015-05-04 14:06:46 +08:00
README.md Update README.md 2016-01-20 23:11:20 -06:00
app.js Now always create session to ensure cookie authorize can proceed 2015-12-30 00:34:32 -05:00
bower.json Upgrade all dependencies and fixes afterward issues 2016-01-19 09:57:58 -06:00
config.js Marked as 0.3.4 2016-01-19 10:06:22 -06:00
hackmd_schema.sql Changed db schema, table "note", column "title", type from "character varying(256)" to "text". 2015-09-15 17:37:00 +08:00
package.json Marked as 0.3.4 2016-01-19 10:06:22 -06:00

README.md

HackMD

Join the chat at https://gitter.im/hackmdio/hackmd

HackMD is a realtime collaborative markdown notes on all platforms.
Inspired by Hackpad, but more focusing on speed and flexibility.
Still in early stage, feel free to fork or contribute to this.

Thanks for your using! 😄

Prerequisite

  • Node.js 0.10.x or up (test up to 5.2.0)
  • PostgreSQL 9.3.x or 9.4.x
  • MongoDB 3.0.x
  • npm and bower

Get started

  1. Download a release and unzip or clone into a directory
  2. Enter the directory and type npm install && bower install, will install all the dependencies
  3. Install PostgreSQL and MongoDB (yes, currently we need both)
  4. Import database schema, see more on below
  5. Setup the configs, see more on below
  6. Setup environment variables, which will overwrite the configs
  7. Run the server as you like (node, forever, pm2)

Import database schema

The notes are store in PostgreSQL, the schema is in the hackmd_schema.sql
To import the sql file in PostgreSQL, see http://www.postgresql.org/docs/9.4/static/backup-dump.html

The users, temps and sessions are store in MongoDB, which don't need schema, so just make sure you have the correct connection string.

Structure

hackmd/
├── tmp/			--- temporary files
├── lib/			--- server libraries
└── public/			--- client files
	├── css/		--- css styles
	├── js/			--- js scripts
	├── vendor/		--- vendor includes
	└── views/		--- view templates

Configuration files

There are some config you need to change in below files

./config.js				--- for server settings
./public/js/index.js	--- for client settings

Client-side index.js settings

variables example values description
debug true or false set debug mode, show more logs
version 0.3.2 current version, must match same var in server side config.js

Environment variables

variables example values description
NODE_ENV production or development show current environment status
DATABASE_URL postgresql://user:pass@host:port/hackmd PostgreSQL connection string
MONGOLAB_URI mongodb://user:pass@host:port/hackmd MongoDB connection string
PORT 80 web port
SSLPORT 443 ssl web port
DOMAIN localhost domain name

Server-side config.js settings

variables example values description
testport 3000 debug web port, fallback to this when not set in environment
testsslport 3001 debug web ssl port, fallback to this when not set in environment
usessl true or false set to use ssl
urladdport true or false set to add port on oauth callback url
debug true or false set debug mode, show more logs
usecdn true or false set to use CDN resources or not
version 0.3.2 currnet version, must match same var in client side index.js
alloworigin ['localhost'] domain name whitelist
sslkeypath ./cert/client.key ssl key path
sslcertpath ./cert/hackmd_io.crt ssl cert path
sslcapath ['./cert/COMODORSAAddTrustCA.crt'] ssl ca chain
tmppath ./tmp/ temp file path
postgresqlstring postgresql://user:pass@host:port/hackmd PostgreSQL connection string, fallback to this when not set in environment
mongodbstring mongodb://user:pass@host:port/hackmd MongoDB connection string, fallback to this when not set in environment
sessionname connect.sid cookie session name
sessionsecret secret cookie session secret
sessionlife 14 * 24 * 60 * 60 * 1000 cookie session life
sessiontouch 1 * 3600 cookie session touch
heartbeatinterval 5000 socket.io heartbeat interval
heartbeattimeout 10000 socket.io heartbeat timeout
documentmaxlength 100000 note max length
facebook, twitter, github, dropbox, imgur multiple values your own api keys, see source code for details

Operational Transformation

From 0.3.2, we start support operational transformation.
Which make concurrent editing safe and not break up other users' operations.
Even more, now can show other clients' selections.
See more at http://operational-transformation.github.io/

License under MIT.