# Guidelines

The rules every plug-in in the Plug-in Store follows, in numbered sections a reviewer can cite: purpose, quality, naming, safety, privacy, data and commerce.

A reviewer holds every version to these rules and cites them by number and
name, "Guidelines 5, Fair play"; each section keeps its address.

## 1. Purpose {#purpose}

1. A plug-in puts dated records on your readers' days that they would act on,
   or would otherwise go looking for.
2. Its records come from the body that publishes them, and say what it
   published.
3. It is not a channel for advertising, opinion or anything without a date
   ([Is a plug-in right for this?](/developers/plugins/#is-it-right)).

## 2. Quality {#quality}

1. **Correct**: it prints what the source says, no more and no less; its
   fixtures are real copies of its sources, and its example days are true.
2. **Current**: its schedule follows the source.
3. **Fails loudly**: when a source changes shape it exits non-zero with a
   reason. One that prints nothing, or guesses, does not pass.
4. **The same every time**: the same files give the same records.

## 3. Naming {#naming}

1. Names say what it carries, in its readers' words, in each language it speaks
   ([the words you choose](/developers/plugins/concepts/how-records-look/#names)).
2. It impersonates no one: not the source's holder, another publisher or another
   plug-in. Its publisher is the organization that verified its domain.
3. It never claims to be, be made by or be endorsed by Kanboombo, unless
   Kanboombo publishes it. Reserved ids (`store`, `publish`, `search`,
   `markets`, and any starting `kanboombo`, `kb-`, `chk-` or `test-`) are
   refused ([PLG-ID-RESERVED](/developers/plugins/publish/submission-errors/#plg-id-reserved)),
   and a name a reader could mistake for another plug-in's must change.
4. Its attribution names the data's holder, and nobody else.

## 4. Safety {#safety}

1. It does not try to reach the network, read outside its folder and sources,
   start processes or leave its [locked room](/developers/plugins/concepts/how-plugins-run/#locked-room).
   Trying is a reason to reject it, even when the room stops it.
2. Its code is readable `.mjs`: not minified or obfuscated, with no `eval`,
   `new Function` or code built at run time.
3. Its titles are plain text, and its links lead to the page where the source
   publishes that record.

## 5. Fair play {#fair-play}

1. It asks a source for no more than it needs, no more often than it changes,
   with a `maxBytes` close to what it sends.
2. It behaves the same under review as on readers' days; code that detects a
   check and does something else is rejected.
3. Its review information is true.
4. It respects every [limit](/developers/plugins/reference/manifest/#limits) by
   design, not by luck.

## 6. A privacy policy {#privacy-policy}

1. A listed plug-in links its publisher's privacy policy, over https; the
   listing cannot be submitted without one.
2. The policy says what the publisher does with any data it holds. A plug-in
   collects nothing from readers and never learns who they are, and the policy
   should not suggest otherwise.

## 7. Data minimisation {#data-minimisation}

1. It prints only records its readers will see.
2. It declares only the sources it reads, and reads only the columns it needs.
3. Its `backfill` reaches only as far back as is worth having on a reader's
   days.

## 8. Restricted data {#restricted-data}

1. **No personal data**: nothing that identifies a private person, no names of
   private people, contact details or identity numbers.
2. **Nothing you may not republish**: only data whose terms let Kanboombo store
   it and show it to its readers. While the terms are unsettled, its audience is
   `private` and its `retain` `unknown` ([Data rights](/developers/plugins/plan/data-rights/)).
3. **One holder**, under that holder's terms.

## 9. Commerce {#commerce}

1. No advertising, anywhere.
2. No affiliate links, tracking parameters or referral codes.
3. No checkout and nothing for sale; items link to the source's page for that
   record, never a storefront.
4. Plug-ins are free to install: no paid plug-ins, no payments.

## 10. Runs a day {#runs-a-day}

1. Its `schedule` runs it at most 24 times a day.
2. Every plug-in shares one queue on the Server, and this keeps it fair; the
   portal refuses more (`PLG-SCHEDULE-TOO-FREQUENT`).
