Thanks for your interest in Vibetuner! We appreciate you taking the time to explore this project.
Vibetuner was born to meet the needs of All Tuner Labs when spawning new projects. It embodies our core beliefs:
- Simplicity: Minimal boilerplate, clear conventions
- Speed of Iteration: Fast development cycles, hot reload, minimal friction
- Modern Technology Stack: Latest stable versions, async-first architecture
- Good Integration with Coding Assistants: Well-documented, predictable patterns
While we welcome feedback and are happy to see community interest, please note:
- We may not accept all pull requests - The project serves specific internal needs and design goals
- Response times may vary - This is one of many projects we maintain
- Breaking changes may occur - We prioritize our internal requirements
- No guarantees on feature requests - We'll consider them, but can't commit to implementing everything
That said, we do appreciate good contributions that align with our core beliefs (simplicity, speed, modern stack, assistant-friendly) and will do our best to review them when time allows.
If you encounter bugs or have suggestions:
- Check existing issues first to avoid duplicates
- Provide clear reproduction steps - We can't fix what we can't reproduce
- Include relevant details: OS, Python/Node versions, error messages, etc.
- Be patient - We'll respond when we can
If you'd like to submit code:
- Discuss first for significant changes - Open an issue before investing time
- Follow existing patterns - Match the code style and architecture
- Keep it focused - Small, targeted PRs are easier to review
- Test your changes - Make sure everything still works
- No expectations - We may decline PRs that don't align with our goals
Documentation improvements are always welcome and generally easier to accept than code changes.
# Clone the repository
git clone https://github.com/alltuner/vibetuner
cd vibetuner
# Set up Python package
cd vibetuner-py
uv sync
# Set up JavaScript package
cd ../vibetuner-js
bun install
# Test the scaffold command
uv run --directory ../vibetuner-py vibetuner scaffold new /tmp/test-project- Python: Follow existing style, use Ruff for formatting
- JavaScript: Follow existing style
- Commits: Clear, concise messages describing the "why"
This project uses Release Please for automated changelog generation. Since we squash PRs, the PR title becomes the commit message that determines version bumps and changelog entries.
<type>[optional scope]: <description>
| Type | Description | Version Impact |
|---|---|---|
feat |
New features | MINOR |
fix |
Bug fixes | PATCH |
revert |
Reverts of previous changes | PATCH |
docs |
Documentation changes | PATCH |
chore |
Maintenance, dependencies | PATCH |
refactor |
Code refactoring | PATCH |
style |
Formatting, linting | PATCH |
test |
Test changes | PATCH |
perf |
Performance improvements | MINOR |
ci |
CI/CD changes | PATCH |
build |
Build system changes | PATCH |
Add ! to indicate breaking changes (triggers MAJOR version):
feat!: remove deprecated APIfix!: change database schema
To make sure a revert appears in the changelog (and offsets the original entry),
the PR title must start with revert: — not the default Revert "feat: ..."
subject that git revert produces.
- Preferred: open a PR whose title is
revert: <subject of the reverted change>(optionallyrevert(scope): ...). The squash commit then matches the conventional-commits revert type and Release Please picks it up under the Reverts section. - If you ran
git revertlocally, follow up withgit commit --amendto rewrite the subject torevert: ...before pushing, or just rename the PR title — squash merges use the PR title, so that is what Release Please sees.
feat: add OAuth authentication support
fix: resolve Docker build failure
revert: drop OAuth authentication support
docs: update installation guide
chore: bump FastAPI dependency
feat(auth): add Google OAuth provider
feat!: remove deprecated authentication system
Add OAuth
Fix Docker
Update docs
Authentication changes
OAuth implementation
- Automatic Version Detection: Release Please analyzes PR titles to determine if release should be MAJOR/MINOR/PATCH
- Changelog Generation: PR titles become professional changelog entries
- Clean History: Squashed commits follow conventional commit format
- Team Communication: Clear, standardized communication about changes
# New Features → MINOR release
feat: add new feature
feat(scope): specific feature
# Bug Fixes → PATCH release
fix: resolve issue
fix(scope): specific fix
# Breaking Changes → MAJOR release
feat!: breaking change
BREAKING CHANGE: description
# Documentation → PATCH release
docs: update documentation
# Maintenance → PATCH release
chore: update dependencies
refactor: improve code structureDuring development, your local commit messages can be quick and informal:
git commit -m "wip"
git commit -m "fix typo"
git commit -m "more work"The PR title is what matters for the final release. When creating a PR:
gh pr create --title "feat: add OAuth authentication support" --body "Detailed description..."We have automated PR title validation that will:
- ✅ Allow properly formatted titles
- ❌ Block titles that don't follow conventional commit format
- 💡 Provide helpful error messages to fix issues
Before submitting:
# Format Python code
cd vibetuner-py
ruff format .
# Check for issues
ruff check .
# Test scaffold command
uv run vibetuner scaffold new /tmp/test-project --defaults
cd /tmp/test-project
just dev # Should start without errorsBy contributing, you agree that your contributions will be licensed under the MIT License.
Open an issue for questions or clarifications. We'll do our best to respond when we can.
We built Vibetuner to solve our own problems, and we're sharing it in case it helps others. We'll maintain it as our needs evolve, and we'll consider community input when it makes sense. But this remains primarily an internal tool that happens to be open source.
Thanks for understanding!