]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/features.mdwn
add wishlist item
[git.ikiwiki.info.git] / doc / features.mdwn
index ac5dc03752049dcab125b8839b11b68928985eae..61b23bb59cfc364bf69dff570c82cbd8805167d0 100644 (file)
-Some of ikiwiki's features:
+An overview of some of ikiwiki's features:
+[[!toc ]]
 
 
-* [[Subversion]]
+## Uses a real RCS
 
 
-  Rather than implement its own system for storing page histories etc,
-  ikiwiki simply uses subversion. (It's also possible to [[plugins/write]] support for other systems.)
+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 svn. Or work disconnected using svk and push your changes out
-  when you come online.
+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.
+Ikiwiki can be run from a [[post-commit]] hook to update your wiki
+immediately whenever you commit a change using the RCS.
 
 
-  Note that ikiwiki does not require subversion to function. If you want to
-  run a simple wiki without page history, it can do that too.
+It's even possible to securely let
+[[anonymous_users_git_push_changes|tips/untrusted_git_push]]
+to the wiki.
 
 
-* [[MarkDown]]
+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.
 
 
-  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]] and 
-  [[PreprocessorDirective]]
+## A wiki compiler
 
 
-* support for other file types
+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)
 
 
-  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.
+## Supports many markup languages
 
 
-* [[SubPage]]s
+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]].
 
 
-  Arbitrarily deep hierarchies of pages with fairly simple and useful [[SubPage/LinkingRules]]
+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]].
 
 
-* [[blog]]s
+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.
 
 
-  You can turn any page in the wiki into a [[blog]]. Pages matching a
-  specified [[GlobList]] will be displayed as a weblog within the blog
-  page. And an RSS feed can be generated to follow the blog.
+## Blogging
 
 
-  Ikiwiki's own [[TODO]], [[news]], and [[plugins]] pages are good examples
-  of some of the flexible ways that this can be used.
+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.
 
 
-  Note that this also includes support for tag-based blogging.
+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.
 
 
-* Fast compiler
+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.
 
 
-  ikiwiki 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)
+You can also mix blogging with [[podcasting|podcast]]. Simply drop
+media files where they will be picked up like blog posts. For
+fuller-featured podcast feeds, enclose media files in blog posts
+using [[plugins/meta]]. Either way, this will work for any files
+that you would care to syndicate.
 
 
-* valid html and css
+## Valid html and [[css]]
 
 
-  ikiwiki aims to produce 
-  [valid XHTML 1.0](http://validator.w3.org/check?url=referer).
-  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 aims to produce 
+[valid XHTML 1.0](http://validator.w3.org/check?url=referer).
+(Experimental [[tips/HTML5]] support is also available.)
 
 
-* [[BackLinks]]
+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.
 
 
-  Automatically included on pages. Rather faster than eg MoinMoin and
-  always there to help with navigation.
+Ikiwiki ships with several ready to use [[themes]].
 
 
-* [[PageHistory]]
+## [[Plugins]]
 
 
-  Well, sorta. Rather than implementing YA history browser, it can link to
-  [[ViewCVS]] or the link to browse the history of a wiki page.
+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.
 
 
-* [[RecentChanges]], editing pages in a web browser
+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.
 
 
-  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]].
+## [[todo/utf8]]
 
 
-* User registration
+After rather a lot of fiddling, we think that ikiwiki correctly and fully
+supports utf8 everywhere.
 
 
-  Can optionally be configured to allow only registered users to post
-  pages; online user registration form, etc.
+## Other features
 
 
-* Discussion pages
+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.
 
 
-  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.
+### [[Tags]]
 
 
-* Smart merging and conflict resolution in your web browser
+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.
 
 
-  Since it uses subversion, 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.
+### [[SubPages|ikiwiki/SubPage]]
 
 
-  In the rare cases where automatic merging fails due to the same part of a
-  page being concurrently edited, regular subversion commit 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.
+Arbitrarily deep hierarchies of pages with fairly simple and useful
+[[ikiwiki/SubPage/LinkingRules]]
 
 
-* page locking
+### [[BackLinks]]
 
 
-  Wiki admins can lock pages so that only other admins can edit them.
+Automatically included on pages. Rather faster than eg MoinMoin and
+always there to help with navigation.
 
 
-* Full text search
+### Smart merging and conflict resolution in your web browser
 
 
-  ikiwiki can use the [[HyperEstraier]] search engine to add powerful
-  full text search capabilities to your wiki.
+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.
 
 
-* Commit mails
+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.
 
 
-  ikiwiki can be configured to send you commit mails with diffs of changes
-  to selected pages.
+### [[RecentChanges]], editing pages in a web browser
 
 
-* [[Plugins]]
+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]].
 
 
-  Plugins can be used to add additional features to ikiwiki. The interface is quite flexible, allowing plugins to register [[PreProcessorDirective]]s, hook into [[CGI]] mode, and more. Ikiwiki's backend RCS support is also pluggable, so support for new revision control systems can be added to ikiwiki. 
+### User registration
 
 
-----
+Can optionally be configured to allow only registered users to edit
+pages.
 
 
-It also has some [[TODO]] items and [[Bugs]].
+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-style
+[[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.