View on GitHub


Test Coverage
# perspective
[![NPM version][npm-image]][npm-url] [![NPM dependencies][gemnasium-image]][gemnasium-url] [![Build Status][travis-image]][travis-url] [![Code Climate][climate-image]][climate-url]

An open-source, context-aware, event based team communication tool designed with
emphasis on software development teams.

# Installation
1. Download and install [RethinkDB]( if you haven't already
2. `npm install -g perspectiveapp`

# Usage
1. Run `rethinkdb` in one shell/process
2. Run `perspectiveapp` in another shell/process

# Configuration
See `lib/server/config.js` for the default configuration. You may override these
settings by creating a custom configuration file with the same structure and placing
it under `~/.perspective/config.json`


## How is Perspective different from Slack, HipChat et. al?
Perspective is open-source and free to use, even for on-site installations
behind pesky firewalls. Also, while there is a long way to go, Perspective
aims to be more than chat by providing the right information at the right time
to the right user. Examples:

* Present key events on a dashboard suitable on a TV for your whole team to see
* Switch the dashboard into a special mode during stand-ups to provide the
  most relevant information
* A view of Stash/Jenkins branch and build jobs as a separate overview page
  (in addition to being posted in relevant chat rooms)
* A view of the currently installed applications and versions in different
  server environments (in addition to deploy notifications in chat rooms)

## What's the high level architectural ideas?
* __"Everything" is an event.__ A chat message is simply an `event` of a specific type.
Similar a build job on Jenkins will be an event of another type. Integrations
will be able to format events in a chat room, hook into "dashboards", create its
own menu entries, listen for other events to produce new events and more.

## Is it stable?
Not at all. Yet :)

# Contribute
Contributions are most welcome! Simply open an issue or create a pull request.

## Development
1. Install RethinkDB
2. Clone this repo
3. `npm install`
4. Run `npm run watch` (`npm run watch:server -- -- --verbose` for debug logging)

* See `npm run` for a list of other options.
* Run `perspective.debugLoggingOn()` to enable client-side debug logging

## Todos
Will be migrated to github issues eventually

* api
  * stable events api for creating events via REST (validation)
* stash
  * port perspective-stash
  * aging of pull-requests
* events
  * REST api
  * Validate events, and with the same rules regardless of REST/WebSockets
  * error handling LOAD_EVENTS
  * event-store: sliding window? Evict old events to keep memory from building up
* chat
  * channel support
  * don't scroll to bottom automatically if user has scrolled up
  * set status (online/away)
  * set status automatically to idle
  * support @here, @channel, @everyone , @username
  * support "... is typing"
  * support drag'n'drop file sharing
  * support copy/pasting and embedding images
  * support code snippets
  * detect and convert http links
  * append message clientside immediately, but implement "failed to deliver message"
    or similar if connection fails
* users
  * enforce unique username
  * scale image on canvas before registering
* plugins/dataproviders
  * run in own process
* ui
  * get a delicious design
* create startupscripts
* security:
  * allow plugins to format using HTML, but prevent XSS (see message.react)
  * rest & websocket validation
  * rest & websocket authentication & authorization

# Licence
Perspective is released under the [MIT License](