/** biome-ignore-all lint/suspicious/noArrayIndexKey: Would need to look into this trivial issue */ "use client"; import { cva } from "class-variance-authority"; import { CodeBlock } from "fumadocs-ui/components/codeblock"; import defaultMdxComponents from "fumadocs-ui/mdx"; import { cn } from "fumadocs-ui/utils/cn"; import { BlocksIcon, GiftIcon, GitMergeIcon, HomeIcon, SailboatIcon, TerminalIcon, Trash2Icon, ZapIcon, } from "lucide-react"; import Image from "next/image"; import Link from "next/link"; import { type HTMLProps, type ReactNode, useState } from "react"; import { Pre } from "@/components/codeblock"; import { Button, buttonVariants } from "@/components/ui/button"; import { RainbowButton } from "@/components/ui/rainbow-button"; import CkanactionDemo1 from "./ckanaction-demo-1.gif"; import CkanactionRustDemo from "./ckanaction-rust-demo.gif"; export default function HomePage() { const gridColor = "color-mix(in oklab, var(--color-fd-primary) 10%, transparent)"; const { Card, Cards } = defaultMdxComponents; return ( <>
{/* */}

); } function Hero() { const { Card, Cards } = defaultMdxComponents; return (

ckanaction

ckanaction
Rust crate & web GUI based on the CKAN API.

ckanaction is a Rust library crate for interacting with the CKAN Actions API, and this web app provides an interactive web GUI based on the OpenAPI specification.

Provided by{" "} datHere .

Get Started Source Code
{/* } href="/docs/builder" title="Quick start"> Get started with ckan-devstaller and install CKAN within minutes } href="/docs/builder" title="Builder"> Customize your installation with an interactive web GUI } href="/docs/reference/installation-architecture" title="Installation architecture" > Learn about where files are installed after running ckan-devstaller } href="https://github.com/dathere/ckan-devstaller" title="Source code" > View the source code of ckan-devstaller on GitHub */}
); } const previewButtonVariants = cva( "w-48 h-8 text-sm font-medium transition-colors rounded-full", { variants: { active: { true: "text-fd-primary-foreground", false: "text-fd-muted-foreground", }, }, }, ); function PreviewImages() { const [active, setActive] = useState(0); const previews = [ { image: CkanactionRustDemo, name: "Rust library crate", }, { image: CkanactionDemo1, name: "Interactive web GUI", }, ]; return (
{previews.map((item, i) => ( ))}
{previews.map((item, i) => ( preview ))}
); } function Why() { return (
./ckan-devstaller
} codeblockUninstall={
./ckan-devstaller uninstall
} />
); } function WhyInteractive(props: { codeblockInstall: ReactNode; codeblockUninstall: ReactNode; }) { const [active, setActive] = useState(0); const items = [ [ , "Install CKAN within minutes", ], [ , "Customize your installation", ], [ , "Designed for developers", ], [ , "Uninstall with ease", ], ]; return (
{items.map((item, i) => ( ))}
{active === 0 ? (

Install CKAN within minutes.

One of the primary goals of ckan-devstaller is to ease installation of CKAN for development. Built with Rust for speed and streamlining installation with{" "} ckan-compose , ckan-devstaller improves installation speeds{" "} from hours/days to just minutes depending on your download speed.

) : null} {active === 1 ? (

Customize your installation with the Builder.

Try out the interactive web GUI for customizing your CKAN installation. You can select:

  • Presets
  • CKAN version
  • Extensions
  • Features

Then you can copy the provided ckan-devstaller command to run your selected configuration.

Try out the Builder
) : null} {active === 2 ? (

Designed for developers.

We've kept development use cases in mind while developing ckan-devstaller, such as:

  • Trying out a new version of CKAN
  • Developing CKAN extensions and themes
View the installation architecture Source code
) : null} {active === 3 ? (

Uninstall CKAN with ease.

After you've installed CKAN with ckan-devstaller, you can uninstall CKAN with ease. This allows for quickly re-installing CKAN for a different use case.

{props.codeblockUninstall} Learn more about uninstalling
) : null}
); } function WhyPanel(props: HTMLProps) { return (
{props.children}
); }