• Stars
    star
    183
  • Rank 210,154 (Top 5 %)
  • Language
  • Created almost 13 years ago
  • Updated almost 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Simple guide to using semantic versioning

Semantic Versioning HOWTO

This is a guide to using semantic versioning, which is the de facto standard for meaningful and machine-readable version numbers.

Unless you have a specific reason not to, you should probably use semantic versioning for every new application you create. This will make it easier to integrate into package managers, as well as simply being easy to understand for most users.

I’m going to describe the pragmatics of the semantic versioning convention in terms of the typical application lifecycle.

Pre-alpha (0)

When you first create your application, it starts out being version 0. It continues to be version 0, no matter how much you change it, until you start to feel the need to actually differentiate between versions.

Alpha and beta (0.x.y)

After version 0, the next version is either 0.0.1, if the new version is backwards-compatible with version 0, or 0.1.0 if it’s not.

The distinction is somewhat blurry in the 0.x.y series, and you may actually choose not to be backwards-compatible at all for a while, but once you go to 0.1.0, you’re probably going to at least start thinking about the distinction.

So you just continue through the 0.x.y range, incrementing y for every backwards-compatible change, and x for every incompatible change.

(Of course, when you reach 0.9, you just go on to 0.10, 0.11, ….)

Release candidates (1.0.0-foo)

Before you bless a version as your first official release, you may want make a few test runs with release candidates. You can use any scheme you want here, really, but 1.0.0-alpha.1 or 1.0.0-rc.1 would be typical examples of pre-release versions.

First official release (1.0.0)

This is the point at which you actually start promising to follow semantic versioning, so people can start to depend on it a bit more.

Patch releases (1.0.y)

These are updates to version 1.0.0 that everybody is recommended to switch to immediately, because nothing changed in the public API.

Minor releases (1.x.0)

The first time you change the public API of your application in a backwards-compatible way (add new APIs, or add deprecations), you increment the minor version number. You can also choose to do this whenever you make any other kind of substantial change.

Then you just continue doing this for as long as you’re still backwards-compatible with everybody.

Second major release and beyond (2.0.0, 3.0.0, …)

The first time you make a change that is incompatible with how people are using the public API, you increment the major version number.

Then you keep both 1.x.y and 2.x.y versions until you manage to get everybody to move over to 2.x.y, or decide to drop support for people still using 1.x.y, at which point you can retire the 1.x.y versions.

This generational process continues throughout the application’s life.

Development versions of the second major release (2.0.0-0.x.y)

If you want, you can have a new 0.x.y series for the development versions of the next major release, just by tacking it on as the pre-release version.

Second major release candidates (2.0.0-rc.1)

Obviously, you can use the same scheme with release candidates for 2.0.0 as you did for 1.0.0. (Or a new one, for that matter.)

Advanced features

There are a few more advanced features which may or may not be useful to you; see the semantic versioning specification if you’re curious.

More Repositories

1

bongo

Play music with GNU Emacs
Emacs Lisp
209
star
2

zenburn-el

The zenburn color theme for GNU Emacs
Emacs Lisp
39
star
3

volume.el

Tweak your loudness with GNU Emacs ("the best Emacs package ever")
Emacs Lisp
27
star
4

goplayer

Modern, open-source video player written in ActionScript 3
ActionScript
19
star
5

blossom

Quick-start, state-of-the-art web development with Haml, Sass, Compass and CoffeeScript
Ruby
18
star
6

asspec

BDD framework for AS3
ActionScript
12
star
7

payex-ruby

PayEx SOAP API glue for Ruby
Ruby
7
star
8

node-regexp-quote

RegExp.quote = require("regexp-quote")
JavaScript
6
star
9

asautotest

An indispensable tool for non-IDE ActionScript development
Ruby
5
star
10

squirrel

3
star
11

fcshd

Usable CLI frontend to Adobe’s Flex compiler
Ruby
3
star
12

Function.prototype.bind

How I invented Function.prototype.bind
3
star
13

ds-multisig-ui

Simple web-based UI for interacting with DSEasyMultisig instances
JavaScript
3
star
14

hyphen-ruby

Dehyphenate identifiers in Ruby code
Ruby
2
star
15

ds-auth-ui

JavaScript
2
star
16

rack-normalize-domain

Rack middleware that redirects www.example.com to example.com
Ruby
2
star
17

aslayout

Simple layout framework for Actionscript 3
ActionScript
2
star
18

campfire-say

Say something on Campfire
Ruby
2
star
19

stdio.as

Lets your Flash/Flex apps read from stdin, write to stdout/stderr, access command-line arguments, run shell commands, etc.
ActionScript
2
star
20

flexc

Usable CLI frontend to Adobe’s Flex compiler
JavaScript
1
star
21

cis

Ruby
1
star
22

knock.as

Lightweight ActionScript 3 testing
ActionScript
1
star
23

flower

JavaScript
1
star
24

heroku-buildpack-git

Heroku buildpack for vendoring Git
Shell
1
star
25

jsonrpc2

JSON-RPC 2.0 client
Shell
1
star
26

clean-wikipedia-css

The CSS code hotlinked into Wikipedia by Deuglify.me
1
star
27

sass-extractor

Ruby
1
star
28

flex-compiler

Node.js wrapper for the Adobe Flex compiler shell (fcsh)
JavaScript
1
star
29

find-grid

Ruby
1
star
30

node-main

JavaScript
1
star
31

fswatch

Watch for file system changes—for use in shell scripts.
Ruby
1
star
32

jams

JAMS is a minimal JSON alternative
HTML
1
star
33

siss

Ruby
1
star
34

flex-testing-harness

ActionScript
1
star
35

dgeth

Go Ethereum Docker wrapper — run geth(1) without installing Go
Shell
1
star
36

fruitysnake

Buggy game written in QBasic 4.5 (lots of purples, yellows and oranges)
Visual Basic
1
star
37

twerfect

Google Chrome extension to highlight perfect-140 tweets on twitter.com
JavaScript
1
star
38

motherfuckingwebsite

My take on motherfuckingwebsite.com
HTML
1
star
39

bardock

Dock a dock bar (e.g., a doc bar) to your source code
Emacs Lisp
1
star
40

masktags

1
star