# \[ANN\] PlutoTables: edit any Julia object in a tabular interface

**URL:** <https://discourse.julialang.org/t/ann-plutotables-edit-any-julia-object-in-a-tabular-interface/99696>\
**Category:** Package Announcements\
**Created:** [May 31, 2023, 10:39pm UTC](https://discourse.julialang.org/t/ann-plutotables-edit-any-julia-object-in-a-tabular-interface/99696 "2023-05-31T22:39:11Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![aplavin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aplavin/32/222056_2.png) [@aplavin](https://discourse.julialang.org/u/aplavin)\
**Post date:** [May 31, 2023, 10:39pm UTC](https://discourse.julialang.org/t/ann-plutotables-edit-any-julia-object-in-a-tabular-interface/99696/1 "2023-05-31T22:39:11Z")

</div>

> # `PlutoTables`
> 
> Edit [and show, wip] arbitrary Julia objects in a tabular interface. Based on `Pluto` and `PlutoUI` for interactivity, `Accessors` and `AccessorsExtra` for object modification.

Pluto and PlutoUI interactivity is very convenient, but those widgets only support basic types like numbers and strings. Often, one needs to edit an arbitrary object, with potentially nested and repeated properties. `PlutoTables` provides several tabular input widgets for Julia objects, see the [notebook](https://aplavin.github.io/PlutoTables.jl/examples/notebook.html) for a list of examples.

Specific parameters to edit are specified using the `Accessors`/`AccessorsExtra` optic syntax, and can include a wide range of transformations or selection functions.  
A simple example of a tabular UI for editing a tuple-of-namedtuples:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/2/6/2661b37d357cb29270da66fb85908476abe7621b.png)

# See also

- [Accessors](https://github.com/JuliaObjects/Accessors.jl) and [AccessorsExtra](https://gitlab.com/aplavin/AccessorsExtra.jl) packages for generically referring to parts and transformations of arbitrary objects (so-called “optics”)
- [AccessibleOptimization](https://discourse.julialang.org/t/ann-accessibleoptimization-optimization-with-arbitrary-objects-instead-of-vectors/99695) using a very similar approach to define optimization problems, including model fitting
- [PlutoUIExtra](https://gitlab.com/aplavin/PlutoUIExtra.jl) package that includes a sidebar pluto widget. Sidebar is useful with both tabular inputs from `PlutoTables` and other UI elements.

`PlutoTables` has just been registered in General.

---

<div class="post-metadata">

**Author:** ![Christopher\_Fisher](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/christopher_fisher/32/26132_2.png) [@Christopher\_Fisher](https://discourse.julialang.org/u/Christopher_Fisher)\
**Post date:** [June 3, 2023, 2:12pm UTC](https://discourse.julialang.org/t/ann-plutotables-edit-any-julia-object-in-a-tabular-interface/99696/2 "2023-06-03T14:12:22Z")

</div>

Thank you for putting this table together. I think it might be useful for one of my projects. I have a group of sliders such as:

```julia
x1 = @bind x1 Slider(0:10, default=5)
x2 = @bind x2 Slider(0:10, default=5)
.
.
.
xn = @bind xn Slider(0:10, default=5)

```

each in a different cell. Unfortunately, this makes it difficult to see the plot they are manipulating. Organizing the sliders into a R x C table would make things easier to see. Is there a way I can accomplish that with your package so I can see the the slider variable labels (e.g., x1)? The row and column labels would not be necessary in this case.

---

<div class="post-metadata">

**Author:** ![aplavin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aplavin/32/222056_2.png) [@aplavin](https://discourse.julialang.org/u/aplavin)\
**Post date:** [June 6, 2023, 8:55pm UTC](https://discourse.julialang.org/t/ann-plutotables-edit-any-julia-object-in-a-tabular-interface/99696/3 "2023-06-06T20:55:24Z")

</div>

Currently, `PlutoTables` only does columns and rows in a “systematic” way: eg, a column for each element of a collection, a row for each property of that object.

For convenience, you can combine your variables into a struct, or a couple of structs that make sense in your case. Then, `PlutoTables` can create a widget per struct, potentially saving space already.

Also, it’s often convenient to place `PlutoTables` widgets that control plots or other major outputs into a sidebar that stays aside and doesn’t scroll with the main notebook content.  
This looks like this (add `@bind`s to actually obtain object values):

 ![image](https://global.discourse-cdn.com/julialang/original/3X/8/6/863108dc2457581238d2c15f8535f9c41ece9542.png)

Here, `PlutoUIExtra` is under registration in `General`, install it from [Alexander Plavin / PlutoUIExtra.jl · GitLab](https://gitlab.com/aplavin/PlutoUIExtra.jl) url for now.

---

<div class="post-metadata">

**Author:** ![davide.crucitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/davide.crucitti/32/218224_2.png) [@davide.crucitti](https://discourse.julialang.org/u/davide.crucitti)\
**Post date:** [September 15, 2025, 11:13am UTC](https://discourse.julialang.org/t/ann-plutotables-edit-any-julia-object-in-a-tabular-interface/99696/4 "2025-09-15T11:13:59Z")

</div>

Thank you, the sidebar is extremely useful when I have to analyze data. I can have a selection of dataset, algorithms and metrics and generate the graphs I need to analyze on the fly. This is much easier than having to scroll up and down generating the graphs or placing the selector in the most convenient place of the notebook.  
One thing I’d like would be the ability to indent the sidebar a bit: I have a large screen and “center left” is a bit too far away from the code where I’m actually working.

Great work!

---

<div class="post-metadata">

**Author:** ![Sevi](https://avatars.discourse-cdn.com/v4/letter/s/c67d28/32.png) [@Sevi](https://discourse.julialang.org/u/Sevi)\
**Post date:** [September 15, 2025, 1:16pm UTC](https://discourse.julialang.org/t/ann-plutotables-edit-any-julia-object-in-a-tabular-interface/99696/5 "2025-09-15T13:16:09Z")

</div>

This is pretty cool!

Reminds me of something I tried to implement a while ago (some kind of “array widgets” that would allow interactively updating arrays – at least vectors for a start). I did some testing here ([Feature: Widget for dynamically adjustable vectors/arrays · Issue #303 · JuliaPluto/PlutoUI.jl · GitHub](https://github.com/JuliaPluto/PlutoUI.jl/issues/303)), but never really got around to finish it. In the end I used another solution.
