Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions .github/workflows/cla.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: CLA Assistant

# CLA Assistant Lite (contributor-assistant/github-action).
#
# On every pull request, the bot checks whether each contributor has signed the
# CLA in CLA.md. Unsigned contributors are asked to sign by posting a comment on
# their PR with the exact phrase:
#
# I have read the CLA Document and I hereby sign the CLA
#
# Signatures are appended to a JSON file (path-to-signatures) committed to the
# `branch` configured below. Posting `recheck` re-runs the check.
#
# ── One-time setup ────────────────────────────────────────────────────────────
# 1. The `branch` used to store signatures MUST exist and MUST NOT be branch-
# protected (the bot pushes directly to it). Create it once:
# git branch cla-signatures && git push -u origin cla-signatures
# 2. If you store signatures in the same repo on an UNPROTECTED branch, the
# built-in GITHUB_TOKEN is enough. PERSONAL_ACCESS_TOKEN is only required
# when storing signatures in a *remote* repo, or when the storage branch is
# protected. If needed, add a repo-scoped PAT as the secret
# PERSONAL_ACCESS_TOKEN in Settings → Secrets and variables → Actions.
# 3. Edit `allowlist` below to include maintainers and bots (they skip the CLA).

on:
issue_comment:
types: [created]
pull_request_target:
types: [opened, synchronize, closed]

permissions:
actions: write
contents: write
pull-requests: write
statuses: write

jobs:
cla-assistant:
runs-on: ubuntu-latest
steps:
- name: CLA Assistant
if: >-
(github.event.comment.body == 'recheck'
|| github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA')
|| github.event_name == 'pull_request_target'
uses: contributor-assistant/github-action@v2.6.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} # only for remote/protected storage
with:
path-to-document: 'https://github.com/PlotJuggler/plotjuggler_core/blob/development/CLA.md'
path-to-signatures: 'signatures/version1/cla.json'
branch: 'cla-signatures'
allowlist: facontidavide,bot*,*[bot]
custom-notsigned-prcomment: >-
Thank you for your contribution. Before we can merge it, please sign the
[Contributor License Agreement](https://github.com/PlotJuggler/plotjuggler_core/blob/development/CLA.md)
by posting a comment on this pull request with exactly the text below:
custom-pr-sign-comment: 'I have read the CLA Document and I hereby sign the CLA'
custom-allsigned-prcomment: 'All contributors have signed the CLA. Thank you!'
95 changes: 95 additions & 0 deletions CLA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
<!--
TEMPLATE — REVIEW BEFORE ENABLING THE CLA WORKFLOW.
This Contributor License Agreement was drafted as a starting point and is not
legal advice. Have it reviewed by a lawyer before relying on it, especially the
relicensing grant in Section 2, which is what preserves the option to offer
pj_datastore under commercial terms. Once contributors begin signing, changing
the terms requires re-collecting signatures, so settle the wording first.
-->

# PlotJuggler Core — Individual Contributor License Agreement

Thank you for contributing to PlotJuggler Core (the "Project"). This Contributor
License Agreement ("Agreement") sets out the terms under which You provide
Contributions to the Project. It protects You, the Project, and downstream users
by making the intellectual-property terms of Your Contributions explicit.

By signing this Agreement (see "How to sign" below) You accept and agree to these
terms for Your past, present, and future Contributions to the Project.

## 1. Definitions

- **"You"** (or **"Your"**) means the individual who submits a Contribution, or
the legal entity on whose behalf the Contribution is submitted.
- **"Project Owner"** means Davide Faconti, the maintainer and copyright holder
of PlotJuggler Core, and any successor maintainer or assignee.
- **"Contribution"** means any original work of authorship, including any
modification of or addition to existing work, that You intentionally submit to
the Project (e.g. via pull request, patch, or issue attachment) for inclusion
in or documentation of the Project.

## 2. Copyright License

You grant the Project Owner and recipients of software distributed by the Project
a **perpetual, worldwide, non-exclusive, royalty-free, irrevocable** copyright
license to reproduce, prepare derivative works of, publicly display, publicly
perform, **sublicense, relicense, and distribute** Your Contributions and such
derivative works.

You expressly agree that the Project Owner may **license and distribute Your
Contributions under any license terms, including open-source, proprietary, and
commercial terms** (for example, dual-licensing the storage engine). This right
to relicense survives even if the Project's default license changes. You retain
all right, title, and interest in Your Contributions not expressly granted here,
including the right to use them for any other purpose.

## 3. Patent License

You grant the Project Owner and recipients of software distributed by the Project
a perpetual, worldwide, non-exclusive, royalty-free, irrevocable (except as
stated below) patent license to make, have made, use, offer to sell, sell,
import, and otherwise transfer Your Contributions, where such license applies
only to those patent claims licensable by You that are necessarily infringed by
Your Contribution alone or by combination of Your Contribution with the Project.

If any entity institutes patent litigation alleging that Your Contribution, or
the Project to which You contributed, constitutes direct or contributory patent
infringement, then any patent licenses granted to that entity under this
Agreement for that Contribution terminate as of the date such litigation is
filed.

## 4. Moral Rights

To the fullest extent permitted by applicable law, You waive, and agree not to
assert, any moral rights in Your Contributions against the Project Owner or
downstream recipients.

## 5. Your Representations

You represent that:

1. Each Contribution is either Your original creation, or You have sufficient
rights to submit it under the terms of this Agreement.
2. The grants above do not violate any agreement You have with a third party. If
Your employer has rights to intellectual property You create, You represent
that You have received permission to make the Contributions on behalf of that
employer, or that the employer has waived such rights for Your Contributions.
3. You are not aware of any third-party rights that would make the grants in this
Agreement inaccurate, and You will notify the Project Owner if You later become
aware of any such rights.

## 6. No Warranty / No Obligation

Unless required by applicable law or agreed to in writing, You provide Your
Contributions "AS IS", without warranties or conditions of any kind. The Project
Owner is under no obligation to accept, use, or distribute any Contribution.

## How to sign

To sign this Agreement, post a comment on your pull request containing exactly:

> I have read the CLA Document and I hereby sign the CLA

The automated CLA Assistant records your signature against your GitHub username.
If you are contributing on behalf of a company, ensure you are authorized to do
so before signing.
39 changes: 22 additions & 17 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
MIT License
PlotJuggler Core is licensed per-module. Every source file carries an
SPDX-License-Identifier header that is authoritative for that file.

Copyright (c) 2026 Davide Faconti
Module License Full text
------------ ----------- ---------------
pj_base Apache-2.0 LICENSE-APACHE
pj_plugins Apache-2.0 LICENSE-APACHE
examples Apache-2.0 LICENSE-APACHE
pj_datastore MPL-2.0 LICENSE-MPL

Rationale:

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
- The plugin-facing surface (pj_base, pj_plugins) is Apache-2.0 so that
third parties may build proprietary plugins and applications on top of
the SDK without restriction. Apache-2.0 also grants an explicit patent
license to downstream users.

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
- The storage engine (pj_datastore) is MPL-2.0. MPL-2.0 is file-level
(weak) copyleft: modifications to the engine's own source files must be
published, but the engine may be combined with proprietary code and
linked into proprietary applications.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Plugins load through a stable C ABI and never statically link pj_datastore,
so the MPL-2.0 engine imposes no obligations on plugin authors.

Copyright (c) 2026 Davide Faconti
Loading
Loading