0.15.1

Pre-1.0: minor releases may introduce breaking changes. Pin your tested version. How to pin it →

Get involved

Checkout setup, contribution requirements and support.

Join Teksilo on Discord to ask questions, share projects and discuss ideas.

Issues and patches

Report bugs and propose features in the issue tracker. Include reproduction steps, expected and actual behavior, OS and Rust version. Discuss substantial changes before submitting a pull request.

New code needs tests. Widgets must work with both builders and teksu!. Architectural changes require a design discussion. Roadmap priorities follow FernTech’s applications.

Working in a checkout

Use stable Rust. The workspace uses edition 2024 and declares no minimum supported Rust version.

The workspace references sibling text-document and text-typeset repositories through relative paths. Clone them alongside Teksilo, or remove the external path attributes as CI does to use crates.io versions:

sed -i.bak -E \
  -e 's#, *path = "\.\.[^"]*"##g' \
  -e 's#path = "\.\.[^"]*", *##g' \
  Cargo.toml
rm -f Cargo.toml.bak

This retains the internal crates/... paths.

Linux builds of all examples require build-essential, pkg-config, libglib2.0-dev, libgtk-3-dev, libwebkit2gtk-4.1-dev, libsoup-3.0-dev, libjavascriptcoregtk-4.1-dev, libxkbcommon-dev, libwayland-dev, libxcb1-dev and libx11-dev. Ordinary applications need fewer dependencies; see Get started.

The native analytics crate and telemetry example are excluded from the workspace because they require CMake and a C++ toolchain.

Required checks

cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings -A deprecated
RUSTDOCFLAGS="-D warnings" cargo doc --workspace --no-deps --document-private-items
cargo check --workspace --all-targets
cargo check --workspace --all-targets --release
cargo test --workspace
typos --config .github/typos.toml
python3 tools/check_spdx_headers.py --check

Match CI’s flags: Clippy allows deprecated APIs, and the documentation check includes private items across the workspace. New source files need SPDX-License-Identifier: MPL-2.0 and SPDX-FileCopyrightText: 2026 FernTech headers.

Tests run headlessly on Linux, Windows and macOS. Ignored X11 tests run separately under Xvfb and Openbox with cargo test -p teksilo-platform -- --ignored --test-threads=1. Monthly beta and nightly checks are advisory.

Install the pre-commit and commit-message hooks:

pre-commit install
pre-commit install --hook-type commit-msg

Hooks check file formats, conflicts, private keys, SPDX headers and Conventional Commit messages. They do not replace the Cargo checks above.

Sign-off

Contributions use MPL-2.0. Each commit requires a DCO sign-off; there is no CLA.

git commit -s -m "fix(menu): your message"

The sign-off certifies your right to submit the contribution. Your contribution and sign-off details are public and retained indefinitely, as described in DCO.md. Sign-offs are checked by human review.

To add an alias or repair missing sign-offs:

git config --global alias.cs "commit -s"   # then `git cs -m "..."`
git commit --amend -s                      # the last commit
git rebase --signoff HEAD~N                # the last N commits

Setting user.name and user.email does not enable automatic sign-off.

Authorship and review

The project’s contribution rules require:

See CONTRIBUTING.md in the repository for the full rules.

Useful contributions

CJK input-method testing and broader X11 window-manager testing are current priorities. Bug fixes with regression tests and new examples are also useful. Mobile and web ports require a broader architectural discussion.

Forks and package names

Distributed forks need distinct names and branding. Upstream-based distribution packages may keep the name within the trademark policy’s packaging exceptions. For third-party crates, the policy requests names such as foo-teksilo or foo-for-teksilo, leaving teksilo- for FernTech packages.

See License and trademark for the full scope and exceptions. Questions: trademarks@ferntech.eu.

Support

Use the issue tracker for public questions and bugs. Paid support, priority fixes and indemnification agreements: support@ferntech.eu. Private enquiries: cyril.jacquet@ferntech.eu.