<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Getting Started on Palmyra</title>
    <link>https://palmyra.dev/docs/intro/</link>
    <description>Recent content in Getting Started on Palmyra</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <atom:link href="https://palmyra.dev/docs/intro/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Introduction</title>
      <link>https://palmyra.dev/docs/intro/introduction/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://palmyra.dev/docs/intro/introduction/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;a class=&#34;anchor&#34; href=&#34;#introduction&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Palmyra is a Spring / SpringBoot SDK for publishing REST APIs from annotated POJOs, paired with a React component library that consumes the same APIs.&lt;/p&gt;&#xA;&lt;p&gt;You write the data model and the business rules. The framework writes the SQL, the URL routing, the JSON serialisation, the paging, the form state, and the grid wiring.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-palmyra-removes-from-your-day&#34;&gt;What Palmyra removes from your day&lt;a class=&#34;anchor&#34; href=&#34;#what-palmyra-removes-from-your-day&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hand-rolled controllers&lt;/strong&gt; — handlers are interfaces; pick the ones you need.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;DAO / repository boilerplate&lt;/strong&gt; — annotations on the model declare the schema; SELECT and INSERT are generated at runtime.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Per-entity client code&lt;/strong&gt; — one frontend store factory creates per-endpoint stores for grids, forms, lookups, charts, and trees.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Form / grid plumbing on the React side&lt;/strong&gt; — ready-made &lt;code&gt;PalmyraForm&lt;/code&gt; and &lt;code&gt;PalmyraGrid&lt;/code&gt; components handle state, validation, paging, sort, and refresh.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;what-you-still-own&#34;&gt;What you still own&lt;a class=&#34;anchor&#34; href=&#34;#what-you-still-own&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Your &lt;strong&gt;business logic&lt;/strong&gt; — handler lifecycle hooks (&lt;code&gt;preCreate&lt;/code&gt;, &lt;code&gt;onQueryResult&lt;/code&gt;, &lt;code&gt;applyQueryFilter&lt;/code&gt;, …) are where it lives.&lt;/li&gt;&#xA;&lt;li&gt;Your &lt;strong&gt;security stack&lt;/strong&gt; — Spring Security, JWT, OAuth, SSO; Palmyra plugs into them through &lt;code&gt;AuthProvider&lt;/code&gt; and the standard Spring &lt;code&gt;PermissionEvaluator&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Your &lt;strong&gt;UX&lt;/strong&gt; — Mantine or MUI, page composition, navigation, themes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;where-to-next&#34;&gt;Where to next&lt;a class=&#34;anchor&#34; href=&#34;#where-to-next&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For the framework&amp;rsquo;s positioning relative to Spring Data REST, JHipster, Hasura, React Admin, and the rest, see &lt;a href=&#34;https://palmyra.dev/docs/summary/&#34;&gt;Overview&lt;/a&gt;. For the rest of this section, continue with &lt;a href=&#34;https://palmyra.dev/docs/intro/requirements/&#34;&gt;Requirements&lt;/a&gt; and &lt;a href=&#34;https://palmyra.dev/docs/intro/installation/&#34;&gt;Installation&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installation</title>
      <link>https://palmyra.dev/docs/intro/installation/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://palmyra.dev/docs/intro/installation/</guid>
      <description>&lt;h1 id=&#34;installation&#34;&gt;Installation&lt;a class=&#34;anchor&#34; href=&#34;#installation&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Three things to do: add the dependency, import the configuration class, and confirm it works with a one-class endpoint.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-add-the-dependency&#34;&gt;1. Add the dependency&lt;a class=&#34;anchor&#34; href=&#34;#1-add-the-dependency&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;gradle&#34;&gt;Gradle&lt;a class=&#34;anchor&#34; href=&#34;#gradle&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-gradle&#34; data-lang=&#34;gradle&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;repositories &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mavenCentral&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    maven &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt; url &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://repo.palmyralabs.com/releases&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dependencies &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    implementation &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;com.palmyralabs.palmyra:palmyra-spring:1.4.4&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;maven&#34;&gt;Maven&lt;a class=&#34;anchor&#34; href=&#34;#maven&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;repositories&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;repository&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;id&amp;gt;&lt;/span&gt;palmyralabs&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;url&amp;gt;&lt;/span&gt;https://repo.palmyralabs.com/releases&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/repository&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/repositories&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.palmyralabs.palmyra&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;palmyra-spring&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.4.4&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;2-import-the-palmyra-configuration&#34;&gt;2. Import the Palmyra configuration&lt;a class=&#34;anchor&#34; href=&#34;#2-import-the-palmyra-configuration&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@SpringBootApplication&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Import&lt;/span&gt;(PalmyraSpringConfiguration.&lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;App&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#f92672&#34;&gt;[]&lt;/span&gt; args) { SpringApplication.&lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;(App.&lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;, args); }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s the entire framework hook-up — every Palmyra-annotated handler in the application is now scanned and routed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Requirements</title>
      <link>https://palmyra.dev/docs/intro/requirements/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://palmyra.dev/docs/intro/requirements/</guid>
      <description>&lt;h1 id=&#34;requirements&#34;&gt;Requirements&lt;a class=&#34;anchor&#34; href=&#34;#requirements&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Java&lt;/strong&gt; 21 or later&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;SpringBoot&lt;/strong&gt; 3.x&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Database&lt;/strong&gt;: MariaDB, MySQL, PostgreSQL, Oracle, or DB2&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Build tool&lt;/strong&gt;: Gradle or Maven&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Frontend (optional)&lt;/strong&gt;: Node.js 18+, React 18+, with either MUI or Mantine&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
