{"id":1804,"date":"2025-11-14T15:28:38","date_gmt":"2025-11-14T13:28:38","guid":{"rendered":"https:\/\/upcloud.com\/global\/us\/resources\/tutorials\/use-heim-run-your-application-upcloud\/"},"modified":"2026-05-12T22:38:01","modified_gmt":"2026-05-12T21:38:01","slug":"use-heim-run-your-application-upcloud","status":"publish","type":"tutorial","link":"https:\/\/upcloud.com\/global\/resources\/tutorials\/use-heim-run-your-application-upcloud\/","title":{"rendered":"Use Heim to run your application on UpCloud"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">If you are a developer, especially running a small business and delivering applications to your customers alone, you don\u2019t have time and you don\u2019t want to care about \u201ceverything DevOps\u201d. You don\u2019t want to care about pipelines, about deployments, and especially about infrastructure. You simply don\u2019t have time to learn it deeply and later manage it. There are many platforms and tools to help you with it and take this burden from you.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Partnership with Heim<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We at UpCloud are very happy to help you too! With our Partner &#8211; heim.dev, we take this part from you, and now you can easily focus on coding, and run your applications without anything else than one command in the CLI!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What is Heim?<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Heim is a PaaS service, which allows you to deploy your code to infrastructure managed by them. With the whole ecosystem around &#8211; self-hosted server (no, don\u2019t worry! Running it is hilariously simple!) and Platform-as-a-Service offering, where your applications live.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Scaling, maintaining the application? Forget it, Heim does it for you.<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Heim uses UpCloud as underlying infrastructure, which gives you a very powerful, performant and reliable base for your applications. What is equally important is infrastructure that is <a href=\"https:\/\/upcloud.com\/global\/solutions\/european-cloud\/\">run by a European company<\/a>, which means that your data is not only secured, but also is under European law.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By this cooperation, we give you easy to use tool, run on first class cloud vendor.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Video tutorial<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Automate DevOps: One-Command Deployment with Heim &amp; UpCloud (Express Tutorial)\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/OpRDVpvT5Ak?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Start with Heim<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In this tutorial we go through the first steps with Heim, what is needed to start, explore the GUI and deploy template application. And all can be done in a few minutes!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Installation<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/heim-home-1024x507.png\" alt=\"The home page of Heim.dev.\" class=\"wp-image-69134\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To start using Heim you have to register at heim.dev, using your GitHub user.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/heim-login.png\" alt=\"Showing how to log in to Heim with your GitHub user.\" class=\"wp-image-69131\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">After login we land on the portal where we see our deployed applications.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/001-the-main-view-of-heim-gui-console-1024x510.png\" alt=\"Main view of the Heim console.\" class=\"wp-image-69148\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">When we log in for the first time, the dashboard will be empty. Let\u2019s change it!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>CLI installation<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The heart of Heim is its CLI tools. To install it, we need to install the proper package from <a href=\"https:\/\/heim.dev\/releases\/\" target=\"_blank\" rel=\"noopener\">https:\/\/heim.dev\/releases\/<\/a>&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/download-heim-package-1024x550.png\" alt=\"Instructions on how to install and quick start Heim.\" class=\"wp-image-69151\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">After successful installation, we can check it by typing in our CLI:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">$&gt; heim \u2013version\nheim-cli 1.2.0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Congratulations! All the infrastructure related work is done! Now time to play!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Start local server<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Heim offers you the development environment, which you can run locally. It will act and behave exactly in the same way as cloud environments. It is very useful for the development process and to check if your application is ready to be deployed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To run this environment, use the command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">$&gt; heim start<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/002-confirmation-that-heim-server-is-up-and-running-locally.png\" alt=\"Screenshot from console, confirming that the Heim server is up and running locally.\" class=\"wp-image-69157\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The portal is now available on your local machine, under the address <code>http:\/\/127.0.0.1:3000\/heim\/portal<\/code> and it is ready to accept local deployments!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So easy, isn\u2019t it? It is much more powerful than <strong>npm start<\/strong> for example, as it offers the whole management portal and server all your applications out-of-the-box.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Create a new project<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ok, we started a server, now it is time to create our first application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Heim offers many templates and boilerplates for programming languages. Python, TypeScript, Rust, Go, C, C#, all are available and handled properly by underlying service.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this tutorial we create a simple TypeScript https application and deploy it to the cloud. Turn on your stopwatch. It will take less than a few minutes!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To generate the project, we run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">$&gt; heim new<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">After it, Heim is asking a few questions, which we need to answer.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/003-selection-of-programing-languages-in-heim-cli.png\" alt=\"Selection of programming languages in Heim.\" class=\"wp-image-69159\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">After framework selection, we provide package name (another words, name of our application), trigger path (API endpoint), endpoint\u2019s method, and that\u2019s it!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/004-template-creating-process.png\" alt=\"Console showing the template creating process.\" class=\"wp-image-69212\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">On the screen above we can see all parameters we need to provide with example values. Then we have the information from Heim about rendering the template.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s explore our project.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">$&gt; cd heimtutorial\n$&gt; ls -l<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/005-template-prepared-and-ready-for-work.png\" alt=\"Template prepared and ready for work.\" class=\"wp-image-69220\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Everything is prepared. Two files here are important for Heim: <strong>component.toml <\/strong>and <strong>application.toml<\/strong>. These files are responsible for configuration and behaviour of Heim execution for our application.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Add region configuration<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Heim can deploy your application to different cloud providers and different regions within these providers. In our case, we want to use UpCloud and as of today we have one region available, Sweden one. Let\u2019s configure it in the application.toml by adding:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">[scaling]\nregion = [\u201cupcloud-se-1\u201d]<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/006-additional-configuration-in-application-toml-file.png\" alt=\"Screenshot showing the additional configuration in application TOML file.\" class=\"wp-image-69221\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">As we use TypeScript here in the example, we have to prepare it to be ready to deploy. For this, we run standard command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">$&gt; npm install<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">After successful installation of npm packages we are ready to deploy our template application!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Deploy to local server<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ensure that our local server is still up and running, and deploy the application, by typing:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">$&gt; heim deploy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If this deployment can\u2019t be run due to region configuration, simply comment the section in application.toml file.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Deploy to cloud<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After successful deployment we can test our application. If everything is ok and you are ready to deploy to UpCloud, run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">$&gt; heim deploy --cloud<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This command will deploy the application to the cloud, defined in application.toml.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/008-deployment-of-an-application-1024x464.png\" alt=\"Screenshot showing the deployment of an application.\" class=\"wp-image-69230\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The deployment pipeline started, all components were created. Let\u2019s check our cloud portal under <a href=\"https:\/\/cloud.heim.dev\" target=\"_blank\" rel=\"noopener\">https:\/\/cloud.heim.dev<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/009-application-is-deployed-1024x341.png\" alt=\"The application is now deployed - Heim.\" class=\"wp-image-69233\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We can navigate through different organizations and projects and we can see that our application <strong>heimtutorial<\/strong> is deployed. What do we see there?<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/010-the-tile-with-basic-information-about-the-project.png\" alt=\"A tile showing basic information about the project.\" class=\"wp-image-69234\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This tile provides the most important information about our application. The heath, status, and recent metrics.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Check the trigger<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">What is the endpoint to run? We can find it in a few places (for example in the tile we have a little icon on top right corner, we have thunderbolt, which we can click. But if we click the whole tile, we go inside our application. On top we have a menu, let\u2019s click <strong>Settings<\/strong>. We have configuration of our application, together with trigger to copy.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/011-application-settings-in-the-gui.png\" alt=\"Screenshot showing application settings in the GUI.\" class=\"wp-image-69236\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s run this app a few times. It is a template, using some dummy data, but this is more than enough to confirm if everything works.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now we can explore the Heim portal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Overview<\/strong> tab gives us general information about performance and usage. Also, we can notice the UpCloud\u2019s infrastructure in the \u201cActive Regions\u201d tile. Of course, it is a \u201cblack box\u201d to us. This is what we want, we don\u2019t want to know how it is run under the hood!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/013-performance-dashboard-1024x622.png\" alt=\"Screenshot showing the performance dashboard.\" class=\"wp-image-69241\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Metrics<\/strong> and <strong>Logs<\/strong> give us insights about the performance of the application. And it is very clean and simple, but also informative!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/012-monitoring-dashboard-of-the-application-1024x588.png\" alt=\"Monitoring dashboard of the application.\" class=\"wp-image-69238\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Summary<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">At UpCloud we believe that developer productivity is an important factor to make <strong>your<\/strong> work easier and more efficient. That is <a href=\"https:\/\/upcloud.com\/global\/partner-program\/\">why we love to partner<\/a> with platforms like Heim. Together, Heim and UpCloud, we give you a powerful tool to manage your applications in easy way and host it on modern, <a href=\"https:\/\/upcloud.com\/global\/european-data-sovereignty\/\">European and sovereign Cloud<\/a>. All you need to care now is your code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So, <strong>happy deploying!<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let us know how this cooperation helps you! We\u2019d love to hear your stories and feedback! If you wish to <a href=\"https:\/\/upcloud.com\/global\/contact\/\">contact our teams<\/a>, we are happy to discuss your use cases!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"author":100,"featured_media":6839,"comment_status":"open","ping_status":"closed","template":"","community-category":[223],"class_list":["post-1804","tutorial","type-tutorial","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/tutorial\/1804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/tutorial"}],"about":[{"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/types\/tutorial"}],"author":[{"embeddable":true,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/users\/100"}],"replies":[{"embeddable":true,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/comments?post=1804"}],"version-history":[{"count":1,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/tutorial\/1804\/revisions"}],"predecessor-version":[{"id":6842,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/tutorial\/1804\/revisions\/6842"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/media\/6839"}],"wp:attachment":[{"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/media?parent=1804"}],"wp:term":[{"taxonomy":"community-category","embeddable":true,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/community-category?post=1804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}