Cadre The Configurable Abstract Document Relationship Engine

Cadre is a website framework built on the principle that everything is a post. It's an experiment to see how much of the familiar CMS infrastructure (galleries, blogs, forums, wikis, whatever) can be emulated—and perhaps even improved—using ideas from operating system theory and object-oriented programming.

So far, Cadre has been proven to be quite flexible, supporting a variety of applications (including MUCKs, message boards, wikis, bug trackers, blogs, and project management systems) without difficulty or any modification to the platform itself. Best of all, everything remains in one simple, normalized table, so interlinking between sections, recursively generating lists, and reusing code is perfectly natural and simple.

The purpose of this section is to foster development and maintain documentation for the Cadre system.

Attractions

Cadre News & Development Blog

2017 Tweaks
Things have been slower this year so far, but changes do still happen. Version 53 of Octavia adds array appending overloading to the & operator, e.g.:

a = list("b");
c = list("d");
a &= c; // now list("b", "d");
a = c & a; // now list("d", "b", "d");
Other recent changes have added a live data display to the lists.star edit page view, fixes to multi-option query() calls, improvements to handling of various page calls for anonymous users, and related improvements to the registration process. split() now also defaults to assuming the intended separator is a linebreak if only one argument is provided.

The query() call change is particularly worth mentioning; in the normal query() syntax

query(name, page_size, sorting, [field, value,] ...

value can now be a list() of multiple arguments, which are ORed together. This makes it easy to, for example, search for entries that match a set of 'safe' templates, or mix together the children of several different pages.
Cadre News comment · 6 years ago
2016 Updates
On the whole, 2016 has been a pretty quiet year for Cadre development, but there have been a few changes. Roughly:

  • Fixed flaky handling of permissions during function recursion. Now, all Octavia objects will get their userinfo members set before or during creation, and are completely independent of the root $myuser object. Calls to dynamic functions can now be reliably used to get permissions of the owner of the page. Previously, the behaviour was that dynamic function calls had the viewer's permissions (contrary to what it said on the entry creation page); now, the page's owner will be used instead. The dynamic function and page template may be owned by different people, but only the page's owner matters. Dynamic functions may freely recurse and call other pages, but only pages (of executability 0 through 3) affect the owner used. (…)
  • Cadre News comment · read more (53 bytes) · 7 years ago
    Releases... Releases?!
    For some bizarre reason, users of Anthologica occasionally express interest in understanding more about Cadre and possibly even running their own deployments of it, so efforts are being renewed to possibly, perhaps, some day, get the software into a state where it might eventually be releasable. A step towards that goal has been made today, with the completion of the Configuration Files page.
    Cadre News comment · 9 years ago
    Control structures, argument-binding, and return
    Two syntaxes were added for binding arguments: ?() and function(). This gives Cadre a more natural function definition syntax. However, ?() is also very useful in some new control structures: (…)
    Cadre News comment · read more (29 bytes) · 11 years ago
    February achievements
    A great deal of work has gone into making Cadre more effective and useful in the past few weeks. Following on the news post from early last month, work into completing Objective Cadre has been the primary focus. Mixed dynamic/lexical scope has also been implemented. (…)
    Cadre News comment · read more (29 bytes) · 11 years ago
    Let's Get Objective
    Development of a new Cadre-based project has begun (an electronic lab notebook application with social features and page revision history), prompting much work on the platform. Here are some of the things that have happened since the last post was relevant: (…)
    Cadre News comment · read more (29 bytes) · 11 years ago
    Early January notes
    A couple of bits:

  • override_parent(url, text) and override_title(title, subtitle)

  • Mode-showing will now respect advanced permissions. ([comment/append/direct/read/edit modes: ...] syntax), although superheader's actual showpage() function doesn't support this granularity yet. When it does, it'll be possible/trivial to block people completely from accessing things like edit modes by forging URLs or inclusion.
  • Cadre News comment · 11 years ago
    Gewgaws and Doodads
  • Changed Octavia's $time to produce the unix timestamp instead of the frivolous PHP date("r"), which was basically the same as Octavia's now(), only with slightly less flexibility.

  • New extensions for lexical functions (think levenshtein distance), pretty date functions. (…)
  • Cadre News comment · read more (71 bytes) · 11 years ago
    Objective Cadre Exact Plan
    1. No more mandatory sigils. Sigils when the term is declared or first used; otherwise we can look it up in the symbol table. Add a declaration feature!

    2. A new sigil (@?) for JDBC/ODBC-style live variables.
    Cadre News comment · 12 years ago
    August 2011 Notes
    Developing a Cadre-based project has led to a number of worthwhile discoveries regarding Cadre's maturity, its strengths, and its weaknesses.  (…)
    Cadre News comment · read more (34 bytes) · 12 years ago