# Difference between Apps and Machines

**URL:** <https://community.fly.io/t/difference-between-apps-and-machines/9390>\
**Category:** General\
**Created:** [December 15, 2022, 7:57am UTC](https://community.fly.io/t/difference-between-apps-and-machines/9390 "2022-12-15T07:57:21Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![snap0](https://avatars.discourse-cdn.com/v4/letter/s/ecd19e/32.png) [@snap0](https://community.fly.io/u/snap0)\
**Post date:** [December 15, 2022, 7:57am UTC](https://community.fly.io/t/difference-between-apps-and-machines/9390/1 "2022-12-15T07:57:22Z")

</div>

I’m not sure how they are different. Do you mean on a machine I can create multiple apps?

And how can I deploy a bare machine with no app on it? Like I would have ssh access to the machine and I’ll be able to install what I want to.

---

<div class="post-metadata">

**Author:** ![bogordesain](https://sea1.discourse-cdn.com/fly1/user_avatar/community.fly.io/bogordesain/32/44963_2.png) [@bogordesain](https://community.fly.io/u/bogordesain)\
**Post date:** [December 15, 2022, 11:02am UTC](https://community.fly.io/t/difference-between-apps-and-machines/9390/2 "2022-12-15T11:02:38Z")

</div>

> [@snap0](#):
>
> I’m not sure how they are different. Do you mean on a machine I can create multiple apps?

example for my project difference like this.

i have nodejs application but i have cron and queue working.

i can create multiple machine on one Apps.

apps machine = just for api  
worker machine = for queue and worker  
cron machine = for cronjob

 ![flyappsmulti](https://global.discourse-cdn.com/fly1/original/3X/c/e/ce50f76d9243c8599c27651e2a04fa3efa6055fb.png)

For ssh you can access `fly ssh console --app yourapps`  
but only 1 machine only that’s apps machine only

---

<div class="post-metadata">

**Author:** ![snap0](https://avatars.discourse-cdn.com/v4/letter/s/ecd19e/32.png) [@snap0](https://community.fly.io/u/snap0)\
**Post date:** [December 15, 2022, 11:21am UTC](https://community.fly.io/t/difference-between-apps-and-machines/9390/3 "2022-12-15T11:21:52Z")

</div>

Sorry, I still don’t understand. Can you please paraphrase?

---

<div class="post-metadata">

**Author:** ![ignoramous](https://avatars.discourse-cdn.com/v4/letter/i/a9adbd/32.png) [@ignoramous](https://community.fly.io/u/ignoramous)\
**Post date:** [December 15, 2022, 12:04pm UTC](https://community.fly.io/t/difference-between-apps-and-machines/9390/4 "2022-12-15T12:04:59Z")

</div>

As bogordesain alluded to, Machines are Fly Apps v2. So, treat them as such.

Since Machines are low-level, there’s incredible amount of control in the hands of developers: For example, if you wanted to, you could spin up a different docker image with every machine in a single Fly app, but such a makeup would get very tricky to reason about pretty fast. Homogenous apps make for a nice namespace boundary, if you will.

You could build a Fly-like service atop Fly Machines, if you wanted (but that’s not what most people running Fly apps want).

Read also:

- [Tease us with more "machine" info? - #2 by kurt](https://community.fly.io/t/tease-us-with-more-machine-info/4494/2)
- [Advantages/Disadvantages of Machine Apps - #2 by fideloper-fly](https://community.fly.io/t/advantages-disadvantages-of-machine-apps/8147/2)
- [Difference between AWS Lambda and Fly Machines? - #2 by ignoramous](https://community.fly.io/t/difference-between-aws-lambda-and-fly-machines/9124/2)

---

<div class="post-metadata">

**Author:** ![snap0](https://avatars.discourse-cdn.com/v4/letter/s/ecd19e/32.png) [@snap0](https://community.fly.io/u/snap0)\
**Post date:** [December 15, 2022, 12:23pm UTC](https://community.fly.io/t/difference-between-apps-and-machines/9390/5 "2022-12-15T12:23:36Z")

</div>

@ignoramous

So do you mean, I would simply get a VM with kernel-level control? Let’s say I can spin up LXC or multiple Docker containers inside the machines?

---

<div class="post-metadata">

**Author:** ![ignoramous](https://avatars.discourse-cdn.com/v4/letter/i/a9adbd/32.png) [@ignoramous](https://community.fly.io/u/ignoramous)\
**Post date:** [December 15, 2022, 1:03pm UTC](https://community.fly.io/t/difference-between-apps-and-machines/9390/6 "2022-12-15T13:03:06Z")

</div>

No, not really. The unit of deploy still remains a docker / runc image. Machines aren’t bare metal, nor do Machines let you BYOK (boot your own kernel).

---

<div class="post-metadata">

**Author:** ![fideloper-fly](https://sea1.discourse-cdn.com/fly1/user_avatar/community.fly.io/fideloper-fly/32/3834_2.png) [@fideloper-fly](https://community.fly.io/u/fideloper-fly)\
**Post date:** [December 15, 2022, 1:58pm UTC](https://community.fly.io/t/difference-between-apps-and-machines/9390/7 "2022-12-15T13:58:09Z")

</div>

> [@snap0](#):
>
> And how can I deploy a bare machine with no app on it? Like I would have ssh access to the machine and I’ll be able to install what I want to.

To be clear: At the moment, there’s no offering at Fly where you get a full VM (baremetal or otherwise) like you describe.

Apps and Machines are fairly close in feature set - you “Dockerize” your application, and deploy it to the app infrastructure, or the machine infrastructure.

Machines give you more options about how/when your programs are run. The very top of this article has some details about what machines offers you: [On-Demand Compute · Laravel Bytes](https://fly.io/laravel-bytes/on-demand-compute/)

Additionally, machines are “apps v2” as described - someday, all Apps will run on Machines. Apps currently run on [Nomad](https://www.nomadproject.io/) clusters. Machines don’t run on Nomad.

---

<div class="post-metadata">

**Author:** ![carter](https://sea1.discourse-cdn.com/fly1/user_avatar/community.fly.io/carter/32/553_2.png) [@carter](https://community.fly.io/u/carter)\
**Post date:** [December 15, 2022, 9:59pm UTC](https://community.fly.io/t/difference-between-apps-and-machines/9390/8 "2022-12-15T21:59:47Z")

</div>

Think of it like this:

Fly Machine - a single VM instance, in one region, that can boot very quickly

Fly App - an abstraction on top of Fly Machines that manages them for you according to a fly app configuration (how many regions, which regions, auto-scaling, etc.)

Previously, you could only use Fly Apps according to the constraints of their configurations. By giving you access to the lower level Fly Machines that Fly Apps use, you can use them however you want, but you need to do more of the work of orchestrating how/when/where/etc they are spun up.

As an example, you could write software that automates Fly Machines to act similarly to AWS Lambda. Or implement your own auto-scaling strategy instead of what Fly Apps provide out of the box.
