First off, thank you for considering contributing to MarkdownFlows! It's people like you that make MarkdownFlows such a great tool.
By participating in this project, you are expected to uphold our Code of Conduct: be respectful, inclusive, and constructive.
Before creating bug reports, please check the existing issues as you might find that you don't need to create one. When you are creating a bug report, please include as many details as possible:
- Use a clear and descriptive title
- Describe the exact steps to reproduce the problem
- Provide specific examples to demonstrate the steps
- Describe the behavior you observed after following the steps
- Explain which behavior you expected to see instead and why
- Include screenshots if possible
- Include your environment details (OS, Node.js version, etc.)
Enhancement suggestions are tracked as GitHub issues. When creating an enhancement suggestion, please include:
- Use a clear and descriptive title
- Provide a step-by-step description of the suggested enhancement
- Provide specific examples to demonstrate the steps
- Describe the current behavior and explain which behavior you expected to see instead
- Explain why this enhancement would be useful
- Fill in the required template
- Do not include issue numbers in the PR title
- Follow the TypeScript/JavaScript styleguide
- Include screenshots and animated GIFs in your pull request whenever possible
- End all files with a newline
- Avoid platform-dependent code
- Fork and clone the repo
- Run
npm installto install dependencies - Run
npm startto start the development server - Create a branch for your changes
src/
├── main.ts # Electron main process
├── preload.ts # IPC bridge between main and renderer
├── renderer.tsx # React entry point
├── App.tsx # Root React component
├── pages/ # Page components
├── components/ # Reusable UI components
├── services/ # Backend services (main process)
└── lib/ # Utility functions
- Use TypeScript for all new code
- Follow existing code style (enforced by ESLint/Prettier)
- Write meaningful commit messages
- Add comments for complex logic
- Keep functions small and focused
Before submitting a PR:
- Run
npm run lintto check for linting errors - Test your changes manually in development mode
- Test both with and without an OpenAI API key configured
- Test on different diagram types if your change affects rendering
- Use the present tense ("Add feature" not "Added feature")
- Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
- Limit the first line to 72 characters or less
- Reference issues and pull requests liberally after the first line
- Use meaningful variable and function names
- Prefer
constoverletwhen possible - Use async/await over raw promises
- Type all function parameters and return values
- Use interfaces for object shapes
- Use functional components with hooks
- Keep components focused on a single responsibility
- Extract reusable logic into custom hooks
- Use proper TypeScript types for props
Feel free to open an issue with your question or reach out to the maintainers.
Thank you for contributing! 🎉