• Stars
    star
    237
  • Rank 169,885 (Top 4 %)
  • Language
    JavaScript
  • Created about 7 years ago
  • Updated about 6 years ago

Reviews

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

Repository Details

Open source, language independent, modern personal wiki

Exocortex Logo

Exocortex

A modern git based personal wiki that doesn't suck.

Features

  • Language independent
  • Easy/zero configuration
  • Modern UI
  • Git based versioning
  • Git based syncing (to GitHub)
  • Intuitive hotkeys for better editing UX
  • Prefetch internal wiki pages for faster response times
  • Automatic Table Of Contents on pages (if you want)
  • Spellcheck while you edit
  • Live markdown preview
  • Many more...

Why?

I couldn't find an open source wiki solution that I was happy with. They either looked super shitty, had terrible UX, or required a ton of configuration to get going (including sometimes installing new languages!). Exocortex aims to solve some these problems.

First Principles

  1. Should be easy to run locally - brew install && brew services
  2. Should only require a git repo to operate - git init
  3. Should have a modern interface that is a pleasure to work with (SPA React) - comes bundled with the binary.
  4. Should be backed up in the cloud so I never lose my hard work - thank you GitHub!
  5. Should only allow markdown for editing to reduce feature bloat - .md ftw πŸ˜ƒ

Installation

Go binaries can be downloaded directly from the releases page.

Homebrew

$ brew tap spencercdixon/formulae
$ brew install exocortex
$ exo new my-first-wiki
$ cd my-first-wiki && exo start
$ open http://localhost:1234

Starting exocortex as a service on boot

User Requirements

  1. Must have git installed
  2. Wiki must be a git repository
  3. Must have an exocortex.json in your repo. (exo init for existing projects)
  4. Nothing else πŸ’₯

Commands

  • new - creates a new directory with an exocortex.json file
  • start - boots up the wiki server
  • init - creates a templated exocortex.json file based on sensible defaults
  • version - shows what version of exo binary you have installed

Configuration

You shouldn't really need to worry about this. If you run exo new to create a wiki or exo init in an existing directory full of .md files these will get pre-populated with sensible defaults.

  • syncInterval - time between remote pushes if remote is set up
  • repository - absolute path to where the repo for this wiki lives
  • title - base title for the wiki
  • remote - where to push the wiki to on the interval
  • branch - branch to use when pushing/pulling from remote
  • server.host - host wiki is located at
  • server.port - port to listen on

Hotkeys

Hot keys gif

Action Shortcut Description
Zen Mode cmd + z Eliminate all noise around the wiki for better editing
Help Mode cmd + /|? Show hot key help
Insert/Edit Mode cmd + e|i Turn whatever page you're viewing into 'edit' mode
Save Page cmd + s Save the page you're working on
Preview Mode cmd + p Turn whatever page you're viewing into 'edit' mode and split screen with a preview of what the MD will render to on the right

Auto TOC

Tip

If you want your pages to have a Table of Contents just add a # toc somewhere in the markdown

Feature Roadmap

Exocortex is missing a lot of useful features that would enable it to go beyond just being a local personal wiki. I developed it while on Thanksgiving vacation primarily on planes so there was a limited feature set that I decided to prioritize. See below for a list of enhancements I'd like to add in the coming weeks:

  • Prefetching of pages for better responsiveness
  • User authentication
  • Better UI customization/overrides
  • Add ability to revert pages to previous commits
  • Add ability to see diffs between commits
  • Add boilerplates to new command to get nice wiki structures fast
  • Autocomplete on linked wiki pages

Folder structure

readme.md       <-- file used for wiki homepage (not required)
exocortex.json  <-- wiki globals (required)
.git            <-- data store for the wiki (required)

That's it! The rest of your wiki can be structured however you'd like. In the future I'd like to include some boilerplates users can start from.

API Routes

Method Path Description
GET /api/settings returns global wiki settings
POST /api/settings sets settings - only certain fields are allowed to be updated via API
POST /api/search search through wiki for a query
POST /api/images/:path-to-image serve static images found in the wiki
GET /api/wiki/:page-name retrieves content for this page
POST /api/wiki/:page-name writes the file, commits
DELETE /api/wiki/:page-name deletes the page
GET /api/ returns list of prefixes available
GET /* return the UI

UI Routes

Route Description
/search Renders search results
/wiki/:page-name Renders markdown of that path
/wiki/new/:page-name Create a new page that doesn't exist in tree yet
/wiki/edit/:page-name Update a page that exists
/wiki/revisions/:page-name TODO: See past revisions

Why the name Exocortex?

Exocortex was shamelessly stolen from the book Pragmatic Thinking & Learning. Andy Hunt talks a lot about the value of having an 'excortex' or personal wiki to record your learning. I started documenting my own exocortex in .md files a year or so ago and this project aims to be a nice interface for that work.

Start On Boot

When using Exocortex as a service it will look at your $HOME for a config file to use. This is how I have my machine setup:

$ ln -s ~/wiki/exocortex.json ~/exocortex.json  <--- Sym link my main wiki's config to home
$ brew services start exocortex  <--- start the service

Development/Contributing

Note: I'm open to bug fixes and feature requests but I'm not sure how much free time I'll be able to commit to working on this. If there is a feature you aboslutely must have right away then feel free to fork!

There are a whole bunch of TODO's I'm working through located here. If you want to help contribute those are a good place to start.

Ensure you have the following installed:

  • go 1.9
  • node >6
  • yarn

Quick Start Development

Make bootstrap will build the UI, install the Go binary, create an empty example wiki, and boot up that example wiki on localhost:1234.

$ go get -u github.com/spencercdixon/exocortex
$ cd $GOPATH/src/github.com/spencercdixon/exocortex
$ make bootstrap

Frontend

First make sure you have the backend running on port 1234

To work on the frontend you can run:

$ cd ui
$ yarn install
$ yarn start

This should boot up http://localhost:3000 with a dev server that proxies to localhost:1234 (where the API lives).

Releasing

  1. Create a new git tag:
$ git tag -a v1.0.0 -m "v1.0.0 major milestone!"
$ git push origin v1.0.0
  1. Export github token
$ export GITHUB_TOKEN=<repo access>
  1. Use goreleaser to release.
$ make release

More Repositories

1

redux-cli

An opinionated CLI for building redux/react apps quicker
JavaScript
882
star
2

rails-tricks

A repository to hold all rails tips and tricks I find while studying
Ruby
82
star
3

react-testing-starter-kit

React/Webpack react starter kit to get up and going with TDD quickly. Uses Chai, Mocha, Sinon, Enzyme, and Karma. OUTDATED --> Use Jest!
JavaScript
68
star
4

blog

Personal Gatsby.js blog
JavaScript
11
star
5

Gosu-Tutorial

Tutorial to teach people the fundamentals
Ruby
11
star
6

palettes

A CLI and UI for discovering what colors different websites use.
JavaScript
9
star
7

api-clinic

Clinic on explaining how to use API's
Ruby
6
star
8

advent_of_code_cpp

Advent of code challenges using C++ (no STL)
C++
5
star
9

chuck_norris

A Ruby gem wrapping the Chuck Norris API
Ruby
4
star
10

wiki

Personal wiki used with: https://github.com/SpencerCDixon/exocortex
4
star
11

javascript-tricks

[NOT BEING UPDATED] repo to hold all the tips and tricks I learn about javascript
JavaScript
4
star
12

SQL-Challenge

Converting CSV to normalized DB
Ruby
3
star
13

SpenceBoy

A gameboy emulator for educational purposes
C++
3
star
14

neutrino-preset-prettier

A neutrino preset to format code automatically using Prettier
JavaScript
3
star
15

simple-udp-server

Just a simple UDP server in C for education purposes
C
2
star
16

rescue-live

Live coding for 3/26
Ruby
2
star
17

redux-light

JavaScript
2
star
18

oak-lang

Toy language to help learn about interpreters
Go
2
star
19

redux-cli-boilerplate

React Starter kit to play with redux-cli
JavaScript
2
star
20

LaunchPairs

Practice getting omniauth set up with github and using a postgres database.
JavaScript
2
star
21

React-Redux-Voting

Tutorial app on how to build a react/redux/socket.io app
JavaScript
2
star
22

imagery-frontend

React/Redux frontend for displaying photos from Ditto API
JavaScript
2
star
23

tdd-black-jack

TDD Unit Testing Black Jack in Ruby
Ruby
2
star
24

SmashLeaderboard

Super smash leaderboard for work written in React, Rails, and Redux
JavaScript
1
star
25

tuple-notifier

Example repo for calling code when Tuple call starts/ends
C++
1
star
26

mentor-group-kickball

kickball challenge review in mentor group
Ruby
1
star
27

spencerdixon.com

Oudated. See: https://github.com/SpencerCDixon/spencercdixon.github.io for personal site
Ruby
1
star
28

mentor-group-css-clinic

Customizing foundation to look cooler
HTML
1
star
29

mentor-group-acceptance-testing

Explanation of acceptance testing and some live coding examples
Ruby
1
star
30

Launch-Pairs-Rails

Launch Pairs for Rails
Ruby
1
star
31

dotfiles

personal dotfiles
Vim Script
1
star
32

theberrygame

A game of berry greatness.
Ruby
1
star
33

mmorps-challenge

RPS using sessions and Sinatra
HTML
1
star
34

SprayPaint

Super basic Sass Front End Framework for prototyping websites
CSS
1
star
35

drag-and-drop-example

Repo to mess around with React DnD
JavaScript
1
star
36

rql

Rio Query Language - the worst DB in the world
Go
1
star
37

HabitsuV2

Rails app using Twilio and Chart.js to track habits and display data about them
Ruby
1
star
38

advent_of_code_2022

Brushing up on Ruby this year
Ruby
1
star
39

Ember-CLI-Example

Simple twitter clone built using ember cli
Ruby
1
star
40

mentor-group-devise-intro

Showing sign in and sign up testing with devise
Ruby
1
star
41

gtk-template

Super minimal project template for building a gtkmm app
CMake
1
star