Docs
Release Notes
Migrating from v1 to v2

Migrating from v1 to v2

Have you run into something that’s not covered here? Add your changes to GitHub! (opens in a new tab)

Introduction

This is a reference for upgrading your Pylon from v1 to v2. Version 2 introduces the support for various runtimes, a new npm create command, and an improved development server. The official supported runtimes by the npm create pylon command are Bun, Node.js and Cloudflare Workers. Other runtimes are also supported but require manual setup. If you’re curious what’s new, head over to the v2.0 Release Notes.

For most users we expect a smooth upgrade path as only a couple of changes will be required:

Updating your dependencies

You need to update your dependencies to the latest version of Pylon. The @getcronit/pylon-cli and @getcronit/pylon-server are no longer required and replaced by the @getcronit/pylon-dev package.

Update Pylon version

{
  "dependencies": {
    "@getcronit/pylon": "^2.0.0"
  }
}

Replace old dependencies with pylon-dev

{
  "devDependencies": {
-    "@getcronit/pylon-cli": "^1.0.0",
-    "@getcronit/pylon-server": "^1.0.0"
+    "@getcronit/pylon-dev": "^2.0.0"
  }
}

Updating scripts

Pylon v2 introduces a new pylon dev command that handles multiple runtimes. You can choose your specific start command by using -c <command>.

Update your start script

{
  "scripts": {
-    "develop": "bun run pylon develop"
+    "dev": "pylon dev -c 'bun run .pylon/index.js'"
  }
}

Update your build script

{
  "scripts": {
-    "build": "bun run pylon build"
+    "build": "pylon build"
  }
}

Handling breaking changes

Next, we’ll cover the breaking changes that you might encounter when upgrading to Pylon v2. In order to successfully update, you’ll need to resolve these changes.

GraphQL definition

We have updated the way you define your GraphQL schema. Instead of the default export of the defineService function you now have to export a graphql object. This allows for supporting multiple runtimes that depend on the default export.

Before

import { defineService } from "@getcronit/pylon";
 
export default defineService({
  graphql: {
    Query: {
      sum: (a: number, b: number) => a + b,
    },
    Mutation: {
      divide: (a: number, b: number) => a / b,
    },
  },
});

After

import { app } from "@getcronit/pylon";
 
export const graphql = {
  Query: {
    sum: (a: number, b: number) => a + b,
  },
  Mutation: {
    divide: (a: number, b: number) => a / b,
  },
};
 
export default app;

Custom routes and middleware

The app instance is now used to define custom routes and middleware. This change allows for a more flexible API and better integration with the underlying runtimes.

Before

import { PylonAPI } from "@getcronit/pylon";
 
export const configureApp: PylonAPI["configureApp"] = (app) => {
  app.get("/hello", (ctx, next) => {
    return new Response("Hello, world!");
  });
};

After

import { app } from "@getcronit/pylon";
 
app.get("/hello", (ctx, next) => {
  return new Response("Hello, world!");
});

Logging

The logger instance has been removed due to the lack of customizability. We are still looking into a better solution for logging in the future. If you know of a good solution, please let us know (opens in a new tab).

Instead of using the logger instance, please use console for logging, or your favorite logging library.

- import { logger } from "@getcronit/pylon";
 
- logger.info("Hello, world!");
+ console.log("Hello, world!");

Client Generation (GQty)

You only need to update the client generation if you are using the feature described in the Client Generation guide.

{
-  "pylon": {
-    "gqty": "./frontend/src/gqty/index.ts"
-  },
   "scripts": {
-    "dev": "pylon dev -c 'bun run .pylon/index.js'",
+    "dev": "pylon dev -c 'bun run .pylon/index.js' --client --client-path ./frontend/src/gqty/index.ts --client-port 3000",
   }
}

Dockerfile

If you are using a Dockerfile to build your Pylon project, you need to update the ENTRYPOINT to replace the pylon-server command.

- ENTRYPOINT [ "bun", "run", "./node_modules/.bin/pylon-server" ]
+ ENTRYPOINT [ "bun", "run", "/usr/src/pylon/.pylon/index.js" ]

Conclusion

We hope this guide has helped you upgrade your Pylon project to v2. If you have any questions or need further assistance, feel free to reach out to us on Discord or GitHub.