Macropis is a web development framework, or CMS framework if you will, made with PicoLisp. It is not a full featured CMS that is useful to a non-programmer.

Macropis should be thought of as scaffolding and components that can be used to get started with creating advanced web sites very fast. Through the included batteries tedious stuff like ACL, menues, localization etc have already been taken care off.

Note that Macropis has not been used for any other project than the making of itself so far, keep that in mind.

Here are some screenshots and more info.


1.) Download the ext library into your /opt/picolisp/ folder, then do the same with pl-web.

2.) Download macropis and put in the /opt/picolisp/ folder too.

3.) Cd to /opt/picolisp/ and run pil macropis/simple-web-app/init.l -initBlog for the full demo application, swich to -initMacropis for only the basic framework. Then run pil macropis/simple-web-app/main.l -go.

4.) Browse to http://macropis.loc/login/ if you've setup proxying like described below, otherwise go to http://localhost:8080/login and login with admin/admin. Note that you must change the *Domain global to match your own setup in main.l if you don't use proxying to macropis.loc, otherwise assets won't load properly.

5.) Once you understand how everything works you simply copy the macropis/simple-web-application folder to somewhere else (delete the blocks you don't need) and hack away on your own application.

The files macropis/simple-web-application/app.l and macropis/simple-web-application/main.l have useful documentation.

Macropis is based on a few concepts and conventions:

  • The base structure is The Page or Resource, for instance /foo/bar/, browsing to this URL will load that page.

  • On every page there should be at least one Block, UI block or other block of logic.

  • Menus and menu creation are also supported out of the box, they usually point to a page but can of course point to external URLs too.

  • ACL is based on Users which belong to Groups, specific Permissions are then assigned to the groups.

  • Localization is based on simple keys which are then used to fetch translations for each page from the database. The demo/base app uses /iso2/foo/bar/ but it's trivial to switch to in your own app if you want.

  • All objects need (rel id (+Key +Number)) in their E/R, this is a convention which must be adhered to if you want stuff like the automatic CRUD interface to work with your stuff.

  • Sessions are propagated through a session id in a cookie and stored in the database.

Macropis is currently developed through proxying with Apache, like this:
1.) Run a2enmod proxy
2.) Run a2enmod proxy_http
3.) Put this in your sites-enabled folder:
<VirtualHost *>
ServerAdmin webmaster@macropis.loc
ServerName macropis.loc
ProxyRequests off
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
4.) Edit your /etc/hosts file to make macropis.loc point to localhost.