R Observatory
Search
install.packages("SpaDES.core")
CRAN 30-day downloads, method
808+0.25% up on the 30 days before, the better direction
Test coverage, method
4%of lines run by tests

Provides the core framework for a discrete event system to implement a complete data-to-decisions, reproducible workflow. The core components facilitate the development of modular pieces, and enable the user to include additional functionality by running user-built modules.

Full description

Provides the core framework for a discrete event system to implement a complete data-to-decisions, reproducible workflow. The core components facilitate the development of modular pieces, and enable the user to include additional functionality by running user-built modules. Includes conditional scheduling, restart after interruption, packaging of reusable modules, tools for developing arbitrary automated workflows, automated interweaving of modules of different temporal resolution, and tools for visualizing and understanding the within-project dependencies.

Maintainer
Eliot J B McIntire
Licence
GPL-3
Latest release
29 Aug 2026
First release
30 Aug 2017

Compare with another package

More details
Releases
31
Needs compilation
No
Needs R
>= 4.3
Config/roxygen2/version
8.1.0
Date
2026-08-29
Language
en-CA
Subjects (1) Method, Subjects
Cite

Package

Run in R for the authors' preferred citation:

citation("SpaDES.core")
APA
McIntire, E. J. B., His Majesty the King in Right of Canada, as represented by the Minister of Natural Resources Canada, Barros, C., Chubaty, A. M., Cumming, S., & Luo, Y. (2026). SpaDES.core: Core Utilities for Developing and Running Spatially Explicit
Discrete Event Models (Version 3.2.1) [Computer software]. https://doi.org/10.32614/CRAN.package.SpaDES.core
About

This package has no citation file, so citation() returns this entry built from DESCRIPTION.

R Observatory

For a number measured here: a download total, a coverage figure, an archival date.

APA
Balamuta, J. J. (2026). R Observatory: Metrics for SpaDES.core version 3.2.1 [Data set]. HJJB, LLC. Data release v2026-10-28. https://doi.org/10.5281/zenodo.21843040
About

From data release v2026-10-28, which the citation names so these numbers can be found later.

All 13 check platforms pass.

  • r-devel-linux-x86_64-debian-clang

    The unreleased R on Linux, x86_64, debian-clang

    OK

    Version checked
    3.2.1
    Time taken
    683 s
  • r-devel-linux-x86_64-debian-gcc

    The unreleased R on Linux, x86_64, debian-gcc

    OK

    Version checked
    3.2.1
    Time taken
    441 s
  • r-devel-linux-x86_64-fedora-clang

    The unreleased R on Linux, x86_64, fedora-clang

    OK

    Version checked
    3.2.1
    Time taken
    430 s
  • r-devel-linux-x86_64-fedora-gcc

    The unreleased R on Linux, x86_64, fedora-gcc

    OK

    Version checked
    3.2.1
    Time taken
    430 s
  • r-devel-windows-x86_64

    The unreleased R on Windows, x86_64

    OK

    Version checked
    3.2.1
    Time taken
    615 s
  • r-oldrel-macos-arm64

    The previous release of R on macOS, arm64

    OK

    Version checked
    3.2.1
    Time taken
    161 s
  • r-oldrel-macos-x86_64

    The previous release of R on macOS, x86_64

    OK

    Version checked
    3.2.1
    Time taken
    628 s
  • r-oldrel-windows-x86_64

    The previous release of R on Windows, x86_64

    OK

    Version checked
    3.2.1
    Time taken
    847 s
  • r-patched-linux-x86_64

    The patched release of R on Linux, x86_64

    OK

    Version checked
    3.2.1
    Time taken
    659 s
  • r-release-linux-x86_64

    The current release of R on Linux, x86_64

    OK

    Version checked
    3.2.1
    Time taken
    660 s
  • r-release-macos-arm64

    The current release of R on macOS, arm64

    OK

    Version checked
    3.2.1
    Time taken
    169 s
  • r-release-macos-x86_64

    The current release of R on macOS, x86_64

    OK

    Version checked
    3.2.1
    Time taken
    767 s
  • r-release-windows-x86_64

    The current release of R on Windows, x86_64

    OK

    Version checked
    3.2.1
    Time taken
    613 s
  • 13 OK

Over time

No change since 17 Sep 2026

As a list (8)
ChangedWorst statusOKNotesWarningsErrors
17 Sep 2026OK13000
30 Aug 2026Error3004
25 May 2026OK13000
19 May 2026Error10003
2 May 2026OK13000
25 Apr 2026Error11001
12 Mar 2026Note11300
10 Mar 2026Error10301

Since March 2026

Check results on CRAN

Total downloads in the last 30 days
818−2.7% down on the 30 days before, the worse directionIt is the sum of 3 channels: CRAN, r2u and autoCRAN.

CRAN rank

4,116 of 26,530

CRAN

808 downloads in the last 30 days

Rank
4,116 of 26,530
Change
+0.25% up on the 30 days before, the better direction

It is in the total. Take it out

r2u

5 downloads in the last 30 days

Rank
9,299 of 30,526
Change
−75% down on the 30 days before, the worse direction

It is in the total. Take it out

autoCRAN

5 downloads in the last 30 days

Rank
10,893 of 29,212
Change
−66.7% down on the 30 days before, the worse direction

It is in the total. Take it out

Over time

Compare downloads

Functions
406
Public exports
210
Lines of R code
27,441
Median complexity
3
Functions (406)
Size and composition

Lines by kind (53,828)

KindLinesShare
R code27,44151%
Tests14,35927%
Documentation10,26319%
Guides1,7653%

Lines by language

LanguageLinesShare
R41,80078%
Rd10,26319%
Vignettes1,6323%
Other1330.2%

Languages are counted from file extensions.

Files
371
R functions
406
Object systems
S3: 16 methods, S4: 5 classes, S4: 148 generics, S4: 187 methods
Deprecated functions
9
Complexity
Median
3
Mean
4.91
Highest
114
Median lines per function
15
About complexity

Cyclomatic complexity counts the independent paths through a function: 1 is a straight line, higher is harder to test. R functions only.

Call graph figures
R functions
406
Calls
450
Unconnected
96
Groups
16
Growth (31 releases)
Total lines by release
23,186 on 30 Aug 201753,828 on 29 Aug 2026
Release changes

Coverage was measured, but at least one test failed during the run.

Lines run by tests
4.3%
Expressions run by tests
4.7%
Test cases
510
Exports named in tests
65.7%
Coverage by file (49)
Coverage run
Lines counted
10,964
Lines the tests ran
469
Tests passed
No
Measured with
covr 3.6.5 on R 4.6.1
Test suite
Has tests
Yes
Test frameworks
RUnit, testthat
Test cases
510
Lines of tests
14,359
Test lines per line of code
0.52
Exports documented
100%
Arguments documented
96.1%
Return value documented
98%
Help pages with examples
23.3%
Examples run in checks
65.9%
Guides (5)
Other documentation
README
Yes, 138 words
Release notes file
Yes
Help pages
176
Lines of documentation
10,263
Earlier names (1)
  • Her Majesty the Queen in Right of Canada, as represented by the Minister of Natural Resources Canada

PredictiveEcology / spades.core on github.com

Stars
11
Forks
19
Open issues
29
Last commit
19 Sep 2026
Activity
Commits
4,348
Open pull requests
2
Tagged releases
28
Latest tagged release
v2.1.8, 18 Sep 2025
Issues closed in
84 days (median)
Pull requests closed in
0 days (median)
Pull requests merged
90%
Created
28 Jun 2017
Licence file reads as
GPL-3.0
Development practices (12)
KindFound
Continuous integrationGitHub Actions
Governance and communityContributing guide
Docs sourcepkgdown
GitHub Pages site last deployed 2026-09-19
pkgdown site last built 2026-09-19
CoverageCoverage reporting (Codecov)
CRAN release processcran-comments.md, revdep/, CRAN-SUBMISSION
Lint, format, editorlintr, Air, RStudio project
Git structural.gitattributes

Method, repository practices

Across PredictiveEcology

Claude Codeat least 189 crediting itClaude CodeFirst seen 1 Apr 2026at least 189 crediting it
Claude Fable 5Claude Fable 528 Aug 2026At least 1 commit
Claude Opus 5Claude Opus 518 Aug 2026At least 4 commits
Claude Opus 51MClaude Opus 51M context window17 Aug 2026 to 28 Aug 2026At least 38 commits
Claude Opus 4.71MClaude Opus 4.71M context window30 Apr 2026 to 21 May 2026At least 85 commits
Claude Sonnet 4.6Claude Sonnet 4.61 Apr 2026 to 22 Apr 2026At least 15 commits

Tools

ToolFirst seenFoundCommits crediting it
Claude Code1 Apr 2026Named in .Rbuildignore.claudeNamed in .gitignore.claude189 at least
  • Named in .Rbuildignore
  • Named in .gitignore

Models

ModelContext windowCommitsFirst commitLast commitCredit lines of
Claude Fable 51 at least28 Aug 202628 Aug 2026Claude Code
Claude Opus 54 at least18 Aug 202618 Aug 2026Claude Code
Claude Opus 51M38 at least17 Aug 202628 Aug 2026Claude Code
Claude Opus 4.71M85 at least30 Apr 202621 May 2026Claude Code
Claude Sonnet 4.615 at least1 Apr 202622 Apr 2026Claude Code

Across PredictiveEcology

R releases
  • On CRAN
  • Archived
  • Release
0.1.00.2.01.0.01.1.02.1.03.2.1Archived and backArchived and backBackArchivedArchived and backBackBackArchivedBackArchived and back

Archived and back

ArchivedBackCRAN's reasonKind
13 Jul 202629 Aug 2026requires archived package 'reproducible'Needs an archived package
12 Apr 202416 Apr 2024requires archived package 'reproducible'Needs an archived package
9 Nov 20226 Jul 2023requires archived package 'Require'Needs an archived package
22 May 202110 Jun 2021requires archived package 'reproducible'Needs an archived package
VersionReleasedREvents
3.2.1 current29 Aug 20264.6.1Back on CRAN 29 Aug 2026
3.1.223 May 20264.6.0Archived 13 Jul 2026
“requires archived package 'reproducible'”
3.1.019 May 20264.6.0
3.0.411 Jan 20264.5.2
2.1.818 Sep 20254.5.1
2.1.62 Sep 20254.5.1
2.1.02 Jun 20244.4.0
2.0.525 Apr 20244.4.0
Earlier versions (23)
VersionReleasedREvents
2.0.416 Apr 20244.3.3Back on CRAN 16 Apr 2024
2.0.310 Nov 20234.3.2Archived 12 Apr 2024
“requires archived package 'reproducible'”
2.0.26 Jul 20234.3.1Back on CRAN 6 Jul 2023
Maintainer: Eliot J B McIntire
1.1.019 Aug 20224.2.1Archived 9 Nov 2022
“requires archived package 'Require'”
1.0.1019 Jan 20224.1.2
1.0.930 Sep 20214.1.1
1.0.810 Jun 20214.1.0Back on CRAN 10 Jun 2021
1.0.620 Feb 20214.0.4Archived 22 May 2021
“requires archived package 'reproducible'”
1.0.57 Jan 20214.0.3
1.0.312 Sep 20204.0.2
1.0.228 Aug 20204.0.2
1.0.115 May 20204.0.0
1.0.021 Feb 20203.6.2
0.2.725 Nov 20193.6.1
0.2.613 Sep 20193.6.1
0.2.519 Mar 20193.5.3
0.2.43 Feb 20193.5.2
0.2.318 Nov 20183.5.0
0.2.214 Aug 20183.5.0
0.2.19 Aug 20183.5.0
0.2.010 Jul 20183.5.0
0.1.130 Jan 20183.4.3
0.1.030 Aug 20173.4.1
Release notes (3.2.1)

New features

  • Cached file-backed objects (e.g. terra SpatRaster) are now portable across machines and user accounts. Backing files are recorded relative to the simulation's paths instead of as absolute locations, so a cache written on one machine can be reused on another. If you set reproducible.fileBackedAnchors yourself, your setting is respected.
  • If setting up a simulation fails partway through, you no longer have to start over. Fix the module that failed, then call restartSimInit() to pick up where it left off. On by default. See ?restartSimInit.
  • SpaDES.core now records every file and URL that modules download during a simulation, tagged with the module and event that asked for it, so you can see where a simulation's inputs came from. Turn it off with options(spades.urlLog = FALSE). See ?spadesOptions.
  • New findProjectPath() finds a project's root directory by looking for an RStudio project file or a git repository. See ?findProjectPath.
  • New codeCheckModules() checks several modules in one call, or every module in your module folder when called with no arguments. See ?codeCheckModule.
  • You can now tell the module code checker to ignore a finding: add a # nolint comment to a line of module code, or set options(spades.codeChecksIgnore = ...). Use # nolint: vars a, b to declare objects the checker cannot see being created. See ?codeCheckModule.
  • The code checker gained checks on a module's reqdPkgs: packages listed more than once, and package::function() calls for packages the module never declared. See ?codeCheckModule.

Enhancements

  • Code-check reports group repeats of an issue under one heading, tag each finding with its check name so it can be pasted into a # nolint comment, and say how to silence the finding.
  • restartSpades() remembers the events filter from the original spades() call. Pass events to override it. See ?restartSpades.
  • saveSimList() documentation now describes its two modes -- portable (bundle everything) and in place (metadata only) -- with worked examples. See ?saveSimList.

Behaviour changes

  • spades.moduleCodeChecks now defaults to FALSE, so module code checks no longer run on every simInit(). Run them with codeCheckModule() or codeCheckModules() instead, or set the option to TRUE to restore the old behaviour. See ?spadesOptions.
  • Event and .inputObjects cacheIds change once with this release, because module paths and the parameter-definition table no longer contribute to them. After the one-time recompute, identical runs on different machines share a cache as intended.
  • Figures cached by Plots(useCache = TRUE) are redrawn once, because the check for whether a plot has changed now covers more of the plot.

Dependency changes

  • simInit() no longer installs or loads the box package. The spades.reqdPkgsDontLoad option now defaults to NULL, and the unused spades.useBox option has been removed.
  • The caribouMovement sample module no longer requires sf, which it never used.
  • Require now needs to be at least version 2.0.0. The previous minimum (1.0.1) was long out of date with the functions actually used.

Bug fixes

  • A simList saved with saveSimList() can now be run after loadSimList(). Module functions were lost in the round trip, so a reloaded simulation could be inspected but not run. If the module source cannot be found, or needs a package that is not installed, loading now warns instead of failing. (#388)
  • saveSimList(projectPath = ) no longer fails for a simulation holding file-backed objects. Such objects are also re-rooted correctly on load when they live under projectPath, and saving now warns when a backing file sits somewhere it cannot be re-rooted from, instead of producing an archive that fails to reload. (#389)
  • saveSimList() and loadSimList() no longer create a stray cache/ directory in the caller's working directory, and archive extraction uses the directory it was given instead of extracting into the working directory.
  • saveSimList(fileBackedDir = ) is accepted instead of causing an error.
  • saveSimList() no longer errors when outputs(sim) has rows.
  • Plots(useCache = TRUE) now redraws when a plot's facets, coordinate limits, theme, or position adjustments change. Such plots were previously treated as identical and the redraw was skipped.
  • scheduleConditionalEvent() works with a non-zero minEventTime. Such events previously never fired, one that re-armed itself could loop forever at a single timestep, and adding one could error.
  • defineEvent() now always registers the event function, which could previously be defined where nothing could find it. See ?defineEvent.
  • Module metadata no longer errors with "external pointer is not valid" under terra >= 1.9-34.
  • simInit() and spades() no longer error when debug is given as a multi-element list, and the usual .inputObjects and code-check messages are no longer suppressed in that case. (#322)
  • simInit(objects = ) again loads all user-supplied objects when options(spades.allowInitDuringSimInit = TRUE).
  • simInit() no longer errors when given params = list(.globals = ...) but no modules.
  • A module's .inputObjects cache is invalidated when you edit a helper function it calls, not only when you edit .inputObjects itself.
  • Quoted .useCacheArgs entries such as useCloud = quote(P(sim)$.useCloud) are evaluated in the module's own context on the .inputObjects path, so they now resolve to the right module's parameters.
  • restartSimInit() restarts the module that actually failed, even when an earlier module's .inputObjects was cached. It also clears objects the interrupted run created, so a resume starts clean, and prefixes its messages the way simInit() does.
  • Progress bars from archive::archive_extract() (e.g. via prepInputs()) no longer flood the log. They are throttled to one line per getOption("spades.progressInterval", 2) seconds on Windows, on non-dynamic terminals, and in logged or non-interactive runs.
  • writeRNGInfo() records the RNG state instead of writing only ".", and writeEventInfo() writes to the full path it computed.
  • Deprecation messages name the package to install, instead of reading "has been moved to .".
  • convertTimeunit() returns the right value for whole-number conversions between units other than seconds.
  • checkParams() returns NA when a simulation has no user modules, since nothing was checked.
  • copyModule() creates its destination correctly and copies files sitting directly in the module's tests/ folder.
  • The code checker no longer warns that an input has no default when it is guarded by suppliedElsewhere(), understands params(sim)[[currentModule(sim)]]$x as the current module's parameter, and no longer reports outputs assigned inside Cache() or compiler::cmpfun() wrappers as unused.
  • The warning about giving an object the same name as a module explains why the clash matters.
  • SpaDES.core loads cleanly when no cache location has been set, falling back to a temporary folder the way reproducible does. See ?setPaths.