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.bakThis 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 --checkMatch 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-msgHooks 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 commitsSetting user.name and user.email does not enable automatic sign-off.
Authorship and review
The project’s contribution rules require:
- Human-written issues, pull request messages and public replies.
- Human review of all code and documentation, including AI-assisted work.
- Human decisions on architecture and public APIs.
- API examples that compile against the current API.
- Responsibility for the work by its human author and reviewer. The project does not include AI provenance in commit or pull request text.
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.