MoinMoin 2.0

How to help

As you see below, all this is quite a big task and we need help:

How to start:

Release date

As moin2 is still in development, we can't give any release date yet.

If you want it to happen sooner rather than later, think about helping.

But we can give some criteria that help you to choose:

MoinMoin 2.0 (short: moin2) will be a big step in moin development, we are rewriting and refactoring some core components of moin heavily.

Documentation: moin2 online docs or docs/ in the repo.

Repo and Issue Tracker: https://github.com/moinwiki/moin (we moved to github in 2018)

See also:

The big news

Sphinx-based docs

We are working on documentation using the Sphinx documentation system, which is also what python.org uses.

See the moin2 docs on readthedocs.org or docs/ in the repo.

(!) Docs are far from finished, help is appreciated.

Storage API

moin 1.x: the storage code was mixed into Page, PageEditor and AttachFile modules (yes, quite messy).

moin 2: storage code will be in MoinMoin.storage package and misc. storage backends will be supported, all conforming to the same "storage API".

Storage Layers: stores, backends, middlewares

Namespaces

Namespaces can be used to keep stuff separate (on the frontend/logically as well as on the backend, potentially accessing different backends for different namespaces):

More info: MoinMoin2.0/Namespaces

Mimetype items

In moin 1.x, there were 3 main types of stored objects in the wiki: pages, attachments and user profiles.

In moin 2, there will be only 1 type of stored object: an "Item".

Some facts:

moin 1.9

moin 2

user_dir with user profiles

items with mimetype: application/x.moin.userprofile

data_dir with pages and attachments

items

page

item with mimetype: text/x.moin.wiki in metadata

jpeg attachment

item with mimetype: image/jpeg

unrevisioned attachments

items with appropriate mimetype

attachments have no metadata

revisions with arbitrary metadata

attachments "inherit" ACLs from page

all items/revisions may have own ACLs (in their own metadata)

Metadata

As seen above, moin2 does much more with (own) metadata and even enables storage of user-defined metadata.

To speed up processing, metadata of items and revisions will be indexed (using whoosh).

Index can be used for:

Item OO user interface

moin 1.x: pages and attachments had separate user interfaces: deleting a page worked differently than deleting an attachment, uploading an attachment worked differently than uploading page content, pages had revisions, attachments not.

moin 2: unified user interface for items:

(!) Page, PageEditor, AttachFile code modules are dead.

TODO:

Code cleanup

Lots of poor code was deleted, still some left.

Tree based transformations

(See /Converters for more information)

moin 1.x: parse wiki markup line-by-line, create html on the fly, which caused problems: poor html, no xhtml, poor include, poor TOC.

moin 2.0: input -> converter -> DOM tree -> converter -> output

moin 2.0: reverse direction (e.g. for GUI editor)

Features:

TODO:

Processing Instructions

HelpOnProcessingInstructions have been replaced by

Processing Instructions

moin-2.0

## comment

in text, same functionality

#format specifier and optional-arguments

"contenttype" in meta and currently no optional-arguments

#redirect

? should be a meta key/val

#refresh

? should be a meta key/val

#pragma

? can be replaced by key/value meta parameter. value can be a list

GUI editor update and different approach

Themeing with Jinja2 templating engine

moin 1.x: Output generation was mostly done by python code with embedded html. Some of this was within pluggable themes, some was hardcoded.

moin 2.0: use Jinja2 templating engine for theme and user interface.

HTML / CSS / Images / ...

Serialization

Storage contents can be serialized / unserialized to a custom, simple format that is basically a stream of json (revision metadata) and binary data (revision data).

Applications:

New plugin system

The old plugin system is not powerful enough and too complicated.

Just rough ideas, nothing final:

(!) see the plugin system project

Framework / Libs / Python

Already done:

Packaging

moin2 got rid of all the big 3rd party stuff that was bundled with moin 1.x and uses python packaging now, so you can use pip to install it (e.g. into a virtualenv) and it'll fetch all requirements from pypi.

We also have some scripts to build a standalone or GAE version that doesn't require using pip / setup.py.

Google App Engine (GAE)

moin2 now basically works on GAE (see "gae" branch in the repo). Test site: http://moin2-test.appspot.com/

There is still some todo for GAE in the issue tracker (search for GAE there), contributions and feedback are welcome!

choose moin2 if ...

choose moin 1.9 if ...

Questions

How do I set up my IDE

See MoinMoin2/IdeSetup

How do I set up a wiki for testing

See MoinMoin2/InstallDebian (en)

See MoinMoin2/InstallDebianDE (de)

Synchronisation of 2 wikis?

How about the synchronization of 2 wikis, is that included in moin2, and if, does it include also the attachments?

A: If we implement sync, it likely will include all types of items, but it is not implemented yet.

There is a GoogleSoc2012 project working on branching/merging/syncing.

Page tree?

For navigation it is very useful to have a navigation tree for the pages (preferred left column). Is that possible now in moin2?
-- RudolfReuter 2011-02-22 13:40:10

A: Not implemented yet, but everything is possible - it may be just not in the first 2.0 release. If you want to help with a great theme just jump on it.

Porting extensions

How would one go about porting extensions to Moin 2.0? Right now, I can see lots of dependencies on the formatter and parser APIs in Moin 1.x that I would need to replace with something else. Will there be equivalents in Moin 2.0, and if so, are these things the kind of contributions that Moin 2.0 needs? If not, which APIs would I need to target? -- PaulBoddie 2012-02-25 18:22:46

moin2 is a rewrite of moin1 and works quite differently at many places. So likely a moin2 extension will be a rewrite of a moin1 extension. Please note that there is currently no plugin system. -- ThomasWaldmann 2012-02-25 22:17:16

Project Infrastructure

I see no mention of any continuous integration. You don't have any? -- JürgenHermann 2013-09-08 02:44:29

We are using github actions (see ci.yml). -- UlrichB 2023-07-22 21:54:00

Code Review

Whats the next step after I solved some bugs or added some features on my localhost moinmoin?

If you have solved some bugs or added any features to the code , first create a patch using this site to get it reviewed.

Known Error : "invalid username or password" - need to update your gmail security setting to allow access for less secure apps using this -- aabs08 2015-01-22 06:46:14


Note: Some old content can be still seen here: here

MoinMoin: MoinMoin2.0 (last edited 2023-07-23 20:04:22 by UlrichB)