X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/3fb1893fb120ce04382136cc7d2980adbab75c9d..ae1857b43cf55a393a507b8434f172cbdb29d5b0:/doc/features.mdwn?ds=inline diff --git a/doc/features.mdwn b/doc/features.mdwn index 735f4a173..0dbdba5df 100644 --- a/doc/features.mdwn +++ b/doc/features.mdwn @@ -1,14 +1,181 @@ -Currently implemented: +An overview of some of ikiwiki's features: +[[!toc ]] -* [[MarkDown]] +## Uses a real RCS - ikiwiki supports pages using [[MarkDown]] as their markup language. Any - page with a filename ending in ".mdwn" is converted from markdown to html - by ikiwiki. Markdown understands text formatted as it would be in an email, - and is quite smart about converting it to html. The only additional markup - provided by ikiwiki aside from regular markdown is the [[WikiLink]]. +Rather than implement its own system for storing page histories etc, +ikiwiki uses a real [[Revision_Control_System|rcs]]. This isn't (just) +because we're lazy, it's because a real RCS is a good thing to have, and +there are advantages to using one that are not possible with a standard +wiki. ----- +Instead of editing pages in a stupid web form, you can use vim and commit +changes via [[Subversion|rcs/svn]], [[rcs/git]], or any of a number of other +[[Revision_Control_Systems|rcs]]. +Ikiwiki can be run from a [[post-commit]] hook to update your wiki +immediately whenever you commit a change using the RCS. -[[TODO]] \ No newline at end of file +It's even possible to securely let +[[anonymous_users_git_push_changes|tips/untrusted_git_push]] +to the wiki. + +Note that ikiwiki does not require a RCS to function. If you want to +run a simple wiki without page history, it can do that too. + +## A wiki compiler + +Ikiwiki is a wiki compiler; it builds a static website for your wiki, and +updates it as pages are edited. It is fast and smart about updating a wiki, +it only builds pages that have changed (and tracks things like creation of +new pages and links that can indirectly cause a page to need a rebuild) + +## Supports many markup languages + +By default, pages in the wiki are written using the [[ikiwiki/MarkDown]] format. +Any page with a filename ending in ".mdwn" is converted from markdown to html +by ikiwiki. Markdown understands text formatted as it would be in an email, +and is quite smart about converting it to html. The only additional markup +provided by ikiwiki on top of regular markdown is the [[ikiwiki/WikiLink]] and +the [[ikiwiki/directive]]. + +If you prefer to use some other markup language, ikiwiki allows others to +easily be added by [[plugins]]. For example it also supports traditional +[[plugins/WikiText]] formatted pages, pages written as pure +[[plugins/HTML]], or pages written in [[reStructuredText|plugins/rst]] +or [[Textile|plugins/textile]]. + +Ikiwiki also supports files of any other type, including plain text, +images, etc. These are not converted to wiki pages, they are just copied +unchanged by ikiwiki as it builds your wiki. So you can check in an image, +program, or other special file and link to it from your wiki pages. + +## Blogging + +You can turn any page in the wiki into a [[blog]]. Pages matching a +specified [[ikiwiki/PageSpec]] will be displayed as a weblog within the blog +page. And RSS or Atom feeds can be generated to follow the blog. + +Ikiwiki's own [[TODO]], [[news]], and [[plugins]] pages are good examples +of some of the flexible ways that this can be used. There is also an +[[example_blog|examples/blog]] set up that you can copy into your own wiki. + +Ikiwiki can also [[plugins/aggregate]] external blogs, feeding them into +the wiki. This can be used to create a Planet type site that aggregates +interesting feeds. + +You can also mix blogging with podcasting by dropping audio files where +they will be picked up like blog posts. This will work for any files that +you would care to syndicate. + +## Valid html and [[css]] + +Ikiwiki aims to produce +[valid XHTML 1.0](http://validator.w3.org/check?url=referer). +(Experimental [[tips/HTML5]] support is also available.) + +Ikiwiki generates html using [[templates]], and uses [[css]], so you +can change the look and layout of all pages in any way you would like. + +Ikiwiki ships with several ready to use [[themes]]. + +## [[Plugins]] + +Plugins can be used to add additional features to ikiwiki. The interface is +quite flexible, allowing plugins to implement additional markup languages, +register [[directives|ikiwiki/directive]], provide a [[RCS]] backend, hook +into [[CGI]] mode, and much more. Most of ikiwiki's features are actually +provided by plugins. + +The standard language for ikiwiki plugins is perl, but ikiwiki also supports +[[plugins/write/external]] plugins: Standalone programs that can be written in +any language and communicate with ikiwiki using XML RPC. + +## [[todo/utf8]] + +After rather a lot of fiddling, we think that ikiwiki correctly and fully +supports utf8 everywhere. + +## Other features + +The above are the core design goals and features of ikiwiki, but on that +foundation a lot of other important features are added. Here is an +incomplete list of some of them. + +### [[Tags]] + +You can tag pages and use these tags in various ways. Tags will show +up in the ways you'd expect, like at the bottom of pages, in blogs, and +in RSS and Atom feeds. + +### [[SubPages|ikiwiki/SubPage]] + +Arbitrarily deep hierarchies of pages with fairly simple and useful +[[ikiwiki/SubPage/LinkingRules]] + +### [[BackLinks]] + +Automatically included on pages. Rather faster than eg MoinMoin and +always there to help with navigation. + +### Smart merging and conflict resolution in your web browser + +Since it uses a real RCS, ikiwiki takes advantage of its smart merging to +avoid any conflicts when two people edit different parts of the same page +at the same time. No annoying warnings about other editors, or locking, +etc, instead the other person's changes will be automatically merged with +yours when you commit. + +In the rare cases where automatic merging fails due to the same part of a +page being concurrently edited, regular commit conflict markers are +shown in the file to resolve the conflict, so if you're already familiar +with that there's no new commit marker syntax to learn. + +### [[RecentChanges]], editing pages in a web browser + +Nearly the definition of a wiki, although perhaps ikiwiki challenges how +much of that web gunk a wiki really needs. These features are optional +and can be enabled by enabling [[CGI]] and a [[Revision_Control_System|rcs]]. + +### User registration + +Can optionally be configured to allow only registered users to edit +pages. + +User registration can be done using a web form, or ikiwiki can be +configured to accept users authenticated with OpenID, or HTTP basic +authentication, or other methods implemented via plugins. + +### Discussion pages + +Thanks to subpages, every page can easily and automatically have a +/Discussion subpage. By default, these links are included in the +[[templates]] for each page. If you prefer blog-syle +[[plugins/comments]], that is available too. + +### Edit controls + +Wiki admins can lock pages so that only other admins can edit them. Or a +wiki can be set up to allow anyone to edit Discussion pages, but only +registered users to edit other pages. These are just two possibilities, +since page edit controls can be changed via plugins. + +### [[PageHistory]] + +Well, sorta. Rather than implementing YA history browser, it can link to +[[ViewVC]] or the like to browse the history of a wiki page. + +### Full text search + +Ikiwiki can use the xapian search engine to add powerful +full text [[plugins/search]] capabilities to your wiki. + +### Translation via po files + +The [[plugins/po]] plugin allows translating individual wiki pages using +standard `po` files. + +### [[w3mmode]] + +Can be set up so that w3m can be used to browse a wiki and edit pages +without using a web server.