A file based wiki that uses markdown

Overview

wikmd

preview

What is it?

It’s a file-based wiki that aims to simplicity. The documents are completely written in Markdown which is an easy markup language that you can learn in 60 sec.

Why markdown?

If you compare markdown to a WYSIWYG editor it may look less easy to use but the opposite is true. When writing markdown you don’t get to see the result directly which is the only downside. Their are more pros: - Easy to process to other file formats - Scalable, it reformats for the perfect display width

How does it work?

Instead of storing the data in a database I chose to have a file-based system. The advantage of this system is that every file is directly readable inside a terminal etc. Also when you have direct access to the system you can export the files to anything you like.

To view the documents in the browser, the document is converted to html.

Features

  • git support (version control)
  • image support including sizing and referencing
  • math/latex
  • code highlight
  • file searching
  • file based
  • dark theme
  • codemirror for editing

Installation

! It's tested on windows and linux based systems. ! Runs on flask server

Clone te repository

git clone https://github.com/Linbreux/wikmd.git

cd in wikmd

cd wikmd

Create a virtual env and activate it(optional)

virtualenv venv
source venv/bin/activate

Install requirements

pip install -r requirements.txt

Run the wiki

export FLASK_APP=wiki.py
flask run --host=0.0.0.0

Now visit localhost:5000 and you will see the wiki. With the 0.0.0.0. option it will show up everywhere on the network.

If there are problems feel free to open an github issue you could post the output of wikmd.log to it.

Linux

Maybe you need to install pandoc on your system before this works.

sudo apt-get update && sudo apt-get install pandoc

Windows

You should install pandoc on your windows system. Now you should be able to start the server.

python wiki.py

If the content of the markdown files are not visible you should add the pandoc-xnos location to your path variable. Info about Environment variables.

pip show --files pandoc-xnos
# look for "location" in the output
# example: C:\users\<user>\appdata\local\packages\pythonsoftwarefoundation.python.3.x\localcache\local-packages\python38\site-packages
# change "site-packages" to "Scripts"
# example: C:\Users\<user>\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.x\LocalCache\local-packages\Python38\Scripts
# open your Environment variables and add the changed line to the path
SET PATH=%PATH%;C:\Users\<user>\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.x\LocalCache\local-packages\Python38\Scripts

Docker install

Build docker

docker build -t wiki-md:latest .

Run Docker

You may need to create wiki/data in your homefolder or you can change it if you want another place.

sudo docker run -d -p 5000:5000 -v ~/wiki/data:/app/wiki wiki-md

If you would like to have the default files inside your instance, you should copy the wiki files to ~/wiki/data in this case. Also highly recommended is to create a folder 'img' inside 'wiki/'

cp wikmd/wiki/* ~/wiki/data/
mkdir ~/wiki/img

Image support

Latex support

$$x_{1,2} = \frac{-b ± \sqrt{b^2 - 4 a c}}{2a}$$

Homepage

The homepage is default the "homepage.md" file, this can't be changed. If this file doesn't exist create it in de wiki folder.

Uploaded images

If you have images that you don't want to be available on the internet, you can put them inside the folder "wiki/img/" for example "testfile.png", now you can link to "/wiki/img/testfile.png"

Custom data path

Usually, wikmd looks for content in the subfolder wiki. In case you want to store your wiki data somewhere else, you can set a custom data path via the environment variable WIKI_DATA:

export WIKI_DATA="~/.wikidata"

Custom picture upload

It's possible to add a custom picture upload path. This is done by adding a IMAGE_ROUTE environment variable.

export IMAGES_ROUTE="media/pictures"

Thanks to @reactorcoremeltdown

Latex

It's possible to use latex syntax inside your markdown because the markdown is first converted to latex and after that to html. This means you have a lot more flexibility.

Change image size

![](https://i.ibb.co/Dzp0SfC/download.jpg){width="50%"}

Image references

![Nice mountain](https://i.ibb.co/Dzp0SfC/download.jpg){#fig:mountain width="50%"}

Inside picture @fig:mountain you can see a nice mountain.

Math

\begin{align}
y(x) &= \int_0^\infty x^{2n} e^{-a x^2}\,dx\\
&= \frac{2n-1}{2a} \int_0^\infty x^{2(n-1)} e^{-a x^2}\,dx\\
&= \frac{(2n-1)!!}{2^{n+1}} \sqrt{\frac{\pi}{a^{2n+1}}}\\
&= \frac{(2n)!}{n! 2^{2n+1}} \sqrt{\frac{\pi}{a^{2n+1}}}
\end{align}
You can also use $inline$ math to show $a=2$ and $b=8$

Converting the files

Open the wiki folder of your instance.

|- static
|- templates
|- wiki <--This folder
|- wiki.py

In this folder all the markdownfiles are listed. Editing the files will be visible in the web-version.

|- homepage.md
|- How to use the wiki.md
|- Markdown cheatsheet.md

The advantage is that u can use the commandline to process some data. For example using pandoc:

pandoc -f markdown -t latex homepage.md How\ to\ use\ the\ wiki.md -o file.pdf --pdf-engine=xelatex

This creates a nice pdf version of your article. Its possible you have to create a yml header on top of your document to set the margins etc better

---
title: titlepage
author: your name
date: 05-11-2020
geometry: margin=2.5cm
header-includes: |
        \usepackage{caption}
        \usepackage{subcaption}
lof: true
---

For more information you have to read the pandoc documentation.

Comments
  • Initial Whoosh search work

    Initial Whoosh search work

    Summary

    Provide a short overview ...

    Details

    Context to describe changes if necessary

    Checks

    • [ ] In case of new feature, add short overview in docs/<corresponding file>
    • [ ] Tested changes
    opened by kura 26
  • YAML configuration and git remote sync

    YAML configuration and git remote sync

    Summary

    New features: yaml configuration support and git remote synchronization. Some bug fixes and refactoring.

    Details

    YAML configuration:

    • all env. vars configuration can be done with the handy wikmd-config.yaml file.
    • every SOME_ENV_VAR env. var has the counterpart in the config file called some_env_var.

    Git remote sync:

    • Optionally, the wiki can be synchronized with a remote git repo; the wiki will pull/push from/to that.
    • sync_with_remote (in yaml) or SYNC_WITH_REMOTE (env. var) will enable the feature.
    • the remote URL of the repo is configurable from remote_url (in yaml) or REMOTE_URL (env. var).

    Refactoring:

    • configuration related code is into a separate config.py file.
    • general methods are into the utils.py file.
    • git related code is into a separate git_manager.py file, with a dedicated WikiRepoManager class.
    • consistent logging messages.

    Improved website style:

    • new favicon.
    • footer link fixed.
    • added Edit Button in the homepage.

    Bug fixes:

    • #26 : commits now work again.
    • #27
    • #28 : pandoc does not try to process GET requests related to favicon.
    • prevent flask from reload twice the wiki service.

    Checks

    • [x] Added new features overview in docs
    • [x] Tested changes
    opened by Mik3Rizzo 26
  • Docker setup fails with Git Error

    Docker setup fails with Git Error

    Running wikmd as docker container with following error.

    wikmd    | [2022-05-28 19:35:41,212] INFO in git_manager: Initializing existing repo >>> wiki ...
    wikmd    | [2022-05-28 19:35:41,212] INFO in git_manager: Creating 'main' branch ...
    wikmd    | [2022-05-28 19:35:41,216] ERROR in git_manager: Existing repo initialization failed >>> Cmd('git') failed due to: exit code(128)
    wikmd    |   cmdline: git branch -M main
    wikmd    |   stderr: 'fatal: unsafe repository ('/app/wikmd/wiki' is owned by someone else)
    wikmd    | To add an exception for this directory, call:
    wikmd    |
    wikmd    |      git config --global --add safe.directory /app/wikmd/wiki'
    

    Troubleshooting done,

    1. Configured PID GID to current user
    2. Ensured path/to/wiki has correct permission
    opened by belibug 17
  • Docker image is huge

    Docker image is huge

    The image is way too big for a wiki that tries to be lean.

    Architecture Size¹
    amd64 448MB
    armhf 563MB
    aarch64 703MB
    ¹Size of #67 images

    I'll try to improve this by using alpine as the base image. But there would also be other ways like reducing the amount of dependencies or switching out dependencies. For example the installed size of pandoc is 100MB on arm64 but markdown would only take up 57KB.

    opened by Oliver-Hanikel 11
  • UnicodeDecodeError on search

    UnicodeDecodeError on search

    I just tried the server withing the docker container as per the instructions and filled it with a few markdown files to test it.
    When typing in a search term and sending it, I get an UnicodeDecodeError as follows:

    UnicodeDecodeError
    
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
    Traceback (most recent call last)
    
        File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 2464, in __call__
    
        return self.wsgi_app(environ, start_response)
    
        File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 2450, in wsgi_app
    
        response = self.handle_exception(e)
    
        File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1867, in handle_exception
    
        reraise(exc_type, exc_value, tb)
    
        File "/usr/local/lib/python3.6/dist-packages/flask/_compat.py", line 39, in reraise
    
        raise value
    
        File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 2447, in wsgi_app
    
        response = self.full_dispatch_request()
    
        File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1952, in full_dispatch_request
    
        rv = self.handle_user_exception(e)
    
        File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1821, in handle_user_exception
    
        reraise(exc_type, exc_value, tb)
    
        File "/usr/local/lib/python3.6/dist-packages/flask/_compat.py", line 39, in reraise
    
        raise value
    
        File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1950, in full_dispatch_request
    
        rv = self.dispatch_request()
    
        File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1936, in dispatch_request
    
        return self.view_functions[rule.endpoint](**req.view_args)
    
        File "/app/wiki.py", line 179, in file_page
    
        return search()
    
        File "/app/wiki.py", line 80, in search
    
        fin = f.read()
    
        File "/usr/lib/python3.6/codecs.py", line 321, in decode
    
        (result, consumed) = self._buffer_decode(data, self.errors, final)
    
        UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
    
    opened by tionis 11
  • Toggling darkmode results in an error

    Toggling darkmode results in an error

    When pressing the toggle darkmode icon in the upper left, i get the following error:

    FileNotFoundError FileNotFoundError: [Errno 2] No such file or directory: '/wiki/toggle-darktheme/None.md'

    If i afterwards go back to the main page, or any other page, the theme has actually toggled, so its just the redirect that is not working.

    I am running it from docker.

    opened by dkgof 8
  • Add caching to wiki entries and homepage

    Add caching to wiki entries and homepage

    Summary

    Add caching to wiki entries and the homepage when they're first viewed.

    Details

    The way this caching works is really simple; when an entry is first viewed the HTML generated will be stored in a local cache. Each time the entry is viewed again, the HTML will be served from the cache, unless the source file has been modified since the cache was generated. If the source file is newer than the cached HTML, the cache file will be deleted and the new content generated and cached.

    This caching system could also be used to cache other thing, it'd be possible to reconfigure it further if required too, like moving the file modification time check done in cache.get, allowing caching things that do not have a physical file on disk but this would require moving the modification check to where the entry is read and returned to the user for example.

    Checks

    • [x] In case of new feature, add short overview in docs/<corresponding file>
    • [x] Tested changes
    opened by kura 8
  • Usability and refactoring

    Usability and refactoring

    Hi, Nice work again (I'm the guy from Reddit)!

    I've found some small usability issues related to item positioning, general consistency and style. I'm trying to improve the design of the website (I've switched to bootstrap 5.1) in order to reach a better user interaction. I'm also trying to refactor a little bit the project, both for the structure side and from the coding side (comments, etc.).

    I've also some ideas, but I am not sure I'll manage to implement them soon, so I'll leave them as a suggest:

    • sidebar to show the hierarchy of the wiki, maybe collapsible
    • breadcrumbs to show the current page and the path
    • .json/.yaml config file, in my opinion is handier than set up env variables
    • periodic git push to personal remote repo

    Feel free to check out my fork. One of these days I'll do a PR if you agree.

    Best regards, Michele

    opened by Mik3Rizzo 8
  • Exception for custom wiki directory

    Exception for custom wiki directory

    I set up wiki_directory = "m-iki" and I got this exception:

    Traceback (most recent call last):
      File "/opt/wikmd/wiki.py", line 39, in <module>
        wrm = WikiRepoManager(flask_app=app)
      File "/opt/wikmd/git_manager.py", line 45, in __init__
        self.__git_repo_init()
      File "/opt/wikmd/git_manager.py", line 55, in __git_repo_init
        self.__init_remote_repo()
      File "/opt/wikmd/git_manager.py", line 88, in __init_remote_repo
        if os.listdir(self.wiki_directory):
    FileNotFoundError: [Errno 2] No such file or directory: 'm-iki'
    
    opened by Mik3Rizzo 7
  • Update Import hashes

    Update Import hashes

    Summary

    Update Import hashes

    Details

    New hashes of imported stylesheets

    Checks

    • [ ] In case of new feature, add short overview in docs/<corresponding file>
    • [x] Tested changes
    opened by Archef2000 6
  • Fails to render when running from systemd

    Fails to render when running from systemd

    Wanted to thank you for this project. I needed something like this to maintain my notes. Great work!

    So I am running it locally and want to start the wiki via systemd. When I run from shell, the wiki works well and renders properly. When I run via systemd, it does not render the pages.

    Systemd Unit

    [Unit]
    Description=My Notes wiki
    After=network.target
    
    [Service]
    User=myusename
    WorkingDirectory=/home/daksh/wiki/wikmd/
    Environment=FLASK_APP=wiki.py
    Environment=FLASK_DEBUG=1
    Environment=FLASK_ENV=development
    Environment=FLASK_CONFIG=development
    ExecStart=/home/myusename/wiki/wikmd/.venv/bin/python3 -m flask run --host=0.0.0.0
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    Traces

    * wikmd.service - My Notes wiki
       Loaded: loaded (/etc/systemd/system/wikmd.service; disabled; vendor preset: enabled)
       Active: active (running) since Sun 2020-11-29 11:51:36 EST; 2s ago
     Main PID: 19283 (python3)
        Tasks: 3 (limit: 4915)
       CGroup: /system.slice/wikmd.service
               ├─19283 /home/myusename/wiki/wikmd/.venv/bin/python3 -m flask run --host=0.0.0.0
               └─19311 /home/myusename/wiki/wikmd/.venv/bin/python3 -m flask run --host=0.0.0.0
    
    Nov 29 11:51:36 systemd[1]: Started My Notes wiki.
    Nov 29 11:51:36 python3[19283]:  * Serving Flask app "wiki.py" (lazy loading)
    Nov 29 11:51:36 python3[19283]:  * Environment: development
    Nov 29 11:51:36 python3[19283]:  * Debug mode: on
    Nov 29 11:51:36 python3[19283]:  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
    Nov 29 11:51:36 python3[19283]:  * Restarting with stat
    Nov 29 11:51:36 python3[19283]:  * Debugger is active!
    Nov 29 11:51:36 python3[19283]:  * Debugger PIN: 125-541-320
    
    opened by dakshsriv 6
  • Changing Webroot

    Changing Webroot

    I want to host my wiki at mydomain.xyz/wiki. I have set up the correct reverse proxy via caddy, but the frontend returned by wikmd does not have the correct links. How do I change the webroot?

    opened by DhruvaSambrani 4
  • Directory traversal vulnerabilities

    Directory traversal vulnerabilities

    I have discovered several directory traversal vulnerabilities. The capabilities are as follows:

    • Any .md file on the system can be read by an unauthenticated attacker
    • The contents of sibling directories to the wiki directory can be listed by unauthenticated attacker in certain circumstances.
    • Any .md file on the system can be overwritten by an unauthenticated attacker by default (authentication required if edit password protection is enabled)
    • Any .md file on the system can be deleted by an unauthenticated attacker by default (authentication required if edit password protection is enabled)
    • New directories and .md files can be created on the system with arbitrary contents and paths by an unauthenticated attacker by default (authentication required if edit password protection is enabled)

    Details as follows:

    Directory traversal in /list/

    The /list/ request can be used to get a list of files in the wiki, or in a subdirectory of the wiki.

    In wiki.py the list_wiki function that handles /list/ requests checks whether the canonical form of the requested path shares a common prefix with the configured "safe" wiki directory:

    https://github.com/Linbreux/wikmd/blob/04482d30fe502d96fee440423a4c823bd683dd3f/wiki.py#L102-L107

    This is intended to prevent directory traversal. However, this does not prevent traversal to sibling directories whose names start with the same name as the configured wiki directory.

    For example, consider the following directory structure:

    home
    └── user
        └── wikmd
            ├── wiki
            │   ├── homepage.md
            │   └── foo.md
            └── wiki_secret
                └── secret.md
    

    If an attacker requests /list/../wiki_secret/, the following happens:

    1. folderpath is set to ../wiki_secret/
    2. cfg.wiki_directory is configured to serve out of the wiki directory, so safe_folder becomes /home/user/wikmd/wiki
    3. requested_path is created by joining cfg.wiki_directory and folderpath, which results in /home/user/wikmd/wiki/../wiki_secret/
    4. requested_path is canonicalised with os.path.realpath(), which returns /home/user/wikmd/wiki_secret.
    5. os.path.commonprefix() is called on the canonicalised request path and safe_folder, which searches character-by-character and returns the prefix substring up until the first difference. Since /home/user/wikmd/wiki and /home/user/wikmd/wiki_secret are the arguments, the result is /home/user/wikmd/wiki
    6. This is compared to safe_folder, which is /home/user/wikmd/wiki, and therefore the check passes.
    7. The contents of /home/user/wikmd/wiki_secret are listed.

    This can be demonstrated simply by sending GET /list/../wiki_secret/ and two enter key presses to the server using netcat.

    Directory traversal in page display

    There is no directory traversal protection inside the file_page function. As such, any .md file on the system can be displayed.

    This can be trivially demonstrated with any default install by sending GET /../README and two enter presses to the server using netcat. This will return the HTML rendered copy of the README.md file in the wikmd directory.

    Directory traversal in page edit

    There is no directory traversal protection inside the edit function. This can be used both for reading and writing any .md file on the system. This function is unauthenticated by default, but may be configured to require a password.

    When a GET request is sent to an /edit/ route, this function displays the existing contents of the file. This can be demonstrated by sending GET /edit/../README and two enter presses to the server using netcat. This will display the HTML of the edit template with the contents of the README.md file in the wikmd directory included.

    When a POST request is sent to an /edit/ route, the following code path is taken:

    https://github.com/Linbreux/wikmd/blob/04482d30fe502d96fee440423a4c823bd683dd3f/wiki.py#L276-L282

    The fetch_page_name() function acquires the page name from the PN form variable.

    The page variable contains the portion of the URL after /edit/. No traversal check is performed. If the value provided in the PN form variable does not match the path in the URL, the file specified by the URL is deleted. Since the path is vulnerable to traversal, any .md file on the system can be deleted using this method.

    The save() function saves the page. Since the page name is taken from the PN form variable without validation, this allows any .md file on the system to be written to. The save() function creates the full directory path to the target file name, so this enables the creation of directories anywhere on the system.

    Directory traversal in new page creation

    The add_new() function handles /add_new. This function is unauthenticated by default, but may be configured to require a password.

    The PN form variable is used to specify the name/path of the page to create, but no traversal protection is performed. This function calls into save() in the same way that the page edit functionality does, with the same impact.

    Directory traversal in remove

    The remove() function handles /remove/ route requests. This function is unauthenticated by default, but may be configured to require a password.

    The path is taken from the URL and is not validated or protected against traversal. This allows for any .md file on the system to be deleted.


    Remediation

    The existing commonprefix() traversal check in list_wiki() is broken and should be removed.

    The safe_join() function provided by Flask should be utilised instead of os.path.join() in all cases where one or more of the path arguments is untrusted. This function will raise a NotFound exception if traversal out of the base directory is attempted.

    opened by gsuberland 2
  • Directory Listings Missing First Character

    Directory Listings Missing First Character

    Hello, I have observed that when listing files (and clicking the subsequent links), the first character of the top level directory is missing. As a written example:

    • Wiki/Technical/Cisco.md

    with Wiki as the root, when you click "List all pages" you see:

    • echnical/Cisco

    These files are contents searchable- so it's not a wiki wide issue. I've had a look to try and work it out, but couldn't see where in the code the issue was (apologies). When listing all pages, the wiki doesn't throw out any errors. When you click one of the bad links you get the below error in the log:

    FileNotFoundError: [Errno 2] No such file or directory: '/home/sqshr/Wiki/echnical/Cisco.md'

    I know this error isn't useful for the above issue (hence omitting the Traceback)- but want to show willing :)

    Thanks!

    opened by sqshr 2
  • Branch rename failed when creating a new instance.

    Branch rename failed when creating a new instance.

    When launching a fresh new instance I get the following error,

    ERROR in git_manager: New local repo initialization failed >>> Cmd('git') failed due to: exit code(128)
      cmdline: git branch -M main
      stderr: 'error: refname refs/heads/master not found
    fatal: Branch rename failed'
    

    After a quick look I think this line should really be a git checkout -b <branch_name>.

    opened by artivis 2
Releases(v1.7.3)
  • v1.7.3(Oct 25, 2022)

    What's Changed

    • Change dark mode toggle to use a return path as a request argument rather than using the Referer header. Fixes #76 by @kura in https://github.com/Linbreux/wikmd/pull/77
    • Fix the directory traversal vulnerabilities as described in #80 by @Oliver-Hanikel in https://github.com/Linbreux/wikmd/pull/82

    Full Changelog: https://github.com/Linbreux/wikmd/compare/v1.7.2...v1.7.3

    Source code(tar.gz)
    Source code(zip)
  • v1.7.2(Sep 15, 2022)

    What's Changed

    • Added solution for missing python deps when running as service by @potatoes1286 in https://github.com/Linbreux/wikmd/pull/63
    • Add caching to wiki entries and homepage by @kura in https://github.com/Linbreux/wikmd/pull/59
    • Create a fresh new cache each time wikmd is started/restarted by @kura in https://github.com/Linbreux/wikmd/pull/64
    • Initial Whoosh search work by @kura in https://github.com/Linbreux/wikmd/pull/61
    • Fixes/changes for #65 by @kura in https://github.com/Linbreux/wikmd/pull/66
    • fix the armhf and aarch64 Docker images by @Oliver-Hanikel in https://github.com/Linbreux/wikmd/pull/67
    • Use secrets instead of random for generating session tokens by @Oliver-Hanikel in https://github.com/Linbreux/wikmd/pull/71
    • Remove the search term escaping to improve search functionality. by @kura in https://github.com/Linbreux/wikmd/pull/72
    • Add pagination to search results by @kura in https://github.com/Linbreux/wikmd/pull/73
    • Small code improvements by @Oliver-Hanikel in https://github.com/Linbreux/wikmd/pull/74
    • Image improvements by @Oliver-Hanikel in https://github.com/Linbreux/wikmd/pull/75

    Full Changelog: https://github.com/Linbreux/wikmd/compare/v1.7.1...v1.7.2

    Source code(tar.gz)
    Source code(zip)
  • v1.7.1(Sep 4, 2022)

    What's Changed

    • Add empty js directory. Fixes #55 by @kura in https://github.com/Linbreux/wikmd/pull/56
    • Add solutions for potentially obscure install issue by @potatoes1286 in https://github.com/Linbreux/wikmd/pull/57
    • Fixes #58 by @kura in https://github.com/Linbreux/wikmd/pull/60
    • Bump jinja2 from 2.11.2 to 2.11.3 by @dependabot in https://github.com/Linbreux/wikmd/pull/62

    New Contributors

    • @kura made their first contribution in https://github.com/Linbreux/wikmd/pull/56
    • @potatoes1286 made their first contribution in https://github.com/Linbreux/wikmd/pull/57
    • @dependabot made their first contribution in https://github.com/Linbreux/wikmd/pull/62

    Security

    Local File Enumeration when accessing /list (by @mephue) Prevent Cross-site Scripting when editing makdown file (by @mephue)

    Full Changelog: https://github.com/Linbreux/wikmd/compare/v1.7.0...v1.7.1

    Source code(tar.gz)
    Source code(zip)
  • v1.7.0(Aug 25, 2022)

    What's Changed

    • Feature password protect edit by @Linbreux in https://github.com/Linbreux/wikmd/pull/48
    • add local mode by @Oliver-Hanikel in https://github.com/Linbreux/wikmd/pull/54

    New Contributors

    • @Oliver-Hanikel made their first contribution in https://github.com/Linbreux/wikmd/pull/54

    Full Changelog: https://github.com/Linbreux/wikmd/compare/v1.6.2...v1.7.0

    Source code(tar.gz)
    Source code(zip)
  • v1.6.2(Jun 9, 2022)

    What's Changed

    • fix docker ci by @artivis in https://github.com/Linbreux/wikmd/pull/47

    Full Changelog: https://github.com/Linbreux/wikmd/compare/v1.6.1...v1.6.2

    Source code(tar.gz)
    Source code(zip)
  • v1.6.1(Jun 9, 2022)

    What's Changed

    • Creates a folder if it does not exist by @Linbreux in https://github.com/Linbreux/wikmd/pull/37
    • Configuration refactoring by @Mik3Rizzo in https://github.com/Linbreux/wikmd/pull/38
    • Fix docker image + CI by @artivis in https://github.com/Linbreux/wikmd/pull/45
    • fix docker image tagging by @artivis in https://github.com/Linbreux/wikmd/pull/46

    New Contributors

    • @artivis made their first contribution in https://github.com/Linbreux/wikmd/pull/45

    Full Changelog: https://github.com/Linbreux/wikmd/compare/v1.5...v1.6.1

    Source code(tar.gz)
    Source code(zip)
  • v1.5(Apr 7, 2022)

    What's Changed

    • add docker files by @Linbreux in https://github.com/Linbreux/wikmd/pull/31
    • YAML configuration and git remote sync by @Mik3Rizzo in https://github.com/Linbreux/wikmd/pull/29
    • Fixed exception when deleting a wiki page by @Mik3Rizzo in https://github.com/Linbreux/wikmd/pull/35
    • Allow to sync with a remote git repo

    Full Changelog: https://github.com/Linbreux/wikmd/compare/v1.4.4...v1.5

    Source code(tar.gz)
    Source code(zip)
  • v1.4.4(Mar 28, 2022)

  • v1.4.3(Mar 13, 2022)

    What's Changed

    • Improved UX, refactoring/cleaning by @Mik3Rizzo in https://github.com/Linbreux/wikmd/pull/25

    New Contributors

    • @Mik3Rizzo made their first contribution in https://github.com/Linbreux/wikmd/pull/25

    Full Changelog: https://github.com/Linbreux/wikmd/compare/v1.4.2...v1.4.3

    Source code(tar.gz)
    Source code(zip)
  • v1.4.2(Mar 3, 2022)

    What's Changed

    • Knowledge graph by @Linbreux in https://github.com/Linbreux/wikmd/pull/18
    • fix files from different folders by @Linbreux in https://github.com/Linbreux/wikmd/pull/19
    • put git repo in try by @Linbreux in https://github.com/Linbreux/wikmd/pull/21

    Full Changelog: https://github.com/Linbreux/wikmd/compare/v1.4.1...v1.4.2

    Source code(tar.gz)
    Source code(zip)
  • v1.4.1(Feb 23, 2022)

    What's Changed

    • Add HOMEPAGE and HOMEPAGE_TITLE environment vars by @poblabs in https://github.com/Linbreux/wikmd/pull/14
    • Sorting by @Linbreux in https://github.com/Linbreux/wikmd/pull/16

    New Contributors

    • @poblabs made their first contribution in https://github.com/Linbreux/wikmd/pull/14

    Full Changelog: https://github.com/Linbreux/wikmd/compare/v1.4...v1.4.1

    Source code(tar.gz)
    Source code(zip)
  • v1.4(Feb 5, 2022)

    What's Changed

    • Create main.yml by @Linbreux in https://github.com/Linbreux/wikmd/pull/9
    • Integrate tests by @Linbreux in https://github.com/Linbreux/wikmd/pull/10
    • Make the data path configurable via env var WIKI_DATA by @p-vitt in https://github.com/Linbreux/wikmd/pull/11
    • Fixed a couple of bugs by @gtsitsiridis in https://github.com/Linbreux/wikmd/pull/12

    New Contributors

    • @p-vitt made their first contribution in https://github.com/Linbreux/wikmd/pull/11
    • @gtsitsiridis made their first contribution in https://github.com/Linbreux/wikmd/pull/12

    Full Changelog: https://github.com/Linbreux/wikmd/compare/v1.3...v1.4

    Source code(tar.gz)
    Source code(zip)
  • v1.3(Dec 2, 2021)

    What's Changed

    • change edit path to match folder if it exists by @Linbreux in https://github.com/Linbreux/wikmd/pull/8
    • UI changes
    • codemirror integration
    • dark theme

    Full Changelog: https://github.com/Linbreux/wikmd/compare/v1.2...v1.3

    Source code(tar.gz)
    Source code(zip)
  • v1.2(Nov 28, 2021)

    What's Changed

    • Allowing custom picture upload paths by @reactorcoremeltdown in https://github.com/Linbreux/wikmd/pull/6
    • Introducing hierarchical structure by @reactorcoremeltdown in https://github.com/Linbreux/wikmd/pull/7
    • List all files in the wiki or from a folder
    • Small bug fix

    New Contributors

    • @reactorcoremeltdown made their first contribution in https://github.com/Linbreux/wikmd/pull/6

    Full Changelog: https://github.com/Linbreux/wikmd/compare/v1.1...v1.2

    Source code(tar.gz)
    Source code(zip)
  • v1.1(Nov 2, 2021)

Open source rich text editor based on HTML5 and the progressive-enhancement approach. Uses a sophisticated security concept and aims to generate fully valid HTML5 markup by preventing unmaintainable tag soups and inline styles.

This project isn’t maintained anymore Please check out this fork. wysihtml5 0.3.0 wysihtml5 is an open source rich text editor based on HTML5 technolo

Christopher Blum 6.5k Jan 7, 2023
Open source rich text editor based on HTML5 and the progressive-enhancement approach. Uses a sophisticated security concept and aims to generate fully valid HTML5 markup by preventing unmaintainable tag soups and inline styles.

This project isn’t maintained anymore Please check out this fork. wysihtml5 0.3.0 wysihtml5 is an open source rich text editor based on HTML5 technolo

Christopher Blum 6.5k Dec 30, 2022
enjoy live editing (+markdown)

Pen Editor LIVE DEMO: http://sofish.github.io/pen Markdown is supported Build status: 0. source code You can clone the source code from github, or usi

小鱼 4.8k Dec 24, 2022
A markdown editor. http://lab.lepture.com/editor/

Editor A markdown editor you really want. Sponsors Editor is sponsored by Typlog. Overview Editor is not a WYSIWYG editor, it is a plain text markdown

Hsiaoming Yang 2.8k Dec 19, 2022
🍞📝 Markdown WYSIWYG Editor. GFM Standard + Chart & UML Extensible.

TOAST UI Editor v3 major update planning ?? ?? ?? TOAST UI Editor is planning a v3 major update for 2021. You can see our detail RoadMap here! GFM Mar

NHN 15.5k Jan 3, 2023
A simple, beautiful, and embeddable JavaScript Markdown editor. Delightful editing for beginners and experts alike. Features built-in autosaving and spell checking.

SimpleMDE - Markdown Editor A drop-in JavaScript textarea replacement for writing beautiful and understandable Markdown. The WYSIWYG-esque editor allo

Sparksuite 9.3k Jan 4, 2023
:notebook: Our cool, secure, and offline-first Markdown editor.

Monod Hi! I'm Monod, the Markdown Editor! Monod is a (relatively) secure and offline-first Markdown editor we have built at TailorDev in order to lear

TailorDev 877 Dec 4, 2022
Easily convert markdown files to PDF

ezPDF What's this? This is a simple markdown to pdf parser that supports custom CSS stylesheets. In the future, ezPDF will allow you to preview files

Matheus 12 Oct 11, 2022
In-browser Markdown editor

StackEdit Full-featured, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites

Benoit Schweblin 19.9k Jan 9, 2023
A markdown editor using Electron, ReactJS, Vite, CodeMirror, and Remark

updated: Saturday, 5th February 2022 A modern looking application built with Electron-Vite-React ?? ✨ Markdown Editor Introduction This application s

Kryptonite 5 Sep 7, 2022
Medium.com WYSIWYG editor clone. Uses contenteditable API to implement a rich text solution.

If you would be interested in helping to maintain one of the most successful WYSIWYG text editors on github, let us know! (See issue #1503) MediumEdit

yabwe 15.7k Jan 4, 2023
Example VS Code plugin that uses embedded Omega Edit bindings to generate content

Ωedit Edit for VS Code Example VS Code plugin that uses embedded Omega Edit bindings to generate content. Build Requirements Bindings compiled against

Concurrent Technologies Corporation (CTC) 2 Nov 17, 2022
Customize your README.md file with ready-to-use sections in a simple way with the web editor

myreadme Customize your README.md file with ready-to-use sections in a simple way with the web editor Docker version Docker Hub docker run -p 7000:300

Nelson Hernández 7 Jul 25, 2022
A web-based tool to view, edit, format, and validate JSON

JSON Editor JSON Editor is a web-based tool to view, edit, format, and validate JSON. It has various modes such as a tree editor, a code editor, and a

Jos de Jong 10.1k Jan 4, 2023
A browser based code editor

Monaco Editor The Monaco Editor is the code editor which powers VS Code, with the features better described here. Please note that this repository con

Microsoft 32.4k Jan 3, 2023
Lightweight UI components for Vue.js based on Bulma

Buefy is a lightweight library of responsive UI components for Vue.js based on Bulma framework and design. Features Keep your current Bulma theme / va

Buefy 9.4k Jan 4, 2023
A browser based code editor

Monaco Editor The Monaco Editor is the code editor which powers VS Code, with the features better described here. Please note that this repository con

Microsoft 24.6k May 17, 2021
Typewriter is a simple, FOSS, Web-based text editor that aims to provide a simple and intuitive environment for you to write in.

Typewriter Typewriter is a simple, FOSS, Web-based text editor that aims to provide a simple and intuitive environment for you to write in. Features S

Isla 2 May 24, 2022
Browser-based code editor created to edit local or server files online

notIDE Browser-based code editor created to edit local or server files online. Features Autosave while editing Syntax highlight using ace editor Creat

Mr Crypster 15 Nov 21, 2022