Project
Contributing
How to get SeeKi running on your machine, which conventions we ask you to follow, and what a reviewer will look for before merging.
Dev setup
SeeKi is one Rust binary that embeds a Svelte frontend. You need both toolchains on your machine, but only once.
Prerequisites
- Rust — edition 2024, so
rustc1.85 or newer. Install via rustup. - Node runtime — Bun is the default;
npmworks as a fallback. The frontend has no lockfile preference, both produce the same tree. - A PostgreSQL you can point at. The Chinook sample database is enough.
First build
# clone and enter the repo
git clone https://github.com/Kiriketsuki/seeKi.git
cd seeKi
# install frontend deps
cd frontend
bun install # or: npm install
bun run build # or: npm run build
cd ..
# build and run the binary
cargo run
The first launch opens the setup wizard — point it at your PostgreSQL, then the grid is live at http://127.0.0.1:3141.
Iteration loop
cargo check— fastest feedback on Rust edits.cargo test— run before opening a PR.cargo clippy— lints the CI enforces. Warnings are errors on CI.cargo fmt— formatting is checked too.cd frontend && bun run dev— hot-reload the Svelte side while the Rust server runs.
Branch naming
Every branch starts with a type prefix, lowercase and kebab-cased. The GitHub automation creates branches in this shape for labelled issues; human branches should match.
| Prefix | When to use | Example |
|---|---|---|
feat/ | Net-new user-visible behaviour. | feat/sqlite-engine |
fix/ | A bug with a reproducer. | fix/safari-date-parsing |
refactor/ | Internal reshuffle, no behaviour change. | refactor/extract-query-builder |
docs/ | Documentation-only changes. | docs/contributing-page |
test/ | Tests only, production code untouched. | test/row-pagination-edges |
chore/ | Tooling, dependencies, repo housekeeping. | chore/bump-sqlx |
perf/ | Measured performance improvements. | perf/column-list-caching |
ci/ | Workflow, actions, release pipeline. | ci/autobump-on-push |
hotfix/ | Urgent patch to a released version. | hotfix/wizard-crash-on-empty-db |
epic/ | Long-lived integration branch for a tracked epic. | epic/29-data-grid |
Branches created from issues include the issue number: feat/42-saved-views.
Conventional commits
Commit subjects follow Conventional Commits. Same prefixes as the branch types, with optional scope.
<type>[(scope)]: <description>
[optional body]
[optional footer(s)]
Good subjects are imperative, sentence-case, and fit on one line under 72 characters. Examples pulled from main:
fix(ci): repair version-bump workflow YAML parse errorepic: End-to-End QA (#32)chore: Redesign logo, favicon, and brand mark (#54)feat: scaffold SeeKi project structure
The body is where the why goes. If the change is obvious from the diff, skip the body — do not restate the subject.
Pull request workflow
- Open or claim an issue. Anything bigger than a typo fix starts as an issue so the scope is written down before the branch is cut.
- Branch from
main. Use the naming convention above. Long-lived epic branches are the exception — they live until their PR merges. - Keep the diff focused. One concern per PR. If you find an unrelated bug, open a second PR.
- Run the checks locally.
cargo fmt,cargo clippy,cargo test, andbun run buildinfrontend/. CI runs the same, but catching them locally saves a round trip. - Fill the PR description. State what changed, why, and how you tested it. Link the issue with
Closes #N. - Walk the QA checklist. For anything that touches the grid, wizard, or export flows, step through
QA-CHECKLIST.md. Note which items you covered in the PR description. - Wait for review. Default to squash-merge. A PR needs CI green plus one review before it lands.
What a reviewer is looking for
- Read-only integrity. No new code path mutates the target database. No
INSERT,UPDATE,DELETE, or DDL — ever. - No SQL surfaced to users. Every new UI affordance uses spreadsheet vocabulary: sort, search, filter, show, hide, export.
- Identifier validation. Anything that interpolates a table or column name into SQL passes through the whitelist in Security. Values use
sqlxbind parameters. - Tests that fail without your change. Bug fixes add a reproducer; features add happy-path and one edge case.
- Design fidelity. Frontend changes respect the
--sk-*token system and the.impeccable.mdbrief. No new hardcoded colours, no glass on interior surfaces. - Commit hygiene. Atomic commits with Conventional Commit subjects. If you lost the thread mid-PR,
git rebase -ibefore review. - Docs in the same PR. If you changed the UI or the config, update the matching page under
/get-started,/features, or/operate.