Skip to content

What is Kanri?

Kanri is an offline Kanban board app for Windows, macOS, and Linux built using Tauri and Nuxt. It is designed to be a simple and modern application providing you with a basic Kanban board experience without requiring an internet connection.

screenshot

  • Offline Functionality: Kanri works without an internet connection. This means you have full control of your data and access to it at any time.
  • Cross-Platform: Kanri is available on Windows, macOS, and Linux.
  • Modern Design: The app is built using Tauri and Nuxt.js v3 for a sleek user experience.

The app is maintained by the Kanri Team, a small group of open-source contributors. For personal inquiries to the original creator, please send an email to trobo@kanriapp.com. For support or feature requests, please open an issue on GitHub or write an email to support@kanriapp.com.

You can find more information on the project’s GitHub page and see planned features on the roadmap.

To get started with Kanri, follow these steps:

  1. Download Kanri:

    • Head over to the releases page and download the latest version for your operating system.
  2. Install Kanri:

    • Follow the installation instructions provided for your specific OS (Windows, macOS, or Linux).
  3. Launch Kanri:

    • Open the Kanri application from your installed location and start using your offline Kanban board.
  • What is a Kanban board? A Kanban board is a project management tool designed to help visualize work, limit work-in-progress, and maximize efficiency.

  • How do I contribute? Contributions are welcome! Please see our contributing guide for more details.

For more frequently asked questions, please visit our FAQ page.

import puppeteer from "@cloudflare/puppeteer";
interface Env {
MYBROWSER: Fetcher;
BROWSER_KV_DEMO: KVNamespace;
}
export default {
async fetch(request, env): Promise<Response> {
const { searchParams } = new URL(request.url);
let url = searchParams.get("url");
let img: Buffer;
if (url) {
url = new URL(url).toString(); // normalize
img = await env.BROWSER_KV_DEMO.get(url, { type: "arrayBuffer" });
if (img === null) {
const browser = await puppeteer.launch(env.MYBROWSER);
const page = await browser.newPage();
await page.goto(url);
img = (await page.screenshot()) as Buffer;
await env.BROWSER_KV_DEMO.put(url, img, {
expirationTtl: 60 * 60 * 24,
});
await browser.close();
}
return new Response(img, {
headers: {
"content-type": "image/jpeg",
},
});
} else {
return new Response("Please add an ?url=https://example.com/ parameter");
}
},
} satisfies ExportedHandler<Env>;