Contextualise is an effective tool particularly suited for organising information-heavy projects and activities consisting of unstructured and widely diverse data and information resources — think of investigative journalism, personal and professional research projects, world building (for books, movies or computer games) and many kinds of hobbies.
Contextualise's main dependency is TopicDB, an open source topic maps-based graph store. Topic maps provide a way to describe complex relationships between abstract concepts and real-world (information) resources.
Check out the Awesome Knowledge Management resource, a curated list of amazingly awesome articles, people, projects, applications, software libraries and projects related to the knowledge management space. Alternatively, if you are interested in reading more in-depth articles in relation to knowledge management in general and Contextualise in particular, then check out my blog.
Contextualise's "My maps" view
Contextualise's topic view
Contextualise's navigable network graph view
Contextualise's interactive 3D viewer
I built and published my first (topic maps-based) knowledge documentation tool in 2006 which I was still using until quite recently, almost unmodified, fourteen years later. If I remember correctly, it was built with PHP version 5.2.5! Fourteen years is an eternity in software terms. Nowadays, my preferred choice for web development is Python together with the Flask web development framework.
After fourteen years of using my own and other knowledge management tools, I have several improvements in mind for the next version (many of which are simplifications, for that matter). And perhaps one of the most important reasons for building a new tool like this is that I want it to be open source: both Contextualise (the web application) and TopicDB (the actual topic maps engine on top of which Contextualise is built — also developed by me) are licensed with the permissive open source MIT license.
The following provides an overview of Contextualise's existing (and planned) feature set:
For a more exhaustive list of planned features take a look at Contextualise's list of issues.
Contextualise can be installed using pip
:
$ pip install --upgrade contextualise
Contextualise requires Python 3.7 or higher.
Create a file with the following content:
DATABASE_FILE = "contextualise.db"
Save the file in, for example, your home directory with the file name settings.cfg
. Once you have saved the file, open a terminal and export the following environment variable:
$ export CONTEXTUALISE_SETTINGS=$HOME/settings.cfg
The CONTEXTUALISE_SETTINGS
environment variable is the path to the settings.cfg
file you just created.
Flask's built-in server is not suitable for production purposes. However, it is straightforward to run Contextualise using Gunicorn, a Python WSGI HTTP server. To run Contextualise do:
$ gunicorn -w 2 -b 0.0.0.0:5000 contextualise.wsgi:app
This will start the application — visit http://127.0.0.1:5000/
to access Contextualise.
Several users (with the roles of admin
and user
, respectively) are created by the application. To log in as the admin user, provide the following credentials: admin@contextualise.dev
(user name) and Passw0rd1
(password). To log in as a non-admin user, provide the following credentials: user@contextualise.dev
and Passw0rd1
.
For further information for properly running a flask application in production, take a look at Flask's own documentation regarding deploying.
If you have Git installed on your system, it is possible to install the development version of Contextualise. Do:
$ git clone https://github.com/brettkromkamp/contextualise
$ cd contextualise
$ git checkout develop
$ pip install -e .
The pip install -e .
command allows you to follow the development branch as it changes by creating links in the right places and installing the command line scripts to the appropriate locations.
Then, if you want to update Contextualise at any time, in the same directory do:
$ git pull
TopicDB, the topic maps engine on top of which Contextualise is built is regularly updated. However, the version of TopicDB published on PyPI could lag behind. For that reason, it is recommended that you also install TopicDB directly from GitHub:
$ pip uninstall topic-db
$ git clone https://github.com/brettkromkamp/topic-db.git
$ cd topic-db
$ git checkout develop
$ pip install -e .
Then, if you want to update TopicDB at any time, in the same directory do:
$ git pull
Finally, to run the application in development mode you need to change to the project's top-level directory and set two environment variables followed by running the flask
command with the run
parameter:
$ export FLASK_APP=contextualise
$ export FLASK_ENV=development
$ flask run
This will start the Flask development server on port 5000 — you should see something similar to the following in the terminal:
* Serving Flask app 'contextualise' (lazy loading)
* Environment: development
* Debug mode: on
[2022-02-15 18:45:29,133] INFO in __init__: Contextualise startup
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 122-493-008
[2022-02-15 18:45:29,866] INFO in __init__: Contextualise startup
Opening the browser and navigating to http://127.0.0.1:5000/
should result in showing the application's Welcome page.
The Contextualise Welcome page
Work in progress (February 2022).
JetBrains has kindly provided a license for their full suite of developer tools for Contextualise's development as part of their Licenses for Open Source Development program.
Currently, I am using Contextualise for, among others, worldbuilding purposes of the Brave Robot fictional universe including its Codex Roboticus.
The Codex Roboticus project
I hope you enjoy using Contextualise as much as I enjoy developing it. What's more, I also genuinely hope that Contextualise can help you to improve how you organize your knowledge. If you have any suggestions, questions or critique with regards to Contextualise, I would love to hear from you.
I will see you again, in the place where no shadows fall. — Ambassador Delenn, Babylon 5