Convention Over Configuration logo

Convention Over Configuration

Convention over Configuration (CoC) is a software design principle that prefers sensible defaults and standard patterns over explicit, repetitive configuration. Frameworks that adopt CoC reduce the number of decisions a developer must make to start a new project while still allowing overrides for non-standard cases. CoC was popularized by Ruby on Rails but predates Rails, drawing on UI principles like the principle of least astonishment and conventions in JavaBeans, Maven, and other Java ecosystems. The principle continues to shape modern frameworks such as Spring Boot, Next.js, Astro, Phoenix, Ember, Hugo, and Remix.

5 APIs 0 Features
ConventionsDesign PrincipleFrameworksSoftware Design

APIs

Ruby on Rails

Ruby on Rails is the framework that popularized convention over configuration. By default, an ActiveRecord model named Sale maps to a sales table, controllers map to RESTful res...

Spring Boot

Spring Boot is the convention-over-configuration evolution of the Spring Framework. Auto-configuration detects classpath dependencies and wires beans automatically, starter depe...

Apache Maven

Apache Maven introduced a strict project layout (src/main/java, src/test/java, target/) and a convention-driven build lifecycle. A pom.xml that declares dependencies and a paren...

Next.js

Next.js exemplifies convention over configuration in modern web frameworks. The pages and app directory conventions auto-generate routes, file-based layouts, error boundaries, l...

Hugo Static Site Generator

Hugo defines content, layouts, archetypes, and partials by directory convention. A content/posts directory yields a section with a list page and per-post pages without explicit ...

Resources

🔗
Reference
Reference
🔗
Reference
Reference
🔗
Reference
Reference
🔗
Reference
Reference
🔗
Reference
Reference

Sources

apis.yml Raw ↑
aid: convention-over-configuration
url: >-
  https://raw.githubusercontent.com/api-evangelist/convention-over-configuration/refs/heads/main/apis.yml
name: Convention Over Configuration
x-type: topic
description: >-
  Convention over Configuration (CoC) is a software design principle that
  prefers sensible defaults and standard patterns over explicit, repetitive
  configuration. Frameworks that adopt CoC reduce the number of decisions a
  developer must make to start a new project while still allowing
  overrides for non-standard cases. CoC was popularized by Ruby on Rails
  but predates Rails, drawing on UI principles like the principle of least
  astonishment and conventions in JavaBeans, Maven, and other Java
  ecosystems. The principle continues to shape modern frameworks such as
  Spring Boot, Next.js, Astro, Phoenix, Ember, Hugo, and Remix.
image: https://kinlane-productions.s3.amazonaws.com/apis-json/apis-json-logo.jpg
tags:
  - Conventions
  - Design Principle
  - Frameworks
  - Software Design
created: '2025-01-01'
modified: '2026-04-28'
specificationVersion: '0.19'
apis:
  - aid: convention-over-configuration:rails
    name: Ruby on Rails
    description: >-
      Ruby on Rails is the framework that popularized convention over
      configuration. By default, an ActiveRecord model named Sale maps to
      a sales table, controllers map to RESTful resources, and the directory
      layout under app/ implies wiring without explicit configuration files.
    humanURL: https://rubyonrails.org/
    baseURL: https://rubyonrails.org
    tags:
      - Active Record
      - Rails
      - Ruby
    properties:
      - type: Documentation
        url: https://rubyonrails.org/doctrine
      - type: Reference
        url: https://guides.rubyonrails.org/getting_started.html
    x-features:
      - Pluralized table inference for ActiveRecord models
      - RESTful controller routing inferred from resource names
      - Generators for resources, migrations, and tests
      - Pattern of opinionated defaults with override hooks
    x-useCases:
      - Bootstrapping production web applications quickly
      - Establishing consistent codebases across teams
  - aid: convention-over-configuration:spring-boot
    name: Spring Boot
    description: >-
      Spring Boot is the convention-over-configuration evolution of the
      Spring Framework. Auto-configuration detects classpath dependencies
      and wires beans automatically, starter dependencies bundle common
      stacks, and standard application.yml properties shape behavior with
      sensible defaults.
    humanURL: https://spring.io/projects/spring-boot
    baseURL: https://spring.io
    tags:
      - Auto-Configuration
      - Java
      - Spring
    properties:
      - type: Documentation
        url: https://docs.spring.io/spring-boot/index.html
      - type: Reference
        url: https://spring.io/projects/spring-boot
    x-features:
      - Auto-configuration based on classpath presence
      - Spring Boot starters for common stacks
      - Externalized configuration via application.yml/properties
      - Embedded servers and standalone JAR packaging
    x-useCases:
      - Bootstrapping enterprise Java microservices
      - Reducing XML and Java configuration boilerplate
  - aid: convention-over-configuration:maven
    name: Apache Maven
    description: >-
      Apache Maven introduced a strict project layout (src/main/java,
      src/test/java, target/) and a convention-driven build lifecycle. A
      pom.xml that declares dependencies and a parent POM is enough for
      most Java projects to compile, test, package, and deploy.
    humanURL: https://maven.apache.org/
    baseURL: https://maven.apache.org
    tags:
      - Build
      - Java
      - Maven
    properties:
      - type: Documentation
        url: https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
      - type: Reference
        url: https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
    x-features:
      - Standard directory layout for Java projects
      - Convention-driven phases (compile, test, package, install, deploy)
      - Plugin architecture for custom phases
      - Inheritance via parent POMs
    x-useCases:
      - Standardizing build tooling across Java projects
      - Hosting and consuming artifacts from Maven Central
  - aid: convention-over-configuration:next-js
    name: Next.js
    description: >-
      Next.js exemplifies convention over configuration in modern web
      frameworks. The pages and app directory conventions auto-generate
      routes, file-based layouts, error boundaries, loading UI, and API
      routes without explicit router configuration.
    humanURL: https://nextjs.org/
    baseURL: https://nextjs.org
    tags:
      - Next.js
      - React
      - Web
    properties:
      - type: Documentation
        url: https://nextjs.org/docs
      - type: Reference
        url: https://nextjs.org/docs/app/building-your-application/routing
    x-features:
      - File-system-based routing
      - app/ conventions for layouts, loading, and error UIs
      - Auto-generated API routes from app/api/* paths
      - Conventions for static and dynamic rendering
    x-useCases:
      - Building React applications with minimal routing config
      - Standardizing front-end architecture across teams
  - aid: convention-over-configuration:hugo
    name: Hugo Static Site Generator
    description: >-
      Hugo defines content, layouts, archetypes, and partials by directory
      convention. A content/posts directory yields a section with a list
      page and per-post pages without explicit routing configuration.
    humanURL: https://gohugo.io/
    baseURL: https://gohugo.io
    tags:
      - Go
      - Hugo
      - Static Sites
    properties:
      - type: Documentation
        url: https://gohugo.io/documentation/
      - type: Reference
        url: https://gohugo.io/getting-started/directory-structure/
    x-features:
      - Section-based content directory layout
      - Layout lookup order with sensible fallbacks
      - Archetypes for templating new content files
      - Configuration-light defaults with TOML/YAML overrides
    x-useCases:
      - Building documentation sites with little setup
      - Producing fast static sites with default conventions
common:
  - type: Reference
    url: https://en.wikipedia.org/wiki/Convention_over_configuration
  - type: Reference
    url: https://rubyonrails.org/doctrine
  - type: Reference
    url: https://docs.spring.io/spring-boot/index.html
  - type: Reference
    url: https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
  - type: Reference
    url: https://nextjs.org/docs
maintainers:
  - FN: Kin Lane
    email: [email protected]