# TimeTraveler.jl: a package for running julia code back in time

**URL:** <https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478>\
**Category:** Package Announcements\
**Created:** [September 3, 2023, 8:47am UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478 "2023-09-03T08:47:57Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![oxinabox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oxinabox/32/206603_2.png) [@oxinabox](https://discourse.julialang.org/u/oxinabox)\
**Post date:** [September 3, 2023, 8:47am UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/1 "2023-09-03T08:47:57Z")

</div>

I created a package to make it easier to work with world-ages and invoke in world.

Basically it remembers the world age when any package was loaded.  
So that you can go and run your code against the defintions in the package when it was first loaded.

For example

```julia
@when_freshly_loaded Foo begin
    @test Foo.foo() == 100
end

```

which will ignore any redefintions you (or Revise) have done since then.  
So you can go back and test that your new tests fail.  
Or do comparative benchmarking of new method vs old (I haven’t yet checked if this has too much overhead, but i don’t think it will, at least not unless the code you are using in the outisde of your benchmake is complicated, someone comment and let me know)

> **[GitHub - oxinabox/TimeTraveler.jl: Time travel in JuliaLang. (Useful for...](https://github.com/oxinabox/TimeTraveler.jl)**
>
> Time travel in JuliaLang. (Useful for testing what code did before your changes) - GitHub - oxinabox/TimeTraveler.jl: Time travel in JuliaLang. (Useful for testing what code did before your changes)

Feel free to bikeshed on the name before i register it.  
I leaned a way from TimeMachine.jl as there is that Apple backups feature called that?  
And TARDIS.jl makes me sound like a nerd

---

<div class="post-metadata">

**Author:** ![Sukera](https://avatars.discourse-cdn.com/v4/letter/s/ce7236/32.png) [@Sukera](https://discourse.julialang.org/u/Sukera)\
**Post date:** [September 3, 2023, 8:50am UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/2 "2023-09-03T08:50:57Z")

</div>

Where can I find the package?

---

<div class="post-metadata">

**Author:** ![Mason](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mason/32/2423_2.png) [@Mason](https://discourse.julialang.org/u/Mason)\
**Post date:** [September 3, 2023, 9:11am UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/3 "2023-09-03T09:11:18Z")

</div>

Presumably at [GitHub - oxinabox/TimeTraveler.jl: Time travel in JuliaLang. (Useful for testing what code did before your changes)](https://github.com/oxinabox/TimeTraveler.jl)

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [September 3, 2023, 1:07pm UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/4 "2023-09-03T13:07:39Z")

</div>

For what it’s worth, when I saw the name I expected it to be some conveniences around backdating your registry.

---

<div class="post-metadata">

**Author:** ![tecosaur](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tecosaur/32/23206_2.png) [@tecosaur](https://discourse.julialang.org/u/tecosaur)\
**Post date:** [September 4, 2023, 12:25am UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/5 "2023-09-04T00:25:34Z")

</div>

Likewise. But maybe I’ve just heard too much about benchmarking different julia versions with the registry at a matching age.

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [September 4, 2023, 9:50am UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/6 "2023-09-04T09:50:08Z")

</div>

How about WorldAgeTraveler?

---

<div class="post-metadata">

**Author:** ![ianshmean](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ianshmean/32/216042_2.png) [@ianshmean](https://discourse.julialang.org/u/ianshmean)\
**Post date:** [September 4, 2023, 10:37pm UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/7 "2023-09-04T22:37:56Z")

</div>

Or UnRevise perhaps

---

<div class="post-metadata">

**Author:** ![ianshmean](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ianshmean/32/216042_2.png) [@ianshmean](https://discourse.julialang.org/u/ianshmean)\
**Post date:** [September 5, 2023, 7:00pm UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/8 "2023-09-05T19:00:41Z")

</div>

Aladdin (I can show you the worlds)

---

<div class="post-metadata">

**Author:** ![tecosaur](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tecosaur/32/23206_2.png) [@tecosaur](https://discourse.julialang.org/u/tecosaur)\
**Post date:** [September 6, 2023, 12:06am UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/9 "2023-09-06T00:06:24Z")

</div>

Oooh, that’s a fun one

---

<div class="post-metadata">

**Author:** ![jules](https://avatars.discourse-cdn.com/v4/letter/j/41988e/32.png) [@jules](https://discourse.julialang.org/u/jules)\
**Post date:** [September 6, 2023, 4:09am UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/10 "2023-09-06T04:09:19Z")

</div>

OldAge.jl

---

<div class="post-metadata">

**Author:** ![Mason](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mason/32/2423_2.png) [@Mason](https://discourse.julialang.org/u/Mason)\
**Post date:** [September 6, 2023, 6:36am UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/11 "2023-09-06T06:36:21Z")

</div>

I dont get it, what’s wrong with the current name?

---

<div class="post-metadata">

**Author:** ![oxinabox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oxinabox/32/206603_2.png) [@oxinabox](https://discourse.julialang.org/u/oxinabox)\
**Post date:** [September 6, 2023, 6:59am UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/12 "2023-09-06T06:59:55Z")

</div>

> I dont get it, what’s wrong with the current name?

I invited bikeshedding, in the top post.

> Feel free to bikeshed on the name before i register it.

and there is _nothing_ the julialang community likes more than a good ol’ bikeshedding over what to name something.

My mistake 😂

---

<div class="post-metadata">

**Author:** ![Mason](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mason/32/2423_2.png) [@Mason](https://discourse.julialang.org/u/Mason)\
**Post date:** [September 6, 2023, 7:46am UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/13 "2023-09-06T07:46:30Z")

</div>

Ahh that makes sense, yeah I missed that.

---

<div class="post-metadata">

**Author:** ![ianshmean](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ianshmean/32/216042_2.png) [@ianshmean](https://discourse.julialang.org/u/ianshmean)\
**Post date:** [September 6, 2023, 8:42am UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/14 "2023-09-06T08:42:01Z")

</div>

Bikeshedding is the daily crossword of OSS

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [September 6, 2023, 8:46am UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/15 "2023-09-06T08:46:53Z")

</div>

I expected this to be something related to [Time travel debugging - Wikipedia](https://en.wikipedia.org/wiki/Time_travel_debugging) but it is way more narrow. Adding something about world age to the name alternatively just make up something punny seems better to me.

---

<div class="post-metadata">

**Author:** ![blackeneth](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/blackeneth/32/10353_2.png) [@blackeneth](https://discourse.julialang.org/u/blackeneth)\
**Post date:** [September 6, 2023, 3:59pm UTC](https://discourse.julialang.org/t/timetraveler-jl-a-package-for-running-julia-code-back-in-time/103478/16 "2023-09-06T15:59:55Z")

</div>

ManyWorlds.jl

… as in the [Many-Worlds](https://plato.stanford.edu/entries/qm-manyworlds/) interpretation of quantum mechanics.
