Thank you for your interest in contributing to Skein.jl!
- Julia 1.10 or later
- Git
git clone https://github.com/hyperpolymath/Skein.jl
cd Skein.jl
julia --project=. -e 'using Pkg; Pkg.instantiate()'julia --project=. -e 'using Pkg; Pkg.test()'julia --project=. benchmark/benchmarks.jlSkein.jl/
├── src/ # Package source
│ ├── Skein.jl # Module entry point
│ ├── types.jl # Core types (GaussCode, KnotRecord)
│ ├── invariants.jl # Invariant computation and equivalence
│ ├── storage.jl # SQLite backend
│ ├── query.jl # Query DSL and predicates
│ └── import_export.jl # CSV/JSON/KnotInfo import/export
├── ext/ # Package extensions
│ └── KnotTheoryExt.jl # KnotTheory.jl integration
├── test/ # Test suite
│ └── runtests.jl # All tests (493+)
├── benchmark/ # Performance benchmarks
├── examples/ # Usage examples
├── .machine_readable/ # SCM metadata files
├── .bot_directives/ # Bot-specific rules
└── contractiles/ # Operational framework
Open an issue with:
- Julia version (
versioninfo()) - Minimal reproduction case
- Expected vs actual behaviour
- Fork the repository
- Create a feature branch (
git checkout -b feat/my-feature) - Write tests for new functionality
- Ensure all tests pass
- Submit a pull request
- Follow Julia conventions (4-space indent)
- Add docstrings to all public functions
- Include SPDX header on new files:
# SPDX-License-Identifier: CC-BY-SA-4.0 # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
To add a new invariant:
- Add the computation function to
src/invariants.jl - Add a column to the schema in
src/storage.jl(with migration) - Update
store!,fetch_knot, androw_to_record - Add query support in
src/query.jl - Add tests and update the benchmark suite
By contributing, you agree that your contributions will be licensed under MPL-2.0.