# Completely portable appimages

**URL:** <https://discourse.appimage.org/t/completely-portable-appimages/2459>\
**Category:** Using AppImages\
**Created:** [August 10, 2021, 3:39am UTC](https://discourse.appimage.org/t/completely-portable-appimages/2459 "2021-08-10T03:39:29Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![enzeinzen](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/enzeinzen/32/598_2.png) [@enzeinzen](https://discourse.appimage.org/u/enzeinzen)\
**Post date:** [August 10, 2021, 3:39am UTC](https://discourse.appimage.org/t/completely-portable-appimages/2459/1 "2021-08-10T03:39:30Z")

</div>

Hi,

Would it be possible to have completely portable appimages? This could be achieved the following way imo:

1. Have an option when packing the appimage to always use portable mode, so you don’t need to use the command line all the time.

2. This one is a lot harder. I know most people won’t like this so i guess it should be optional but it would be really nice to have. Could it be so that when an appimage mounts its appdir, it also mounts a separate DataDir and uses that as a portable home / config, in such a way that the appimage file also contains all it’s data? Would it even be feasible? Perhaps also add a command line option to quickly delete the DataDir if the user wants to get the app to the original state. This would be the ultimate One-file app.

Thank you. I love what you’re doing. AppImages are what convinced me to finally jump to Linux an year ago and I’ve never been happier with an OS.

---

<div class="post-metadata">

**Author:** ![probono](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/probono/32/81_2.png) [@probono](https://discourse.appimage.org/u/probono)\
**Post date:** [August 16, 2021, 8:19am UTC](https://discourse.appimage.org/t/completely-portable-appimages/2459/2 "2021-08-16T08:19:23Z")

</div>

By design we want AppImages to be read-only.

But all you need to do is to create a folder next to the AppImage with the exact name of the AppImage plus the `.home` extension. Then everything that would normally be saved in `$HOME` will be saved there instead.

Does that do what you need?

---

<div class="post-metadata">

**Author:** ![enzeinzen](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/enzeinzen/32/598_2.png) [@enzeinzen](https://discourse.appimage.org/u/enzeinzen)\
**Post date:** [August 16, 2021, 8:08pm UTC](https://discourse.appimage.org/t/completely-portable-appimages/2459/3 "2021-08-16T20:08:24Z")

</div>

I am aware of that functionality but it feels like just going halfway. If you have a directory with a lot of appimages it will become very messy. Also I can’t expect my users to create those directories by default.

I really want my apps to be portable so I would really like for them to be portable by default, without having to create any directories.

I would also love it if the data would be included into the appimage file itself. It would still be read-only in all the ways that matter.  
The unionfs that gets written to could be kept separate and the app could be reversed to its original state with a command line argument like --appimage-reverse or something.  
This would make the format extremely convenient and clean to use.

I’m gonna try to do it myself and better understand the format in the process.

Also I can’t stress this enough,  
Thank you for appimages man, you are singlehandedly making linux 10 times more accessible. Cheers.

În lun., 16 aug. 2021 la 11:29, probono via AppImage \<[appimage@discoursemail.com](mailto:appimage@discoursemail.com)\> a scris:

---

<div class="post-metadata">

**Author:** ![mgord9518](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/mgord9518/32/459_2.png) [@mgord9518](https://discourse.appimage.org/u/mgord9518)\
**Post date:** [August 17, 2021, 9:00am UTC](https://discourse.appimage.org/t/completely-portable-appimages/2459/4 "2021-08-17T09:00:31Z")

</div>

It’s probably possible, but it brings a lot more problems than what it’s probably worth.

Main issues being:

- They are not the “true” AppImages, as in they do not follow the basic structure of existing AppImages, so no standard software for dealing with them would work
- The storage space in them would be limited as SquashFS would be out of the question because the image needs to be R/W, so you’d have to go with a more typical FS like EXT4
- Compression would probably be out of the question as well, as far as I know BTRFS and NTFS are the best options for seamless R/W compression and at least BTRFS has a large footprint so it would bloat the size of the program
- Accessing the data would be harder, due to requiring it to be mounted

If you’re only interested in making them (or converting existing AppImages) for personal use and understand the drawbacks, you should go for it. Might be kind of cool for a program that always stores the same amount of data for configuration, although IMO having a directory accompanying the AppImage doesn’t really seem cluttered

---

<div class="post-metadata">

**Author:** ![CSirolli](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/csirolli/32/615_2.png) [@CSirolli](https://discourse.appimage.org/u/CSirolli)\
**Post date:** [October 17, 2021, 3:43pm UTC](https://discourse.appimage.org/t/completely-portable-appimages/2459/5 "2021-10-17T15:43:02Z")

</div>

Interesting idea, but consider how [PortableApps](https://portableapps.com/) on Windows does this. They have a program that “installs” a portable app to a thumb drive or any directory. They automatically set up the needed directories. In theory, you could do something similar for users. Create a program or script they can use to set up the needed directories for each AppImage they “install”, with a file structure like:

```auto
./
./AppImages/
./AppImages/someportableapp/
./AppImages/someportableapp/someportableapp.AppImage
./AppImages/someportableapp/someportableapp.AppImage.home/
./AppImages/someportableapp/someportableapp.AppImage.config/

```

If I understand how AppImages work, this should just work automatically.

---

<div class="post-metadata">

**Author:** ![probono](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/probono/32/81_2.png) [@probono](https://discourse.appimage.org/u/probono)\
**Post date:** [October 28, 2021, 6:41am UTC](https://discourse.appimage.org/t/completely-portable-appimages/2459/6 "2021-10-28T06:41:16Z")

</div>

AppImage can work in a very similar way, but you need to create the `.home` **or** config directory ( **not** both!) if you want to use this feature. You can do this by creating the appropriately named directories by hand or by using `--appimage-portable-home` **or** `--appimage-portable-config` _once_.

> If I understand how AppImages work, this should just work automatically.

No. By default, AppImage does not change where applications write to.

---

<div class="post-metadata">

**Author:** ![balrm](https://avatars.discourse-cdn.com/v4/letter/b/d2c977/32.png) [@balrm](https://discourse.appimage.org/u/balrm)\
**Post date:** [December 1, 2021, 7:46pm UTC](https://discourse.appimage.org/t/completely-portable-appimages/2459/7 "2021-12-01T19:46:00Z")

</div>

> folder next to the AppImage with the exact name of the AppImage plus the `.home` extension

You would then move the .home folder and the appimage to another computer and by that  
get all the data regarding the appimage with you? And updating the appimage to  
a new version would also work after moving the appimage to  
another computer?

---

<div class="post-metadata">

**Author:** ![probono](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/probono/32/81_2.png) [@probono](https://discourse.appimage.org/u/probono)\
**Post date:** [March 31, 2022, 9:00pm UTC](https://discourse.appimage.org/t/completely-portable-appimages/2459/8 "2022-03-31T21:00:29Z")

</div>

Yes and yes.

When you move both the AppImage and its folder to another computer, then the data would travel with it.

When updating the AppImage you might have to rename the directory to match the name of the new AppImage.

---

<div class="post-metadata">

**Author:** ![balrm](https://avatars.discourse-cdn.com/v4/letter/b/d2c977/32.png) [@balrm](https://discourse.appimage.org/u/balrm)\
**Post date:** [April 5, 2022, 7:54pm UTC](https://discourse.appimage.org/t/completely-portable-appimages/2459/9 "2022-04-05T19:54:34Z")

</div>

> create a folder next to the AppImage with the exact name of the AppImage plus the .home extension.

If the name of the appimage is Potato\_Presenter-v1.0.0-x86\_64.AppImage then the name of the  
folder should be Potato\_Presenter-v1.0.0-x86\_64.home?

> everything that would normally be saved in $HOME will be saved there instead.

Does that mean the appimage program will leave  
no trace on the system? Or  
that depends on the appimage program?

---

<div class="post-metadata">

**Author:** ![probono](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/probono/32/81_2.png) [@probono](https://discourse.appimage.org/u/probono)\
**Post date:** [April 19, 2022, 7:40pm UTC](https://discourse.appimage.org/t/completely-portable-appimages/2459/10 "2022-04-19T19:40:51Z")

</div>

That simply means that whatever an application would normally save in `$HOME` will be redirected to the folder next to the AppImage with the exact name of the AppImage plus the `.home` extension.

If the application writes outside of `$HOME`, then that will not be redirected.

If you want to leave “no trace”, then a sandbox like [Firejail](https://firejail.wordpress.com/) might be interesting for you, because it can restrict what the application inside an AppImage can and cannot do.
