diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
new file mode 100644
index 0000000..8e53774
--- /dev/null
+++ b/.github/CONTRIBUTING.md
@@ -0,0 +1,95 @@
+# Contributing to `rzfile`
+
+Thanks for your interest in contributing to `rzfile`!
+Below you'll find the basic guidelines to help you get started.
+
+---
+
+## Requirements
+
+* **Rust stable** (check with `rustc --version`)
+* Use `cargo fmt`, `cargo clippy`, and `cargo test` before submitting any PRs
+* Optional: `cargo nextest` and code coverage tools like `cargo tarpaulin`
+
+---
+
+## Running Tests
+
+```bash
+cargo test
+```
+
+To get code coverage:
+
+```bash
+cargo install cargo-tarpaulin
+cargo tarpaulin --out Html
+```
+
+---
+
+## Project Structure
+
+* `src/lib.rs`: Crate root
+* `src/file.rs`: File parsing and index handling
+* `src/name.rs`: Encoding/decoding logic for filenames
+* `src/error.rs`: Error types and descriptions
+* `tests/`: Additional integration tests
+
+---
+
+## Code Style
+
+Use:
+
+```bash
+cargo fmt
+cargo clippy --all-targets --all-features -- -D warnings
+```
+
+No warnings or `unwrap()`s in final PRs unless justified.
+
+---
+
+## Pull Request Checklist
+
+Before opening a PR:
+
+* All tests pass (`cargo test`)
+* Code is formatted (`cargo fmt`)
+* No Clippy warnings (`cargo clippy`)
+* No unnecessary `unwrap()`, `expect()`, or panics
+* Added or updated tests if functionality changed
+* Relevant documentation updated (including `README.md` or inline rustdoc)
+
+---
+
+## Commit Guidelines
+
+Follow conventional commits:
+
+* `feat: Add ...`
+* `fix: Correct ...`
+* `test: Add test for ...`
+* `chore: Maintenance ...`
+* `docs: Update README / comments`
+
+---
+
+## Feedback & Issues
+
+Found a bug or have a feature idea?
+
+* Use [GitHub Issues](https://github.com/NGemity/rzfile/issues)
+* Try to reproduce bugs with a minimal test case
+
+---
+
+## License
+
+By contributing, you agree that your code will be licensed under the same license as the rest of the project: MIT.
+
+---
+
+Thanks again,
+The `rzfile` Maintainers
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 0000000..9a8f69e
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,28 @@
+# Pull Request
+
+## Description
+
+Please explain what this PR does and why it's needed.
+Link any related issues (e.g., `Closes #42`).
+
+## Changes
+
+- [ ] Feature added
+- [ ] Bug fix
+- [ ] Refactoring
+- [ ] Docs update
+- [ ] Other (explain below)
+
+## Checklist
+
+- [ ] Code is formatted with `cargo fmt`
+- [ ] No Clippy warnings (`cargo clippy`)
+- [ ] Tests pass (`cargo test`)
+- [ ] Added or updated relevant tests
+- [ ] Documentation updated (if applicable)
+- [ ] Ready for review
+
+---
+
+> If you're contributing for the first time: welcome!
+> Check the `CONTRIBUTING.md` for development guidelines.
\ No newline at end of file
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 34e1e00..a50e440 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -14,10 +14,16 @@ jobs:
steps:
- uses: actions/checkout@v4
- - name: Install Rust
- uses: actions/setup-rust@v1
+ - name: install Rust stable
+ uses: dtolnay/rust-toolchain@stable # Set this to dtolnay/rust-toolchain@nightly
+
+ - name: Cache cargo registry
+ uses: actions/cache@v4
with:
- rust-version: stable
+ path: |
+ ~/.cargo/registry
+ ~/.cargo/git
+ key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Install tarpaulin
run: cargo install cargo-tarpaulin
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..0d25636
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,33 @@
+name: Release Crate
+
+on:
+ push:
+ tags:
+ - 'v*.*.*'
+
+jobs:
+ publish:
+ name: Publish to crates.io
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Cache cargo registry
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/.cargo/registry
+ ~/.cargo/git
+ key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
+
+ - name: Check build
+ run: cargo build --release
+
+ - name: Publish to crates.io
+ env:
+ CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }}
+ run: cargo publish --locked
\ No newline at end of file
diff --git a/Cargo.lock b/Cargo.lock
index 9291952..3894d0b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -22,7 +22,7 @@ dependencies = [
[[package]]
name = "rzfile"
-version = "0.1.0"
+version = "0.2.0"
dependencies = [
"thiserror",
]
diff --git a/Cargo.toml b/Cargo.toml
index 7c5ab2b..e7c3fca 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "rzfile"
-version = "0.1.0"
+version = "0.2.0"
edition = "2024"
authors = ["Marcel Exner