Vesper is an experimental, early-stage language, built as a learning project. Contributions are welcome, but because the language, type system, and architecture are still actively shifting (see the Roadmap), it’s worth checking in before investing time in anything large.
Before you start
- Small fixes (typos, bugs, small formatter or lexer edge cases): feel free to open a pull request directly.
- Larger changes (new syntax, new types, changes to the interpreter or type checker, compiler work): open an issue first to discuss the approach. This avoids duplicated effort and keeps changes aligned with where the Architecture and Roadmap are heading.
Development setup
Follow Installation and Building and Testing to get a working build:
git clone https://github.com/tajultonim/vesper.git
cd vesper
cmake -S . -B build
cmake --build build
ctest --test-dir build
Making a change
- Fork the repository and create a branch off
mainfor your change. - Write your change, along with tests where applicable. The existing test suite (
tests/type_checker_test.cpp, run via CTest) is the model to follow for type-checker changes — add cases alongside it rather than starting a new ad hoc test file. - Match the existing code style. The repository includes a
.clang-formatfile — run your changes throughclang-formatbefore committing so C++ formatting stays consistent. - Format any
.vspexample files you touch with Vesper’s own formatter:./build/vspfmt path/to/example.vsp -w - Run the test suite and make sure it passes:
cmake --build build ctest --test-dir build - Keep commits focused. A commit (or a PR) should represent one coherent change — a new lexer token, a fix to floor-division semantics, a new example program — rather than bundling unrelated work together.
Opening a pull request
- Describe what changed and why, not just how.
- Reference the related issue if there is one.
- If the change affects language behavior (new syntax, changed semantics, new error cases), include a short example
.vspsnippet in the PR description showing the before/after behavior. - Be ready for feedback — as a young, single-maintainer project, review may take a little time, and requested changes are part of getting things right while the design is still settling.
Reporting bugs
When filing an issue, include:
- The Vesper source that triggers the problem (a minimal
.vspsnippet is ideal). - What you expected to happen versus what actually happened.
- Your platform and compiler (e.g. “Ubuntu 22.04, GCC 12” or “Windows 11, MinGW”).
- The output of
cmake --build buildif the issue is a build failure.
Proposing language features
Since Vesper’s design is still taking shape, feature proposals are especially useful as issues rather than surprise pull requests. A good proposal covers:
- The problem the feature solves, ideally with a motivating example.
- Proposed syntax, shown as
.vspcode. - How it interacts with the existing type system (see Types) — does it introduce a new type, a new operator, new inference rules?
- Where it fits on the Roadmap — is this filling in an existing planned item, or something new?
Code of conduct
There isn’t a separate code of conduct document yet — in the meantime, the expectation is the usual open-source baseline: be respectful in issues and reviews, assume good faith, and keep disagreements about the code, not the person.
License
By contributing, you agree that your contributions will be licensed under the project’s GPL-3.0 License.