# DearDiary.jl: state of the project at v0.8.0

**URL:** <https://discourse.julialang.org/t/deardiary-jl-state-of-the-project-at-v0-8-0/137509>\
**Category:** Package Announcements\
**Tags:** package, announcement, webapps, api\
**Created:** [June 8, 2026, 9:59pm UTC](https://discourse.julialang.org/t/deardiary-jl-state-of-the-project-at-v0-8-0/137509 "2026-06-08T21:59:03Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![pebeto](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pebeto/32/222427_2.png) [@pebeto](https://discourse.julialang.org/u/pebeto)\
**Post date:** [June 8, 2026, 9:59pm UTC](https://discourse.julialang.org/t/deardiary-jl-state-of-the-project-at-v0-8-0/137509/1 "2026-06-08T21:59:04Z")

</div>

Hi all,

A few months on from the [launch thread](https://discourse.julialang.org/t/deardiary-jl-a-lightweight-but-powerful-machine-learning-experiment-tracking-tool-for-julia/133666), DearDiary.jl just hit v0.8.0, and it feels like the right point to share where the project stands rather than just what shipped today.

## The shape of the project

DearDiary.jl is a ML experiment tracker. Same job as MLflow (projects, experiments, iterations, parameters, metrics, artifacts, models), but written end-to-end in Julia. The architecture splits into Repository → Service → Routes → Client → UI layers, each with its own tests and a swappable boundary (Multitier architecture).

## The big pieces

- **Bit-exact reproducibility.** Every iteration can snapshot its full `Manifest.toml`, Julia version, and git SHA. `restore(iteration_id)` writes the captured environment to disk for `Pkg.instantiate`. `with_iteration` auto-snapshots driver iterations. You can re-run anything you logged, byte-for-byte
- **Model registry.** First-class `Model` and `ModelVersion` entities with a `NO_STAGE -> STAGING -> PRODUCTION -> ARCHIVED` lifecycle. Promoting a version to `PRODUCTION` auto-archives the previous incumbent. Every version links back to the iteration that produced it, so a production model carries its full training lineage
- **Pluggable artifact storage.** `Resource` bytes live in any `AbstractArtifactStore` backend: inline in SQLite (default), on the local filesystem, or in any S3-compatible object store (AWS S3, MinIO, Cloudflare R2). `migrate_artifacts!` moves rows between backends on a running database
- **Iteration lineage and lifecycle.** Iterations carry a `parent_iteration_id` for HPO sweeps, nested CV folds, and distributed workers; an `IterationStatus` enum (`RUNNING / SUCCEEDED / FAILED / KILLED`); and an `error_message` field. `with_iteration` auto-finalises with the right status and captures exception text on failure
- **A full Julia client.** `connect(...)`, `with_iteration(...) do ... end`, full CRUD parity over the REST API

## New in v0.8.0

An experimental embedded web dashboard. `DearDiary.run()` boots a small Bonito-based UI on a sibling port alongside the REST API. It walks the project tree, nests child iterations under their drivers, and renders per-iteration metric charts in pure Julia as inline SVG (no third-party JavaScript bundle, no CDN).

## What’s next

MLJ Loggers integration is close. Once it lands, an MLJ pipeline will log iterations, parameters, and metrics into a running DearDiary instance without manual `create_iteration` / `log_metrics` calls. The UI roadmap stays open; experimental status means that it can keep cooking into something more polished (suggestions are totally welcome).

## Try it

```julia
] add DearDiary

```

```julia
using DearDiary
DearDiary.run() # REST API on :9000, dashboard on :9001

```

Repo: [GitHub - JuliaAI/DearDiary.jl: An ML experiment tracker made in Julia. · GitHub](https://github.com/JuliaAI/DearDiary.jl)  
Docs: [Home · DearDiary.jl](https://juliaai.github.io/DearDiary.jl/dev/)

 ![image](https://global.discourse-cdn.com/julialang/original/3X/d/8/d8278ee06d366f533fd2d993a8097ff50fe1c2f2.jpeg)
