Skip to main content
We welcome contributions from the community! Whether you’re reporting bugs, suggesting features, or submitting code, here’s how you can help.

Reporting Bugs

Found a bug? Please open an issue with the following information:
1

Browser details

Include your browser name and version (Chrome, Firefox, etc.)
2

Extension version

Specify the version of FreshJuice HubSpot DevTools you’re using
3

Operating system

Mention your OS (Windows, macOS, Linux)
4

Steps to reproduce

Provide clear, step-by-step instructions to reproduce the issue
5

Expected vs actual behavior

Describe what you expected to happen and what actually happened

Suggesting Features

Have an idea for a new feature? Submit a feature request describing:
  • The problem - What problem are you trying to solve?
  • Your proposed solution - How would you like it to work?
  • Alternatives considered - What other approaches did you think about?

Pull Request Process

Want to contribute code? Great! Follow these steps:
1

Fork the repository

Create your own fork of the hubspot-devtools-extension repository
2

Create a feature branch

git checkout -b feature/amazing-feature
3

Make your changes

Implement your feature or bug fix following the code style guidelines below
4

Test on both browsers

Test your changes on both Chrome and Firefox to ensure compatibility
5

Commit your changes

git commit -m 'Add amazing feature'
6

Push to your fork

git push origin feature/amazing-feature
7

Open a Pull Request

Submit a PR from your fork to the main repository

Code Style Guidelines

The project uses ESLint for code quality and security checks. Follow these guidelines:

Security Rules

The project enforces strict security rules using eslint-plugin-security:
// ❌ Avoid eval and similar patterns
no-eval: 'error'
no-implied-eval: 'error'
no-new-func: 'error'

// ❌ Don't use unsafe regex
security/detect-unsafe-regex: 'error'

// ⚠️  Be cautious with timing attacks
security/detect-possible-timing-attacks: 'warn'

ECMAScript Version

The codebase uses ES2022 with ES modules:
// ✅ Use ES modules
import { someFunction } from './module.js';

// ✅ Use modern JavaScript features
const data = await fetchData();
const merged = { ...defaults, ...options };

Browser Compatibility

Support both Chrome and Firefox (Manifest V3):
// Use chrome API
chrome.storage.local.get(['key'], (result) => {
  console.log(result);
});

Linting Your Code

Before submitting a PR, ensure your code passes linting:
# Check for linting errors
npm run lint

# Auto-fix issues where possible
npm run lint:fix

Project Structure

Understand the codebase organization:
src/
├── manifest/        # Browser-specific manifest files
│   ├── base.json    # Shared manifest config
│   ├── chrome.json  # Chrome-specific overrides
│   └── firefox.json # Firefox-specific overrides
├── popup/           # Extension popup UI
├── options/         # Settings page
├── background/      # Service worker / background script
├── content/         # Content script for link modification
├── lib/             # Shared utilities
└── assets/          # Icons and images

Development Prerequisites

Before you start contributing:
  • Node.js 22+ is required
  • Familiarity with browser extension development (Manifest V3)
  • Understanding of Chrome and Firefox extension APIs

Getting Help

If you need help with your contribution:

License

By contributing, you agree that your contributions will be licensed under the MIT License.

Build docs developers (and LLMs) love