Extensible wiki system using CouchDB and written in Golang

Overview

Wikifeat

Build Status

Introduction

Wikifeat is an open source collaboration platform built around the ever-popular Wiki concept. It is meant to be extensible and highly usable. Many enterprise collaboration platforms may be powerful and extensible, but they are often difficult to develop for and have an unfriendly, overly complicated user experience. Wikifeat uses a microservices architecture which not only facilitates scalability, but also allows for the addition of custom services to extend the core system.

wikifeat_screenshot_sm

Goals

The overarching goals for the Wikifeat project are:

  • Usability - The core Wikifeat system should provide a simple, intuitive wiki experience with a clean UI an a simple, easy to learn markup language (i.e., markdown).
  • Extensibility - It should be possible to extend Wikifeat with additional services and front-end plugins to provide new functionality and integrate Wikifeat with other systems.
  • Scalability - It should be possible to horizontally scale a Wikifeat installation without great difficulty.

Key Features

Wikis

  • Allows for the creation of multiple 'wikis', each with its own access controls
  • Markdown is used for the markup language.
  • Users are able to comment on individual pages.

Wiki pages are edited using simple Markdown -- specifically, Commonmark. A screenshot of the editor interface is shown here:

wikifeat_edit_sm

REST API

The wikifeat core services each expose a REST API to facilitate extensibility and integration with other services.

Plugin Support

Wikifeat has the ability to load javascript plugins to extend the functionality of the web application.

Scalability

Wikifeat's architecture is designed with scalability in mind. The core system consists of a set of microservices registered to an Etcd service registry. Multiple instances of each services may be running across multiple machines, with service discovery handled by your Etcd cluster.

Status

I'm no longer actively developing Wikifeat and have moved on to other projects. I will accept pull requests, so please feel free to contribute and/or fork.

For an example of a running Wikifeat installation, see https://www.wikifeat.org

See the Technical Overview for a more detailed introduction.

Documentation

Please see the Wikifeat website for more information and documentation. Documentation is also a work in progress.

Contributing

Contributions are most welcome. See https://www.wikifeat.org/app/wikis/wikifeat/pages/contributing for details.

Comments
  • 'gzip: stdin: unexpected end of file' when untarring the download file

    'gzip: stdin: unexpected end of file' when untarring the download file

    wget https://www.wikifeat.com/api/v1/wikis/686243fa4392400aad390cc59fa0987b/files/222361ead18c40e880b57d386c5a563e/content?attName=wikifeat_0.2.0-alpha.Linux-x86_64.tar.gz | tar xvz
    
    --2015-11-25 21:48:09--  https://www.wikifeat.com/api/v1/wikis/686243fa4392400aad390cc59fa0987b/files/222361ead18c40e880b57d386c5a563e/content?attName=wikifeat_0.2.0-alpha.Linux-x86_64.tar.gz
    Resolving www.wikifeat.com (www.wikifeat.com)... 104.131.164.61
    Connecting to www.wikifeat.com (www.wikifeat.com)|104.131.164.61|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 20040381 (19M) [binary/octet-stream]
    Saving to: ‘content?attName=wikifeat_0.2.0-alpha.Linux-x86_64.tar.gz.1’
    
    content?attName=wikifeat_0.2.0-alpha.Linux-x 100%[=============================================================================================>]  19.11M  1.72MB/s   in 14s    
    
    2015-11-25 21:48:24 (1.33 MB/s) - ‘content?attName=wikifeat_0.2.0-alpha.Linux-x86_64.tar.gz.1’ saved [20040381/20040381]
    
    
    gzip: stdin: unexpected end of file
    tar: Child returned status 1
    tar: Error is not recoverable: exiting now
    
    opened by oren 6
  • Markdown editor replace or improve.

    Markdown editor replace or improve.

    The Wikifeat web client currently uses the showdown markdown editor (used on Stack Exchange, etc.). This was quick to integrate and provided some improvement over a plain HTML textarea. There are a few issues with it, however, that may warrant replacement (or a fork):

    ~~1. The preview pane uses it's own markdown parser, which behaves slightly differently (it apparently implements a slightly different dialect of Markdown) from the Commonmark parser on the backend, which can cause published results to not match the live preview.~~ Brought in commonmark.js to render markdown in the preview pane.

    1. The 'insert image' button takes a url. When attaching an image which is already on the wikifeat site (in the 'files' section), this is inconvenient. Implementing a nice image browser/selector would be the preferred solution.
    2. A method to insert 'download' links for files on the wikifeat system would be highly desirable here.
    3. The preview pane doesn't render plugins
    enhancement 
    opened by rhinoman 2
  • Implement user profile/settings

    Implement user profile/settings

    The User settings menu item does nothing. Allow users to edit their profiles (contact info, etc). As part of the user profile, implement user pictures/avatars. Consider implementing Gravatar support as well.

    Also, the various username links that currently lead nowhere should display user profiles.

    enhancement 
    opened by rhinoman 2
  • Create config service

    Create config service

    Right now, wikifeat-config loads the configuration parameters from the config.ini file into etcd and then terminates. Need an actual config REST service so that certain configuration parameters may be queried. Eventually this config service could be extended to allow on-the-fly config changes.

    enhancement 
    opened by rhinoman 1
  • Figure out Travis CI build issues (or find an alternative CI system)

    Figure out Travis CI build issues (or find an alternative CI system)

    Travis CI continues to produce inconsistent results. The occasional network timeout causing failed unit tests seems to be the main issue (Usually retrying a build corrects this, when that particular Travis feature happens to be working). Adding copious sleep/wait statements and extending the length of http.Client timeouts has helped some, but the issue persists.

    It may be necessary to find an alternative CI. I am tempted to just setup a Jenkins instance on a VPS somewhere.

    help wanted 
    opened by rhinoman 1
  • Refactor authentication / login code to improve modularity

    Refactor authentication / login code to improve modularity

    This is necessary to allow for adding custom authentication modules (LDAP, etc.). Will need to stop using the CouchDB Session API as it is not flexible enough, and implement Session management outside of CouchDB.

    The solution to allowing external authentication methods appears to be a combination of handling session management in the middleware (rather than letting CouchDB do this for us), and using CouchDB's Proxy Authentication feature.

    Authorization will still take place in CouchDB using CouchDB's role based access (read, write, admin). Thus, an entry in the '_users' database will still need to be created (and synced) for users authenticating against external services (LDAP).

    enhancement 
    opened by rhinoman 1
  • Add meta description to frontend config

    Add meta description to frontend config

    Allow users to specify the content of a meta-description tag in the frontend config.ini. Right now the only way to accomplish this is to manually add a meta-description tag to the index.html file in the web app.

    enhancement 
    opened by rhinoman 1
  • Can't 'back' out of web application

    Can't 'back' out of web application

    While the browser back button works for navigating within the application, it's a real pain to back out of the web application altogether. I believe this problem is being caused by the 'home page' being pushed to the Backbone.history after the application has loaded.

    bug 
    opened by rhinoman 1
  • Cleanup: minor API inconsistencies

    Cleanup: minor API inconsistencies

    While working on the API documentation, I noticed a couple of inconsistencies in some of the JSON data structures. For example, "created_at" vs "createdAt", etc. Minor stuff.

    Better to fix sooner rather than later.

    bug 
    opened by rhinoman 1
  • File manager download links wrong for guests

    File manager download links wrong for guests

    In the file manager view, when not logged in (guest mode), file download links are not displayed correctly. If you have a link, it works (i.e., the links on the wikifeat.com 'Downloads' page work just fine), this affects the file manager view specifically.

    bug 
    opened by rhinoman 1
  • Guests can see Wikis they can't access

    Guests can see Wikis they can't access

    In the Wikis menu in the sidebar, wikis with guest access disabled will appear in the listing when using Wikifeat in guest mode. Even though the guest cannot access these wikis, it would be best if they were not able to see them.

    Simple fix, this.

    bug 
    opened by rhinoman 1
  • run errors

    run errors

    Fetching Configuration from http://localhost:2379 2020/07/24 11:31:19 Error getting key DbAddr: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key DbPort: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key UseSSL: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key DbAdminUser: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key DbAdminPassword: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key DbTimeout: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key MainDb: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key LogFile: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key MaxSize: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key MaxBackups: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key MaxAge: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key EntryTTL: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key CacheRefreshInterval: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key WebAppDir: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key PluginDir: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key Homepage: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key Authenticator: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key SessionTimeout: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key PersistentSessions: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key AllowGuest: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key AllowNewUserRegistration: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 2020/07/24 11:31:19 Error getting key MinPasswordLength: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. [Poetry.plugin] name=Poetry author=Wikifeat stylesheet=style/poetry.css version=1.0 pluginDir=plugins/poetry mainScript=poetry-plugin.js enabled=false [OpenLayers.plugin] name=OpenLayers author=Wikifeat stylesheet=style/ol.css version=1.0 pluginDir=plugins/ol mainScript=ol-plugin.js enabled=false 2020/07/24 11:31:19 Initializing Database Connection client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint.

    opened by goodforever 1
  • Document conflict resolution

    Document conflict resolution

    When a Wikifeat system is backed by multiple instances of CouchDB, the possibility of conflicting document versions exist. CouchDB "resolves" this upon replication by storing both versions on each node, and just 'picking' a winner to present in response to a read request (supposedly this is a deterministic process so the same winner is consistently returned on all nodes).

    Need to allow users (those with write access to a particular wiki, anyway) to participate in resolving conflicts (i.e., merging the conflicting versions into a 'new' one). CouchDB does allow you to query for conflicting document versions on a read, which will be helpful.

    The solution should go something like this:

    1. In the UI, place an 'alert' box at the top of a document if an unresolved conflict exists (Possibly limit this to users with 'write' access) along with a clickable 'resolve now' link.
    2. When clicked, the UI presents a 'merge' view containing a side-by-side diff of the two versions (similar to the merge tools in many SCM GUI tools).
    3. The user merges the two documents and saves the result
    4. The old versions are added to the history, with the new 'merged' version becoming the current document revision.
    5. User rejoices.
    enhancement help wanted wiki service Web App 
    opened by rhinoman 0
  • Need a thumbnail gallery for images

    Need a thumbnail gallery for images

    Two parts to this:

    1.) Generate thumbnails for images as they're uploaded. 2.) Implement a thumbnail gallery in the "Insert Image" dialog in the page editor.

    enhancement wiki service Web App 
    opened by rhinoman 0
Releases(0.9.0)
  • 0.9.0(Mar 29, 2016)

  • 0.8.1(Mar 20, 2016)

  • 0.8.0(Mar 7, 2016)

  • 0.7.0(Feb 24, 2016)

    Changes

    • [Major Change] Configuration has been completely reworked. Rather than each service having its own config.ini file, there is now ONE config file, residing in wikifeat/config, along with a wikifeat-config executable which loads the configuration into etcd. Wikifeat services now get most of their configuration from etcd.
    • [Major Change] Certain service instance-specific parameters (node name, port#, etc.) are now set via the command line, rather than the config. This should make wikifeat config/startup easier to 'script'.
    • [Plugin API change] - A bug in the plugin system necessitated a small API change. A plugin's start() function now is required to take a single parameter, which is a jquery $.Deferred object. The plugin must resolve this deferred object when it has completed its initialization. Wikifeat really needs to know a plugin is ready to be used before it tries to use it :)
    • Fix for #46: moment.js deprecation warning
    • Fix for #49: scroll to top of wiki page on load
    Source code(tar.gz)
    Source code(zip)
    wikifeat_0.7.0-alpha.FreeBSD-amd64.tar.gz(26.11 MB)
    wikifeat_0.7.0-alpha.Linux-x86_64.tar.gz(28.12 MB)
  • 0.6.1(Feb 9, 2016)

  • 0.6.0(Feb 7, 2016)

    Changes:

    • [Major Change]: A New Authentication service has been created. Sessions are now managed by the auth service, rather than delegating everything to CouchDB's session management functions. Authorization still makes use of CouchDB's role based per-database access features.
    • [API change] Login and logout functions have been removed from the user service (moved to the auth service)
    • The new markdown editor has now been integrated into comments (the wmd editor is now fully excised)
    • Fixed a timestamp bug with comments
    • Changed the executable names in the build. auth, wikis, users, notifications, frontend are now wikifeat-auth, wikifeat-wikis, wikifeat-users, wikifeat-notifications, and wikifeat-frontend. This makes it a little easier to identify wikifeat processes :)
    • #45 Wiki toolbar now hidden for guest users
    • Several minor fixes
    Source code(tar.gz)
    Source code(zip)
    wikifeat_0.6.0-alpha.FreeBSD-amd64.tar.gz(22.73 MB)
    wikifeat_0.6.0-alpha.Linux-x86_64.tar.gz(22.85 MB)
  • 0.5.0(Jan 24, 2016)

    Changes:

    • #6 Created a new editor for wikifeat (see Markette)
      • Editor has link and image insert dialogs
    • Integrated go-commonmark 0.24.1 and commonmark.js 0.24
    • [API] Minor addition. Added a Query parameter to /wikis/{wiki-id}/files. Adding ?type=image to the query string will return a list of image files belonging to the specified wiki (the default is to return a list of all files).
      • DB Update: Added a new query/view to the wiki ddoc in couchdb. There is an update script in scripts/db_update that will update your wiki databases.
    Source code(tar.gz)
    Source code(zip)
    wikifeat_0.5.0-alpha.FreeBSD-amd64.tar.gz(19.06 MB)
    wikifeat_0.5.0-alpha.Linux-x86_64.tar.gz(19.17 MB)
  • 0.4.0-alpha(Jan 5, 2016)

    Changes:

    • #39 - Support for internal links. Internal links to other wiki pages are now supported (i.e., will no longer refresh the page) if the links are in the form /wikis// note these are ids (uuids), not slugs. A new editor is planned to make inserting these internal links easier. You should probably just ignore this feature until then :)
    • #20 - Basic search for users in the admin user management menu is now supported. There is a new script in scripts/db_update that must be run to enable this.
    • Updated the markdown parser to Commonmark 0.23.0 (go-commonmark and commonmark.js)
    • Much refactoring and bug fixing.

    Note: The index.html file was previously buried in the frontend/web_app directory structure. This was inconvenient as this file would need to be edited if you wanted to apply some customizations (logo, meta tags, etc.). This has been moved up to the frontend/ folder, in the form of an index.html.template file. This will need to be copied to index.html (in the same directory), then you can make edits to index.html. The config.py script performs this copy operation for you if you are doing a fresh install.

    Source code(tar.gz)
    Source code(zip)
    wikifeat_0.4.0-alpha.FreeBSD-amd64.tar.gz(19.11 MB)
    wikifeat_0.4.0-alpha.Linux-x86_64.tar.gz(19.21 MB)
  • 0.3.0-alpha(Dec 15, 2015)

    Changes:

    Important: There have been API changes in this release (mostly cleanup of some inconsistent field names). There is a db_update script in scripts/db_update to apply the changes to the database.

    • #31 A new set of setup/install scripts have been written (in Python instead of bash script)
    • #38 Fixed: homePageId not being saved to wiki model on creation
    • #37 Fixed: Can't back out of web application
    • #36 Created a new default view if no home page is specified in the frontend config.ini
    • #32 Markdown editor box no longer resets when in preview mode
    • #34 Minor API inconsistencies cleaned up
    Source code(tar.gz)
    Source code(zip)
    wikifeat_0.3.0-alpha.FreeBSD-amd64.tar.gz(19.05 MB)
    wikifeat_0.3.0-alpha.Linux-x86_64.tar.gz(19.15 MB)
  • 0.2.1-alpha(Nov 26, 2015)

  • 0.2.0-alpha(Nov 22, 2015)

    Changes:

    • License has been changed from GPLv2 to 3-clause BSD!
    • Comments for wiki pages implemented
    • Guests can now only see wikis they may access in the sidebar wiki list
    • Various small bug fixes

    Note: There are some database changes, an update script (update_011a_to_02a.py) is included in the scripts/db_update folder.

    Source code(tar.gz)
    Source code(zip)
  • 0.1.1-alpha(Nov 2, 2015)

    Changes

    • There has been a change to some of the view functions in the wiki design docs.
    • Added a db_update folder to scripts, along with a script for updating wiki databases in Couch with the latest changes
    • Added preview and edit tabs to the page editor view
    Source code(tar.gz)
    Source code(zip)
  • 0.1-alpha(Oct 11, 2015)

Ukuleleweb is a minimalist Wiki with the look and feel of the original WikiWikiWeb

Ukuleleweb Ukuleleweb is a simple Wiki implementation in the style of the original WikiWikiWeb / C2 wiki. Few dependencies The only dependencies are a

Günther Noack 0 Feb 7, 2022
Our collaborative Wiki software.

Emvi Wiki Support? No. This used to be our SaaS on emvi.com, but didn't work out the way we wanted. It's now open-source to help some of our users kee

Emvi 6 Mar 4, 2022
Community system build using GoFrame.

Focus聚焦社区是GoFrame社区项目,采用了简洁强大的GoFrame作为后端WEB框架, 由于前台系统需要SEO因此使用了GF自带template模板引擎,数据库用MySQL,前端使用jQuery/bootstrap框架。

GoFrame 104 Aug 3, 2022
The source code for workshop Scalable architecture using Redis as backend database using Golang + Redis

The source code for workshop Scalable architecture using Redis as backend database using Golang + Redis

3DS INTERACTIVE 6 Sep 23, 2022
A Golang REST API to handle users and posts for a simple instagram backend. Uses MongoDB as the database. Tested using golang-testing and Postman.

A Golang REST API to handle users and posts for a simple instagram backend. Uses MongoDB as the database. Tested using golang-testing and Postman.

Nitin Narayanan 1 Oct 10, 2021
A simple command line tool using which you can skip phone number based SMS verification by using a temporary phone number that acts like a proxy

Fake-SMS A simple command line tool using which you can skip phone number based SMS verification by using a temporary phone number that acts like a pr

Narasimha Prasanna HN 726 Sep 20, 2022
Golang beego framework based personal simple blog system

goblog 基于Golang的个人简易博客系统 [TOC] goblog介绍 goblog基于go语言开发的一个简约版个人博客系统,基于Golang语言编写,后端基于了Beego的web框架,目前具备博文系统最基础的功能模块.基本上是一个拿来即用的个人博文平台,只需要部署一个mysql数据存储服务

Mr.Qin 2 Nov 9, 2021
A blog system implemented via golang.

goblog functions work as a blog site read/write blogs signup/signin/logout vote with stars 1~5 user admin: add ranks to users: bronze, silver, gold wo

彭 0 Jan 5, 2022
DCreater - Build your own blog system with golang

DCreater - Build your own blog system with golang

null 2 Aug 18, 2022
:construction: Closed. A website and user system (Gin/Backbone).

A website and user system starter. Implemented with gin and Backbone. Gowall is port of Drywall Go Node.js Repository here Drywall Site Gowall Drywall

Petr 34 Jul 6, 2020
Hammond is a self hosted vehicle management system to track fuel and other expenses related to all of your vehicles.

Hammond is a self hosted vehicle management system to track fuel and other expenses related to all of your vehicles. It supports multiple users sharing multiple vehicles. It is the logical successor to Clarkson which has not been updated for quite some time now.

Akhil Gupta 315 Sep 26, 2022
Everything a semantic desktop search engine combined with a single-user document management system

Everything will be a semantic desktop search engine combined with a single-user document management system. It will apply ideas of the semantic web and knowledge graphs to organize your data, allowing you to maintain private knowledge graphs as well as make use of public knowledge graphs, such as Wikidata.

Dominik Honnef 22 May 21, 2022
📈 Reincarnation of mrratality - MRR analytics system for SaaS-apps

remrratality Перерождение проекта mrratality с улучшенной архитектурой и стеком. Данный проект будет использован для лабораторных работ по курсам "Тес

Sergey Kononenko 6 Dec 23, 2021
Gazer system is used to track data.

Gazer System - 凝视系统 这是一个用于长期追踪数据变化的工具。 我们常需要定时针对某些链接进行爬取,以获取历史数据,这个系统为此而生。这是一组无状态的服务,意味着它可以简单地水平扩展。它提供了如下几个功能: 自动代理:使用洋葱路由进行代理,无需自行维护 IP 池,也可以绕过大多数基于

Jannchie 8 Jul 25, 2022
Soong is the replacement for the old Android make-based build system

Soong Soong is the replacement for the old Android make-based build system. It replaces Android.mk files with Android.bp files, which are JSON-like si

null 0 Oct 10, 2021
New GF (Go Frame) based back office management system

GFast-V2 平台简介 基于全新GF(Go Frame)的后台管理系统 前端采用ruoyi-ui 、Vue、Element UI。 阿里云优惠券:点我进入,腾讯云优惠券:点我领取 本项目由奇讯科技团队开发。 特征 高生产率:几分钟即可搭建一个后台管理系统 模块化:单应用多系统的模式,将一个完整的

Mr.Qin 4 Apr 2, 2022
Vehicle Rating System in Go

Vehicle Rating System Build a console application that will gather feedback from a JSON file and generate a rating of vehicles, and map each rating as

Mikako Shirai 0 Nov 3, 2021
REST-API specifically build to support online store system of Zahir

Rest Test. • From Above ERD please create Rest full API. Create register API(Include Generate password). • Acceptance o Phone number and email is uniq

Sandi Permana Soebagio 0 Nov 15, 2021
Blog backend system based on GO

个人博客后端文档 简介 相关功能 v0.1 用户登录、注册 文章发布、查看、评论、点赞 粉丝相关(关注) v0.2 排行榜(文章发布数量、粉丝) v0.3 流量统计 技术栈 语言选用go 大致技术栈选用: kratos + redis + jwt + gorm 项目地址 todo 项目结构

Leslie Lau 0 Nov 26, 2021