metacello

Description

Metacello is a package management system for Smalltalk

Details

Source
GitHub
Dialect
pharo (65% confidence)
License
MIT
Stars
92
Forks
44
Created
May 4, 2012
Updated
Jan. 6, 2026
Topics
gemstone pharo smalltalk squeak

Categories

Serialization Packaging / VCS

README excerpt

# Metacello

[![smalltalkCI](https://github.com/Metacello/metacello/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/Metacello/metacello/actions/workflows/ci.yml?query=branch%3Amaster)

## INSTALL Preview Version

### GemStone
GsUpgrader works on all versions of GemStone against all Versions of GLASS:

```Smalltalk
Gofer new
  package: 'GsUpgrader-Core';
  url: 'http://ss3.gemtalksystems.com/ss/gsUpgrader';
  load.
(Smalltalk at: #GsUpgrader) upgradeMetacello.
```

### Pharo6.1, Pharo7.0

```Smalltalk
Iceberg enableMetacelloIntegration: false.

Metacello new
    baseline: 'Metacello';
    repository: 'github://metacello/metacello:pharo-6.1_dev/repository';
    onConflict: [ :ex | ex allow ];
    load.
 ```

### Pharo3.0, Pharo4.0, and Pharo5.0
Metacello Preview  is pre-installed in Pharo3.0 the following installs the latest released version:

```Smalltalk
Metacello new
  baseline: 'Metacello';
  repository: 'github://Metacello/metacello:master/repository';
  get.
Metacello new
  baseline: 'Metacello';
  repository: 'github://Metacello/metacello:master/repository';
  onConflict: [:ex | ex allow];
  load
```

### Pharo (older than Pharo3.0)

```Smalltalk
"Get the Metacello configuration"
Gofer new
  gemsource: 'metacello';
  package: 'ConfigurationOfMetacello';
  load.
"Bootstrap Metacello Preview, using mcz files (#'previewBootstrap' symbolic version"
((Smalltalk at: #ConfigurationOfMetacello) project 
  version: #'previewBootstrap') load.

"Load the Preview version of Metacello from GitHub"
(Smalltalk at: #Metacello) new
  configuration: 'MetacelloPreview';
  version: #stable;
  repository: 'github://Metacello/metacello:configuration';
  load.
"Now load latest version of Metacello"
Metacello new
  baseline: 'Metacello';
  repository: 'github://Metacello/metacello:master/repository';
  get.
Metacello new
  baseline: 'Metacello';
  repository: 'github://Metacello/metacello:master/repository';
  onConflict: [:ex | ex allow];
  load
```

### Squeak5.2 (and newer)

```Smalltalk
Installer ensureRecentMetacello.
```

### Squeak (older than Squeak5.2)

```Smalltalk
"Get the Metacello configuration (for Squeak users)"
Installer gemsource
    project: 'metacello';
    addPackage: 'ConfigurationOfMetacello';
    install.

"Bootstrap Metacello Preview, using mcz files (#'previewBootstrap' symbolic version"
((Smalltalk at: #ConfigurationOfMetacello) project 
  version: #'previewBootstrap') load.

"Load the Preview version of Metacello from GitHub"
(Smalltalk at: #Metacello) new
  configuration: 'MetacelloPreview';
  version: #stable;
  repository: 'github://Metacello/metacello:configuration';
  load.

"Now load latest version of Metacello"
(Smalltalk at: #Metacello) new
  baseline: 'Metacello';
  repository: 'github://Metacello/metacello:master/repository';
  get.
(Smalltalk at: #Metacello) new
  baseline: 'Metacello';
  repository: 'github://Metacello/metacello:master/repository';
  load.
```


See the [.travis.yml file](./.travis.yml) for list of supported platforms and versions.

If you are interested in using GitHub with the Metacello Preview, you should read The excellent [chapter on Metacello in Deep Into Pharo][5], then check out 
[Getting Started with GitHub][1], the [Metacello User Guide][2], the [Metacello Scripting API][3], [Issue #136 detail][4], and [Metacello API Reference][8].

### Some things to ponder 
[Dear package managers: dependency resolution results should be in version control][6] ([twitter comment thread][7]).

Interesting problem - non-reproducable builds when using non-exact dependent project versions. Wanders into the territory that Metacello locks for local git clones addresses ... but being able to communicate to others in some fashion is an interesting idea. 

[1]: docs/GettingStartedWithGitHub.md
[2]: docs/MetacelloUserGuide.md
[3]: docs/MetacelloScriptingAPI.md
[4]: docs/Issue_136Detail.md
[5]: http://pharobooks.gforge.inria.fr/PharoByExampleTwo-Eng/latest/Metacello.pdf
[6]: https://blog.ometer.com/2017/01/10/dear-package-managers-dependency-resolution-results-should-be-in-version-control/
[7]: https://twitter.com/migueldeicaza/status/868450752347480064
[8]: docs/APIReference.md

## Contribution

See [docs/Contribute.md](docs/Contribute.md).
← Back to results