Skip to Content
Contributing

Last Updated: 3/7/2026


Contributing to LinkAce

Thank you for your interest in contributing to LinkAce! This guide will help you get started with contributing to the project.

Ways to Contribute

There are many ways to contribute to LinkAce:

  • Report bugs: Help us identify and fix issues
  • Suggest features: Share your ideas for new functionality
  • Write code: Submit bug fixes or new features
  • Improve documentation: Help make our docs clearer and more comprehensive
  • Translate: Help make LinkAce available in more languages
  • Support users: Answer questions in discussions and forums

Getting Started

Prerequisites

To contribute code to LinkAce, you’ll need:

  • PHP 8.1+: LinkAce is built with PHP
  • Composer: For PHP dependency management
  • Node.js v16+: For frontend asset compilation
  • Docker (recommended): For running the development environment
  • Git: For version control

Technology Stack

LinkAce is built with:

  • Backend: Laravel (PHP framework)
  • Frontend: Blade templates, Bootstrap, JavaScript
  • Database: MySQL/MariaDB or PostgreSQL
  • Cache/Queue: Redis (optional)

Development Setup

1. Fork and Clone

  1. Fork the LinkAce repository  on GitHub
  2. Clone your fork locally:
    git clone https://github.com/YOUR_USERNAME/LinkAce.git cd LinkAce

2. Set Up Development Environment

  1. Copy the development environment file:

    cp .env.dev .env
  2. Start the development containers:

    docker-compose up -d
  3. Install PHP dependencies:

    docker-compose exec app composer install
  4. Install Node dependencies:

    npm install
  5. Generate application key:

    docker-compose exec app php artisan key:generate
  6. Run database migrations:

    docker-compose exec app php artisan migrate
  7. Compile frontend assets:

    npm run dev

Without Docker

See the Setup without Docker guide for manual installation instructions.

3. Access Your Development Instance

Your local LinkAce instance should now be available at http://localhost

Making Changes

Branch Naming

Create a descriptive branch for your changes:

  • feature/add-bookmark-import - For new features
  • fix/broken-link-check - For bug fixes
  • docs/improve-api-guide - For documentation changes

Code Style

LinkAce follows coding standards to maintain consistency:

PHP

  • Follow PSR-12 coding standards
  • Run PHP CodeSniffer to check your code:
    composer run phpcs
  • Fix code style issues automatically:
    composer run phpcbf

JavaScript

  • Use consistent formatting and modern ES6+ syntax
  • Follow existing code patterns in the project

Testing

Before submitting your changes:

  1. Run the test suite:

    docker-compose exec app php artisan test
  2. Add tests for new features: All new functionality should include appropriate tests

  3. Ensure existing tests pass: Don’t break existing functionality

Commit Messages

Write clear, descriptive commit messages:

Add bookmark import from Pocket - Implement Pocket API integration - Add import UI in settings - Include progress tracking - Add tests for import functionality

Submitting Changes

Pull Request Process

  1. Push your changes to your fork:

    git push origin feature/your-feature-name
  2. Create a Pull Request on GitHub:

    • Go to the LinkAce repository 
    • Click “New Pull Request”
    • Select your fork and branch
    • Fill out the PR template with details about your changes
  3. PR Requirements:

    • Clear description of what changed and why
    • Reference any related issues (e.g., “Fixes #123”)
    • All tests passing
    • Code style checks passing
    • Screenshots for UI changes
  4. Review Process:

    • Maintainers will review your PR
    • Address any feedback or requested changes
    • Once approved, your PR will be merged

Translation

LinkAce uses Crowdin for translations:

  1. Visit the LinkAce Crowdin project 
  2. Select your language (or request a new one)
  3. Start translating!

Translations are automatically synced to the repository.

See: LinkAce Translations

Reporting Issues

Bug Reports

When reporting bugs, please include:

  • LinkAce version: Check in System Settings or footer
  • Installation method: Docker, manual, cloud deployment
  • Environment: PHP version, database type, web server
  • Steps to reproduce: Clear, step-by-step instructions
  • Expected behavior: What should happen
  • Actual behavior: What actually happens
  • Screenshots: If applicable
  • Error messages: Any error logs or messages

Feature Requests

For feature requests, describe:

  • Use case: What problem does this solve?
  • Proposed solution: How should it work?
  • Alternatives: What other approaches did you consider?
  • Additional context: Screenshots, examples, mockups

Code of Conduct

Be respectful, inclusive, and professional:

  • Be welcoming to newcomers
  • Be respectful of differing viewpoints
  • Accept constructive criticism gracefully
  • Focus on what’s best for the community
  • Show empathy towards other community members

Getting Help

Need help contributing?

Support the Project

If you can’t contribute code but want to support LinkAce:

Project Structure

LinkAce/ ├── app/ # Application code │ ├── Http/ # Controllers, middleware │ ├── Models/ # Database models │ └── Services/ # Business logic ├── config/ # Configuration files ├── database/ # Migrations, seeders ├── lang/ # Translation files ├── public/ # Public web root ├── resources/ # Views, assets │ ├── views/ # Blade templates │ └── assets/ # CSS, JS source ├── routes/ # Route definitions ├── storage/ # Application storage └── tests/ # Test suite

License

By contributing to LinkAce, you agree that your contributions will be licensed under the GPL-3.0 License.

Recognition

All contributors are recognized in:


Thank you for contributing to LinkAce! Your efforts help make this project better for everyone. 🎉